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

时间:2025-05-02  作者: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

 


审核编辑:刘清

猜您喜欢

捕捉快速运动的无模糊图像,如下落的水滴或分子相互作用,需要昂贵的超高速相机,每秒可以获取数百万张图像。在一篇新论文中,研究人员介绍了一种相机,可以为广泛的应用提...
2023-09-16 09:46:00

扁平柔性电缆(FFC,FPC)因其轻薄、柔韧性强和空间占用小的特点,应用于多个领域。在消费电子产品中,如手机、平板电脑和笔记本电脑,FFC和FPC被用于连接显示...
2012-04-23 00:00:00

机械故障听诊器是重要的设备,用于检测和诊断机械设备的故障。其主要参数包括频率响应、灵敏度、动态范围和信噪比等。频率响应是指听诊器能够捕捉的声音频率范围,通常在2...
2017-12-23 00:00:00

焊接插片端子是应用于电子、电气和机械领域的连接器件。优良的导电性和可靠的连接性能,成为许多行业的首选。在汽车行业,焊接插片端子被用于连接电池、传感器和控制模块,...
2009-07-09 00:00:00

热熔胶枪因其操作简便和快速固化的特点,应用于多个领域。在家庭DIY项目中,热熔胶枪是不可少的工具,适用于修补、装饰和手工制作,能够轻松粘合木材、布料和塑料等材料...
2023-04-01 00:00:00


2010-11-12 00:00:00

在现代科技迅速发展的今天,转换器成为了我们生活中不可少的工具。无论是在家庭、办公室还是户外活动,转换器都能帮助我们轻松解决各种电源需求。主要功能是将不同类型的电...
2021-01-06 00:00:00


开关二极管是重要的电子元件,应用于电路中,特别是在开关电源和信号处理领域。主要功能是控制电流的流动,防止反向电流对电路造成损害。通过合理利用开关二极管,可以提高...
2025-04-08 04:31:39