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_dout0 <= i_din31 ^ i_din30 ^ i_din29 ^ i_din28 ^ i_din26 ^ i_din25 ^ i_din24 ^ i_din16 ^ i_din12 ^ i_din10 ^ i_din9 ^ i_din6 ^ i_din0 ^ r_dout0 ^ r_dout6 ^ r_dout9 ^ r_dout10 ^ r_dout12 ^ r_dout16 ^ r_dout24 ^ r_dout25 ^ r_dout26 ^ r_dout28 ^ r_dout29 ^ r_dout30 ^ r_dout31;

r_dout1 <= i_din28 ^ i_din27 ^ i_din24 ^ i_din17 ^ i_din16 ^ i_din13 ^ i_din12 ^ i_din11 ^ i_din9 ^ i_din7 ^ i_din6 ^ i_din1 ^ i_din0 ^ r_dout0 ^ r_dout1 ^ r_dout6 ^ r_dout7 ^ r_dout9 ^ r_dout11 ^ r_dout12 ^ r_dout13 ^ r_dout16 ^ r_dout17 ^ r_dout24 ^ r_dout27 ^ r_dout28;

r_dout2 <= i_din31 ^ i_din30 ^ i_din26 ^ i_din24 ^ i_din18 ^ i_din17 ^ i_din16 ^ i_din14 ^ i_din13 ^ i_din9 ^ i_din8 ^ i_din7 ^ i_din6 ^ i_din2 ^ i_din1 ^ i_din0 ^ r_dout0 ^ r_dout1 ^ r_dout2 ^ r_dout6 ^ r_dout7 ^ r_dout8 ^ r_dout9 ^ r_dout13 ^ r_dout14 ^ r_dout16 ^ r_dout17 ^ r_dout18 ^ r_dout24 ^ r_dout26 ^ r_dout30 ^ r_dout31;

r_dout3 <= i_din31 ^ i_din27 ^ i_din25 ^ i_din19 ^ i_din18 ^ i_din17 ^ i_din15 ^ i_din14 ^ i_din10 ^ i_din9 ^ i_din8 ^ i_din7 ^ i_din3 ^ i_din2 ^ i_din1 ^ r_dout1 ^ r_dout2 ^ r_dout3 ^ r_dout7 ^ r_dout8 ^ r_dout9 ^ r_dout10 ^ r_dout14 ^ r_dout15 ^ r_dout17 ^ r_dout18 ^ r_dout19 ^ r_dout25 ^ r_dout27 ^ r_dout31;

r_dout4 <= i_din31 ^ i_din30 ^ i_din29 ^ i_din25 ^ i_din24 ^ i_din20 ^ i_din19 ^ i_din18 ^ i_din15 ^ i_din12 ^ i_din11 ^ i_din8 ^ i_din6 ^ i_din4 ^ i_din3 ^ i_din2 ^ i_din0 ^ r_dout0 ^ r_dout2 ^ r_dout3 ^ r_dout4 ^ r_dout6 ^ r_dout8 ^ r_dout11 ^ r_dout12 ^ r_dout15 ^ r_dout18 ^ r_dout19 ^ r_dout20 ^ r_dout24 ^ r_dout25 ^ r_dout29 ^ r_dout30 ^ r_dout31;

r_dout5 <= i_din29 ^ i_din28 ^ i_din24 ^ i_din21 ^ i_din20 ^ i_din19 ^ i_din13 ^ i_din10 ^ i_din7 ^ i_din6 ^ i_din5 ^ i_din4 ^ i_din3 ^ i_din1 ^ i_din0 ^ r_dout0 ^ r_dout1 ^ r_dout3 ^ r_dout4 ^ r_dout5 ^ r_dout6 ^ r_dout7 ^ r_dout10 ^ r_dout13 ^ r_dout19 ^ r_dout20 ^ r_dout21 ^ r_dout24 ^ r_dout28 ^ r_dout29;

