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

相关推荐
辣个蓝人QEX7 小时前
【ZYNQ Linux开发】使用 boot.scr 启动 Linux 报错 Bad Linux ARM64 Image magic! 调试过程记录
linux·运维·fpga开发·zynq·petalinux·zynq mpsoc
一条九漏鱼12 小时前
uart verilog 三段式状态机
fpga开发
FPGA_ADDA19 小时前
基于VU37P的高性能采集板卡
fpga开发·vu37p·20通道采集卡
XINVRY-FPGA1 天前
XCVP1902-2MSEVSVA6865 Xilinx FPGA Versal Premium SoC/ASIC
嵌入式硬件·安全·阿里云·ai·fpga开发·云计算·fpga
霖002 天前
详解GPU
人工智能·vscode·python·fpga开发·mvc·gpu算力
FakeOccupational2 天前
【电路笔记 TMS320F28335DSP】McBSP 从源时钟得到 生成时钟 CLKG & 帧同步信号 FSG
笔记·单片机·fpga开发
Water_Sounds2 天前
【FPGA开发】Ubuntu16.04环境下配置Vivado2018.3—附软件包
fpga开发
幻智星科技2 天前
UDP协议FPGA IP Core 数据传输稳定性测试
tcp/ip·fpga开发·udp
JINX的诅咒3 天前
FPGA实现CNN卷积层:高效窗口生成模块设计与验证
人工智能·fpga开发·cnn