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

相关推荐
辰丁电子2 小时前
PCB设计:EMMC设计规范
fpga开发·pcb设计·pcb工艺·layout·pcb layout
156082072191 天前
关于国微SQM7VX690T和复旦微JFM7VX690T调试
fpga开发
minglie12 天前
简易寄存器接口SMMR---正交编码器
fpga开发
神电测控2 天前
新品发布:32通道50MS/s同步并行14位采集模块PG-FMC9249(支持任意FPGA/ZYNQ,兼容LabVIEW FPGA软件开发)
fpga开发·labview·ni·神电测控·王电令·ad9249·32通道
Drgfd2 天前
半导体国产替代进入“深水区”:决战设备、材料、IP三大高地
网络·fpga开发
国产HT1621B2 天前
YL1650 LED驱动芯片详解:从原理到实战应用(附51单片机驱动代码)
stm32·单片机·嵌入式硬件·mcu·fpga开发·lcd驱动
szxinmai主板定制专家2 天前
驱控一体新范式:RK3576+FPGA+CODESYS工业实时AI控制架构全解
人工智能·嵌入式硬件·计算机视觉·fpga开发·架构·工业ai·驱控一体
国科安芯2 天前
ASC0101S自动双向电平转换原理深剖
单片机·嵌入式硬件·fpga开发·云计算·信息与通信
落chen2 天前
7 Series FPGAs Clocking Resources
fpga开发
落chen3 天前
基于FPGA的IIC协议通信-强化篇
fpga开发