APP下载

100G以太网中高位宽并行CRC的简化方法

2016-12-23李传辉刘纯武黄芝平

网络安全与数据管理 2016年7期
关键词:校验以太网长度

李传辉,刘纯武,黄芝平

(国防科学技术大学 机电工程与自动化学院,湖南 长沙 410073)



100G以太网中高位宽并行CRC的简化方法

李传辉,刘纯武,黄芝平

(国防科学技术大学 机电工程与自动化学院,湖南 长沙 410073)

在100G以太网媒体接入控制器(Media Access Control,MAC)的设计中,需要采用高位宽的并行数据来降低对时钟的要求。在使用并行循环冗余校验(Cyclical Redundancy Check,CRC)时会有一个问题,即需要计算CRC的数据域长度不一定是数据通道位宽的整数倍,导致最后一组数据无法使用数据通道的位宽对其进行CRC计算。为了解决这个问题,本文提出了在帧前填充0的处理方法。仿真和测试结果都验证了该方法的可行性。该处理方法也能应用到其他的通信系统中。

100G以太网;并行CRC;高位宽

0 引言

IEEE在2010年发布了40/100G以太网标准[1],其中MAC层仍然沿用以前的规定未作大的改变,只是100 Gb/s的高速率使得无法沿用以前的方法完成CRC值的计算,为此,本文提出了一种简单有效的解决方法。

1 循环冗余校验

在数字通信系统中,为了确保接收到的数据与发送端的数据一致,需要引入差错控制机制。循环冗余校验码由于其误码监测能力强,抗干扰能力优异,被广泛应用于线路检错。循环冗余检验是一种系统的缩短循环码,它采用多项式编码方法[2]。设被检验的信息码有n位,信息系列M={mn-1mn-2…m0},用多项式M(x)可表示为:

M(x) =mn-1xn-1+mn-2xn-2+ … +m1x1+m0x0

(1)

发送方和接收方使用同一个生成多项式G(x),其是一个k阶的二进制多项式,而且G(x)的首位和最后一位的系数都必须是1,其通用表达式为:

G(x)=xk+gk-1xk-1+gk-2xk-2+…+g1x+1

(2)

CRC的计算规则为发送方以xk·M(x)除以生成多项式G(x),将得到的余数R(x)作为校验值,这里的计算规则都是使用二进制运算规则,R(x)可表示为:

R(x)=CRC(M(x))=xk·M(x)modG(x)

(3)

发送方将CRC值随数据一起发送给接收方,接收方对接收到的数据进行CRC值的计算,并将它与发送方的CRC值进行比较。如果数据传输过程中没有错误,两者的校验值就会是一致的,相反如果得到的校验值不一致,就可以判断出数据在传输过程中发生了错误,这时接收方就可以丢弃当前数据或要求发送方重传数据。CRC校验可以百分百地检测出所有的奇数个的随机错误和长度小于等于k的突发错误。

2 100G以太网的CRC设计

图1 以太网帧格式

在以太网通信中,CRC校验具有重要作用。依据IEEE802.3以太网的帧格式(如图1所示),CRC计算的数据区域包括目的地址、原地址、长度/类型和负载数据区域。得到的CRC值作为帧校验序列(Frame Check Sequence,FCS)填充在数据帧尾。其中规定了以太网帧FCS字段的生成算法为CRC-32,其生成的多项式表达式为:

G(x)=x32+x26+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1

(4)

在吉比特以上速率的通信系统中,传统的串行CRC校验方法已无法满足要求,所以现在有很多新型并行CRC计算方法[3-5]。因此在100G以太网中,其CRC也必须采用并行方法,CRC计算的并行位宽就是数据通道的位宽。提高数据位宽可以降低系统的时钟频率,但另一方面随着并行数据位宽的增加会使得CRC电路的延迟时间增加,影响系统的时序性能。经过综合考虑本文中设计的数据并行位宽为320。

