CRC _Generator _32_8

记录一下crc32_8的代码
数据为8位
CRC校验位:32位

推算流程:
这里写图片描述

推导过程比较复杂,这里贴一下data第7位数据校验后的crc_check
化简后的
这里写图片描述

代码实现

//--------------------crc_check---------------------------------
    always @(posedge clk or negedge rst_n)
    if(!rst_n)
        crc_check <= 32'd0;
    else if(crc_ck_en)begin
        crc_check[0] <= crc_check[24] ^ crc_check[30] ^ data_in[1] ^ data_in[7];
        crc_check[1] <= crc_check[25] ^ crc_check[31] ^ data_in[0] ^ data_in[6] ^ crc_check[24] ^ crc_check[30] ^data_in[1]^data_in[7];
        crc_check[2] <= crc_check[26] ^ data_in[25] ^ crc_check[25] ^ crc_check[31] ^ data_in[0] ^ data_in[6] ^crc_check[24]^crc_check[30]^data_in[1]^data_in[7];
        crc_check[3] <= crc_check[27] ^ data_in[4] ^ crc_check[26] ^ data_in[25] ^ crc_check[25] ^ crc_check[31] ^data_in[0]^data_in[6];
        crc_check[4] <= crc_check[28] ^ data_in[3] ^ crc_check[27] ^ data_in[4] ^ crc_check[26] ^ data_in[5] ^ crc_check[24]^crc_check[30]^data_in[1]^data_in[7];
        crc_check[5] <= crc_check[29] ^ data_in[2] ^ crc_check[28] ^ data_in[3] ^ crc_check[27] ^ data_in[4] ^ crc_check[25]^crc_check[31]^data_in[0]^data_in[6]^crc_check[24]^crc_check[30]^data_in[1]^data_in[7];
        crc_check[6] <= crc_check[30] ^ data_in[1] ^ crc_check[29] ^ data_in[2] ^ crc_check[28] ^ data_in[3] ^ crc_check[26]^data_in[25]^crc_check[25]^crc_check[31]^data_in[0]^data_in[6];
        crc_check[7] <= crc_check[31] ^ data_in[0] ^ crc_check[29] ^ data_in[2] ^ crc_check[27] ^ data_in[4] ^ crc_check[26]^data_in[5]^crc_check[24]^data_in[7];
        crc_check[8] <= crc_check[0] ^ crc_check[28] ^ data_in[3] ^ crc_check[27] ^ data_in[4] ^ crc_check[25] ^ data_in[6] ^ crc_check[24] ^ data_in[7];
        crc_check[9] <= crc_check[1] ^ crc_check[29] ^ data_in[2] ^ crc_check[28] ^ data_in[3] ^ crc_check[26] ^ data_in[5] ^ crc_check[25] ^ data_in[6];
        crc_check[10] <= crc_check[2] ^ crc_check[29] ^ data_in[2] ^ crc_check[27] ^ data_in[4] ^ crc_check[26] ^ data_in[5] ^ crc_check[24] ^ data_in[7];
        crc_check[11] <= crc_check[3] ^ crc_check[28] ^ data_in[3] ^ crc_check[27] ^ data_in[4] ^ crc_check[25] ^ data_in[6] ^ crc_check[24] ^ data_in[7];
        crc_check[12] <= crc_check[4] ^ crc_check[29] ^ data_in[2] ^ crc_check[28] ^ data_in[3] ^ crc_check[26] ^ data_in[5] ^ crc_check[25] ^ data_in[6]^crc_check[24]^crc_check[30]^data_in[1]^data_in[7];
        crc_check[13] <= crc_check[5] ^ crc_check[30] ^ data_in[1] ^ crc_check[29] ^ data_in[2] ^ crc_check[27] ^ data_in[4] ^ crc_check[26] ^ data_in[5]^crc_check[25]^crc_check[31]^data_in[0]^data_in[6];
        crc_check[14] <= crc_check[6] ^ crc_check[31] ^ data_in[0] ^ crc_check[30] ^ data_in[1] ^ crc_check[28] ^ data_in[3] ^ crc_check[27] ^ data_in[4]^crc_check[26]^data_in[5];
        crc_check[15] <= crc_check[7] ^ crc_check[31] ^ data_in[0] ^ crc_check[29] ^ data_in[2] ^ crc_check[28] ^ data_in[3] ^ crc_check[27] ^ data_in[4];
        crc_check[16] <= crc_check[8] ^ crc_check[29] ^ data_in[2] ^ crc_check[28] ^ data_in[3] ^ crc_check[24] ^ data_in[7];
        crc_check[17] <= crc_check[9] ^ crc_check[30] ^ data_in[1] ^ crc_check[29] ^ data_in[2] ^ crc_check[25] ^ data_in[6];
        crc_check[18] <= crc_check[10] ^ crc_check[31] ^ data_in[0] ^ crc_check[30] ^ data_in[1] ^ crc_check[26] ^ data_in[5];
        crc_check[19] <= crc_check[11] ^ crc_check[31] ^ data_in[0] ^ crc_check[24] ^ data_in[7];
        crc_check[20] <= crc_check[12] ^ crc_check[28] ^ data_in[3];
        crc_check[21] <= crc_check[13] ^ crc_check[29] ^ data_in[2];
        crc_check[22] <= crc_check[14] ^ crc_check[24] ^ data_in[7];
        crc_check[23] <= crc_check[15] ^ crc_check[25] ^ data_in[6] ^ crc_check[24] ^ crc_check[30] ^ data_in[1] ^ data_in[7];
        crc_check[24] <= crc_check[16] ^ crc_check[26] ^ data_in[5] ^ crc_check[25] ^ crc_check[31] ^ data_in[0] ^ data_in[6];
        crc_check[25] <= crc_check[17] ^ crc_check[27] ^ data_in[4] ^ crc_check[26] ^ data_in[5];                     
        crc_check[26] <= crc_check[18] ^ crc_check[28] ^ data_in[3] ^ crc_check[27] ^ data_in[4] ^ crc_check[24] ^ crc_check[30] ^ data_in[1] ^ data_in[7];
        crc_check[27] <= crc_check[19] ^ crc_check[29] ^ data_in[2] ^ crc_check[28] ^ data_in[3] ^ crc_check[25] ^ crc_check[31] ^ data_in[0] ^ data_in[6];
        crc_check[28] <= crc_check[20] ^ crc_check[30] ^ data_in[1] ^ crc_check[29] ^ data_in[2] ^ crc_check[26] ^ data_in[5];
        crc_check[29] <= crc_check[21] ^ crc_check[31] ^ data_in[0] ^ crc_check[30] ^ data_in[1] ^ crc_check[27] ^ data_in[4];
        crc_check[30] <= crc_check[22] ^ crc_check[31] ^ data_in[0] ^ crc_check[28] ^ data_in[3];
        crc_check[31] <= crc_check[23] ^ crc_check[29] ^ data_in[2];
    end

你可能感兴趣的:(我的个人笔记,精品代码模块,CRC32-8)