Xilinx FPGA中的CRC模块

crc根据一个给定的数据位组算出,然后在传输或存储之前附加到数据帧尾部。接收或检索到帧后,对其内容重新计算crc,以此来验证其有效性,确保数据无误。
本文简述crc计算所依据的原理,并且探讨用线性反馈移位寄存器实现其硬件的方法。然后,我们把注意力转向xilinx?virtextm-5 lxt/sxt 器件中存在的 crc 硬模块。
原理
加法和减法运算是用模2算法执行;也就是说,这两种运算与“异或”(xor)运算相同。除了没有进位,多项式算法中的两数相加与普通二进制算法中的多数相加相同。
例如:二进制消息流11001011表达为x7+x6+x3+x+1。传输点与接收点约定一个固定多项式,称为生成器多项式;这是crc计算的关键参数。
将数据解释为一个多项式的系数,用一个给定的生成器多项式除这些系数。除得的余数就是crc。假设有一个m位消息序列和一个r阶生成器多项式,发射器创建一个n位 (n=m+r)序列,称为帧校验序列 (fcs),使这个(m+r)位合成帧可以被一个预先确定的序列整除。
发射器将r个0位附加到m位的消息,并且用生成器多项式除所得 m+r-1阶多项式。这样可得到一个阶数等于或小于(r-1)的余数多项式。该余数多项式有r个系数,这些系数形成校验和。将商丢弃。传输的数据是原m位消息后附r位校验和。
在接收器上,可以按以下两种标准方法之一评估所接收数据的有效性:
对收到的前m个位再次计算校验和,然后与收到的校验和(收到的后r个位)进行比较。
对收到的全部(m+r)个位计算校验和,然后与一个0余数进行比较。
为了说明第二种方法如何得出 0余数,我们做如下约定:
m=消息的多项表达式
r=发射器上所算得余数的多项表达式
g=生成器多项式
q=用g除m得到的商
传输的数据对应于多项式 mxr–r。变量xr表示消息为容纳校验和而产生的一个r位移位。
我们知道:mxr=qg+r
在发射器上将校验和r附加到消息中相当于从消息中减去余数。于是,传输的数据变为mxr-r=qg,这显然是g的倍数。这就是我们在第二种情况下得到0余数的过程。
不过,这一过程对所传输数据中首0位和尾0位的个数不敏感。换句话说,无论消息插入还是删除尾0位,余数都保持为0,从而使错误漏检,这表明不会复原成同样的位序列。下面介绍一种克服这一缺点的变通办法。 剩余法
实际上,校验和经过反演后才附加到消息中。这就使接收器上算出的余数(超过m+r位)不为0。在这类情况下,接收器上得到的余数是一个固定值,称为多项式的剩余值。
做一点演算有助于更清楚地说明这一概念。
假定%符号在下列表达式中表示模运算。
对于未经反演附加校验和的情况:
(mxr–r)xr%g=0
在这种情况下,接收器会执行与发射器一样的移位运算。
现在,考虑校验和在发射器上经反演后附加到消息流的情况: (mxr–rc)xr% g
其中,rc表示经过反演的校验和。
还可以将其写成:(mxr– r +(xr-1+...+x+ 1)) xr% g
一个位的反码与其对1异或运算的结果相同。这里的+号表示模2算法中的加法(另请注意,在模2算法中,加法和减法运算相同)。
在这种情况下,余数与以下表达式相同:(xr-1+...+x+1) xr% g
对于给定的生成器多项式来说,此表达式的计算结果将是一个常数。
最常用的crc 32生成器多项式是g(x) = x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1
该式在十六进制中是04c11db7。
与crc-32对应的常数剩余值在十六进制中是c704dd7b。对于给定的生成器多项式g来说,无论在输入端提供何种数据样式,剩余值仍为常数。
硬件实现
crc校验和的计算是多项式除法过程。在硬件中实现该过程需要使用一个移位寄存器(亦称crc寄存器)。该移位寄存器的长度与生成器多项式的阶数相同。
crc 计算过程如下:
1.初始化crc寄存器。
2.持续获取消息位,直到获得所有消息位。如果crc寄存器中的高阶位是1,则向左移一位,并且将其结果与g进行异或运算。否则,仅向左移一位。
对给定消息完成所有这些步骤后,crc寄存器中剩 下的就是余数。
可以用一种称为线性反馈移位寄存器(lfsr)的电路执行这些步骤。图1所示为用crc32多项式计算 crc 的 lfsr 实现方法。请注意,异或门的布局取决于生成器多项式中项值为 1 的对应项的系数。图中的编号方框各代表一个存储元件(触发器)。 crc模块
  crc 的硬件实现使用一个简单的 lfsr。这种电路虽然实现起来简单,但对于一个n位数据流来说,要占用n个时钟周期来计算crc值。在必须以较高速度处理数据帧的高速数据网络应用中,这样的延迟是无法忍受的。这类高速网络应用迫切需要对并行数据流实现crc生成和校验。
