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

相关推荐
海盐nnn1 天前
面向 AI 的 FPGA 开发流程:别急着让它写代码,先把方向定好
fpga开发
zlinear数据采集卡1 天前
数据采集卡从入门到精通(38):上位机开发实战——Python/QT/LabVIEW的技术选型与分层架构
python·单片机·嵌入式硬件·qt·fpga开发·开源·labview
zlinear数据采集卡1 天前
数据采集卡从入门到精通(42):项目实战三——设备预测性维护系统,从布点到预警
开发语言·单片机·嵌入式硬件·安全·fpga开发
国科安芯2 天前
ASL706S:让 MCU 不再“失忆跑飞“的守护芯片
分布式·单片机·嵌入式硬件·安全·fpga开发·架构
明德扬2 天前
多路MIPI摄像头如何同步聚合?一文看懂FPGA视频汇聚方案
fpga开发·音视频
松小白song2 天前
FPGA开发三大铁律:位宽、逻辑与连接,为何仿真通过上板却挂?
fpga开发
FPGA小徐2 天前
FPGA 时钟频率计算与单位换算
fpga开发
h×32 天前
FPGA视频4分屏项目 - 系统架构详细讲解
fpga开发·音视频
秋92 天前
硬件工程师全岗位薪资全景解析(2026版):IC设计·嵌入式·板级硬件·FPGA·晶圆制造
fpga开发·制造
博览鸿蒙2 天前
FPGA 工程师到底有哪些方向?每个岗位都在干什么?一篇给你讲清楚
fpga开发