精品学习资源10G以太网系统中的并行 CRC编解码器的设计清华高校电子工程系 〔100084> 刘 昭 苏 厉 金德鹏 陈 虹 曾烈光通信系统不行防止地要受到各种干扰的影响,使接收端收到的信息与发送端发出的信息不一样, 即接收端收到的信息产生了误码;为了降低数据通信线路传输的误码率,通常有改善数据通信线路传输质量和差错检测把握两种方法;差错检测把握的方法很多,本文争辩在 10G以太网接人系 统中并行实现 CRC-32 编解码的方法、并行 CRC算法的 Unfolding 算法可以实现并行 CRC的运算, 但是并行电路所用的资源增加到了原先的 J 倍; 8 位并行 CRC算法、并行 CRC-16 的编码规律、 USB 技术中并行 CRC算法给出的并行算法都建立在公式递推的基础上;当并行深度较小时,递推算法比较适用;而当并行深度很大的情形下 〔10G 以太网接人系统使用 64 比特并行数据通路 >,递推过程就显得过于烦琐而缺乏有用性;为此,本文提出了矩阵法、代入法和流水线法等三种算法,解决了深度并行情形下 CRC算法的实现问题;利用本文提出的算法,可以得出 64 比特并行 CRC运算的规律表达式,并用于 10G 以太网接入系统的设计;设 M/〔x> 为信息多项式, G〔x>为生成多项式;一般的 CRC编码方法是:先将信息码多项式左移 r 位,即 M 就是 CRC校验码;以二进制码 0x9595H 的 CRC-32编码为例:· 将信息码左移 32 比特变成 0x959500000000H,记为 m;·CRC-32G 的生成多项 G〔x>=x32+x26+x23+x22+x16+x12+xll+x10+x8+x7+x5+x4+x2+x+1 ,转换成 16进制码为 g=0x104C01DB7H;用 m除以 g〔 模 2 除法>,所得余数 0x3738F30BH 就是 0x9595H 的 CRC- 32 码;实现 0x9595H 的基本 CRC-32 编码的 Matlab 程序如下:假如想用以上 CRC-32 程序运算其他长为 L 的序列的基本 CRC-32码,只需将数组 α 的上界和 for 循环中 i 的初始值改为 32+L,并用该序列代替数组;开头的序列 "1001010110010101" 即可;用数字电路实现的串行 CRC编码器如图 1 所示;图 1 中每个矩形表示 D 触发器; gi 的取值范畴是 1 或者 0;取 1 时表示通路,取 0 时表示断路;进行基本 CRC-32 编码时,每个 D 触发器初始状态为0,从数据端串行输入二进制的信息码;信息码输入终止后, D触发器中锁存的数值就是信息码的 基本 CRC-32 编码;此电路适用于信息码长为任意值的情形;在某些信息系统中以基本 CRC产生算法为基础附加了新的规定;例如 IEEE802. 3 协议规定,以太网的 FES〔帧校验序列 >域以 CRC-32为基础,并且在编码时第一将信息码的最初 4 个字节取反码,对目的地址、源地址、长度/类型域、数据域、 PAD域求出基本 CRC-32 码之后再将结果取反,最终的结果才是 FCS;同上述过程等价的另一种实现方法是将图 1 中全部 D 触发器的初值置 1,这样结果不必取反;为使电路设计者验证其 FCS编码正确, IEEE802. 3 仍给出了一个样本,即:将序列 0xBED723476B8FB3145EFB3559H 重复 126 次,最终得到的 FCS值应当为 0x94D254ACH;10G 以太网是 IEEE802. 3ae 工作组提出的 建议;它保持了以前以太网的帧结构,但是线速度达到了 10Gbps 的量级;为了降低 10G以太网接入系统的功耗并达到芯片加工工艺的要求,必需接受并行数据通路;为运算 FCS需要争辩并行 CRC 算法;所设计的 10G以太网接入系统接受 64 比特并行数据通路,因此本文主要争辩 64 比特并行CRC-32的实现方法;本文共介绍三种实现方法,其中矩阵法和代入法是基于组合规律的直接实现欢迎下载精品学习资源方法,第三种方法是基于流水线的实现方法;1 矩阵法记图 1 中的 32 个 D 触发器的输出从右至左依次为 d31, d30,⋯, d0;信息码元的输入端为 i ;令D=[d0d1⋯d31]T 表示编码器当前所处的状态, I=[i63i62 ⋯i0] 表示第 1 至第 64 个时钟的信息码元输入,向量 Dˊ=[d0 ˊd1ˊ,⋯ d31ˊ] T 表示编码器的下一个状态, D〔64>表示 64 个时钟之后 CRC 编码器所处的状态;就设计 64 位并行 CRC规律编码器,就是找出函数关系 D<64) =f 式中的大规模矩阵乘法 T64、 T63S 等;2 代入法矩阵法的优点在于其直观性;但是需要做大规模乘法运算;下面争辩的代入法能够得到与矩阵法相同的结果;同时可以防止大规模矩阵乘法运算;设 8 比特并行 CRC-32 电路的初始状态是 d31, d30,⋯, d0,输入是 i7 , i6 ,⋯, j0 ,输出是 z31, Z30,⋯, z0;利用前面所述的矩阵法,可 以得出 8 比特并行 CRC-32 编码器的组合规律表达式;如表 1 所示;欢迎下载精品学习资源下文用 "+" 表示按位模 2 和运算, "{ ,}" 表示链接运算;从 CRC的〔1> 式很简洁得出以下算法:算法 1:已知序列 N的 CRC-32 为 A[31 : 0] ,序列 B〔=[b7 ,b6,⋯, b0]> 的 CRC-32 码为 Y[31 : 0] ;序列 A[31 : 24] 的 CRC-32 为 X[31 : 0] ,就延拓序列 {N , B} 的 CRC-32码为 {Y[31 : 24]+X[31 :24]+A[23 :16] , Y[23 : 16]+X[23 : 16]+A[15 :8]+A[7 :0] , Y[7 : 0]+X[7 : 0]} ;推论:已知序列 N 的 CRC-32为 A[31 : 0] ,序列 A[31 : 24] 的 CRC-32 为 X[31 : 0] ,就补 0 延拓序列{N , O} 的 CRC-32码为 {X[31 : 24]+A[23 : 16]+A[15 : 8] , X[15 : 8]+A[7 : 0] , X[7 : 0]} ;利用上述算法构造 APPEND模块,其端口 A 和 B分别表示前导序列的 CRC和延拓的 8 比特序列,就其输出端口 Z 为拓展之后序列的 CRC;图 2 利用 APPEND模块构造了级联结构的 64 比特并行 CRC编码器;这种级联构造的编码器设计比较简洁;其中间节点:欢迎下载精品学习资源明显 〔3> 仍可以进一步化简;冗余的规律使得这种级联结构占用芯片面积大,且只能用于低速场合;对 〔3> 进一步化简,可以得到 Z2 的最简异或表达式;同理可以得到Z3⋯Z8 的表达式; Zl ,Z2,⋯, Z8 分别对应 8 比特、 16 比特、⋯⋯、 64 比特的并行 CRC运算表达式;具体表达式限于篇幅不在这里给出;三级,即能在一般网帧不愿定终止在Z8 中最长的异或运算表达式有52 项参加运算,假如使用 4- 异或门就只需要用CMOS工艺的一级传输推迟时间之内完成;当用于以太网接入系统时,由于以太64 比特边界,因此编码器应当有同时运算8、16、 24、⋯⋯、 64 比特并行编码的才能;具体电路如图 3 ;由于一般情形下大量用到 64 比特并行编码,因此平常使能信号mux使其他 7 个编码模块不工作以降低功耗;在帧尾部依据具体情形使用这码;7 个模块进行剩余字节的编3 流水线法矩阵法和代入法本质上都是设计直接并行编码电路的方法,二者的最终成效是一样的;直接并行实现的 CRC编码电路把握规律比较简洁,但是需要进行复杂的组合规律运算;为了在更高频率下进行并行 CRC编码,可以进一步用流水线的方法简化编码规律,所付出的代价是整个帧的处理延迟了 8 个时钟周期;图 4 给出了 CRC编码的流水线实现;将并行输入的 64 比特分成 7 个字节,分别用 D0、D1、⋯⋯、 D7 表示; P 模块〔P0~P7>运算形如 "Di , O, O, O, O, O,O, O, Di" 的序列的CRC,其中 Diˊ,是 Di 位置上的上一次输入; Diˊ的 CRC码由端口 R[31 :0] 输入, Di 由端口欢迎下载精品学习资源D[7 :0] 输入,结果由 Z[31 : 0] 端口输出;C模块 〔C1~C7>的输入是 "D0 , O,O, O, O, O, O, O, D0' 和"D1ˊ, O, O, O,O, O, O, O, D1"的CRC〔分别由端口 R1 和 R2 输入>,输出是"D0ˊ, D1ˊ, O, O, O,O, O, O, D0, D1" CRC;求 P 的规律表达式时,重复应用算法 1 的推论,可以求出 "Di ˊ, O, O,O, O, O, O, Di" 的 CRC码,再应用算法 1,就可以求出 "Di ˊ, O, O, O, O, O, O, O, Di" 的 CRC码;直接应用算法 1 可以求出C模块的规律表达式; P 模块和 C 模块进行异或运算的长度远小于直接并行 CRC电路中的 ENC8模块,因此更有利于在高速电路中应用;4 10G 以太网接入系统中的 CRC编解码器设计10G以太网接人系统所需接口速率高达 10Gbps 以上;从降低系统功耗和芯片制造成本的角度考虑期望接口能工作在 200MHz以下;接受并行化设计虽然可以降低系统时钟频率,但也从以下两方面增加了设计难度;第一,数据通路的并行程度越高,对它的把握就越复杂;系统接受 8 字节并行数据通路,就发送的以太网帧可能在 8 个并行字节中的任意一个位置上终止,把握规律的设计就必需考虑全部这些可能性并逐一做出相应的处理;其次,系统中的 CRC编码器、扰码器等的设计须接受并行算法;为了中意 IEEE802. 3 协议对以太网帧 CRC编码的要求,实际的编解码器模块仍需要能对输入输出信号进行任意字节数的求反运算;考虑到 10G接入系统的复杂性,该模块功能应当高度集成化,以便用宏信号端口对其进行操作;在对收到的以太网帧进行校验时,没必要先运算不包括 FCS域的序列的 CRC编码 〔 结果取反 >再与 FCS域做对比;在编码正确且没有误码的情况下,对整个以太网帧 〔 包括 FCS域>进行结果不取反的 CRC编码的结果应当为序列 0xC704DD7B;H接受这种判别方法,无需在帧的终止前停止运算 CRC编码,因而可以大大简化电路设计;5 CRC 编码器的实现本文提出的各种算法的硬件实现已经通过了 FPGA验证,并被应用到具体芯片;使用 Xilinx 公司的 Virtex2 系列 FPGA中的 XC2V1000分别仿真了接受上述代入法和流水线法设计的 CRC编码器和解码器,验证。