crc32代码设计

发布于:2025-05-27 ⋅ 阅读:(59) ⋅ 点赞:(0)

`timescale 1ns/1ns

/// Parallel CRC32bit    maximum frequency:312Mhz

module CRC_32_para(
    input             i_clk                 , //时钟;
    input             i_rst                    , //同步复位;
    input             i_din_valid           , //输入数据有效;
    input   [31:0]    i_din                 , //输入数据;
    input          i_clr            , //清CRC;
    
    output   reg      o_dout_valid          , //输出CRC值有效;
    output  [31:0]    o_dout                  //输出CRC;         
);

reg    [31:0]    r_dout;


always@(posedge i_clk)begin
    if(i_rst | i_clr)
        //r_dout    <=    32'h0;///32'hffff_ffff
        r_dout    <=    32'hffff_ffff;///32'hffff_ffff
    else if(i_din_valid)begin
        r_dout[0]  <= i_din[31] ^ i_din[30] ^ i_din[29] ^ i_din[28] ^ i_din[26] ^ i_din[25] ^ i_din[24] ^ i_din[16] ^ i_din[12] ^ i_din[10] ^ i_din[9] ^ i_din[6] ^ i_din[0] ^ r_dout[0] ^ r_dout[6] ^ r_dout[9] ^ r_dout[10] ^ r_dout[12] ^ r_dout[16] ^ r_dout[24] ^ r_dout[25] ^ r_dout[26] ^ r_dout[28] ^ r_dout[29] ^ r_dout[30] ^ r_dout[31];
        r_dout[1]  <= i_din[28] ^ i_din[27] ^ i_din[24] ^ i_din[17] ^ i_din[16] ^ i_din[13] ^ i_din[12] ^ i_din[11] ^ i_din[9] ^ i_din[7] ^ i_din[6] ^ i_din[1] ^ i_din[0] ^ r_dout[0] ^ r_dout[1] ^ r_dout[6] ^ r_dout[7] ^ r_dout[9] ^ r_dout[11] ^ r_dout[12] ^ r_dout[13] ^ r_dout[16] ^ r_dout[17] ^ r_dout[24] ^ r_dout[27] ^ r_dout[28];
        r_dout[2]  <= i_din[31] ^ i_din[30] ^ i_din[26] ^ i_din[24] ^ i_din[18] ^ i_din[17] ^ i_din[16] ^ i_din[14] ^ i_din[13] ^ i_din[9] ^ i_din[8] ^ i_din[7] ^ i_din[6] ^ i_din[2] ^ i_din[1] ^ i_din[0] ^ r_dout[0] ^ r_dout[1] ^ r_dout[2] ^ r_dout[6] ^ r_dout[7] ^ r_dout[8] ^ r_dout[9] ^ r_dout[13] ^ r_dout[14] ^ r_dout[16] ^ r_dout[17] ^ r_dout[18] ^ r_dout[24] ^ r_dout[26] ^ r_dout[30] ^ r_dout[31];
        r_dout[3]  <= i_din[31] ^ i_din[27] ^ i_din[25] ^ i_din[19] ^ i_din[18] ^ i_din[17] ^ i_din[15] ^ i_din[14] ^ i_din[10] ^ i_din[9] ^ i_din[8] ^ i_din[7] ^ i_din[3] ^ i_din[2] ^ i_din[1] ^ r_dout[1] ^ r_dout[2] ^ r_dout[3] ^ r_dout[7] ^ r_dout[8] ^ r_dout[9] ^ r_dout[10] ^ r_dout[14] ^ r_dout[15] ^ r_dout[17] ^ r_dout[18] ^ r_dout[19] ^ r_dout[25] ^ r_dout[27] ^ r_dout[31];
        r_dout[4]  <= i_din[31] ^ i_din[30] ^ i_din[29] ^ i_din[25] ^ i_din[24] ^ i_din[20] ^ i_din[19] ^ i_din[18] ^ i_din[15] ^ i_din[12] ^ i_din[11] ^ i_din[8] ^ i_din[6] ^ i_din[4] ^ i_din[3] ^ i_din[2] ^ i_din[0] ^ r_dout[0] ^ r_dout[2] ^ r_dout[3] ^ r_dout[4] ^ r_dout[6] ^ r_dout[8] ^ r_dout[11] ^ r_dout[12] ^ r_dout[15] ^ r_dout[18] ^ r_dout[19] ^ r_dout[20] ^ r_dout[24] ^ r_dout[25] ^ r_dout[29] ^ r_dout[30] ^ r_dout[31];
        r_dout[5]  <= i_din[29] ^ i_din[28] ^ i_din[24] ^ i_din[21] ^ i_din[20] ^ i_din[19] ^ i_din[13] ^ i_din[10] ^ i_din[7] ^ i_din[6] ^ i_din[5] ^ i_din[4] ^ i_din[3] ^ i_din[1] ^ i_din[0] ^ r_dout[0] ^ r_dout[1] ^ r_dout[3] ^ r_dout[4] ^ r_dout[5] ^ r_dout[6] ^ r_dout[7] ^ r_dout[10] ^ r_dout[13] ^ r_dout[19] ^ r_dout[20] ^ r_dout[21] ^ r_dout[24] ^ r_dout[28] ^ r_dout[29];
        r_dout[6]  <= i_din[30] ^ i_din[29] ^ i_din[25] ^ i_din[22] ^ i_din[21] ^ i_din[20] ^ i_din[14] ^ i_din[11] ^ i_din[8] ^ i_din[7] ^ i_din[6] ^ i_din[5] ^ i_din[4] ^ i_din[2] ^ i_din[1] ^ r_dout[1] ^ r_dout[2] ^ r_dout[4] ^ r_dout[5] ^ r_dout[6] ^ r_dout[7] ^ r_dout[8] ^ r_dout[11] ^ r_dout[14] ^ r_dout[20] ^ r_dout[21] ^ r_dout[22] ^ r_dout[25] ^ r_dout[29] ^ r_dout[30];
        r_dout[7]  <= i_din[29] ^ i_din[28] ^ i_din[25] ^ i_din[24] ^ i_din[23] ^ i_din[22] ^ i_din[21] ^ i_din[16] ^ i_din[15] ^ i_din[10] ^ i_din[8] ^ i_din[7] ^ i_din[5] ^ i_din[3] ^ i_din[2] ^ i_din[0] ^ r_dout[0] ^ r_dout[2] ^ r_dout[3] ^ r_dout[5] ^ r_dout[7] ^ r_dout[8] ^ r_dout[10] ^ r_dout[15] ^ r_dout[16] ^ r_dout[21] ^ r_dout[22] ^ r_dout[23] ^ r_dout[24] ^ r_dout[25] ^ r_dout[28] ^ r_dout[29];
        r_dout[8]  <= i_din[31] ^ i_din[28] ^ i_din[23] ^ i_din[22] ^ i_din[17] ^ i_din[12] ^ i_din[11] ^ i_din[10] ^ i_din[8] ^ i_din[4] ^ i_din[3] ^ i_din[1] ^ i_din[0] ^ r_dout[0] ^ r_dout[1] ^ r_dout[3] ^ r_dout[4] ^ r_dout[8] ^ r_dout[10] ^ r_dout[11] ^ r_dout[12] ^ r_dout[17] ^ r_dout[22] ^ r_dout[23] ^ r_dout[28] ^ r_dout[31];
        r_dout[9]  <= i_din[29] ^ i_din[24] ^ i_din[23] ^ i_din[18] ^ i_din[13] ^ i_din[12] ^ i_din[11] ^ i_din[9] ^ i_din[5] ^ i_din[4] ^ i_din[2] ^ i_din[1] ^ r_dout[1] ^ r_dout[2] ^ r_dout[4] ^ r_dout[5] ^ r_dout[9] ^ r_dout[11] ^ r_dout[12] ^ r_dout[13] ^ r_dout[18] ^ r_dout[23] ^ r_dout[24] ^ r_dout[29];
        r_dout[10] <= i_din[31] ^ i_din[29] ^ i_din[28] ^ i_din[26] ^ i_din[19] ^ i_din[16] ^ i_din[14] ^ i_din[13] ^ i_din[9] ^ i_din[5] ^ i_din[3] ^ i_din[2] ^ i_din[0] ^ r_dout[0] ^ r_dout[2] ^ r_dout[3] ^ r_dout[5] ^ r_dout[9] ^ r_dout[13] ^ r_dout[14] ^ r_dout[16] ^ r_dout[19] ^ r_dout[26] ^ r_dout[28] ^ r_dout[29] ^ r_dout[31];
        r_dout[11] <= i_din[31] ^ i_din[28] ^ i_din[27] ^ i_din[26] ^ i_din[25] ^ i_din[24] ^ i_din[20] ^ i_din[17] ^ i_din[16] ^ i_din[15] ^ i_din[14] ^ i_din[12] ^ i_din[9] ^ i_din[4] ^ i_din[3] ^ i_din[1] ^ i_din[0] ^ r_dout[0] ^ r_dout[1] ^ r_dout[3] ^ r_dout[4] ^ r_dout[9] ^ r_dout[12] ^ r_dout[14] ^ r_dout[15] ^ r_dout[16] ^ r_dout[17] ^ r_dout[20] ^ r_dout[24] ^ r_dout[25] ^ r_dout[26] ^ r_dout[27] ^ r_dout[28] ^ r_dout[31];
        r_dout[12] <= i_din[31] ^ i_din[30] ^ i_din[27] ^ i_din[24] ^ i_din[21] ^ i_din[18] ^ i_din[17] ^ i_din[15] ^ i_din[13] ^ i_din[12] ^ i_din[9] ^ i_din[6] ^ i_din[5] ^ i_din[4] ^ i_din[2] ^ i_din[1] ^ i_din[0] ^ r_dout[0] ^ r_dout[1] ^ r_dout[2] ^ r_dout[4] ^ r_dout[5] ^ r_dout[6] ^ r_dout[9] ^ r_dout[12] ^ r_dout[13] ^ r_dout[15] ^ r_dout[17] ^ r_dout[18] ^ r_dout[21] ^ r_dout[24] ^ r_dout[27] ^ r_dout[30] ^ r_dout[31];
        r_dout[13] <= i_din[31] ^ i_din[28] ^ i_din[25] ^ i_din[22] ^ i_din[19] ^ i_din[18] ^ i_din[16] ^ i_din[14] ^ i_din[13] ^ i_din[10] ^ i_din[7] ^ i_din[6] ^ i_din[5] ^ i_din[3] ^ i_din[2] ^ i_din[1] ^ r_dout[1] ^ r_dout[2] ^ r_dout[3] ^ r_dout[5] ^ r_dout[6] ^ r_dout[7] ^ r_dout[10] ^ r_dout[13] ^ r_dout[14] ^ r_dout[16] ^ r_dout[18] ^ r_dout[19] ^ r_dout[22] ^ r_dout[25] ^ r_dout[28] ^ r_dout[31];
        r_dout[14] <= i_din[29] ^ i_din[26] ^ i_din[23] ^ i_din[20] ^ i_din[19] ^ i_din[17] ^ i_din[15] ^ i_din[14] ^ i_din[11] ^ i_din[8] ^ i_din[7] ^ i_din[6] ^ i_din[4] ^ i_din[3] ^ i_din[2] ^ r_dout[2] ^ r_dout[3] ^ r_dout[4] ^ r_dout[6] ^ r_dout[7] ^ r_dout[8] ^ r_dout[11] ^ r_dout[14] ^ r_dout[15] ^ r_dout[17] ^ r_dout[19] ^ r_dout[20] ^ r_dout[23] ^ r_dout[26] ^ r_dout[29];
        r_dout[15] <= i_din[30] ^ i_din[27] ^ i_din[24] ^ i_din[21] ^ i_din[20] ^ i_din[18] ^ i_din[16] ^ i_din[15] ^ i_din[12] ^ i_din[9] ^ i_din[8] ^ i_din[7] ^ i_din[5] ^ i_din[4] ^ i_din[3] ^ r_dout[3] ^ r_dout[4] ^ r_dout[5] ^ r_dout[7] ^ r_dout[8] ^ r_dout[9] ^ r_dout[12] ^ r_dout[15] ^ r_dout[16] ^ r_dout[18] ^ r_dout[20] ^ r_dout[21] ^ r_dout[24] ^ r_dout[27] ^ r_dout[30];
        r_dout[16] <= i_din[30] ^ i_din[29] ^ i_din[26] ^ i_din[24] ^ i_din[22] ^ i_din[21] ^ i_din[19] ^ i_din[17] ^ i_din[13] ^ i_din[12] ^ i_din[8] ^ i_din[5] ^ i_din[4] ^ i_din[0] ^ r_dout[0] ^ r_dout[4] ^ r_dout[5] ^ r_dout[8] ^ r_dout[12] ^ r_dout[13] ^ r_dout[17] ^ r_dout[19] ^ r_dout[21] ^ r_dout[22] ^ r_dout[24] ^ r_dout[26] ^ r_dout[29] ^ r_dout[30];
        r_dout[17] <= i_din[31] ^ i_din[30] ^ i_din[27] ^ i_din[25] ^ i_din[23] ^ i_din[22] ^ i_din[20] ^ i_din[18] ^ i_din[14] ^ i_din[13] ^ i_din[9] ^ i_din[6] ^ i_din[5] ^ i_din[1] ^ r_dout[1] ^ r_dout[5] ^ r_dout[6] ^ r_dout[9] ^ r_dout[13] ^ r_dout[14] ^ r_dout[18] ^ r_dout[20] ^ r_dout[22] ^ r_dout[23] ^ r_dout[25] ^ r_dout[27] ^ r_dout[30] ^ r_dout[31];
        r_dout[18] <= i_din[31] ^ i_din[28] ^ i_din[26] ^ i_din[24] ^ i_din[23] ^ i_din[21] ^ i_din[19] ^ i_din[15] ^ i_din[14] ^ i_din[10] ^ i_din[7] ^ i_din[6] ^ i_din[2] ^ r_dout[2] ^ r_dout[6] ^ r_dout[7] ^ r_dout[10] ^ r_dout[14] ^ r_dout[15] ^ r_dout[19] ^ r_dout[21] ^ r_dout[23] ^ r_dout[24] ^ r_dout[26] ^ r_dout[28] ^ r_dout[31];
        r_dout[19] <= i_din[29] ^ i_din[27] ^ i_din[25] ^ i_din[24] ^ i_din[22] ^ i_din[20] ^ i_din[16] ^ i_din[15] ^ i_din[11] ^ i_din[8] ^ i_din[7] ^ i_din[3] ^ r_dout[3] ^ r_dout[7] ^ r_dout[8] ^ r_dout[11] ^ r_dout[15] ^ r_dout[16] ^ r_dout[20] ^ r_dout[22] ^ r_dout[24] ^ r_dout[25] ^ r_dout[27] ^ r_dout[29];
        r_dout[20] <= i_din[30] ^ i_din[28] ^ i_din[26] ^ i_din[25] ^ i_din[23] ^ i_din[21] ^ i_din[17] ^ i_din[16] ^ i_din[12] ^ i_din[9] ^ i_din[8] ^ i_din[4] ^ r_dout[4] ^ r_dout[8] ^ r_dout[9] ^ r_dout[12] ^ r_dout[16] ^ r_dout[17] ^ r_dout[21] ^ r_dout[23] ^ r_dout[25] ^ r_dout[26] ^ r_dout[28] ^ r_dout[30];
        r_dout[21] <= i_din[31] ^ i_din[29] ^ i_din[27] ^ i_din[26] ^ i_din[24] ^ i_din[22] ^ i_din[18] ^ i_din[17] ^ i_din[13] ^ i_din[10] ^ i_din[9] ^ i_din[5] ^ r_dout[5] ^ r_dout[9] ^ r_dout[10] ^ r_dout[13] ^ r_dout[17] ^ r_dout[18] ^ r_dout[22] ^ r_dout[24] ^ r_dout[26] ^ r_dout[27] ^ r_dout[29] ^ r_dout[31];
        r_dout[22] <= i_din[31] ^ i_din[29] ^ i_din[27] ^ i_din[26] ^ i_din[24] ^ i_din[23] ^ i_din[19] ^ i_din[18] ^ i_din[16] ^ i_din[14] ^ i_din[12] ^ i_din[11] ^ i_din[9] ^ i_din[0] ^ r_dout[0] ^ r_dout[9] ^ r_dout[11] ^ r_dout[12] ^ r_dout[14] ^ r_dout[16] ^ r_dout[18] ^ r_dout[19] ^ r_dout[23] ^ r_dout[24] ^ r_dout[26] ^ r_dout[27] ^ r_dout[29] ^ r_dout[31];
        r_dout[23] <= i_din[31] ^ i_din[29] ^ i_din[27] ^ i_din[26] ^ i_din[20] ^ i_din[19] ^ i_din[17] ^ i_din[16] ^ i_din[15] ^ i_din[13] ^ i_din[9] ^ i_din[6] ^ i_din[1] ^ i_din[0] ^ r_dout[0] ^ r_dout[1] ^ r_dout[6] ^ r_dout[9] ^ r_dout[13] ^ r_dout[15] ^ r_dout[16] ^ r_dout[17] ^ r_dout[19] ^ r_dout[20] ^ r_dout[26] ^ r_dout[27] ^ r_dout[29] ^ r_dout[31];
        r_dout[24] <= i_din[30] ^ i_din[28] ^ i_din[27] ^ i_din[21] ^ i_din[20] ^ i_din[18] ^ i_din[17] ^ i_din[16] ^ i_din[14] ^ i_din[10] ^ i_din[7] ^ i_din[2] ^ i_din[1] ^ r_dout[1] ^ r_dout[2] ^ r_dout[7] ^ r_dout[10] ^ r_dout[14] ^ r_dout[16] ^ r_dout[17] ^ r_dout[18] ^ r_dout[20] ^ r_dout[21] ^ r_dout[27] ^ r_dout[28] ^ r_dout[30];
        r_dout[25] <= i_din[31] ^ i_din[29] ^ i_din[28] ^ i_din[22] ^ i_din[21] ^ i_din[19] ^ i_din[18] ^ i_din[17] ^ i_din[15] ^ i_din[11] ^ i_din[8] ^ i_din[3] ^ i_din[2] ^ r_dout[2] ^ r_dout[3] ^ r_dout[8] ^ r_dout[11] ^ r_dout[15] ^ r_dout[17] ^ r_dout[18] ^ r_dout[19] ^ r_dout[21] ^ r_dout[22] ^ r_dout[28] ^ r_dout[29] ^ r_dout[31];
        r_dout[26] <= i_din[31] ^ i_din[28] ^ i_din[26] ^ i_din[25] ^ i_din[24] ^ i_din[23] ^ i_din[22] ^ i_din[20] ^ i_din[19] ^ i_din[18] ^ i_din[10] ^ i_din[6] ^ i_din[4] ^ i_din[3] ^ i_din[0] ^ r_dout[0] ^ r_dout[3] ^ r_dout[4] ^ r_dout[6] ^ r_dout[10] ^ r_dout[18] ^ r_dout[19] ^ r_dout[20] ^ r_dout[22] ^ r_dout[23] ^ r_dout[24] ^ r_dout[25] ^ r_dout[26] ^ r_dout[28] ^ r_dout[31];
        r_dout[27] <= i_din[29] ^ i_din[27] ^ i_din[26] ^ i_din[25] ^ i_din[24] ^ i_din[23] ^ i_din[21] ^ i_din[20] ^ i_din[19] ^ i_din[11] ^ i_din[7] ^ i_din[5] ^ i_din[4] ^ i_din[1] ^ r_dout[1] ^ r_dout[4] ^ r_dout[5] ^ r_dout[7] ^ r_dout[11] ^ r_dout[19] ^ r_dout[20] ^ r_dout[21] ^ r_dout[23] ^ r_dout[24] ^ r_dout[25] ^ r_dout[26] ^ r_dout[27] ^ r_dout[29];
        r_dout[28] <= i_din[30] ^ i_din[28] ^ i_din[27] ^ i_din[26] ^ i_din[25] ^ i_din[24] ^ i_din[22] ^ i_din[21] ^ i_din[20] ^ i_din[12] ^ i_din[8] ^ i_din[6] ^ i_din[5] ^ i_din[2] ^ r_dout[2] ^ r_dout[5] ^ r_dout[6] ^ r_dout[8] ^ r_dout[12] ^ r_dout[20] ^ r_dout[21] ^ r_dout[22] ^ r_dout[24] ^ r_dout[25] ^ r_dout[26] ^ r_dout[27] ^ r_dout[28] ^ r_dout[30];
        r_dout[29] <= i_din[31] ^ i_din[29] ^ i_din[28] ^ i_din[27] ^ i_din[26] ^ i_din[25] ^ i_din[23] ^ i_din[22] ^ i_din[21] ^ i_din[13] ^ i_din[9] ^ i_din[7] ^ i_din[6] ^ i_din[3] ^ r_dout[3] ^ r_dout[6] ^ r_dout[7] ^ r_dout[9] ^ r_dout[13] ^ r_dout[21] ^ r_dout[22] ^ r_dout[23] ^ r_dout[25] ^ r_dout[26] ^ r_dout[27] ^ r_dout[28] ^ r_dout[29] ^ r_dout[31];
        r_dout[30] <= i_din[30] ^ i_din[29] ^ i_din[28] ^ i_din[27] ^ i_din[26] ^ i_din[24] ^ i_din[23] ^ i_din[22] ^ i_din[14] ^ i_din[10] ^ i_din[8] ^ i_din[7] ^ i_din[4] ^ r_dout[4] ^ r_dout[7] ^ r_dout[8] ^ r_dout[10] ^ r_dout[14] ^ r_dout[22] ^ r_dout[23] ^ r_dout[24] ^ r_dout[26] ^ r_dout[27] ^ r_dout[28] ^ r_dout[29] ^ r_dout[30];
        r_dout[31] <= i_din[31] ^ i_din[30] ^ i_din[29] ^ i_din[28] ^ i_din[27] ^ i_din[25] ^ i_din[24] ^ i_din[23] ^ i_din[15] ^ i_din[11] ^ i_din[9] ^ i_din[8] ^ i_din[5] ^ r_dout[5] ^ r_dout[8] ^ r_dout[9] ^ r_dout[11] ^ r_dout[15] ^ r_dout[23] ^ r_dout[24] ^ r_dout[25] ^ r_dout[27] ^ r_dout[28] ^ r_dout[29] ^ r_dout[30] ^ r_dout[31];
    end
end

always@(posedge i_clk)begin
    if(i_rst)
        o_dout_valid    <=    1'b0;    
    else
        o_dout_valid    <=    i_din_valid;
end

assign    o_dout    =    r_dout;

endmodule    

如代码:

 //r_dout    <=    32'h0;///32'hffff_ffff
        r_dout    <=    32'hffff_ffff;///32'hffff_ffff

这个设置为全0和全1,计算的crc结果是不一样的。


网站公告

今日签到

点亮在社区的每一天
去签到