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

相关推荐
FPGA小迷弟1 小时前
用 Claude Code 重构遗留系统:从评估到落地的完整指南
fpga开发·dsp开发·fpga·1024程序员节·sdr·无线电
专注仿真7 小时前
Vivado FPGA 开发实战项目:从入门到上板
fpga开发
NamoAmitabha12812 小时前
BSP,板级支持包--deepseek
单片机·嵌入式硬件·fpga开发
szxinmai主板定制专家12 小时前
ARM 还是 x86?CODESYS 数控机床控制器选型、FPGA 取舍与实时性真相
arm开发·人工智能·fpga开发·zynq·1024程序员节·codesys
星夜离尘561 天前
FPGA 小数据字如何纠错:完整实现并验证扩展 Hamming (13,8) SECDED
fpga开发
通信王661 天前
ZYNQ架构下的AXI_Lite 总线详解(1)
fpga开发
星夜离尘561 天前
FPGA 不用浮点开平方:逐位恢复整数平方根、余数与完整握手验证
fpga开发
Enclustra_China1 天前
FPGA设计的隐藏难题:算力、功耗与散热如何平衡?
fpga开发·fpga·fpga解决方案
好焊孙辉1 天前
从六代螺柱焊机到AI质检:鸿栢科技的螺柱焊国产化路径
人工智能·python·科技·fpga开发
unicrom_深圳市由你创科技1 天前
高帧率机器视觉 FPGA 图像板卡及传输开发定制解决方案
fpga开发