26.4 千兆以太网交换机架构——媒体访问控制器子模块架构

MAC模块提供了GbE交换机和SGMII模块之间的接口。对于传输操作,MAC 模块在 GbE 交换机使用的数据信号和SGMII模块使用的GMII信号之间进行转换。对于接收操作,MAC模块将来自SGMII模块的GMII信号转换为GbE交换机使用的信号。
对于所有数据包,MAC模块会向数据包添加或删除前导码、帧开始定界符和数据包间间隙。MAC模块验证并选择性地生成CRC校验和(是否生成校验和需要检验描述符中对应的标志位RX_PASS_CRC)。

26.4.1 数据接收操作

26.4.1.1 接收控制

MAC 模块负责转换从SGMII模块接收到的GMII数据的格式。对GMII数据的解读涉及以下操作:
· 检测和去除前导
· 检测和删除帧分隔符的开始
· 地址的提取
· 提取帧长
· 数据处理
· 错误检查和报告
· 循环冗余校验 (CRC)
· 统计信号生成
所有统计信号生成都报告给GbE交换机中的适当统计模块。

26.4.1.2 接收帧间隔

802.3 要求的数据包间间隙 (IPG) 为10/100 Mbps 模式的24个GMII时钟(96 位时间),1000 Mbps 模式的12个GMII时钟(96位时间)。但是,MAC模块可以通过正确的前导码和帧开始定界符来容忍减少的IPG(10/100 模式下的2个GMII时钟和1000 模式下的5个GMII时钟)。
帧之间的间隔必须包括(按以下顺序):
· 包间间隙 (IPG)
· 七个八位字节的前导码(所有八位字节都是 0x55)
· 帧分隔符的一个八位字节开始 (0x5D)

26.4.1.3 接收流控制

当负载较重时,MAC模块可以通过接收帧流控制来限制进一步的帧接收。通过设置MAC_CONTROL寄存器中的RX_FLOW_EN位来启用接收流控制。启用时,流控制事件由GbE交换机模块中的接收FIFO触发。当开启接收流控,触发流控事件时,启动接收流控。在半双工模式下,接收流控制是基于冲突的。在全双工模式下,流量控制是通过发出802.3X 暂停帧来处理的。在任一情况下,接收流控制通过发出适合当前操作模式的流控制来防止帧接收。MAC模块通过MAC_CONTROL寄存器中的 FULLDUPLEX位配置为冲突或IEEE 802.3X流控制。
基于冲突的接收流控制:
当启用并触发接收流控制时,端口会为接收的帧生成冲突。传输的堵塞序列将是12 字节序列 C3.C3.C3.C3.C3.C3.C3.C3.C3.C3.C3.C3(十六进制)。 阻塞序列不迟于开始接收源地址的那一刻开始。接收流控制不依赖于传入帧目标地址的值。 无论目标地址如何,任何传入数据包都会产生冲突。
基于 IEEE 802.3X 的接收流控制:
当接收流控制被启用并被触发时,端口发送一个暂停帧,以请求发送站在所发送的暂停帧内指示的时间段内停止发送。MAC模块在第一个可用机会时向保留的多播地址发送暂停帧。如果 MAC模块空闲,则立即发送暂停帧,否则在当前正在发送的帧完成后发送暂停帧。 发出暂停帧时,该帧包含0xFFFF,这是可能的最大暂停时间值。 MAC模块对接收暂停帧的时间进行计数,将0xFF00递减为0,如果计数为0则重传出局的暂停帧。当流控请求被移除,MAC模块发送一个暂停时间为零的暂停帧以取消暂停请求。传输的暂停帧只是对另一端站停止传输的请求。在暂停间隔期间接收的帧被正常接收(假设接收 FIFO 未满)。如果RX_FLOW_EN清零而暂停时间为非0,暂停时间将清零,并发送一个0计数的暂停帧。

26.4.2数据发送操作

MAC模块接受来自GbE交换机的数据,将数据转换为GMII格式,并将数据传输到 SGMII 模块。数据传输与传输时钟速率同步。可以发送的最小帧是两个字节的数据和四个字节的CRC(6 字节帧)。

26.4.2.1 发送控制

如果在传输数据包上检测到冲突,MAC模块会输出一个阻塞序列。如果冲突较晚(在传输前 64 个字节之后),则忽略冲突。如果冲突没有迟到,控制器将在重试帧传输之前退出。在全双工模式下运行时,载波侦听 (CRS) 和冲突侦听模式被禁用。

