⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 crc_32.v

📁 crc校验功能
💻 V
字号:
module crc_32 (clk, reset_n, data_in, crc_out);input clk;input reset_n;input [15:0] data_in;output [31:0] crc_out;reg   [15:0]data_in_reg;wire  [31:0] crc_out;wire [31:0] previous_remainder;wire [31:0] crc_result;reg [31:0] crc_result_reg;always @ (posedge clk or negedge reset_n)begin  if (~reset_n)     data_in_reg = 16'h0000;  else     data_in_reg = data_in; endassign previous_remainder=crc_result_reg;assign  crc_result[0] = data_in_reg[0] ^ previous_remainder[28] ^ previous_remainder[22] ^                    previous_remainder[25] ^ previous_remainder[26] ^                    previous_remainder[16];assign  crc_result[1] = data_in_reg[1] ^ previous_remainder[29] ^ previous_remainder[23] ^                    previous_remainder[27] ^ previous_remainder[17] ^ previous_remainder[28] ^                    previous_remainder[22] ^ previous_remainder[25] ^                     previous_remainder[16];  assign crc_result[2] = data_in_reg[2] ^ previous_remainder[30] ^ previous_remainder[24] ^                    previous_remainder[18] ^ previous_remainder[29] ^ previous_remainder[23] ^                    previous_remainder[17] ^ previous_remainder[22] ^ previous_remainder[25] ^                    previous_remainder[16];assign  crc_result[3] = data_in_reg[3] ^ previous_remainder[31] ^ previous_remainder[25] ^                    previous_remainder[19] ^ previous_remainder[30] ^ previous_remainder[24] ^                    previous_remainder[18] ^ previous_remainder[23] ^ previous_remainder[26] ^                    previous_remainder[17];assign  crc_result[4] = data_in_reg[4] ^  previous_remainder[20] ^                    previous_remainder[31] ^ previous_remainder[19] ^ previous_remainder[24] ^                    previous_remainder[27] ^ previous_remainder[18] ^ previous_remainder[28] ^                    previous_remainder[22] ^ previous_remainder[16];assign  crc_result[5] = data_in_reg[5] ^ previous_remainder[21] ^ previous_remainder[29] ^                    previous_remainder[20] ^ previous_remainder[19] ^ previous_remainder[23] ^                    previous_remainder[17] ^ previous_remainder[22] ^ previous_remainder[26] ^                    previous_remainder[16];assign  crc_result[6] = data_in_reg[6] ^ previous_remainder[22] ^ previous_remainder[30] ^                    previous_remainder[21] ^ previous_remainder[20] ^ previous_remainder[24] ^                    previous_remainder[18] ^ previous_remainder[23] ^ previous_remainder[27] ^                    previous_remainder[17];assign  crc_result[7] = data_in_reg[7] ^ previous_remainder[23] ^ previous_remainder[31] ^                    previous_remainder[21] ^ previous_remainder[19] ^ previous_remainder[24] ^                    previous_remainder[18] ^ previous_remainder[26] ^                     previous_remainder[16];assign crc_result[8] = data_in_reg[8] ^ previous_remainder[24] ^ previous_remainder[28] ^                    previous_remainder[26] ^ previous_remainder[20] ^ previous_remainder[19] ^                    previous_remainder[27] ^ previous_remainder[17] ^                     previous_remainder[16];assign  crc_result[9] = data_in_reg[9] ^ previous_remainder[25] ^ previous_remainder[29] ^                    previous_remainder[27] ^ previous_remainder[21] ^ previous_remainder[20] ^                    previous_remainder[28] ^ previous_remainder[18] ^ previous_remainder[17];assign crc_result[10]= data_in_reg[10] ^ previous_remainder[25] ^ previous_remainder[21] ^                    previous_remainder[29] ^ previous_remainder[19] ^ previous_remainder[18] ^                    previous_remainder[16]^previous_remainder[30];assign crc_result[11]= data_in_reg[11] ^ previous_remainder[20] ^ previous_remainder[31] ^                    previous_remainder[25] ^ previous_remainder[19] ^ previous_remainder[17] ^                    previous_remainder[28] ^ previous_remainder[16]^previous_remainder[30];assign  crc_result[12]= data_in_reg[12] ^ previous_remainder[31]  ^                    previous_remainder[29] ^ previous_remainder[28] ^ previous_remainder[21] ^                    previous_remainder[20] ^ previous_remainder[18] ^ previous_remainder[17] ^                    previous_remainder[22] ^ previous_remainder[25] ^ previous_remainder[16];    assign  crc_result[14 : 13]= data_in_reg[14 : 13] ^ previous_remainder[31 : 30] ^                              previous_remainder[30 : 29] ^ previous_remainder[23 : 22] ^                              previous_remainder[22 : 21] ^ previous_remainder[20 : 19] ^                              previous_remainder[19 : 18] ^ previous_remainder[24 : 23] ^                              previous_remainder[27 : 26] ^ previous_remainder[18 : 17];assign  crc_result[15]= data_in_reg[15] ^ previous_remainder[31] ^ previous_remainder[24] ^                    previous_remainder[23] ^ previous_remainder[21] ^ previous_remainder[20] ^                    previous_remainder[25] ^ previous_remainder[28] ^ previous_remainder[19];assign  crc_result[16]= previous_remainder[0] ^ previous_remainder[24] ^ previous_remainder[28] ^                    previous_remainder[21] ^ previous_remainder[20] ^ previous_remainder[16] ^                    previous_remainder[29];     assign crc_result[18 : 17]= previous_remainder[2 : 1] ^ previous_remainder[26 : 25] ^                              previous_remainder[30 : 29] ^ previous_remainder[23 : 22] ^                              previous_remainder[22 : 21] ^ previous_remainder[18 : 17] ^                              previous_remainder[31 : 30];assign  crc_result[19]= previous_remainder[3] ^ previous_remainder[27] ^ previous_remainder[31] ^                    previous_remainder[24] ^ previous_remainder[23] ^ previous_remainder[19];       assign  crc_result[21 : 20]= previous_remainder[5 : 4] ^ previous_remainder[29 : 28] ^                              previous_remainder[26 : 25] ^ previous_remainder[25 : 24] ^                              previous_remainder[21 : 20];assign  crc_result[22]= previous_remainder[6] ^ previous_remainder[28] ^ previous_remainder[27] ^                    previous_remainder[25] ^ previous_remainder[16]^previous_remainder[30];assign crc_result[23]= previous_remainder[7] ^ previous_remainder[31] ^ previous_remainder[29] ^                    previous_remainder[17] ^ previous_remainder[22] ^ previous_remainder[25] ^                    previous_remainder[16] ;assign  crc_result[25 : 24]= previous_remainder[9 : 8] ^ previous_remainder[31 : 30] ^                             previous_remainder[24 : 23] ^ previous_remainder[19 : 18] ^                              previous_remainder[27 : 26] ^ previous_remainder[18 : 17];assign  crc_result[26]= previous_remainder[10] ^ previous_remainder[20] ^ previous_remainder[19] ^                    previous_remainder[22] ^ previous_remainder[26]  ^                   previous_remainder[16];     assign  crc_result[31 : 27]= previous_remainder[15 : 11] ^ previous_remainder[31 : 27] ^                              previous_remainder[25 : 21] ^ previous_remainder[24 : 20] ^                              previous_remainder[27 : 23] ^ previous_remainder[21 : 17];always @ (posedge clk or negedge reset_n) begin  if (~reset_n)    crc_result_reg = 32'h00000000;  else     crc_result_reg = crc_result;endassign crc_out=crc_result_reg;endmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -