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

相关推荐
星夜离尘563 天前
FPGA 32 位字拆成 8 位字节:keep、last 与 ready/valid 背压下的多拍序列化
fpga开发·verilog
花月mmc4 天前
【FPGA】神经网络内容简介预告
嵌入式硬件·深度学习·神经网络·fpga开发
LabVIEW开发6 天前
LabVIEW FPGA 编程:少编译几次的办法(系列 04/05)
fpga开发·labview
cmc10286 天前
318.关于在ip内部封装PLL,MMCM的注意事项
fpga开发
LabVIEW开发6 天前
LabVIEW CompactRIO 编程模式怎么选(系列 02/05)
fpga开发·labview
FPGA小迷弟7 天前
FPGA 与千兆以太网校验和:从原理到 Verilog 实现
嵌入式硬件·fpga开发·无人机·ai编程·fpga
码农小韩8 天前
FPGA学习(二)——LED闪烁
fpga开发·verilog·fpga·led·组合逻辑·分频设计
9527华安8 天前
FPGA纯verilog实现DP视频接口,支持2K60帧分辨率,提供3套工程源码和技术支持
fpga开发·音视频·dp
ChaseVLSI9 天前
FPGA与ASIC的区别详解:内部结构、开发成本与适用场景,项目选型到底该选哪个
嵌入式硬件·fpga开发·硬件架构·硬件工程
9527华安10 天前
FPGA实现ARINC818总线协议,基于GT Transceivers Wizard高速收发器,提供7套工程源码和技术支持
fpga开发·transceivers·arinc818