r_dout6 <= i_din30 ^ i_din29 ^ i_din25 ^ i_din22 ^ i_din21 ^ i_din20 ^ i_din14 ^ i_din11 ^ i_din8 ^ i_din7 ^ i_din6 ^ i_din5 ^ i_din4 ^ i_din2 ^ i_din1 ^ r_dout1 ^ r_dout2 ^ r_dout4 ^ r_dout5 ^ r_dout6 ^ r_dout7 ^ r_dout8 ^ r_dout11 ^ r_dout14 ^ r_dout20 ^ r_dout21 ^ r_dout22 ^ r_dout25 ^ r_dout29 ^ r_dout30;

r_dout7 <= i_din29 ^ i_din28 ^ i_din25 ^ i_din24 ^ i_din23 ^ i_din22 ^ i_din21 ^ i_din16 ^ i_din15 ^ i_din10 ^ i_din8 ^ i_din7 ^ i_din5 ^ i_din3 ^ i_din2 ^ i_din0 ^ r_dout0 ^ r_dout2 ^ r_dout3 ^ r_dout5 ^ r_dout7 ^ r_dout8 ^ r_dout10 ^ r_dout15 ^ r_dout16 ^ r_dout21 ^ r_dout22 ^ r_dout23 ^ r_dout24 ^ r_dout25 ^ r_dout28 ^ r_dout29;

r_dout8 <= i_din31 ^ i_din28 ^ i_din23 ^ i_din22 ^ i_din17 ^ i_din12 ^ i_din11 ^ i_din10 ^ i_din8 ^ i_din4 ^ i_din3 ^ i_din1 ^ i_din0 ^ r_dout0 ^ r_dout1 ^ r_dout3 ^ r_dout4 ^ r_dout8 ^ r_dout10 ^ r_dout11 ^ r_dout12 ^ r_dout17 ^ r_dout22 ^ r_dout23 ^ r_dout28 ^ r_dout31;

r_dout9 <= i_din29 ^ i_din24 ^ i_din23 ^ i_din18 ^ i_din13 ^ i_din12 ^ i_din11 ^ i_din9 ^ i_din5 ^ i_din4 ^ i_din2 ^ i_din1 ^ r_dout1 ^ r_dout2 ^ r_dout4 ^ r_dout5 ^ r_dout9 ^ r_dout11 ^ r_dout12 ^ r_dout13 ^ r_dout18 ^ r_dout23 ^ r_dout24 ^ r_dout29;

r_dout10 <= i_din31 ^ i_din29 ^ i_din28 ^ i_din26 ^ i_din19 ^ i_din16 ^ i_din14 ^ i_din13 ^ i_din9 ^ i_din5 ^ i_din3 ^ i_din2 ^ i_din0 ^ r_dout0 ^ r_dout2 ^ r_dout3 ^ r_dout5 ^ r_dout9 ^ r_dout13 ^ r_dout14 ^ r_dout16 ^ r_dout19 ^ r_dout26 ^ r_dout28 ^ r_dout29 ^ r_dout31;

r_dout11 <= i_din31 ^ i_din28 ^ i_din27 ^ i_din26 ^ i_din25 ^ i_din24 ^ i_din20 ^ i_din17 ^ i_din16 ^ i_din15 ^ i_din14 ^ i_din12 ^ i_din9 ^ i_din4 ^ i_din3 ^ i_din1 ^ i_din0 ^ r_dout0 ^ r_dout1 ^ r_dout3 ^ r_dout4 ^ r_dout9 ^ r_dout12 ^ r_dout14 ^ r_dout15 ^ r_dout16 ^ r_dout17 ^ r_dout20 ^ r_dout24 ^ r_dout25 ^ r_dout26 ^ r_dout27 ^ r_dout28 ^ r_dout31;

r_dout12 <= i_din31 ^ i_din30 ^ i_din27 ^ i_din24 ^ i_din21 ^ i_din18 ^ i_din17 ^ i_din15 ^ i_din13 ^ i_din12 ^ i_din9 ^ i_din6 ^ i_din5 ^ i_din4 ^ i_din2 ^ i_din1 ^ i_din0 ^ r_dout0 ^ r_dout1 ^ r_dout2 ^ r_dout4 ^ r_dout5 ^ r_dout6 ^ r_dout9 ^ r_dout12 ^ r_dout13 ^ r_dout15 ^ r_dout17 ^ r_dout18 ^ r_dout21 ^ r_dout24 ^ r_dout27 ^ r_dout30 ^ r_dout31;

