相信在的系统中CRC校验已经是个司空见惯的设计。
本文总结了CRC的常规设计思路,并提供给各位同僚一个绝佳的并行CRC在线生成的工具。方便生成任意的CRC校验的Verilog 和VHDL源代码。http://www.easics.com/webtools/crctool。
在这里CRC的原理就不再赘述了。不同于软件上的CRC校验,软件上一般采用查表的方法来进行CRC的校验。硬件上当然可以采用查表的方法来实现CRC的校验,缺点有两个:1占用大量的逻辑资源,2速度没有办法保障。
基于硬件的串行CRC,占用较少的资源即可实现最基本的CRC校验,基本的表达式为 移位和反馈:CRC[N-2:0] <= CRC[N-1:1]; CRC[N] <= f(x)*CRC;其中f(x)为本原多项式。跟M序列的发生逻辑很类似,是一个线形的系统。数据由高位向地位 逐级进入该线形系统,CRC为最低位数据进入系统后的CRC表达式的输出值。由此可以知道,生成一个CRC32_D32的数据需要32个时钟周期。在应用层面上来讲是不能忍受的。
于是下面我们引出并行的CRC校验的逻辑。根据串行的基本表达式 我们联立求解,我们知道他是一个的N*N的一个线形方程,很容易求解得到CRC当前值与上次迭代值的表达式:(表达式不好编辑--见源代码)。由表达式可以很容易实现但周期并行的CRC校验。前面提到了一个在线的并行CRC校验的小工具。目前的工程上应用,很大一部分代来自这个在线的小工具。只要设定一定的参数,就可以生成想要的代码。--未完待续//08-02-25
用户377235 2014-1-6 16:49
用户135223 2008-9-19 11:33
用户952678 2008-5-2 10:59
Cybershu 2008-3-22 11:03