使用320位的高并行位宽会使得数据的处理变得复杂。比如在MAC层的发送方,上层客户每个时钟就会有一组320位40 B的数据送给MAC处理,CRC模块就会使用320位的并行算法对其计算。当前的CRC值只与上一次数据得到的CRC值及当前的数据有关,CRC值初始化为全0,如图2所示。

图2 并行CRC生成模块

问题是数据并不一定是40 B的整数倍关系,最后一组数据可能结束于任意位置,如图3所示。

图3 以太网帧边界

在10G以太网中,数据位宽为64 bit,在参考文献[6]中对这种情况的处理方法为同时设计从8 bit到64 bit的CRC生成模块,根据有效字节数选择使用其中一个。这一方法无疑会占用大量资源,而且利用率低。在100G以太网中数据位宽如果按320设计,需要多达40个不同的CRC模块,加上一个40路的多选一电路,这样的电路在资源使用和时序性能方面都是很糟糕的。所以这一方法无法用于100G以太网中。文献[7]中提到了一种级联结构可以计算任意字节的CRC,但此结构有个很明显的缺点,即级联越大,电路延迟线性增加,320位就需要级联40次,这样的电路无法满足时序要求。文献[2]中利用了CRC校验具有的Magic Number特性,在数据帧后面添加0,使得可以只用一个64 bit的CRC模块完成接收方的CRC校验,但无法在数据发送方完成CRC值的计算。

3 帧前补0的并行CRC

上节提到的10G以太网CRC的处理方法都无法直接应用于100G以太网中。下面说明本文提出的方法:帧前补0后再进行CRC计算。

假设原始序列M有n位数据,n不是320位的整数倍。i是一个小于320的整数,且i+n为320的整数倍,在M前增加i个0构造为新序列M′:

M′(x)=0·xi+n-1+…+0·xn+M(x)=0+M(x)=M(x)

(5)

可以看出新序列在数值上与原来的序列值是一样的。这个很好理解,就像在十进制中在最前面添加任意位数的0并不会改变这个数的数值一样,当然这在二进制数当中同样适用。新序列的数据长度成为了320的整数倍。

由CRC的计算公式(3)来看,CRC的结果只与序列的数值有关,所以用新序列计算CRC会得到与用原始数列同样的结果。所以依据此原理,只需要设计一个320位的并行CRC模块,计算时使用新的序列送给CRC模块,这个方法可以计算任意字节数据帧的CRC值。

假设有一帧数据负载字节长度为len,加上目的地址、源地址和数据/类型字段的长度14 B,则该帧需要参与CRC计算的数据总长为L=len+14。令n=ceil(L/40),ceil函数得到的是大于等于L/40的最小整数。令rem=mod(L,40)为L/40的余数,表示最后一组数据中有效数据的字节数,对应的com=40-rem表示无效的字节数,V=8*com则表示无效的比特数,也就是需要在帧前添加的0的比特个数。

在客户端向MAC发送数据时,每个时钟MAC层会收到一组数据Cur_data_in[319:0],设计一组初始化为全0的寄存器Last_data_in[319:0]用来保存上一时钟的数据。根据V值的大小将Cur_data_in和Last_data_in组合成一组新的数据Data_to_crc[319:0],其组合关系为:

Data_to_crc[319:0]=Last_data_in[V-1:0]&Cur_data_in[319:V]

(6)

“&”表示并置连接,处理过程如图4所示。新的序列就是送给CRC模块的数据,从图中可以看到在原始数据的前面添加了V个比特0。每组数据都可以使用320位的并行CRC进行处理,而且最后得到的结果与使用原始数据一样。

图4 数据处理过程

4 测试及分析

使用硬件描述语言VHDL实现上述的处理过程,并将程序下载到FPGA中进行测试,综合出来的结果表明该方法在面积使用和运行速度方面的效果都很好。测试时客户端给出了一些不同长度的以太网帧,使用Quartus II中的SignalTap工具对数据流进行采样。图5是rem值为18的一帧数据的第一组数据,可以看到data_to_crc在cur_data_in前面添加了22个比特0,这是符合设计预期结果的。图6所示是该帧数据的最后一组数据,根据rem值,cur_data_in只有18 B的有效数据,所以data_to_crc也只取了其中的18 B有效数据,在CC处结束,此时的CRC值就是最终的FCS值为83ACF5C1。

