3模块。
[0040] Xor_3,其输入分别来自C2C_2编码模块和D2C_3编码模块,得到结果 c_3[31:0],c_3[31:0]为并行96位数据(即并行高96位data[127:32])的CRC校验值,输 出至CRC选择模块、C2C_3编码模块和next_crc选择模块。
[0041 ] C2C_3编码模块,编码方式同C2C_0编码模块,输入来自Xor_3模块,将数据按规则 进行编码,得到的结果输出至X〇r_4模块。
[0042] Xor_4模块,其输入分别来自C2C_3编码模块和D2C_4编码模块,得到结果 c_4[31:0],c_4[31:0]为并行128位数据的CRC校验值,输出至CRC选择模块和next_crc 选择模块。
[0043] CRC选择模块,输入分别来自CRC寄存器、Xor_l模块的c_l [31:0]、Xor_2模块的 c_2 [31:0]、Xor_3模块的c_3 [31:0]、be接口信号高两位(be [3:2]),根据be接口信号的高 两位进行选择。输出32位数据至CRC_8模块。be信号为字节有效信号,CRC选择模块的选 择规则为:be [3:2]为0x00时,输出CRC寄存器的值,be [3:2]为0x01时,输出c_l [31:0], be[3:2]为 0x10 时,输出 c_2[31:0],be[3:2]为 Oxll 时,输出 c_3[31:0]。
[0044] 数据选择模块,输入分别来自4组数据输入Dl(data[127:96])、 D2(data[95:64])、D3(data[63:32])、D4(data[31:0])和 be 接口信号高两位(be[3:2]),根 据be接口信号的高两位进行选择,输出32位数据至CRC_8模块。数据选择模块的选择规 则为:be [3:2]为 0x00 时,输出 Dl,be [3:2]为 0x01 时,输出 D2, be [3:2]为 0x10 时,输出 D3, be[3:2]为 Oxll 时,输出 D4。
[0045] 整数字节编码模块,其输入来自CRC选择模块和数据选择模块,将crc选择模块的 值作为初始crc值,将数据选择模块输出的32位值,取其高24位,并分为3组,按规则进行 编码,得到三个CRC编码结果,并输出至next_ crc选择模块。按照以下编码方式(+表示二 进制异或运算)。
[0046]
[0047] next_crc选择模块,其输入来自整数字节编码模块、Xor_l模块、Xor_2模块、 Xor_3模块、Xor_4模块、be接口信号。根据be信号选择下一级的crc编码结果,be信号 跟数据输入的位宽有关,选择得到的结果即当前并行输入数据所校验的结果。其结果输出 至crc寄存器。如图1所示,整数字节编码模块的结果为cs_l,cs_2, cs_3、X〇r_l模块输出 为c_l、Xor_2模块输出为c_2、Xor_3模块输出为c_3、Xor_4模块输出为c_4。next_crc 选择模块的选择规则为:判断be[l:0]是否为2'bll,如果是则判断be[3:2],be[3:2]为 2' b00,输出 c_l ;be[3:2]为 2' bOl,输出 c_2 ;be[3:2]为 2' blO,输出结果 c_3 ;be[3:2] 为2'1311,输出结果(3_4;如果&6[1:0]不为2'1311,则判断&6[1 :0],&6[1:0]为2'1300,输 出 cs_l ;be[l:0]为 2' bOl,输出 cs_2 ;be[l:0]为 2' blO,输出 cs_3 ;
[0048] 反相器,将来自CRC寄存器中的CRC值按位取反,最终得到所需求的crc编码。
[0049] 比较器,将来自CRC寄存器中的CRC值与魔数(magic number,在CRC-32的校验结 果中为定值,在本发明中其值为32'hc704dd7b)相比,将结果输出至CRCjnatch接口信号, 信号为1则说明校验成功,为〇则说明校验失败。
[0050] 具体的,如图1所示,一种面向128位并行输入的CRC-32校验电路,接口信号主 要有:数据信号data[127:0]、字节使能信号be[3:0]、时钟clk、复位信号rst、CRC输出结 果、校验匹配结果CRC_match。主要模块有:CRC寄存器、C2C_0编码模块、C2C_1编码模块、 C2C_2编码模块、C2C_3编码模块、D2C_1编码模块、D2C_2编码模块、D2C_3编码模块、D2C_4 编码模块、异或模块、多路选择模块、比较器、反相器。
[0051] CRC寄存器,寄存32位CRC值,输入来自Next_crc多路选择器,CRC时钟信号clk, CRC复位信号rst,字节有效信号be [3:0],输出为寄存器所寄存的CRC值。其中字节有效信 号be[3:0]跟数据输入信号data[127:0]相关,具体关系为 :be[3:0] = 4' bOOOO,表示数 据输入 data[127:120]有效;be [3:0] = 4' bOOOl,表示数据输入 data[127:112]有效;… be[3:0] = 4' 1111,表示数据输入 data[127:0]有效。
[0052] CRC寄存器中的CRC值作为下一次数据输入的前一级CRC值,在对每一次数据进行 校验之前,将CRC寄存器内的值进行初始化操作,将32位寄存器的值赋OxFFFFFFFF,当数据 有效信号有效时(即为1时),当时钟上升沿到来时,将计算的结果作为输入更新CRC寄存 器。
[0053] C2C_0编码模块,将来自CRC寄存器中的32位CRC值,按照其编码方式进行二进 制异或运算的编码;并将32位结果输出至Xor_l模块。
[0054] 如上述C2C_0编码模块,按照其编码方式对CRC寄存器中的32位CRC值进行编 码,此次编码作为对前一级CRC值的预处理操作。将得到的编码结果输出至Xor_l模块与 D2C_1编码模块所得到结果进行异或。
[0055] D2C_1编码模块,将来自外部128位并行数据data [127:0]中的高32位 (data[127:96])按照其编码方式进行二进制异或运算的编码。
[0056] 将得到的32位预处理结果输出至Xor_l模块。
[0057] 如图1所示,D2C_1编码模块对data[127:96]进行预处理,与C2C_0编码模块同 时进行,将得到结果输出至X〇r_l模块与C2C_0编码模块所得到结果进行异或。
[0058] D2C_2编码模块,其编码方式同D2C_1编码模块,将来自外部128位并行数据中的 95至64位数据(data [95:64])进行编码,并将得到的32位预处理结果输出至Xor_2模块。
[0059] 如图1所示,D2C_2编码模块对data[95:64]进行预处理。
[0060] D2C_3编码模块,其编码方式同D2C_1编码模块,将来自外部128位并行数据中的 63至32位数据(data [63:32])进行编码,并将得到的32位预处理结果输出至Xor_3模块。
[0061] 如图1所示,D2C_3编码模块对data[63:32]进行预处理。
[0062] D2C_4编码模块,其编码方式同D2C_1编码模块,将来自外部128位并行数据中的 低32位数据(即data [31:0])进行编码,并将得到的32位预处理结果输出至Xor_4模块。
[0063] 如图1所示,D2C_4编码模块对data[31:0]进行预处理
[0064] Xor_l模块,其输入分别来自C2C_0编码模块和D2C_1级编码模块,将两组32位 数据按位进行异或,得到结果c_l [31:0],c_l [31:0]为并行32位数据(即并行高32位 data[127:96])的CRC校验值。其输出至CRC选择模块、C2C_1编码模块和next_crc选择 模块。
[0065] 如图1所示,Xor_l模块所得到结果为c_l[31:0],c_l[31:0]作为对 data[127:96]进行校验的结果输出至C2C_1编码模块,作为C2C_1编码模块的CRC处置已 进行下一级的编码运算。
[0066] C2C_1编码模块,编码方式同C2C_0编码模块,输入来自Xor_l模块,将数据按规则 进行编码,得到的结果输出至X〇r_2模块。
[0067] 将c_l [31:0]作为前一级的CRC值进行预处理运算。
[0068] Xor_2模块,其输入分别来自C2C_1编码模块和D2C_2编码模块,得到结果 c_2[31:0],c_2[31:0]为并行64位数据(即并行高64位data[127:64])的CRC校验值,输 出至CRC选择模块、C2C_2级编码模块和next_crc选择模块。
[0069] 如图1所示,Xor_2模块所得到结果为c_2[31:0],c_2[31:0]作为对 data[127:64]进行校验的结果输出至C2C_2编码模块,作为C2C_2编码模块的CRC初值进 行下一级的编码运算。
[0070] C2C_2编码模块,编码方式同C2C_0编码模块,输入来自Xor_2模块,将数据按规则 进行编码,得到的结果输出至X〇r_3模块。
[0071] 将c_2 [31:0]作为前一级的CRC值进行预处理运算。
[0072] Xor_3,其输入分别来自C2C_2编码模块和D2C_3编码模块,得到结果 c_3[31:0],c_3[31:0]为并行96位数据(即并行高96位data[127:32])的CRC校验值,输 出至CRC选择模块、C2C_3编码模块和next_crc选择模块。
[0073] 如图1所示,Xor_3模块所得到结果为c_3[31:0],c_3[31:0]作为对 data[127:32]进行校验的结果输出至C2