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

相关推荐
博览鸿蒙1 天前
如何为春招的金三银四做好准备
fpga开发
FPGA小迷弟1 天前
FPGA处理图像需要用到的主流接口详解
学习·fpga开发·verilog·fpga·modelsim
LeoZY_1 天前
CH347 USB转JTAG功能使用笔记:CH347根据SVF文件实现任意FPGA下载
笔记·stm32·嵌入式硬件·fpga开发·硬件架构·硬件工程
博览鸿蒙1 天前
FPGA在高性能计算中的应用:数据流加速与优化
fpga开发
maverick_1111 天前
【数字图像处理与FPGA实现】00 绪,建立“算法思维“与“硬件思维“的桥梁
图像处理·fpga开发
乌恩大侠2 天前
【OAI】 USRP 在conf文件中的配置,RU选项
fpga开发
qq_小单车3 天前
xilinx-DNA
fpga开发·xilinx
Flamingˢ3 天前
FPGA中的嵌入式块存储器RAM:从原理到实现的完整指南
fpga开发
Flamingˢ3 天前
FPGA中的存储器模型:从IP核到ROM的深度解析与应用实例
网络协议·tcp/ip·fpga开发
FPGA小c鸡4 天前
【FPGA深度学习加速】RNN与LSTM硬件加速完全指南:从算法原理到硬件实现
rnn·深度学习·fpga开发