如何在FPGA里解CRC检验

如何在FPGA里解CRC检验,第1张

循环冗余校验码(CRC)的基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码也叫(N,K)码。对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式G(x)。根据G(x)可以生成(N-K)位信息的校验码,而G(x)叫做这个CRC码的生成多项式。 校验码的具体生成过程为:假设要发送的信息用多项式C(X)表示,将C(x)左移R位(可表示成C(x)*2R),裤巧这样C(x)的右边就会空出R位,这就是校验码的位置。用 C(x)*2R 除以生成多项式G(x)得到的余数就是校验码带纯岁。 (难点是如何进行除法运算)

任意一个由二进制位串组成的代码都可以和一个系数仅为‘0’和‘1’取值的蠢睁多项式一一对应。例如:代码1010111对应的多项式为x6+x4+x2+x+1,而多项式为x5+x3+x2+x+1对应的代码101111。

如果是低速设计上游数据可能是串行的 显然如果采用并行实现有些浪费硬件资源 因为还要把串行输入存储起来形成整字节的并行输入

CRC的“定义”不是唯一的 只要接收发送端采用的一致就行

不知道你看了什么资料 但是估计不是很好 不如直接看维基百科里的介绍

http://zh.wikipedia.org/wiki/%E5%BE%AA%E7%8E%AF%E5%86%97%E4%BD%99%E6%A0%A1%E9%AA%8C

“初始值”、“反射值”以及“最终圆卖早异或值”

对于一些复杂的校验和来说这些十六进制数值是很重要的,如 CRC-32 以及 CRC-64。通常小于 CRC-16 的 CRC 不需要使用这些值。通常可以通过改变这些值来得到各自不同的校验和,但是校配纯验和算法机制并没有变化

CRC 标准化问题

相同长度的CRC也可能有多种形式,据称 CRC-16 与 CRC-32 至少有 10 种形式,但没有一种在数学上是最优的

移位寄存器可以初始化成 1 而不是 0。同样,在用算法处理之橘雀前,消息的最初n个数据位要取反。这是因为未经修改的 CRC 无法区分只有起始 0 的个数不同的两条消息。而经过这样的取反过程,CRC 就可以正确地分辨这些消息了


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12235808.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-22
下一篇 2023-05-22

发表评论

登录后才能评论

评论列表(0条)

保存