g以太网系统中的并行crc编解码器的设计.doc
文本预览下载声明
G以太网系统中的并行CRC编解码器的设计
———————————————————————————————— 作者:
———————————————————————————————— 日期:
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〔x〕·xr,然后作模2除法
所得到的月(x)就是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程序如下:
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〔D,I〕。
这里所有矩阵运算和代数运算中的加号的语义都是模2加法。为了。设计64位并行CRC电路,必须计算(2)式中的大规模矩阵乘法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项参加运算,如果
显示全部