26.4.2.2 CRC插入

MAC 模块可以生成32位以太网CRC并将其附加到传输的数据上。默认情况下,MAC模块生成并附加一个CRC。如果用户不希望MAC模块生成CRC,必须在通过数据包DMA将数据包传输到NTCP之前设置描述符的协议特定标志区域的第19位。如果在描述符中设置了协议特定标志的第19位,TX数据的最后四个字节将作为帧CRC 传输。四个CRC数据字节应该是帧的最后四个字节,并且应该包含在数据包字节计数值中。当协议特定标志字段的第 19 位在描述符中设置时,AC不对输出CRC执行错误检查。

26.4.2.3 自适应性能优化(APO)

以太网MAC端口结合了APO逻辑,可以通过设置MAC_CONTROL寄存器中的 TX_PACE位来启用该逻辑。当设置TX_PACE位时,启用传输调步以提高性能。APO将延迟引入到帧的正常传输中,从而延迟站点之间的传输尝试。通过引入延迟,在繁忙的流量期间(如帧延迟和冲突所指示的)冲突的可能性将降低,从而增加成功传输的机会。
当一个帧被延迟、遭遇单次碰撞、多次碰撞或过度碰撞时,调步计数器加载初始值 31。当一个帧传输成功时(没有经历延迟、单次碰撞、多次碰撞或过度碰撞) 碰撞)调步计数器减 1,降到 0。
启用pacing后,仅当调步计数器为 0 时,新帧才被允许立即(在一个 IPG 之后)尝试传输。如果调步计数器非 0,则该帧会延迟,这相当于大约 4 个包间间隙延迟。 APO仅影响第一次尝试传输帧之前的IPG,它不会影响重传帧的回退算法。

26.4.2.4 可编程传输包间间隙

发送包间间隙 (IPG) 可通过TX_GAP寄存器进行编程。默认值为十进制12。发送 IPG可以增加到最大值 0x1ff。增加IPG与传输调步不兼容。 短间隙功能将覆盖增加的间隙值,因此短间隙功能可能与增加的IPG不兼容。

26.4.2.5 发送流控制

传输流量控制启用后,将对传入的暂停帧进行操作以防止MAC模块传输任何进一步的帧。仅当MACCONTROL寄存器中的FULLDUPLEX和TX_FLOW_EN位被设置时,才会对传入的暂停帧起作用。在半双工模式下不处理暂停帧。
如果启用,将采取暂停帧操作,但通常帧将被过滤而不传输到存储器。如果 MAC_CONTROL寄存器中的RX_CMF_EN(复制MAC帧)位被设置,MAC控制帧将被传输到存储器。TX_FLOW_EN和FULLDUPLEX位影响MAC控制帧是否被作用,但它们对MAC控制帧是传输到内存还是过滤没有影响。
暂停帧是操作码字段=0x0001的MAC控制帧的子集。仅当满足以下所有条件时,端口才会对传入的暂停帧进行处理:
· TX_FLOW_EN在MAC_CONTROL寄存器中设置
· 帧的长度为64到 MAC_RX_MAXLEN 字节
· 帧不包含 CRC 错误或对齐/代码错误
有效帧的暂停时间值是从操作码后面的两个字节中提取的。 暂停时间将加载到端口的传输暂停计时器中,并且传输暂停时间段将开始。
如果在前一个传输暂停帧的传输暂停时间段内接收到有效的暂停帧,则:
· 如果目标地址不等于保留的多播地址或任何启用或禁用的单播地址,则传输暂停计时器将立即到期。
· 如果新的暂停时间值为 0,则传输暂停定时器将立即到期。
· 端口传输暂停定时器将立即设置为新的暂停帧暂停时间值。
· 如果MAC_CONTROL寄存器中的TX_FLOW_EN字段被清除,则暂停定时器将立即到期。
在接收完具有非零暂停时间的暂停帧(MRXDV变为非活动状态)后,端口不会在 512 位时间内开始传输新数据帧。在暂停计时器到期之前不会开始传输。接收到暂停帧时已在传输的任何帧都将完成且不受影响。
需要填充以将帧组成至少64字节。 该标准允许丢弃长于64字节的暂停帧或将其解释为有效的暂停帧。 MAC模块将识别长度介于64字节和MAC_RX_MAXLEN字节之间的任何暂停帧。