为了验证该值的正确性,使用8位并行CRC算法计算该帧的CRC值,在ModelSim平台下进行了仿真。结果如图7所示,可以看到计算完CC后CRC值为83ACF5C1,与前面的结果一致,说明了该方法得到的结果是正确的。

图5 rem为18的第一组数据

图6 rem为18的最后一组数据

图7 rem为18的一组帧数据进行8位CRC计算仿真

5 结束语

由于100G以太网中会使用很高的并行数据位宽,但是数据帧中需要进行CRC计算的数据长度不一定是位宽的整数倍,本文针对这个问题提出了一种新的处理方法,并且通过了测试。该方法简单有效,能够克服传统方法的缺陷,在性能上有很大的提升。虽然本文是以100G以太网的CRC-32作说明,该方法也能很容易地应用于其他的高速通信系统。

[1] IEEE. IEEE Std. 802.3ba[S]. 2010.

[2] 彭建辉. 10G以太网接口并行CRC校验的一种简化算法[J].微计算机信息,2006,22(20):213-215.

[3] STAVINOV E.A practical parallel CRC generation method [J]. Circuit Cellar, 2010(234):38-45.

[4] 毕占坤,张羿猛,黄芝平,等.基于逻辑设计的高速CRC并行算法研究及其FPGA实现[J]. 仪器仪表学报, 2007,28(12):2244-2249.

[5] KENNEDY C E, MOZAFFARI-KERMANI M.Generalized parallel CRC computation on FPGA[C]. Canadian Conference on Electrical and Computer Engineering (CCECE), 2015:107-113.

[6] 张友亮,刘志军,马成海,等. 万兆以太网MAC层控制器的FPGA设计与实现[J]. 计算机工程与应用, 2012,48(6):77-79.

[7] 刘昭,苏厉,金德鹏,等.10G以太网系统中的并行CRC编解码器的设计[J]. 电子技术应用, 2004,30(4):47-50.

A simple method of high-bit-wide parallel CRC for 100G Ethernet

Li Chuanhui,Liu Chunwu,Huang Zhiping

(School of Mechatronic Engineering and Automation, National University of Defense Technology, Changsha 410073, China)

In the process of 100G Ethernet MAC (Media Access Controller) design, in order to reduce the requirements on the clock, high-bit-wide parallel data should be used. When using the parallel CRC (Cyclical Redundancy Check), there will be a problem that the length of CRC calculation span is not an integer multiple of parallel width. It causes that we can’t use the parallel width’s CRC to handle the last data. In order to solve this problem, this paper proposes a method of adding zero before the frame. The simulation and test results have verified the feasibility of the method, and this method can also be applied to other communication systems.

100G Ethernet; parallel CRC; high-bit-wide

TN911.22

A

1674-7720(2016)07- 0057- 03

李传辉,刘纯武,黄芝平. 100G以太网中高位宽并行CRC的简化方法[J].微型机与应用,2016,35(7):57-59.

2015-12-09)

李传辉(1991-),通信作者,男,在读硕士研究生,主要研究方向:网电空间测控。E-mail:chankli@163.com。

刘纯武(1963-),男,硕士,副教授,主要研究方向:网电空间测控。

黄芝平(1965-),男,博士,教授,主要研究方向:网电空间测控。

猜你喜欢

校验以太网长度
使用Excel朗读功能校验工作表中的数据
基于1500以太网养猪场的智能饲喂控制系统的设计与实现
绳子的长度怎么算
1米的长度
炉温均匀性校验在铸锻企业的应用
爱的长度
怎样比较简单的长度
电子式互感器校验方式研究
谈实时以太网EtherCAT技术在变电站自动化中的应用
浅谈EPON与工业以太网在贵遵高速公路中的应用