Menu Close

XGMII及64b/66b万兆网光纤网编码格式

在光前万兆网PCS之层中为了提高传输效率采用了64b/66b编码,编码效率为96.7%,实际由64b/66b编码引起的开销为3.125%,比8b/10b编码的效率80%高出很多,开销由25%降低到3.125%,因此64b/66b编码是一种高效编码。这种编码结构在10Ge,40Ge,100Ge的以太网中得到广泛应用。在USB3.1中采用了128b/132B 的结构,编码效率与64b/66b相同,但编码结构的容错率略高。在PCIe3.0的通信协议中采样128b/130b的结构,编码效率又提高了1%左右,开销降低了一半。下面就这几种编码格式进行介绍,并将64b/66b在光纤万兆网方面的应用做详细介绍。

1. 64b/66b编码

在光纤数据通信之前一般会把数据按照64b(8-byte)的方式组织,在64b的左边添加2-bit组成66b,额外添加的2-bit,一般称为64b/66b的前导字。前导字2-bit只有01和10有效,而11,00是无效位,当接收端收到11或00判定接收出错。其中

  • 01后面的64-bit为数据,
  • 10后面的64-bit为控制,

如表1所示。

前导字(preamble) 字节顺序 描述
01 D0 D1 D2 D3 D4 D5 D6 D7 数据
10 T/C/D 由类型、控制或数据组成
00 NA 无效
11 NA 无效

表1 64b/66b

表1中,如果前导字为10时,该64-bit由block类型(这里的block是指64-bit的结构),引导后面可能是控制字或数据,详细内容请参照本文后续内容(万兆网PCS编码结构)。

64b/66b编码结构中,如果前导字发生1-bit错误,可以检错但不能纠错,如01有1-bit发生错误将变成00或11,因此可以及时发现错误,但由于10如果发生错误得到的结果相同,也是11或00,无法判断当前导字变成00,11时是由01出错还是10出错,因此无法纠错。

2. 128b/132b编码

128b/132b编码方式与64b/66b的方式非常类似,只是前导字由2-bit变成4-bit,其中只有0011与1100有效,细节见表2。

 

前导字(preamble) 字节顺序 描述
0011 D0–D15 数据
1100 控制 由类型、控制或数据组成
其它 NA 无效

表2 128b/132b

表2描述了128b/132b的基本结构,与64b/66b结构相比,由于128b之后才会出现0011或1100因此相对于时钟信息和直流平衡的时间间隔加长一倍,但132b比66-bit的检错效果明显加强。如果0011或1100由一个位发生错误,不仅可以检错还可以纠错。如果有2或3个bit发生错误也能检测出来。该编码被USB3.1所采用。详细内容请参照USB3.1协议。

3. 128b/130b编码

128b/130b的编码是最高效的编码方式,目前在PCIe3.0及以上使用, 前导10表示其后的128b为数据,01表示命令集。关于PCIe3.0的协议部分将在后续课程中讲解。

  • 64b/66b在10Ge光纤通信中的编码结构

64b/66b在10Ge光纤通信中的编码结构有两种,一种是XGMII接口编码控制方式,另一种为64b/66b结构的编码控制方式。下面就两种结构分别介绍。

  • XGMII编码方式

XGMII中的X是罗马数字的10,因此XGMII是10Ge的GMII接口。XGMII采用72- bit结构,详细内容可以参照802.3 clause 46。其中最左边的一个byte为控制字表示在其后的64-bit(8个byte)对应的是数据还是控制字符。控制byte中的每个bit与8个byte一一对应,bit为0表示对应的byte为数据,bit为1表示对应的byte为控制字符。如表3

 

控制位(bit) 对应的byte的含义
0 数据
1 控制码

表3

XGMII的控制字符(控制码)有4种,分别为07,FB,FD,FE 。控制码的含义如表4所示。

控制位(bit) 对应的byte 含义
0 0x??   (8’h??) D数据,可以为0-255的任何值
1 0x07  (8’h07) I空闲(idle)
1 0xFB (8’hFB) S帧起始(start of packect)
1 0xFD (8’hFD) T帧结束(end of packect)
1 0xFE (8’hFE) E接收错误,或转发时指示该帧有数据错误

表4

XGMII数据包按72-bit结构如表5,其中ZZ表示数据字节,FB表示帧起始,FD表示帧结束。同时可以看出XGMII在帧起始中对MAC层的前导字(preamble)做了压缩,将7个0x55压缩成6个0x55。帧结束分成L0–L7共8个类型用于容纳整个数据包在按照8-byte传输后剩余的字节。如L3对应的控制字节为00011111b,表示在按照8-byte结构传输后还有3-byte的剩余数据要安排在本72-bit的结构中,紧接着为控制字符0xFD表示帧结束, 之后由空闲字符0x07填充。

表 5

在接收端可能不像表5控制字节与数据或控制字符对应那么整齐,在调试时可能如图1所示,在FPGA编程中可以利用Verilog RTL根据控制字节中的位进行调整和对齐。

IMG_256

图1

在10Ge 64b/66b的结构中可以根据XGMII的72-bit的组织方式转换到66-bit组织方式。如表6所示。

IMG_256

表6

在表6中如果同步字(前导)为01,其后的8个byte都是数据,如果同步字为10,第一个byte为类型(Block Type)。Block Type的各个字节含义如下,0x1e表示空闲,其中将XGMII中的0x07(二进制为0000_0111)由8位变成7位(000_0111)然后组合起来,8 * 7-bit=56-bit可以用7个byte表示。

因此IDLE字节流为0x1e0e1c3870e1c387。

0x78是帧起始,其后跟55-55-55-55-55-55-D5

0x87是帧结束,而且是8-byte对齐的帧结束,即在控制位(同步位)为01时将整个数据包完整的传输到Phy层。因此在帧结束时不需要携带剩余的数据字节。

其它的类型都是数据与控制字符的混合传输模式。比如类型为0xb4时,在8-byte整块数据传输时尚有3-byte数据没有传输,在本次的66-bit的传输中要携带3-byte数据加上控制字符。

因此编码如下:B4-zz-zz-zz-(000_0111)-(000_0111)-(000-0111)-(000_0111)-(000_0111)–> B4-zz-zz-zz-(000)-(0111_0000)-(0111_0001)-(1100_0011)-(1000_0111),经过从右到左补齐4个字节后,剩余的三个bit(000)丢弃即可,最终的编码是B4zzzzzz70e1c387。

其它的编码如表7所示,

表7

经过XGMII到64/66的编码格式转换,可以很好的使用XGMII,64b/66b光纤万兆网的编码与调试。对于编写XGMII,64b/66b的MAC接口的IP开发与调试有指导意义。对于FPGA而言,如果利用SERDES实现PHY, 也可以将MAC 与PHY合二为一实现一个完整的IP。关于XAUI,RAUI的相关内容将在后续文章中介绍。

 

Posted in FPGA, FPGA 教材教案, 教材与教案, 文章, 资料区

发表回复

相关链接