26.4.2.6 速率与模式选择

MAC模块可以在10/100 Mbps模式下以半双工或全双工模式运行,并且只能在 1000 Mbps模式下以全双工模式运行。暂停帧支持包括主机配置的 10/100/1000 Mbps 模式。

26.4.2.7 帧分类

如果接收到的帧长度在64和MAC_RX_MAXLEN之间(含)并且不包含错误(代码/对齐/CRC),则它们是正确的(良好)帧。如果接收到的帧数超过MAC_RX_MAXLEN 寄存器中的值,则它们是长帧。 默认MAC_RX_MAXLEN寄存器值为1518(十进制)。长接收帧要么是超大帧,要么是 Jabber 帧。没有错误的长帧是超大帧,带有CRC、代码或对齐错误的长帧是 jabber 帧。如果接收到的帧数小于64字节,则它们是短帧。 不包含错误的短帧是尺寸过小的帧。带有 CRC、代码或对齐错误的短帧是片段帧。
超大帧接收情况:
· 如果帧长为1518,则该包不是长包,将有1518字节传输到内存;
· 如果帧长为 1519,则将有 1518 字节传输到内存。 最后三个字节将是前三个 CRC 字节;
· 如果帧长为1520,则将有1518字节传输到内存。 最后两个字节将是前两个CRC字节;
· 如果帧长为 1521,则将有 1518 字节传输到内存。 最后一个字节将是第一个 CRC 字节;
· 如果帧长为 1522,则将有 1518 字节传输到内存。 最后一个字节将是最后一个数据字节;

26.4.3 MAC接收FIFO结构

在GbE交换机内部,两个MAC端口都具有相同的数据包FIFO。每个数据包FIFO 包含一个逻辑接收队列和四个逻辑发送队列(优先级0到3)。每个数据包 FIFO 存储器总共包含 81,920 字节 (80k),由单个存储器实例中包含的64位字组织为10240 。数据包FIFO存储器用于相关的端口发送和接收队列。 FIFO相关联的MAX_BLKS寄存器中的TX_MAX_BLKS字段确定要分配给四个逻辑传输队列(传输总数)的4k FIFO内存块 的最大数量。 FIFO 相关联的MAX_BLKS寄存器中的RX_MAX_BLKS字段决定了分配给逻辑接收队列的4k内存块的最大数量。
TX_MAX_BLKS值加上RX_MAX_BLKS值的总和应为20(FIFO中的块总数)。对于未启用流量控制的端口,默认值为 17 个传输块和3个接收块。当端口配置为流控制模式时,接收FIFO块分配应增加,发送FIFO块相应减少。

26.4.4 统计子模块结构

GbE交换机有两组统计模块,用于记录与进入和退出交换机的数据包相关的事件。 KeyStone I交换机端口0的统计信息记录在统计模块A(STATSA)上,端口1和端口 2 的统计信息记录在统计模块B(STATSB)上。每个统计寄存器为32位宽,并在满足特定统计条件时自动递增。每个统计信息将从0xFFFFFFFF滚动到0x00000000。

26.4.4.1 访问统计寄存器

默认情况下,统计模块处于禁用状态。禁用时,所有统计寄存器都可以正常读写,因此写入0x00000000将清除统计寄存器。统计模块启用后,所有统计数据仍能正常读取;但是,寄存器写入将变为写入递减,这意味着写入寄存器的值将从寄存器值中减去,结果存储在寄存器中(新寄存器值=旧寄存器值-写入值)。如果写入的值大于统计寄存器中的值,则0将写入该寄存器。启用统计模块时,写入0xFFFFFFFF值将清除统计位置。写入统计寄存器时,必须使用32位访问。统计模块可以通过将STAT_PORT_EN寄存器写入位[3:0]来启用。

26.4.4.2 统计中断

两个统计模块中的每一个都能够向主机发送中断。STATSA模块的中断将发生在STAT_PEND_RAW[0]信号上,STATSB模块的中断将发生在STAT_PEND_RAW[1]信号上。当统计寄存器中的任何值大于或等于0x80000000时,将触发中断,可以通过写入大于0x80000000的值来删除统计中断。