r_dout13 <= i_din31 ^ i_din28 ^ i_din25 ^ i_din22 ^ i_din19 ^ i_din18 ^ i_din16 ^ i_din14 ^ i_din13 ^ i_din10 ^ i_din7 ^ i_din6 ^ i_din5 ^ i_din3 ^ i_din2 ^ i_din1 ^ r_dout1 ^ r_dout2 ^ r_dout3 ^ r_dout5 ^ r_dout6 ^ r_dout7 ^ r_dout10 ^ r_dout13 ^ r_dout14 ^ r_dout16 ^ r_dout18 ^ r_dout19 ^ r_dout22 ^ r_dout25 ^ r_dout28 ^ r_dout31;

r_dout14 <= i_din29 ^ i_din26 ^ i_din23 ^ i_din20 ^ i_din19 ^ i_din17 ^ i_din15 ^ i_din14 ^ i_din11 ^ i_din8 ^ i_din7 ^ i_din6 ^ i_din4 ^ i_din3 ^ i_din2 ^ r_dout2 ^ r_dout3 ^ r_dout4 ^ r_dout6 ^ r_dout7 ^ r_dout8 ^ r_dout11 ^ r_dout14 ^ r_dout15 ^ r_dout17 ^ r_dout19 ^ r_dout20 ^ r_dout23 ^ r_dout26 ^ r_dout29;

r_dout15 <= i_din30 ^ i_din27 ^ i_din24 ^ i_din21 ^ i_din20 ^ i_din18 ^ i_din16 ^ i_din15 ^ i_din12 ^ i_din9 ^ i_din8 ^ i_din7 ^ i_din5 ^ i_din4 ^ i_din3 ^ r_dout3 ^ r_dout4 ^ r_dout5 ^ r_dout7 ^ r_dout8 ^ r_dout9 ^ r_dout12 ^ r_dout15 ^ r_dout16 ^ r_dout18 ^ r_dout20 ^ r_dout21 ^ r_dout24 ^ r_dout27 ^ r_dout30;

r_dout16 <= i_din30 ^ i_din29 ^ i_din26 ^ i_din24 ^ i_din22 ^ i_din21 ^ i_din19 ^ i_din17 ^ i_din13 ^ i_din12 ^ i_din8 ^ i_din5 ^ i_din4 ^ i_din0 ^ r_dout0 ^ r_dout4 ^ r_dout5 ^ r_dout8 ^ r_dout12 ^ r_dout13 ^ r_dout17 ^ r_dout19 ^ r_dout21 ^ r_dout22 ^ r_dout24 ^ r_dout26 ^ r_dout29 ^ r_dout30;

r_dout17 <= i_din31 ^ i_din30 ^ i_din27 ^ i_din25 ^ i_din23 ^ i_din22 ^ i_din20 ^ i_din18 ^ i_din14 ^ i_din13 ^ i_din9 ^ i_din6 ^ i_din5 ^ i_din1 ^ r_dout1 ^ r_dout5 ^ r_dout6 ^ r_dout9 ^ r_dout13 ^ r_dout14 ^ r_dout18 ^ r_dout20 ^ r_dout22 ^ r_dout23 ^ r_dout25 ^ r_dout27 ^ r_dout30 ^ r_dout31;

r_dout18 <= i_din31 ^ i_din28 ^ i_din26 ^ i_din24 ^ i_din23 ^ i_din21 ^ i_din19 ^ i_din15 ^ i_din14 ^ i_din10 ^ i_din7 ^ i_din6 ^ i_din2 ^ r_dout2 ^ r_dout6 ^ r_dout7 ^ r_dout10 ^ r_dout14 ^ r_dout15 ^ r_dout19 ^ r_dout21 ^ r_dout23 ^ r_dout24 ^ r_dout26 ^ r_dout28 ^ r_dout31;

r_dout19 <= i_din29 ^ i_din27 ^ i_din25 ^ i_din24 ^ i_din22 ^ i_din20 ^ i_din16 ^ i_din15 ^ i_din11 ^ i_din8 ^ i_din7 ^ i_din3 ^ r_dout3 ^ r_dout7 ^ r_dout8 ^ r_dout11 ^ r_dout15 ^ r_dout16 ^ r_dout20 ^ r_dout22 ^ r_dout24 ^ r_dout25 ^ r_dout27 ^ r_dout29;

