您当前的位置:五五电子网电子知识单片机-工控设备DSP/FPGA技术循环冗余校验在SOPC中的自定义指令实现 正文
循环冗余校验在SOPC中的自定义指令实现

循环冗余校验在SOPC中的自定义指令实现

点击数:7316 次   录入时间:03-04 11:46:02   整理:http://www.55dianzi.com   DSP/FPGA技术

  通信系统中,为确保数据传输和存储的可靠性,引入了信道编码。一是可使得编码后的码流频谱适应信道频率特性,二是可检测并纠正传输中的误码。前者属于谱成形技术,后者属于差错控制技术。 循环冗余 校验 ( CRC )属于后者,它是通过增加冗余信息,达到发现误码的目的。CRC校验由于检错能力强,被广泛用于各种数据校验中。

  可编程片上系统( SOPC )是一种特殊的嵌入式系统,它可将处理器、存储器、外设接口和多层次用户电路等系统设计需要的功能模块集成到一块芯片上[1]。Nios II是ALTEra公司的SOPC解决方案,是一个运行在 FPGA 上的32位RSIC处理器。Nios II系列软核处理器最大的特点之一是可灵活地增加用户指令[4],可以把系统中用软件处理耗时多的关键算法用硬件逻辑电路来实现,大大提高系统的效率。

  本设计即是采用Altera公司的CYCLONEII芯片EP2C35-672 FPGA,依靠Nios II软核和硬件逻辑结合的速度优势,实现基于Nios II的HDLC协议控制系统中CRC循环冗余校验的自定义指令实现。

  1 循环冗余校验CRC

  循环冗余校验码检错能力强。校验的基本思想是利用线性编码理论,在发送端根据传送的k位二进制码序列,以一定的规则产生(n-k)位校验监督码,并附在信息码后,构成一个n位的二进制码序列来发送,如图1。接收端则对收到的信息采用和发端相同的算法进行校验,若有错,发端重新发送数据 [2]。

加入CRC校验的码序列

图1 加入CRC校验的码序列

  CRC校验的编码原理:

  (1) 首先将待发送数据序列D(x) 乘以Xk ,其中k 为生成多项式G (x) 的最高次幂;

  (2) 将乘得的结果Xk•D (x) 用生成多项式G (x) 去除;

  (3) 忽略其商,仅将其余数R (x) 取出,并与Xk •D(x) 相加,形成n位输出码数据序列D′(x), 即:D′(x) = Xk•D (x) + R (x);

  最终得到的余式R(x)即为CRC校验码。它跟在信息码后一并发往信道。

  常见的生成多项式有:

公式

  对不同的类型,CRC的检错能力是有差异的。冗余位越多,检错能力越强,但实现起来就会相对复杂,并且占用的开销也会增大。实际中,总是基于产品的应用领域综合考虑来做出最合适的选择。

  2  CRC校验的自定义指令实现

  2.1 自定义指令

  自定义指令就是用户让Nios II软核完成的功能,功能由电路模块来实现,电路模块用硬件描述语言(HDL)描述,连接到Nios II软核的算术逻辑部件上,如图2[3]。这样,用户指令就可以把系统中用软件处理耗时多的关键算法用硬件逻辑电路来实现。Nios II处理器支持256个具有固定或可变时钟周期操作的定制指令,允许设计人员利用扩展CPU 指令集,通过提升那些对时间敏感的应用软件的运行速度,来提高系统性能。

定制指令逻辑连接到Nios II的ALU

图2 定制指令逻辑连接到Nios II的ALU

  2.2  CRC算法研究

  (1) 串行实现法

  串行算法实现原理比较简单,如图3。只需要移位寄存器和异或门这些基本的逻辑器件,所以很适合硬件电路。但是串行法一个时钟周期只能计算一位数据,只适用于数据串行传输的场合,接入并行处理的CPU时会大大降低效率。

CRC串行算法原理图

图3  CRC串行算法原理图

  (2) 并行计算法

  并行算法可以在一个时钟内对多位数据进行编码,提高计算速度。信息码一次并行输入,经过必要的处理时间即可输出编码结果,大大缩短了处理时间,具有很大的优越性。目前采用的CRC并行算法有查表法等,这些方法有一定的优势,但也有缺点。本设计所采取的是并行计算法,不仅保持了并行算法的优势,而且还克服了查表法的缺点。

  ◆ 与查表法比较,这种方法消除了查表法所必须的CRC余数表,减少了资源占用,降低了成本。不再需要存放余数表的高速存储器,减少了时延,提高了计算速度。

  ◆ 可以全部用FPGA的内部资源实现,总的输出时延为两级异或门时延和寄存器的锁存时延之和,约为5-10ns,而查表法的总时延达到了100ns,因此计算法可以用于处理时钟速率很高的场合。

  ◆ 查表法的并行度局限于8位。而计算法可以灵活地实现各种并行度的CRC计算。由于可以采用更大的并行度(如32位并行计算,甚至64位的并行计算),因此降低了处理时钟周期,并且与CPU的接入也更加方便。

  总之,这种并行实现方式适用于各种数据宽度CRC 校验,而且随着并行输入数据宽度的加宽,运算速度也加快。它的缺点:由于并行计算是通过多级反馈实现的,故复杂的反馈组合电路会带来较大的门延迟,但QUARTusII开发环境通过优化组合电路的结构,可以很大程度上降低延迟,使电路适用于较高的时钟频率。

www.55dianzi.com

  并行计算法的具体原理推导如下:

  设公式为第i个数据移位j次后寄存器的最终状态,公式为第i个数据移位j次后寄存器的状态,公式为输入数据的第j个数据,公式为生成多项式的第i位数值,j的取值范围由一次可 校验 的总数据位数决定,k为生成多项式的最高次幂,这里,j = 0、1、2 …… 32,k为16。其递推公式为:公式并且令公式;按照递推公式对移位寄存器的每一位进行计算,直到j=0,此次计算才结束,所有值都计算完毕后,得到中间结果:公式,其中公式为0或1;由于输入数据的高低位与寄存器高低位相反,因此需再进行一次倒排序才可得到正确的输出数据:公式,即得到了这组数据最终的 CRC 运算结果。

  2.3 CRC算法的VHDL实现

  据上述原理推算了32位并行数据CRC异或逻辑关系,并用VHDL实现了并行CRC算法,添加到Nios II配置表中形成自定义指令,在C程序中通过函数调用就能以很高的速率完成复杂的CRC运算,极大地提高了系统的效率。

  图4为CRC并行计算法的仿真结果。

CRC并行算法仿真结果

[1] [2]  下一页


本文关键字:暂无联系方式DSP/FPGA技术单片机-工控设备 - DSP/FPGA技术

《循环冗余校验在SOPC中的自定义指令实现》相关文章>>>