TMS320C6678 交换网子系统(二)相关推荐

  1. TMS320C6678 交换网子系统(一)

    以太网交换机子系统由以太网媒体访问控制器 (EMAC) 模块.串行千兆媒体独立接口 (SGMII) 模块.物理层 (PHY) 设备管理数据输入/输出 (MDIO) 模块.以太网交换机模块和其他相关联的 ...

  2. TMS320C6678 交换网子系统(三)

    26.4 千兆以太网交换机架构--媒体访问控制器子模块架构 26.4.5 时间同步子模块体系结构 时间同步模块的主要目的是检测时间同步事件并生成时间戳,然后将这些信息提供给主机软件进行处理.对于接收的 ...

  3. 嵌入式Linux设备驱动程序开发指南18(IIO子系统(二)具有硬件触发功能的IIO子系统ADC模块)——读书笔记

    IIO子系统二 具有硬件触发功能的IIO子系统ADC模块 十八.IIO子系统(二) 具有硬件触发功能的IIO子系统ADC模块 18.1 简介 18.2 设备树 18.3 硬件触发驱动功能分析 18.3 ...

  4. 计算机系统组成怎么讲PPT,计算机组成原理第十二讲(存储子系统二)ppt课件.ppt

    <计算机组成原理第十二讲(存储子系统二)ppt课件.ppt>由会员分享,提供在线免费全文阅读可下载,此文档格式为ppt,更多相关<计算机组成原理第十二讲(存储子系统二)ppt课件.p ...

  5. Linux时间子系统(二) 软件架构

    一.前言 本文的主要内容是描述内核时间子系统的软件框架.首先介绍了从旧的时间子系统迁移到新的时间子系统的源由,介绍新的时间子系统的优势.第三章汇整了时间子系统的相关文件以及内核配置.最后描述各种内核配 ...

  6. WLS2Linux 子系统(二)

    WLS2Linux 子系统编译 Openwrt 上一篇文章中讲解 windows 安装 WSL2Linux 子系统的简单安装过程.如今有了 WSL 子系统可以完成很多以前不能完成的事,例如编译源代码. ...

  7. Linux ALSA音频子系统二

    From 本文以高通平台为例,介绍一下android下的音频结构.android使用的是tinyALSA作为音频系统,使用方法和基本框架与linux中常用的ALSA音频子系统是一致的. ALSA音频框 ...

  8. backlight子系统二

    三.Backlight核心驱动 下面我们讲讲backlight子系统.背光子系统目录在/driver/video/backlight下,其中背光子系统核心代码是backlight.c 先查看/driv ...

  9. 【Linux系统编程应用】 Linux输入子系统(二)

    1. 设备ID信息结构体 结构体如下: /** IOCTLs (0x00 - 0x7f)*/struct input_id {__u16 bustype;__u16 vendor;__u16 prod ...

最新文章

  1. 用一篇文章说清楚如何写作
  2. php的bom头会影响格式,phpBOM头(字符#65279;)出现的原因以及解决方法_PHP程序员博客|高蒙个人博客...
  3. bzoj29894170: 数列
  4. 内存分配函数 malloc、realloc、calloc
  5. java数据结构 队列_Java数据结构之队列
  6. drf 解析器,响应器,路由控制
  7. 【错误】【vscode】'#' not expected here
  8. VMware日志收集方法总结
  9. Angular-Observable和RxJS
  10. react+百度地图实现自定义图标
  11. [ POI 2005 ] Bank Notes
  12. ORA-01830: date format picture ends before converting entire input string
  13. 关于在英伟达官网下载 CUDA 10.0 win10版本失败原因探索
  14. 某里某淘bx-ua逆向解密
  15. 怎么样在Excel单元格里批量加小数点和单位?
  16. TestNG框架使用
  17. 2013汇总计算 广联达gcl_GCL2013广联达
  18. python数字推盘游戏怎么显示步数_python初学---猜数字游戏(游戏与AI,原创)
  19. JavaWeb学习笔记:JavaScript-鼠标悬浮和离开
  20. 与sscanf函数的一见钟情(真是相见恨晚!)

热门文章

  1. 代码案例—— web版表白墙及文件上传
  2. 一线互联网移动架构师Android框架体系架构!内含福利
  3. 一则“吹毛求疵”的广告,试图积极改变女性形象
  4. 数据库基础1—函数依赖 多值依赖
  5. oracle 包和包体禁用,ORACLE中的包和包体
  6. debian防火墙设置_如何在Debian 10上使用UFW设置防火墙
  7. PRD的编写要点详解
  8. python语法错误怎么办_Python给出语法错误但没有错误?
  9. android 强制横屏
  10. Taro环境部署和生成项目文件