r_dout20 <= i_din30 ^ i_din28 ^ i_din26 ^ i_din25 ^ i_din23 ^ i_din21 ^ i_din17 ^ i_din16 ^ i_din12 ^ i_din9 ^ i_din8 ^ i_din4 ^ r_dout4 ^ r_dout8 ^ r_dout9 ^ r_dout12 ^ r_dout16 ^ r_dout17 ^ r_dout21 ^ r_dout23 ^ r_dout25 ^ r_dout26 ^ r_dout28 ^ r_dout30;

r_dout21 <= i_din31 ^ i_din29 ^ i_din27 ^ i_din26 ^ i_din24 ^ i_din22 ^ i_din18 ^ i_din17 ^ i_din13 ^ i_din10 ^ i_din9 ^ i_din5 ^ r_dout5 ^ r_dout9 ^ r_dout10 ^ r_dout13 ^ r_dout17 ^ r_dout18 ^ r_dout22 ^ r_dout24 ^ r_dout26 ^ r_dout27 ^ r_dout29 ^ r_dout31;

r_dout22 <= i_din31 ^ i_din29 ^ i_din27 ^ i_din26 ^ i_din24 ^ i_din23 ^ i_din19 ^ i_din18 ^ i_din16 ^ i_din14 ^ i_din12 ^ i_din11 ^ i_din9 ^ i_din0 ^ r_dout0 ^ r_dout9 ^ r_dout11 ^ r_dout12 ^ r_dout14 ^ r_dout16 ^ r_dout18 ^ r_dout19 ^ r_dout23 ^ r_dout24 ^ r_dout26 ^ r_dout27 ^ r_dout29 ^ r_dout31;

r_dout23 <= i_din31 ^ i_din29 ^ i_din27 ^ i_din26 ^ i_din20 ^ i_din19 ^ i_din17 ^ i_din16 ^ i_din15 ^ i_din13 ^ i_din9 ^ i_din6 ^ i_din1 ^ i_din0 ^ r_dout0 ^ r_dout1 ^ r_dout6 ^ r_dout9 ^ r_dout13 ^ r_dout15 ^ r_dout16 ^ r_dout17 ^ r_dout19 ^ r_dout20 ^ r_dout26 ^ r_dout27 ^ r_dout29 ^ r_dout31;

r_dout24 <= i_din30 ^ i_din28 ^ i_din27 ^ i_din21 ^ i_din20 ^ i_din18 ^ i_din17 ^ i_din16 ^ i_din14 ^ i_din10 ^ i_din7 ^ i_din2 ^ i_din1 ^ r_dout1 ^ r_dout2 ^ r_dout7 ^ r_dout10 ^ r_dout14 ^ r_dout16 ^ r_dout17 ^ r_dout18 ^ r_dout20 ^ r_dout21 ^ r_dout27 ^ r_dout28 ^ r_dout30;

r_dout25 <= i_din31 ^ i_din29 ^ i_din28 ^ i_din22 ^ i_din21 ^ i_din19 ^ i_din18 ^ i_din17 ^ i_din15 ^ i_din11 ^ i_din8 ^ i_din3 ^ i_din2 ^ r_dout2 ^ r_dout3 ^ r_dout8 ^ r_dout11 ^ r_dout15 ^ r_dout17 ^ r_dout18 ^ r_dout19 ^ r_dout21 ^ r_dout22 ^ r_dout28 ^ r_dout29 ^ r_dout31;

r_dout26 <= i_din31 ^ i_din28 ^ i_din26 ^ i_din25 ^ i_din24 ^ i_din23 ^ i_din22 ^ i_din20 ^ i_din19 ^ i_din18 ^ i_din10 ^ i_din6 ^ i_din4 ^ i_din3 ^ i_din0 ^ r_dout0 ^ r_dout3 ^ r_dout4 ^ r_dout6 ^ r_dout10 ^ r_dout18 ^ r_dout19 ^ r_dout20 ^ r_dout22 ^ r_dout23 ^ r_dout24 ^ r_dout25 ^ r_dout26 ^ r_dout28 ^ r_dout31;

