微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > crc校验

crc校验

时间:10-02 整理:3721RD 点击:
有没有大神给我普及一下crc初始值是什么作用,还有为什么有的校验结果要进行异或,例如14443中typeB的算法,网上都找不到这些解释

一般而言协议SPEC里都会给生成多项式,根据这个多项式可以直接得到LFSR的拓扑(1bit串行),
但实际上,模块的数据总线宽度都是8b/16b/32b/64b,再说1bit小水管页也不适合吞吐量大的系统,
所以对CRC电路要并行化,这个可以手推,也可以用工具直接生成这个变换逻辑。
CRC开始运算的初始值诸如0xFFFF,0x0000可以根据SPEC的规定来;它们和特定的生成多项式与数据流配合,可以保证最终得到的CRC校验满足规范要求的格式(如transpose bytes)
参考xapp209,xapp562



   谢谢您的解答,我发送端是做成了你说的并行方法每次处理8个bit,但是接收端是数据流的话,怎么判断接收到的是对的 1:如果发送端对生成的crc不与0xffff做异或处理的话可以直接,那么接收端接收到数据+crc之后会输出0,那么这种情况下的crc可以判断
2:第二种情况就是发送端crc生成的时候要求crc与0Xffff做异或处理才能当做最终的crc,那么接收端接收到的数据+crc按这种直接输入的方式就得不到一个定值来判断crc是否正确).



   谢谢你,我已经弄好了,就是在14443中不管crc怎么弄,接收端收回来连同crc一起接收不管是A卡和b卡都是一个定值,typeA是0000,typeB是of47

不用谢。
发送的时候将CRC放在数据帧的指定位置如尾部,接收帧对收到的数据流通过CRC模块迭代计算,最后得到的crc_out寄存器值就是协议指定的值,一般是0x0000,或0xFFFF之类,当然也可以是其它(协议声明的)值;这个结合生成多项式和初始加载值等,一般就能得到指定结果。
可以仿真下看结果,可以弄一组激励,然后将RTL的结果和参考模型的结果比较。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top