👉个人主页: highman110
👉作者简介:一名硬件工程师,持续学习,不断记录,保持思考,输出干货内容
目录
回顾
概览
功能框图描述
XGMII接口和数据包
XGMII接口信号
XGMII数据流
XGMII信号传输示例
回顾
先来回顾一下以前讲过的各种媒体独立接口:
MII:连接MAC和PHY的媒体独立接口,数据位宽4bit,支持速率10/100Mbit/s。
GMII:千兆媒体独立接口,数据位宽8bit,向下兼容MII,当兼容MII时,只使用低4bit数据线,支持速率10/100/1000Mbit/s。
SGMII:串行千兆媒体独立接口,连接千兆PHY和MAC,serdes速率1.25Gbps,思科定的规范,ENG-46158。
QSGMII:四路串行千兆媒体独立接口,连接四端口千兆PHY和MAC,serdes速率5Gbps,思科定的规范,EDCS-540103。
USGMII:通用串行千兆媒体独立接口,是SGMII和QSGMII的扩展规范,可向后兼容,还支持连接4端口或8端口千兆PHY和MAC,serdes速率5Gbps或10Gbps,思科定的规范,EDCS-1155168。
USXGMII:通用串行10G媒体独立接口,支持连接多端口、多速率PHY和MAC,思科定的规范,EDCS-1150953。
本文讲述USXGMII,下面先贴一张该接口的连接示意图,有个直观的认识:
从上图可以看到USXGMII可以连接单端口PHY,支持端口速率从10M到10G,也可以连接4端口PHY,支持端口速率从10M到2.5G,还可以支持2端口PHY,支持端口速率从10M到5G。通过以上端口数量和速率的分布,可以知道USXGMII支持的最大数据速率约为10G,之所以说是约为10G,是因为serdes里面会有一些编码开销,后面会说明。
概览
USXGMII链路由收发各一对差分对组成,用来在单端口或多端口PHY和MAC之间传递数据帧和link速率等控制信息,USXGMII serdes的最大速率由外部端口最大速率决定,一般是有5G和10G两种serdes速率,如下图:
UXSGMII还有如下特性:
1、只支持全双工;
2、支持传输PTP时间戳;
3、支持所有速率的硬件辅助自动协商;
3、支持灵活地在前导码的扩展字段中添加新功能。
注意:
1、UXSGMII只支持10G和5G两种serdes速率,如果要直接出光口,只能出10Gbase-R,如果想要出1000base-x或者2500base-x,只能通过PHY转,不能直接出。
2、10M电口也是可以从PHY出的,上表中没有列出来,如果是单端口10M,那5G-USXGMII就要将端口报文复制500份,10G-USXGMII就要将端口报文复制1000份。
功能框图描述
USXGMII直接沿用了IEEE 803.2 clause 49中定义的64B/66B PCS。PCS功能框架保持不变,另外通过IEEE定义的“有序集”机制添加了额外的功能。
ASIC侧(比如CPU)的USXGMII模块包含的组成部分如下:
1、10G和1G MAC模块,出XGMII和GMII标准接口,其中GMII接口会在速率自适应模块被映射到XGMII;
2、沿用自802.3 clause 49中10Gbase-R的PCS模块,新增了一些ordered sets;
3、自协商处理模块;
4、5.15625/10.325Gbps SERDES PMA模块。
PHY侧的USXGMII模块包含的组成部分如下:
1、系统侧的PMA、PCS、速率自适应模块与前面说的ASCI中包含的相关模块一样,就是ASIC侧把MAC模块出的标准接口XGMII或GMII转成串行输出了,在PHY芯片里就要把这个串行接口恢复成标准接口;
2、后面就是和外部网络侧接口相关的PHY子层:PCS、PMA、PMD;
3、自协商模块,沿用802.3 clause 37。
4、在发送测(下面绿框),当网络接口是100M或1G模式时,GMII信号将被编码到XGMII中以15.6254M/s速率进行传输,当网络接口是2.5G、5G、10G模式时,直接使用XGMII进行传输。
XGMII接口和数据包
由于USXGMII是XGMII的串行化,USXGMII上传输的数据来源就是XGMII上的数据,所以有必要先学习一下XGMII接口的数据包格式。
XGMII数据包,由于XGMII是MAC与PHY之间的标准接口,所以XGMII数据包实际上就是MAC内封装成的以太网帧,关于以太网的帧结构我们以前的文章讲MAC功能时也说过,这里不多提了。
XGMII接口信号
XGMII接口信号如下:
TXD[31:0]:数据发送通道,32位并行数据。
RXD[31:0]:数据接收通道,32位并行数据。
TXC[3:0]:发送通道控制信号,TXC=0时,表示TXD上传输的是数据;TXC=1时,表示TXD上传输的是控制字符。TXC[3:0]分别对应TXD[31:24],TXD[23:16],TXD[15:8],TXD[7:0],每8个数据位在逻辑上为一条lane。
RXC[3:0]:接收通道控制信号,RXC=0时,表示RXD上传输的是数据;RXC=1时,表示RXD上传输的是控制字符。RXC[3:0]分别对应RXD[31:24],RXD[23:16],RXD[15:8],RXD[7:0],每8个数据位在逻辑上为一条lane。
TX_CLK:TXD和TXC的参考时钟,时钟频率156.25MHz,在时钟信号的上升沿和下降沿都采样数据。156.25MHz * 2 * 32 = 10Gbps 。
RX_CLK:RXD和RXC的参考时钟,时钟频率156.25MHz,在时钟信号的上升沿和下降沿都采样数据。
XGMII数据流
XGMII上传输的数据流结构如下:
Inter-frame:帧间隙,两段数据帧之间的间隙,以Terminate控制字开始,接着是Idle控制字,以start控制字符前一个Idle字结束。这个帧间隙有几个功能:1、RS lane间对齐;2、PHY子层PCS到PMA速率适配;3、10GBASE-W数据速率自适应。
Preamble:前导,由MAC生成往下传,就是MAC帧结构中的前导码,共7个字节:
10101010 10101010 10101010 10101010 10101010 10101010 10101010,在发送时,RS会将前导码的第一个字节转换为XGMII上的开始控制字符(0xFB,11011111),接收时又会将开始控制字符转换回前导码。
SFD:帧起始分隔符,表示以太网帧的开始,紧跟在前导码之后,XGMII里面的SFD和以太网MAC帧结构中的SFD一致,为0xD5,10101011。
注意:以上前导码和SFD字节中,最左边的比特是八位字节中的LSB,而最右边的比特是该八位字节组中的MSB。
有同学看到这可能有疑问,MAC帧结构中已经有了一个帧起始标志SFD了,为什么XGMII上传输又多了一个由前导码第一个字节转换而成的开始控制字符?这么做的目的是为了把XGMII传输的开始字符固定在lane0上,方便更好地做字符对齐,经过处理后的前导和SFD分布如下:
Data:数据包,这个很好理解。
EFD:帧结束分隔符,当TXC或RXD为1时,由任何一条lane上数据为0xFD构成EFD。
XGMII信号传输示例
XGMII上的信号组合有如下几种:
第1个是数据信息,TXC为0,TXD上为数据比特;
第3个是LPI请求的控制信息,TXC为1,每条lane上TXD同时为0x06;
第4个是idle控制信息,TXC为1,TXD上为0x07;
第5个是序列号控制信息,TXC为1,TXD[7:0]为0x9C,序列号只能在lane0上,是XGMII上的ordered sets的第一个字节;XGMII定义了如下几种ordered sets:
第7个是报文起始控制信息,TXC为1,TXD[7:0]为0xFB,起始信号只能在lane0上;
第8个是报文结束控制信息,TXC为1,TXD为0xFD;
第9个是发送错误控制信息,TXC为1,TXD为0xFE;
接收端和发送端类似,大家自行查阅规范802.3 46.3.2。
如下是一个正常的数据帧传输的示意图:
找到上图中的S,即XGMII上由前导码第一个字节转换而来的起始控制字符,在这个字符之前是帧间隙,之后是6个字节的前导码,注意前导码也是data字符,所以对应的TXC为0。前导码之后就是SFD,以太网帧起始分隔符,随后就是帧data,数据发完就是结束控制字符T,后面就又是帧间隙了。
今天先介绍到这里,下篇介绍USXGMII框架中PCS子层的功能细节和XGMII到USXGMII之间的映射。