📄 crc_32.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 + -