virtex-5 lxt/sxt器件中实现的crc模块可帮助设计人员加速校验和计算。
virtex-5 lxt/sxt器件中的 crc硬模块基于crc32多项式。virtex-5 fpga含有crc32和 crc64 两种硬模块,能以一个时钟周期的延迟为4位和8位数据输出生成crc。其界面简单易用。硬模块对给定的消息流起着crc计算器的作用,同时提供一些针对 crc的参数作为输入。crc的比较功能已经超出硬模块的范围,应集成到fpga架构中。
fpga 中的每个crc硬模块异步计算一个32位校验和。
图2是说明硬模块架构的模块级图。crc硬模块提供一个位反演和字节反转的输出。
图3所示为crc硬模块的应用概况。在发射器上,crc经计算后附加到给定数据包的尾部。在接收器上,对连带发射器所附加的crc一起接收到的整个数据包重新计算crc。
 所收数据包的有效性用剩余法来确定。对于本例中的crc32多项式来说,剩余值的计算结果将是十六进制的1cdf4421,这其实就是 c704ddb7的位反演和字节反转值。字节反转和位反演的概念如图4所示。
图5所示为正常crc运算的波形
我们还提供一个logicoretm crc 向导,其中为 virtex-5 器件中的crc硬模块提供一个locallink封装。其内核还提供了一个说明如何使用 crc 硬模块的设计实例。此外,内核提供了各种选项,如流水线处理、补数计算和转置。
结论
xilinx fpga中的crc模块使设计人员能够轻松地将检错机制加入到各种设计中。可以用core generatortm软件中提供的crc wizard ip加入符合不同协议(如 aurora 和 pci express)的检错功能。

1-Wire 串行存储器产品
MAX4952/MAX4952A 四通道1.5/3.0/6.
人工智能创造的音乐能听吗
充电桩如何实现互联互通
热电偶预放大器-Thermocouple Pre Amp
Xilinx FPGA中的CRC模块
华为5G引领VR发展 加速VR商用行程
4d打印技术是什么?
用于失效操作的汽车E/E系统的架构研究
骨传导耳机什么牌子好、最好的骨传导耳机推荐
RT-Thread记录(七、IPC机制之邮箱、消息队列)
三星A7女王粉高清图赏
微控制器外围功能的六部分系列之GPIO(通用输入/输出)
强悍内芯加持,易德明超级3D360全景T5实测
如何提高开源嵌入式处理应用程序的性能
vivo X9怎么样?vivo X9使用评测:换上高通芯的X9有哪些与众不同的变化?
腾讯玩起车来了?腾讯持股5%成特斯拉股东
FR8008XP屏显应用案例-大彩串口屏
消防应急灯是否需要特殊的电池?
2018区块链剧变下的12大看点 ICO将成为主流