基于verilog的CRC算法的实现
2017-05-26洪向宇
中国新通信 2017年7期
洪向宇
【摘要】 循环校验码具有良好的误码检测和抗干扰能力,广泛应用于通信系统。本文从CRC原理探究串行算法,利用matlab对CRC串行算法进行仿真,利用Verilog语言实现CRC校验模块,并最终验证设计的正确性。
【关键字】 循环校验码 CRC
一、引言
循环校验码(cyclic redundancy check, CRC)具有良好的误码检测和抗干扰能力,可广泛应用于通信系统的编解码技术,提高通信系统的检错能力。由于CRC为循化冗余检验码,因此CRC能够检出大部分突发长度错误和所有奇数随机错误1。
在通信系统中,CRC编码模块常常作为通信系统的一部分出现的,因此CRC编码模块可使用硬件描述语言进行设计实现,利用可编程逻辑器件实现CRC模块,既满足了模块对校验时钟及速度的需求,也能够直接简便的实现CRC模块的硬件电路。本文基于Verilog语言,利用串行算法实现了16位校验的CRC模块并利用matlab对算法进行验证。
二、CRC串行算法
CRC校验码依据线性编码原理2。对于信源为n位的二进制数据序列,经过算法处理,即输入信源与生成多项式进行模二除法,所得余数生成m位校验码。将m位校验码放在信源序列的后面进行数据传输,接收端以相同算法对接收数据进行校验。收到信源信息,如未发生误码,则接收到的校验位应能够被生成多项式模二整除。算法公式可表示为,
其中,xnD(x)为做n位移位运算的信源序列,g(x)为生成多项式,P(x)|R(x)为模二除法的商和余数。
三、CRC算法的FPGA实现
由于并行插入16bit信源码与串行的16bit信源码序列是等效的,因此CRC串行与并行算法在电路级是等效的3。……
登录APP查看全文
