crc32代码设计

`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结果是不一样的。

相关推荐
daxi1507 小时前
Verilog入门实战——第5讲:Testbench 仿真编写 + 波形查看与分析
fpga开发
FPGA的花路12 小时前
UDP协议
fpga开发·以太网·udp协议
LCMICRO-133108477461 天前
长芯微LPS123完全P2P替代ADP123,高性能、低压差的线性稳压器
单片机·嵌入式硬件·fpga开发·硬件工程·dsp开发·线性稳压器
fei_sun1 天前
面经、笔试(持续更新中)
fpga开发·面试
xixixi777771 天前
通信领域的“中国速度”:从5G-A到6G,从地面到星空
人工智能·5g·安全·ai·fpga开发·多模态
Nobody331 天前
Verilog always语句详解:从组合逻辑到时序逻辑
fpga开发
李嘉图Ricado1 天前
FPGA 时序约束与分析
fpga开发
白又白、1 天前
时序优化和上板调试小结
fpga开发
Z22ZHaoGGGG1 天前
verilog实现采样电流有效值的计算
fpga开发
fei_sun1 天前
牛客Verilog刷题篇
fpga开发