基于FPGA的CRC校验码生成器设计

时间:2025-11-01  作者:Diven  阅读:0

1.概述

基于FPGA的CRC校验码生成器设计

CRC即CyclIC Redundancy Check,循环冗余校验,是数字通信中的常用信道编码技术。其特征是信息段和校验字段的长度可以任意选定。

2.CRC校验的基本原理:

CRC码是由两部分组成的,前部分是信息码,就是需要校验的信息,后部分是校验码,如果CRC码长共n bit,信息码长k bit,就称为(n,k)码,剩余的r bit即为校验位。如:(7,3)码:110 1001,前三位110为信息码,1001为校验码。

3.校验码的生成规则:

1)将原信息码左移r bit,右侧补零,如 110--> 110 0000;

2)用110 0000除以g(x)  (注意,使用的是模2除法,见下文),得到的余数即为CRC校验码;

3)将校验码续接到信息码的尾部,形成CRC码。

4.关于生成多项式g(x)

在产生CRC校验码时,要用到除法运算,这是比较麻烦的,把二进制信息预先转换成一定的格式,这就是CRC的多项式表示。二进制数表示为生成多项式的系数,如下:所有二进制数均被表示为一个多项式,x仅是码元位置的标记,因此我们并不关心x的取值,称之为码多项式。(我没研究过CRC代数推理过程,没体会到用多项式计算的方便之处,这里要学会的就是给出生成多项式g(x),能写出对应的二进制即可)

常见的生成多项式如下:

   

5.关于模2除法

模2运算就是加法不考虑进位,减法不考虑借位,

1)加法运算:

  0+0=0        0+1=1        1+0=1        1+1=0

  例如0101+0011=0110,列竖式计算:

           0 1 0 1

       + 0 0 1 1

    ──────

           0 1 1 0

2)减法运算:

  0-0=0        0-1=1        1-0=1        1-1=0

  例如0110-0011=0101,列竖式计算:

          0 1 1 0

   -  0 0 1 1

     ──────

          0 1 0 1

3)乘法运算

  0×0=0        0×1=0        1×0=0        1×1=1

  多位二进制模2乘法类似于普通意义上的多位二进制乘法,不同之处在于后者累加中间结果时采用带进位的加法,而模2乘法对中间结果的处理方式采用的是模2加法。例如1011×101=100111,列竖式计算:

  

4)除法运算:

  0÷1=0        1÷1=1

  多位二进制模2除法也类似于普通意义上的多位二进制除法,但是在如何确定商的问题上两者采用不同的规则。后者按带借位的二进制减法,根 据余数减除数够减与否确定商1还是商0,若够减则商1,否则商0。多位模2除法采用模2减法,不带借位的二进制减法,因此考虑余数够减除数与否是没有意义 的。
             实际上,在CRC运算中,总能保证除数的首位为1,则模2除法运算的商是由余数首位与除数首位的模2除法运算结果确定。因为除数首位总是1,按照模2 除法运算法则,那么余数首位是1就商1,是0就商0。例如1100100÷1011=1110……110,列竖式计算:

    

掌握了上面的运算规则,您可以尝试计算一个复杂一点的,如下:

  

如果您得到的余数结果正确,您掌握的东西就够用了。

6.CRC-CCITT的硬件实现

CRC-CCITT的生成多项式为:

                

对应的二进制数就是上面复杂运算中那个除数。由刚才的计算可知,对于8 bit的数据 0xaa,CRC校验码为0001 0100 1010 0000,下面用verilog来实现,看能否得到这个结果:

要实现这一过程,仍然需要LFSR电路,参看《FPGA产生基于LFSR的伪随机数》中关于该电路特性的介绍,如果您不需要了解原理,直接略过即可;有所改进的地方就是,可以将伪随机数发生器看作一个Moore型状态机,输出只与当前的状态有关;而此时利用LFSR电路,需要引入数据输入端,输出不仅取决于当前的状态,还取决于输入信号,相当于Mealy型状态机,如下图:注意对比与伪随机数产生器中该反馈支路的区别!

反馈项gr+1gr……g0为生成多项式的系数,依然是1代表存在反馈,0代表不存在反馈;此电路可以完成上述的模2除法操作,若我们要求0xaa的CRC校验码,则从高位到低位顺序输入0xaa共8 bit后,D15……D0中的数据即为所要求的余数,即CRC校验位。

7.verilog描述

如果用时序电路串行实现,则8 bit数据要移位8次,就需要8个clk,效率低下,为了能在一个时钟周期输出结果,必须采用组合电路,当然,这是以空间换时间的方法,由于使用了for循环8次,直观的讲电路规模将扩大8倍。。。

 

