CRC16的verilog生成

(1)首先打开网址:CRC Generation Tool - easics

 (2)然后敲入对应的crc多项式,这里是X^16+X^15+X^2+X+1,如上图所示。

(3)选择数据位宽,这里设置为64

(4)生成代码的语言,这里选择Verilog

(5)下载生成的verilog代码。

(6)生成的Verilog代码

 

module CRC16_D64;

  // polynomial: x^16 + x^15 + x^2 + x^1 + 1
  // data width: 64
  // convention: the first serial bit is D[63]
  function [15:0] nextCRC16_D64;

    input [63:0] Data;
    input [15:0] crc;
    reg [63:0] d;
    reg [15:0] c;
    reg [15:0] newcrc;
  begin
    d = Data;
    c = crc;

    newcrc[0] = d[60] ^ d[56] ^ d[55] ^ d[54] ^ d[53] ^ d[51] ^ d[50] ^ d[49] ^ d[47] ^ d[46] ^ d[45] ^ d[44] ^ d[42] ^ d[40] ^ d[39] ^ d[36] ^ d[35] ^ d[32] ^ d[31] ^ d[29] ^ d[26] ^ d[24] ^ d[22] ^ d[20] ^ d[18] ^ d[16] ^ d[13] ^ d[12] ^ d[11] ^ d[10] ^ d[9] ^ d[8] ^ d[7] ^ d[6] ^ d[5] ^ d[4] ^ d[3] ^ d[2] ^ d[1] ^ d[0] ^ c[1] ^ c[2] ^ c[3] ^ c[5] ^ c[6] ^ c[7] ^ c[8] ^ c[12];
    newcrc[1] = d[61] ^ d[60] ^ d[57] ^ d[53] ^ d[52] ^ d[49] ^ d[48] ^ d[44] ^ d[43] ^ d[42] ^ d[41] ^ d[39] ^ d[37] ^ d[35] ^ d[33] ^ d[31] ^ d[30] ^ d[29] ^ d[27] ^ d[26] ^ d[25] ^ d[24] ^ d[23] ^ d[22] ^ d[21] ^ d[20] ^ d[19] ^ d[18] ^ d[17] ^ d[16] ^ d[14] ^ d[0] ^ c[0] ^ c[1] ^ c[4] ^ c[5] ^ c[9] ^ c[12] ^ c[13];
    newcrc[2] = d[62] ^ d[61] ^ d[60] ^ d[58] ^ d[56] ^ d[55] ^ d[51] ^ d[47] ^ d[46] ^ d[43] ^ d[39] ^ d[38] ^ d[35] ^ d[34] ^ d[30] ^ d[29] ^ d[28] ^ d[27] ^ d[25] ^ d[23] ^ d[21] ^ d[19] ^ d[17] ^ d[16] ^ d[15] ^ d[13] ^ d[12] ^ d[11] ^ d[10] ^ d[9] ^ d[8] ^ d[7] ^ d[6] ^ d[5] ^ d[4] ^ d[3] ^ d[2] ^ d[0] ^ c[3] ^ c[7] ^ c[8] ^ c[10] ^ c[12] ^ c[13] ^ c[14];
    newcrc[3] = d[63] ^ d[62] ^ d[61] ^ d[59] ^ d[57] ^ d[56] ^ d[52] ^ d[48] ^ d[47] ^ d[44] ^ d[40] ^ d[39] ^ d[36] ^ d[35] ^ d[31] ^ d[30] ^ d[29] ^ d[28] ^ d[26] ^ d[24] ^ d[22] ^ d[20] ^ d[18] ^ d[17] ^ d[16] ^ d[14] ^ d[13] ^ d[12] ^ d[11] ^ d[10] ^ d[9] ^ d[8] ^ d[7] ^ d[6] ^ d[5] ^ d[4] ^ d[3] ^ d[1] ^ c[0] ^ c[4] ^ c[8] ^ c[9] ^ c[11] ^ c[13] ^ c[14] ^ c[15];
    newcrc[4] = d[63] ^ d[62] ^ d[60] ^ d[58] ^ d[57] ^ d[53] ^ d[49] ^ d[48] ^ d[45] ^ d[41] ^ d[40] ^ d[37] ^ d[36] ^ d[32] ^ d[31] ^ d[30] ^ d[29] ^ d[27] ^ d[25] ^ d[23] ^ d[21] ^ d[19] ^ d[18] ^ d[17] ^ d[15] ^ d[14] ^ d[13] ^ d[12] ^ d[11] ^ d[10] ^ d[9] ^ d[8] ^ d[7] ^ d[6] ^ d[5] ^ d[4] ^ d[2] ^ c[0] ^ c[1] ^ c[5] ^ c[9] ^ c[10] ^ c[12] ^ c[14] ^ c[15];
    newcrc[5] = d[63] ^ d[61] ^ d[59] ^ d[58] ^ d[54] ^ d[50] ^ d[49] ^ d[46] ^ d[42] ^ d[41] ^ d[38] ^ d[37] ^ d[33] ^ d[32] ^ d[31] ^ d[30] ^ d[28] ^ d[26] ^ d[24] ^ d[22] ^ d[20] ^ d[19] ^ d[18] ^ d[16] ^ d[15] ^ d[14] ^ d[13] ^ d[12] ^ d[11] ^ d[10] ^ d[9] ^ d[8] ^ d[7] ^ d[6] ^ d[5] ^ d[3] ^ c[1] ^ c[2] ^ c[6] ^ c[10] ^ c[11] ^ c[13] ^ c[15];
    newcrc[6] = d[62] ^ d[60] ^ d[59] ^ d[55] ^ d[51] ^ d[50] ^ d[47] ^ d[43] ^ d[42] ^ d[39] ^ d[38] ^ d[34] ^ d[33] ^ d[32] ^ d[31] ^ d[29] ^ d[27] ^ d[25] ^ d[23] ^ d[21] ^ d[20] ^ d[19] ^ d[17] ^ d[16] ^ d[15] ^ d[14] ^ d[13] ^ d[12] ^ d[11] ^ d[10] ^ d[9] ^ d[8] ^ d[7] ^ d[6] ^ d[4] ^ c[2] ^ c[3] ^ c[7] ^ c[11] ^ c[12] ^ c[14];
    newcrc[7] = d[63] ^ d[61] ^ d[60] ^ d[56] ^ d[52] ^ d[51] ^ d[48] ^ d[44] ^ d[43] ^ d[40] ^ d[39] ^ d[35] ^ d[34] ^ d[33] ^ d[32] ^ d[30] ^ d[28] ^ d[26] ^ d[24] ^ d[22] ^ d[21] ^ d[20] ^ d[18] ^ d[17] ^ d[16] ^ d[15] ^ d[14] ^ d[13] ^ d[12] ^ d[11] ^ d[10] ^ d[9] ^ d[8] ^ d[7] ^ d[5] ^ c[0] ^ c[3] ^ c[4] ^ c[8] ^ c[12] ^ c[13] ^ c[15];
    newcrc[8] = d[62] ^ d[61] ^ d[57] ^ d[53] ^ d[52] ^ d[49] ^ d[45] ^ d[44] ^ d[41] ^ d[40] ^ d[36] ^ d[35] ^ d[34] ^ d[33] ^ d[31] ^ d[29] ^ d[27] ^ d[25] ^ d[23] ^ d[22] ^ d[21] ^ d[19] ^ d[18] ^ d[17] ^ d[16] ^ d[15] ^ d[14] ^ d[13] ^ d[12] ^ d[11] ^ d[10] ^ d[9] ^ d[8] ^ d[6] ^ c[1] ^ c[4] ^ c[5] ^ c[9] ^ c[13] ^ c[14];
    newcrc[9] = d[63] ^ d[62] ^ d[58] ^ d[54] ^ d[53] ^ d[50] ^ d[46] ^ d[45] ^ d[42] ^ d[41] ^ d[37] ^ d[36] ^ d[35] ^ d[34] ^ d[32] ^ d[30] ^ d[28] ^ d[26] ^ d[24] ^ d[23] ^ d[22] ^ d[20] ^ d[19] ^ d[18] ^ d[17] ^ d[16] ^ d[15] ^ d[14] ^ d[13] ^ d[12] ^ d[11] ^ d[10] ^ d[9] ^ d[7] ^ c[2] ^ c[5] ^ c[6] ^ c[10] ^ c[14] ^ c[15];
    newcrc[10] = d[63] ^ d[59] ^ d[55] ^ d[54] ^ d[51] ^ d[47] ^ d[46] ^ d[43] ^ d[42] ^ d[38] ^ d[37] ^ d[36] ^ d[35] ^ d[33] ^ d[31] ^ d[29] ^ d[27] ^ d[25] ^ d[24] ^ d[23] ^ d[21] ^ d[20] ^ d[19] ^ d[18] ^ d[17] ^ d[16] ^ d[15] ^ d[14] ^ d[13] ^ d[12] ^ d[11] ^ d[10] ^ d[8] ^ c[3] ^ c[6] ^ c[7] ^ c[11] ^ c[15];
    newcrc[11] = d[60] ^ d[56] ^ d[55] ^ d[52] ^ d[48] ^ d[47] ^ d[44] ^ d[43] ^ d[39] ^ d[38] ^ d[37] ^ d[36] ^ d[34] ^ d[32] ^ d[30] ^ d[28] ^ d[26] ^ d[25] ^ d[24] ^ d[22] ^ d[21] ^ d[20] ^ d[19] ^ d[18] ^ d[17] ^ d[16] ^ d[15] ^ d[14] ^ d[13] ^ d[12] ^ d[11] ^ d[9] ^ c[0] ^ c[4] ^ c[7] ^ c[8] ^ c[12];
    newcrc[12] = d[61] ^ d[57] ^ d[56] ^ d[53] ^ d[49] ^ d[48] ^ d[45] ^ d[44] ^ d[40] ^ d[39] ^ d[38] ^ d[37] ^ d[35] ^ d[33] ^ d[31] ^ d[29] ^ d[27] ^ d[26] ^ d[25] ^ d[23] ^ d[22] ^ d[21] ^ d[20] ^ d[19] ^ d[18] ^ d[17] ^ d[16] ^ d[15] ^ d[14] ^ d[13] ^ d[12] ^ d[10] ^ c[0] ^ c[1] ^ c[5] ^ c[8] ^ c[9] ^ c[13];
    newcrc[13] = d[62] ^ d[58] ^ d[57] ^ d[54] ^ d[50] ^ d[49] ^ d[46] ^ d[45] ^ d[41] ^ d[40] ^ d[39] ^ d[38] ^ d[36] ^ d[34] ^ d[32] ^ d[30] ^ d[28] ^ d[27] ^ d[26] ^ d[24] ^ d[23] ^ d[22] ^ d[21] ^ d[20] ^ d[19] ^ d[18] ^ d[17] ^ d[16] ^ d[15] ^ d[14] ^ d[13] ^ d[11] ^ c[1] ^ c[2] ^ c[6] ^ c[9] ^ c[10] ^ c[14];
    newcrc[14] = d[63] ^ d[59] ^ d[58] ^ d[55] ^ d[51] ^ d[50] ^ d[47] ^ d[46] ^ d[42] ^ d[41] ^ d[40] ^ d[39] ^ d[37] ^ d[35] ^ d[33] ^ d[31] ^ d[29] ^ d[28] ^ d[27] ^ d[25] ^ d[24] ^ d[23] ^ d[22] ^ d[21] ^ d[20] ^ d[19] ^ d[18] ^ d[17] ^ d[16] ^ d[15] ^ d[14] ^ d[12] ^ c[2] ^ c[3] ^ c[7] ^ c[10] ^ c[11] ^ c[15];
    newcrc[15] = d[59] ^ d[55] ^ d[54] ^ d[53] ^ d[52] ^ d[50] ^ d[49] ^ d[48] ^ d[46] ^ d[45] ^ d[44] ^ d[43] ^ d[41] ^ d[39] ^ d[38] ^ d[35] ^ d[34] ^ d[31] ^ d[30] ^ d[28] ^ d[25] ^ d[23] ^ d[21] ^ d[19] ^ d[17] ^ d[15] ^ d[12] ^ d[11] ^ d[10] ^ d[9] ^ d[8] ^ d[7] ^ d[6] ^ d[5] ^ d[4] ^ d[3] ^ d[2] ^ d[1] ^ d[0] ^ c[0] ^ c[1] ^ c[2] ^ c[4] ^ c[5] ^ c[6] ^ c[7] ^ c[11];
    nextCRC16_D64 = newcrc;
  end
  endfunction

 

 


版权声明:本文为yundanfengqing_nuc原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。