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

相关推荐
黄埔数据分析17 小时前
QDMA把描述符当数据搬移, 不用desc engine
fpga开发
南檐巷上学1 天前
基于FPGA的正弦信号发生器、滤波器的设计(DAC输出点数受限条件下的完整正弦波产生器)
fpga开发·数字信号处理·dsp·dds
嵌入式-老费1 天前
Linux Camera驱动开发(fpga + csi rx/csi tx)
fpga开发
ALINX技术博客2 天前
【202601芯动态】全球 FPGA 异构热潮,ALINX 高性能异构新品预告
人工智能·fpga开发·gpu算力·fpga
JJRainbow2 天前
SN75176 芯片设计RS-232 转 RS-485 通信模块设计原理图
stm32·单片机·嵌入式硬件·fpga开发·硬件工程
s9123601012 天前
FPGA眼图
fpga开发
北京青翼科技2 天前
【PCIe732】青翼PCIe采集卡-优质光纤卡- PCIe接口-万兆光纤卡
图像处理·人工智能·fpga开发·智能硬件·嵌入式实时数据库
minglie12 天前
verilog信号命名规范
fpga开发
XINVRY-FPGA2 天前
中阶FPGA效能红线重新划定! AMD第2代Kintex UltraScale+登场,记忆体频宽跃升5倍
嵌入式硬件·fpga开发·硬件工程·dsp开发·fpga
南檐巷上学2 天前
基于FPGA的音频信号监测识别系统
fpga开发·音频·verilog·fpga·傅立叶分析·fft·快速傅里叶变换