Module CRC_GEN( input rst, input clk, input [7:0] data_in, input d_valid, output reg[15:0] crc);integer i;reg feedback;reg [15:0] crc_tmp;always @(posedge clk or negedge rst)begin if(!rst) crc <= 16'b0; else if(d_valid==1'b0) crc <= 16'b0; else crc <= crc_tmp;endalways@( data_in or crc)begin    crc_tmp = crc;    for(i=7; i>=0; i=i-1) begin feedback = crc_tmp[15] ^ data_in[i]; crc_tmp[15] = crc_tmp[14]; crc_tmp[14] = crc_tmp[13]; crc_tmp[13] = crc_tmp[12]; crc_tmp[12] = crc_tmp[11] ^ feedback; crc_tmp[11] = crc_tmp[10] ; crc_tmp[10] = crc_tmp[9]; crc_tmp[9] = crc_tmp[8]; crc_tmp[8] = crc_tmp[7]; crc_tmp[7] = crc_tmp[6]; crc_tmp[6] = crc_tmp[5]; crc_tmp[5] = crc_tmp[4] ^ feedback; crc_tmp[4] = crc_tmp[3]; crc_tmp[3] = crc_tmp[2]; crc_tmp[2] = crc_tmp[1]; crc_tmp[1] = crc_tmp[0]; crc_tmp[0] = feedback; endendendModule

 

 仿真结果如下:得到的是数据0xaa和0xf0的CRC校验码,为验证结果的正确性,您可以按照模2法则手工计算一下^.^8.同样给出一个4 bit信息位,5 bitCRC码的(9,4)码的程序和仿真结果,程序的流程与上述流程完全一样:

  

 

module CRC5_GEN( input rst, input clk, input [3:0] data_in, input d_valid, output reg[4:0] crc);integer i;reg feedback;reg [4:0] crc_tmp;always @(posedge clk or negedge rst)begin if(!rst) crc <= 5'b0; else if(d_valid==1'b0) crc <= 5'b0; else crc <= crc_tmp;endalways@( data_in or crc)begin    crc_tmp = crc;    for(i=3; i>=0; i=i-1) begin feedback = crc_tmp[4] ^ data_in[i]; crc_tmp[4] = crc_tmp[3]; crc_tmp[3] = crc_tmp[2]; crc_tmp[2] = crc_tmp[1] ^ feedback; crc_tmp[1] = crc_tmp[0]; crc_tmp[0] = feedback; end endendmodule

 


审核编辑:刘清

猜您喜欢


移动硬盘盒是将传统硬盘转换为便携式存储设备的重要工具。可以保护硬盘,防止物理损坏和静电干扰,延长硬盘的使用寿命。移动硬盘盒通过USB等接口,实现与电脑、电视等设...
2017-10-13 00:00:00

对刀器是重要的工具,应用于机械加工、刀具制造等领域。主要作用是对刀,即在加工过程中精确定位刀具,以确保加工精度和表面质量。通过对刀器,操作者可以快速、准确地设定...
2019-10-05 00:00:00

碳化硅晶闸管(可控硅)是应用于电力电子领域的重要元件,其性能参数直接影响电路的效率和稳定性。关键参数是额定电压(V_R),通常表示可控硅在正常工作条件下能够承受...
2018-08-12 00:00:00

2023年9月15日,智能手机品牌Redmi(红米)即将发布Note 13 Pro系列新机。此系列新品搭载三星2亿像素(200MP)图像传感器ISOCELL H...
2023-09-15 10:13:00

现代电子设备中,连接器的选择非常重要。CONN_33.2X5MM_SM是应用的连接器,其独特的设计和功能使其在各种应用中表现出色。本文将对该连接器进行详细解析,...
2025-04-26 00:31:17

随着DDR5内存技术的普及,新一代电脑硬件对电源供应提出了更高的要求。为了充分发挥DDR5内存的超频性能和系统稳定性,选择一款与时俱进的电脑电源很重要。新一代电...
2024-11-06 00:00:00

射频开关二极管是应用于射频信号处理的电子元件。主要用于在不同的射频信号之间进行切换,确保信号的稳定传输。射频开关二极管因其高效、低损耗等优点,应用于无线通信、卫...
2025-04-01 02:01:40

模拟开关是用于控制模拟信号传输的电子元件,应用于音频、视频和传感器等领域。其基本定义是能够在不同的电压或电流水平下切换信号通路,从而实现对信号的选择、合成或隔离...
2024-12-16 00:00:00

电池作为现代科技的重要组成部分,应用于多个领域。在消费电子产品中,锂离子电池是智能手机、平板电脑和笔记本电脑的主要动力源,提供持久的续航能力。电动交通工具如电动...
2015-11-08 00:00:00