r_dout27 <= i_din29 ^ i_din27 ^ i_din26 ^ i_din25 ^ i_din24 ^ i_din23 ^ i_din21 ^ i_din20 ^ i_din19 ^ i_din11 ^ i_din7 ^ i_din5 ^ i_din4 ^ i_din1 ^ r_dout1 ^ r_dout4 ^ r_dout5 ^ r_dout7 ^ r_dout11 ^ r_dout19 ^ r_dout20 ^ r_dout21 ^ r_dout23 ^ r_dout24 ^ r_dout25 ^ r_dout26 ^ r_dout27 ^ r_dout29;

r_dout28 <= i_din30 ^ i_din28 ^ i_din27 ^ i_din26 ^ i_din25 ^ i_din24 ^ i_din22 ^ i_din21 ^ i_din20 ^ i_din12 ^ i_din8 ^ i_din6 ^ i_din5 ^ i_din2 ^ r_dout2 ^ r_dout5 ^ r_dout6 ^ r_dout8 ^ r_dout12 ^ r_dout20 ^ r_dout21 ^ r_dout22 ^ r_dout24 ^ r_dout25 ^ r_dout26 ^ r_dout27 ^ r_dout28 ^ r_dout30;

r_dout29 <= i_din31 ^ i_din29 ^ i_din28 ^ i_din27 ^ i_din26 ^ i_din25 ^ i_din23 ^ i_din22 ^ i_din21 ^ i_din13 ^ i_din9 ^ i_din7 ^ i_din6 ^ i_din3 ^ r_dout3 ^ r_dout6 ^ r_dout7 ^ r_dout9 ^ r_dout13 ^ r_dout21 ^ r_dout22 ^ r_dout23 ^ r_dout25 ^ r_dout26 ^ r_dout27 ^ r_dout28 ^ r_dout29 ^ r_dout31;

r_dout30 <= i_din30 ^ i_din29 ^ i_din28 ^ i_din27 ^ i_din26 ^ i_din24 ^ i_din23 ^ i_din22 ^ i_din14 ^ i_din10 ^ i_din8 ^ i_din7 ^ i_din4 ^ r_dout4 ^ r_dout7 ^ r_dout8 ^ r_dout10 ^ r_dout14 ^ r_dout22 ^ r_dout23 ^ r_dout24 ^ r_dout26 ^ r_dout27 ^ r_dout28 ^ r_dout29 ^ r_dout30;

r_dout31 <= i_din31 ^ i_din30 ^ i_din29 ^ i_din28 ^ i_din27 ^ i_din25 ^ i_din24 ^ i_din23 ^ i_din15 ^ i_din11 ^ i_din9 ^ i_din8 ^ i_din5 ^ r_dout5 ^ r_dout8 ^ r_dout9 ^ r_dout11 ^ r_dout15 ^ r_dout23 ^ r_dout24 ^ r_dout25 ^ r_dout27 ^ r_dout28 ^ r_dout29 ^ r_dout30 ^ r_dout31;

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开发
xxLearn1 天前
Vivado 2025.2 下载程序时提示:“ERROR : invalid command name ps7_init“
fpga开发
科恒盛远2 天前
【无标题】
fpga开发·硬件工程·信号处理
千寻xun2 天前
一、理论篇-NVME协议学习笔记
笔记·学习·fpga开发·nvme ssd·nvme协议
AndyHeee2 天前
【PCIe中的BAR、MMIO、MMU、mmap函数与页表】
fpga开发
nuoxin1143 天前
HR4988替代A4988-富利威
网络·人工智能·嵌入式硬件·fpga开发·dsp开发
一口一口吃成大V3 天前
vivado的bit 和 bin的区别
fpga开发
尤老师FPGA4 天前
HDMI数据的接收发送实验(十八)
fpga开发
北京青翼科技4 天前
青翼科技 JFM7K325T FPGA+FT-M6678 DSP 的全国产化信号处理平台丨FPGA开发板
fpga开发·数据采集卡·fmc子卡·fpga开发板·ad采集卡·图像处理卡·dsp信号处理
zlinear数据采集卡4 天前
从0到1硬核拆解:工业级数据采集卡的隔离设计与Modbus通信实战
arm开发·单片机·嵌入式硬件·fpga开发·开源