基于VHDL的CRC编解码设计
并行CRC算法硬件实现研究与VHDL设计
2007年第4期漳州师范学院学报(自然科学版) No. 4. 2007年(总第58期) Journal of Zhangzhou Normal University(Nat. Sci.)General No. 58 文章编号:1008-7826(2007)04-0051-06并行CRC算法硬件实现研究与VHDL设计王海光(漳州师范学院物理与电子信息工程系, 福建漳州363000)摘要:介绍了循环冗余校验码(CRC)的生成算法,在分析讨论了几种常见CRC算法硬件实现的基础上,以VHDL给出了一种简单通用的CRC并行计算实现方法. 该方法适用于各种不同的CRC生成多项式和各种不同的信息码宽度(如8位、16位、及32位等),经Altera公司的EDA开发工具软件QuartusII6.0编译、综合、优化、适配和仿真,得相关的时序仿真波形图、RTL图和占用硬件资源报告. 分析各种数据报告可知设计意图得到了有效的贯彻. 该设计最终还以杭州康芯公司GW48系列的SOPC/EDA实验开发系统所带的Cyclone系列中的EP1C12Q240C8芯片为硬件载体,经下载测试证实了设计的可靠性.关键词: CRC ; 并行算法 ; 硬件实现 ; VHDL中图分类号:TN941. 1文献标识码: A1 引言信息在传递过程中,可能因某种原因使传输的数据发生错误. 为减少和避免这类错误的发生,除提高硬件的可靠性外,在数据的编码上也应提供检错和纠错的支持. 具体做法是:在要传送的数据代码中加入若干个校验位,使之在传送过程中若发生错误则会生成非法代码而被发现,甚至能根据非法代码确定错误的位置而给予纠正,这种具有检错或纠错能力的编码即校验码,其中只能发现错误而不能纠正错误的编码为检错码,既能发现错误又能纠正错误的编码为纠错码.常见的校验码有奇偶校验码、海明校验码和循环冗余校验CRC(Cyclic Redundancy Check)码,它们都是将被校验的数据代码按k位一组分组,每组添加r个校验位,形成n位一组的代码,故又称为(n,k)分组校验码. 传送时校验位和数据位被一起发出,若传送过程没发生错误,则接收方剔除校验位保留数据位,否则经校验给予纠正(对纠错码)或要求重发(对检错码). 其中CRC码既可检错又可纠错(与生成多项式的选取有关),是以数据块为对象进行校验的一种高效、可靠的检错和纠错方法,由于它的编解码简单、纠错能力强且误判概率很低, 因而在工业测控及通信系统中得到了广泛的应用.2 CRC生成算法2.1 CRC码M′的生成过程设待校验的信息码M有k位:M =(m k – 1,m k – 2,…,m1,m0),可用多项式M(x)表示为:M(x) = m k - 1X k - 1 + … + m1X1 + m0 (1)若采用的生成多项式G(x)的最高次幂为r:G(x) = g r X r+g r-1X r-1+…+g1X1+g0,则式(1)两端乘X r得:X r M (x) = m k - 1 X r + k - 1 + m k - 2 X r + k - 2 + … + m1 X r + 1 +m0 X r(2)设X r M (x)模-2除以G(x)得到的商多项式为Q(x),余数多项式为R(x)(以下讨论均按此约定),即:X r M (x) = Q(x) G(x) + R(x)由于模-2运算中加减运算的等效性,上式等效为:收稿日期:2007-06-22作者简介: 王海光(1967-), 男, 福建省龙岩市人,副教授.52 漳州师范学院学报(自然科学版) 2007年X r M (x) + R(x) = Q(x) G(x) (3)其中余数多项式R ( x) 可表示为:R(x) = r r - 1 x r - 1 + r r - 2 x r - 2 + … + r1 X1 + r0(4)将式(2)和式(4)代入式(3) ,得:Q(x) G(x) = X r M(x) + R(x) = m k - 1 X r + k - 1 + … + m0 X r+ r r - 1 X r - 1 + … + r1 X1 + r0 (5)式(5)所对应的码组M′为k+ r位,即:M′= ( m k – 1,m k – 2,…,m1,m0,r r – 1,r r – 2,…,r1,r0) (6)从信息码M到M′的变换过程就是CRC码的生成过程,其中的r r – 1,r r– 2,…,r1,r0即为校验位. 由式(3)可知,若信息码在发送、传输及接收过程中没发生错误,则在接收端将收到的k + r位CRC码M′除以相同的生成多项式G( x)所产生的余数必然为零,否则就可知道在通信过程中产生了误码[1].2.2 生成多项式G(x)的确定CRC码是由生成多项式G(x)按上述算法生成的,但G(x)的选择并不是随意的. 为使生成的CRC码具备预期的检错纠错功能,G(x)的选择应使生成的每一个CRC码在任何一位出错时余数都不为零,在不同位出错时余数都不同,在对余数补0后继续做除法时余数是循环的[2]. 为此,对一个码长为n、有k个信息元的(n,k)循环码,其生成多项式G(x)必须是一个最高位和常数项均为1的r=n-k次多项式,且是x n+1的一个因式. 该循环码中的其他码多项式都是G(x)的倍式[3]. 故确定G(x)时,可先对x n+1进行因式分解,再从中找到它的r 次因式. 为便于阐明,这里以(7,3)循环码为例,说明找出G(x)的办法:根据模-2运算法则,对x7+1进行因式分解可得:x7+l=(x+1)(x3+x2+1)(x3+x+1)从分解的因式中找到r=7-3=4次的因子. 这样的因子有x4+x2+x+1和x4+x3+x2+1,两式都可作为生成多项式用. 当然,选用的生成多项式不同,不仅产生出的循环码码组不同[3],CRC码的校验能力也不同. 目前较常用的生成多项式举例如下(其中x值等于2) :(1) CRC-9,G(x) = x9 + x6 + x5 + x4 + x3 + 1, R(x)由9 位组成.(2) CRC-12,G(x) = x12 + x11 + x3 + x2 + 1, R(x)由12 位组成.(3) CRC-16,G(x) = x16 + x15 + x2 + 1,R(x)由16 位组成.(4) CRC-CCITT ,G(x) = x16 + x12 + x5 + 1,R(x)由16 位组成.(5) CRC-32,G(x) = x32 + x26 + x23 + x22 + x16 +x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1,R(x)由32 位组成[4].3 对常见的CRC算法硬件实现的分析研究CRC码的产生和校验既可用软件实现,也可用硬件实现,较经典的硬件实现算法有移位算法、查表算法和近年出现的一种多数人称之为公式法的实现算法.3.1 移位算法该算法的实现主要由一个r位的Array移位寄存器和一些可控异或单元组成,其硬件实现示意框图如图1所示图中由R0、R1、…R r-1构成的CRC寄存器是一个r位移位寄存器组,用来存储r位的CRC校验码R(x).运算控制开关g1、g2、…g r-1的位置与第4期 王海光: 并行CRC 算法硬件实现研究与VHDL 设计 53生成多项式G(x)的系数相关,对应系数1的开关接通反馈支路(上端),否则接地(右侧). 编、解码前清零CRC 寄存器,在时钟驱动下,待校验的信息码M(x)经运算处理逐位移入CRC 寄存器中,当信息码全部输入之后,CRC 寄存器中存放的值即为生成的CRC 码. 由式(6)知,只须输出开关C 开始接下端,在时钟驱动下逐位输出待校验的k 位信息码M(x),然后改接上端,再逐位将CRC 寄存器中的校验码R(x)输出即可. 该算法原理简单,易于硬件实现,但是效率较低,主要用于串行通信中,不适合高速通信的场合. 3.2 查表算法该算法事先把待校验的信息码M(x)的所有CRC 码全部计算出来,放在一个表里,编码时只要根据M(x)从表中找出对应的值进行处理即可. 其硬件实现示意框图如图2所示.编码解码前清零CRC 寄存器. 编码时待信息码M(x)输入结束,CRC 寄存器的值即为校验码R(x);解码校验时待传送码M(x)输入结束时,若CRC 寄存器中的值为零,则表明传输无误. 该算法执行速度快,适合于高速通信场合,但由于需要大容量的存储表,花费的硬件资源较移位算法要大得多[5]. 3.3 公式法公式法与查表算法一样,也是以字节数据为输入,采用递推算法,不同之处在于公式法使用公式实时计算CRC 码,从而省去了查找表[5],不仅节省了硬件存储资源,还能进一步提高系统的运行速度[1]. 由于公式法的推算过程繁琐冗长,文献[1]、文献[5]和文献[6]均给出了详尽的推导过程,限于篇幅,此处不再赘述.随着软、硬件技术的不断发展,传统的CRC 算法被不断地改进完善,新的算法不断被提出. 从本质上说,前边谈到的移位算法即是串行算法,比如文献[6]干脆称之为比特流算法,而后边所说的查表算法和公式法则为并行算法[7],比如在文献[6]中把公式法的推导过程归在并行算法推导的段落中. 串行算法虽然速度较慢,效率不高,但算法原理简单明了,易于硬件实现,加上串行通信领域的不可替代,于是有了存在的理由. 并行算法的突出优势在速度快,当然它也为此付出了代价——花费的硬件资源量较大. 公式法的出现,则不仅进一步加大了并行算法高速的优势,还明显地降低了硬件的开销,因此可以认为是前景较好的一种实现算法.考虑到并行算法的电路实现的本质是以组合逻辑完成信号的处理过程:对于前边谈到的查表算法,是以硬件资源为代价,不予逻辑化简的实现方法,如同用ROM 实现组合逻辑功能. 对于后来提出的公式算法,则大幅度地削减了硬件逻辑资源的闲置占用,故而不仅能明显降低成本还能有效地提高运算的速度,但其采用的递推算法却不能确保实现逻辑的最简,因而在顾及减轻设计运算量的同时也付出了一定的硬件代价. 此外公式算法还存在须针对大小不同的数据块、选取生成多项式的不同具体推算出相关的硬件实现电路的不足. 因此本人认为借助EDA 工具强大的综合、优化功能,利用VHDL 进行算法建模从而实现设计应是一种较好的解决办法,且VHDL 所提供的类属参量又能为针对大小不同的数据块、选取生成多项式的不同提供了一种极其便利的解决方案. 虽然早有不少人采用各种PLD 实现了其特定需要的各种CRC 编、解码器,但不是针对以上目标开展的研究,所生成的核心部件未必是组合逻辑,难保算法的并行性,为此特针对并行编码运算的核心功能部分进行了以下的试验.4 并行算法的VHDL 实现为使(n ,k )码能具体指出数据在传输中出错的位,数据位数k 和校验位数r 之间应满足海明不等式:k+r ≤2r -1. 为简明起见,这里假设欲传送的数据代码M(x)按4位一组分组(即k=4),则r ≥3,若选定生图2 查表算法实现框图54 漳州师范学院学报(自然科学版) 2007年成多项式G(x)=x3+x2+1则可得采用并行算法求R(x)的VHDL程序如下:library ieee;use ieee.std_logic_1164.all;entity crc_jym1 isg eneric(m_wide: integer:= 3;r_wide: integer:= 2);p ort (m_in : in std_logic_vector(m_wide downto 0);r_out: out std_logic_vector(r_wide downto 0));end crc_jym1;architecture a of crc_jym1 isc onstant crc_wide : integer:= m_wide+r_wide+1;c onstant g_wide : integer:= r_wide+1;s ignal mm : std_logic_vector(crc_wide downto 0);c onstant g : std_logic_vector(g_wide downto 0):="1101";beginp rocess(m_in)variable d: std_logic_vector(g_wide downto 0);variable r: std_logic_vector(r_wide downto 0);b eginr :=(others =>'0');mm<=m_in&r;d :=mm(crc_wide downto (crc_wide-g_wide));for i in (crc_wide-g_wide-1) downto 0 loopif d(g_wide)='0' then0);downtor:=d(r_wideelsefor j in r_wide downto 0 loopr(j):=d(j)g(j);xorloop;endend if;d:=r&mm(i);end loop;if d(g_wide)='0' thenr:=d(r_wide downto 0);elsefor j in r_wide downto 0 loopr(j):=d(j) xor g(j);loop;endend if;r_out<=r;第4期 王海光: 并行CRC 算法硬件实现研究与VHDL 设计 55e nd process; end a; 几点说明:1.程序中定义的两个类属参量m_wide 和r_wide 为所说明的环境提供了一个方便快捷的静态信息通道,以利应对大小不同的数据块和选取生成多项式不同的各种使用场合. 根据海明不等式的要求,在设定具体参数值时应满足m_wide+r_wide ≤2r_wide+1-3.2.为确保生成的硬件执行并行的算法思想,本应把信号mm 也置入进程的信号敏感表中,由于m_in 已设为敏感量,且 mm<=m_in&r ,故不影响进程性质.3.由于进程变量仅在进程第一次被激活时才初始化,当进程被挂起或重新激活时,将维持原值,故变量r 应在每次运算时重新清零. 这里采用others =>'0'的清零形式以便r_wide 参量的灵活使用.4.在进程结束前对输出信号赋值以确保电路的组合特征,避免生成时序电路.5 结果测试分析5.1 时序仿真波形图本仿真采用Altera 公司的EDA 工具软件Quartus II 6.0内带的波形仿真器,适配器件采用Cyclone 系列的EPIC12Q240C8. 时序仿真结果如下图3:图3 时序仿真波形图由图3所示的时序仿真波形可知:对输入的有效16进制数据“A ”、“B ”、“C ”、“D ”和“E ”,生成的校验码分别是16进制数“1”、“4”、“5”、“0”和“2”,与CRC 算法预期的结果完全相同. 5.2 综合结果的RTL 原理图打开RTL 观察器可看到如图4所示的生成硬件的RTL 原理图(在优化技术取向速度的情况下生成的). 由图4可见生成的CRC 码发生器是一个典型的由数据选择器构成的组合逻辑电路,输入输出信号之间与公式算法一样是一种实时的对应关系,实现的是一种并行的算法关系,其工作速度的快慢完全取决于所选定的FPGA 芯片的速度等级.表1 当k=4、r=3 G(x)=x 3+x 2+1时的资源使用情况 表2 当k=12、r=5 G(x)=x 5+ x 4+x 2+1时的资源使用情况图4 生成硬件的RTL原理图56 漳州师范学院学报(自然科学版) 2007年5.3 资源使用情况在优化技术取向速度的情况下的资源使用情况如表1所示:为考察当运算数据块加大时硬件开销变化的情况,改取k=12(即数据代码M(x)按12位一组分组),选定生成多项式G(x)=x5+ x4+x2+1,经编译综合,在优化技术依然取向速度的情况下,报告显示的资源使用情况如表2所示. 由表可知:即使采用拼硬件换速度的模式下的优化效果也还令人满意,设计结果占用的硬件资源是很少的.该设计最终以杭州康芯公司GW48系列SOPC/EDA实验开发系统所带的Cyclone系列中的EP1C12Q240C8器件为硬件载体,经下载测试进一步证实了设计运行的可靠性.6 结束语借助EDA工具强大的综合、优化功能,仔细运用VHDL的特点进行并行CRC算法建模从而实现的设计,不仅具备采用公式法设计所具有的优点,还能很好地适用于各种数据块大小不同、生成多项式选取不同的CRC编、解码运用场合,明显减轻设计开发工作量,大幅缩短产品的研发周期。
毕业设计:基于VHDL的循环码编译码器的设计
毕业设计报告(论文)报告(论文)题目:基于VHDL的循环码编译码器的设计作者所在系部:电子工程系作者所在专业:通信工程作者所在班级: B08232作者姓名:作者学号:指导教师姓名:完成时间: 2012年 6月15日北华航天工业学院教务处制本科生毕业设计(论文)原创性及知识产权声明本人郑重声明:所呈交的毕业设计(论文)基于VHDL的循环码编译码器的设计是本人在指导教师的指导下,独立进行研究工作取得的成果。
除文中已经注明引用的内容外,本设计(论文)不含任何其他个人或集体已经发表或撰写过的作品或成果。
对本设计(论文)的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。
因本毕业设计(论文)引起的法律结果完全由本人承担。
本毕业设计(论文)成果归北华航天工业学院所有。
本人遵循北华航天工业学院有关毕业设计(论文)的相关规定,提交毕业设计(论文)的印刷本和电子版本。
本人同意北华航天工业学院有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;可以采用影印、缩印、数字化或其它复制手段保存论文;在不以营利为目的的前提下,可以公布非涉密毕业设计(论文)的部分或全部内容。
特此声明毕业设计(论文)作者:指导教师:年月日年月日摘要在本次设计中,使用Quartus II 7.0为系统开发平台,硬件描述语言VHDL为主要设计手段,以可编程逻辑器件为实现载体,设计方案中,从循环码编译码的原理出发,论证了BCH码编译码系统的设计方案,并利用VHDL语言加以实现。
所设计的系统可以完成BCH码编码以及两位错码的纠错译码。
依据设计方案和设计平台完成了程序编写和程序调试,通过运行程序及时序波形的仿真有效验证了设计的正确性,初步实现了设计目标。
关键词 VHDL BCH码编码器译码器AbstractThis design takes the Quartus II 7.0 as the system development platform, and takes hardware description language VHDL as the main design means. It also uses programmable logic devices for the realization of the carrier。
基于vhdl(7,4)汉明码编解码器的设计说明书
(7,4)汉明码编解码器的设计序言VHDL语言具有功能强大的语言结构,可用明确的代码描述复杂的控制逻辑设计,并且具有多层次的设计描述功能,支持设计库和可重复使用的元件的生成。
近几十年来,EDA技术获得了飞速发展。
它以计算机为平台,根据硬件描述语言VHDL,自动地完成逻辑编译、化简分割、综合及优化,布局布线,仿真直至对特定目标芯片的适配编译,逻辑映射和编程下载等工作。
以自顶向下的设计方法,使硬件设计软件化,摆脱了传统手工设计的众多缺点。
随着EDA技术的深入发展基于硬件描述语言的方法将有取代传统手工设计方法的趋势。
EDA ( Elect ronics Design Automation) 技术是随着集成电路和计算机技术飞速发展应运而生的一种高级、快速、有效的电子设计自动化工具。
目前,VHDL语言已经成为EDA的关键技术之一,VHDL 是一种全方位的硬件描述语言,具有极强的描述能力,能支持系统行为级、寄存器传输级和逻辑门级三个不同层次的设计,支持结构、数据流、行为三种描述形式的混合描述,覆盖面广,抽象能力强,因此在实际应用中越来越广泛。
汉明码是在原编码的基础上附加一部分代码,使其满足纠错码的条件。
它属于线性分组码,由于汉明码的抗干扰能力较强,至今仍是应用比较广泛的一类码。
本文用VHDL语言实现了(7,4)汉明码的编码和译码,并通过实例来说明利用VHDL语言实现数字系统的过程。
在介绍(7,4)汉明码编码和译码原理的基础上,设计出了(7,4)汉明码的编码器和译码器,写出了基于VHDL实现的源程序,并通过QUARTUSⅡ软件进行仿真验证。
第1章QuartusⅡ与VHDL简介1.1 QuartusⅡ软件简介QuartusⅡ是Altera公司推出的CPLD/FPGA的开发工具,QuartusⅡ提供了完全集成且与电路结构无关的开发环境,具有数字逻辑设计的全部特性。
?/P>Quartus Ⅱ设计软件提供完整的多平台设计环境,可以很轻松地满足特定设计的需要。
CRC算法原理及其Verilog实现
CRC算法原理及其Verilog实现⼀.CRC简介CRC校验是⼀种在数据通信系统和其它串⾏传输系统中⼴泛使⽤的错误检测⼿段。
通⽤的CRC标准有CRC-8、CRC-16、CRC-32、CRC-CCIT,其中在⽹络通信系统中应⽤最⼴泛的是CRC-32标准。
本⽂将以CRC-32为例,说明CRC编码的实现⽅式以及如何⽤verilog语⾔对CRC编码进⾏描述。
⼆.模2运算在说明CRC编码⽅式之前,⾸先介绍⼀下模2运算法则,在CRC运算过程中会使⽤到模2除法运算。
模2运算是⼀种⼆进制运算法则,与四则运算相同,模2运算也包括模2加、模2减、模2乘、模2除四种运算。
模2运算⽤“+”表⽰加法运算,⽤“-”、“×”或“.”、“/”分别表⽰减法、乘法和除法运算。
与普通四则运算法则不同的是,模2加法是不带进位的⼆进制加法运算,模2减法是不带借位的⼆进制减法运算。
同时,模2乘法在累加中间结果时采⽤的是模2加法运算;模2除法求商过程中余数减除数采⽤的是模2减法运算。
因此,两个⼆进制数进⾏模2加减法运算时,相当于两个⼆进制数进⾏按位异或运算,每⼀位的结果只与两个数的当前位有关。
模2除法在确定商时,与普通⼆进制除法也略有区别。
普通⼆进制除法中,当余数⼩于除数时,当前位的商为0,当余数⼤于等于除数时,当前位的商为1。
模2除法在确定当前位的商时,只关⼼余数的⾸位,⾸位为1则商为1,⾸位为0则商为0。
1.模2加法的定义:0+0=0,0+1=1,1+0=1,1+1=0。
举例如下:1010+0110=1100。
2.模2减法的定义:0-0=0,0-1=1,1-0=1,1-1=0。
举例如下:1010-0110=1100。
3.模2乘法的定义:0×0=0,0×1=0,1×0=0,1×1=1。
举例如下:1011×101=100111列竖式计算:1011× 101——————101100001011——————100111其中横线之间的累加过程,采⽤的是2进制加法,不进位。
Verilog语言实现并行(循环冗余码)CRC校验
Verilog语⾔实现并⾏(循环冗余码)CRC校验1 前⾔(1)什么是CRC校验?CRC即循环冗余校验码:是数据通信领域中最常⽤的⼀种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。
循环冗余检查(CRC)是⼀种数据传输检错功能,对数据进⾏多项式计算,并将得到的结果附在帧的后⾯,接收设备也执⾏类似的算法,以保证数据传输的正确性和完整性。
LFSR计算CRC,可以⽤多项式G(x)表⽰,G(x) = X16+X12+X5+1模型可如下图所⽰。
(2)校验原理其根本思想就是先在要发送的帧后⾯附加⼀个数(这个就是⽤来校验的校验码,但要注意,这⾥的数也是⼆进制序列的,下同),⽣成⼀个新帧发送给接收端。
当然,这个附加的数不是随意的,它要使所⽣成的新帧能与发送端和接收端共同选定的某个特定数整除(注意,这⾥不是直接采⽤⼆进制除法,⽽是采⽤⼀种称之为“模2除法”)。
到达接收端后,再把接收到的新帧除以(同样采⽤“模2除法”)这个选定的除数。
因为在发送端发送数据帧之前就已通过附加⼀个数,做了“去余”处理(也就已经能整除了),所以结果应该是没有余数。
如果有余数,则表明该帧在传输过程中出现了差错。
要校验的数据加上此数据计算出来的crc组成新的数据帧,如下图所⽰。
模2除法:模2除法与算术除法类似,但每⼀位除的结果不影响其它位,即不向上⼀位借位,所以实际上就是异或。
在循环冗余校验码(CRC)的计算中有应⽤到模2除法。
(3)步骤CRC校验中有两个关键点,⼀是预先确定⼀个发送送端和接收端都⽤来作为除数的⼆进制⽐特串(或多项式),可以随机选择,也可以使⽤国际标准,但是最⾼位和最低位必须为1;⼆是把原始帧与上⾯计算出的除数进⾏模2除法运算,计算出CRC码。
1. 选择合适的除数2. 看选定除数的⼆进制位数,然后再要发送的数据帧上⾯加上这个位数-1位的0,然后⽤新⽣成的帧以模2除法的⽅式除上⾯的除数,得到的余数就是该帧的CRC校验码。
CRC16校验码移位算法及VHDL实现
) + 而
( 1 )
【 关键词】C R C校 验 移位 C R C I 6 V H D L
字系统设计 中己被广泛使用 。用硬件描述语言 ( VHDL) 实 现 C RC校 验 码 的 计 算 , 然 后 下 载到 F P GA 芯 片 中 , 硬 件 实 现 C RC校 验 , 与 软件实现相 比,对数据的传输速度影响较小 。 本文介绍一种 CR C1 6 校验码串行产生的方法 , 并给出了其 V HDL实现及仿真分析。
< <上 接 1 8 8页
( 4 )信 息查询 :可以查询患 者近期 的身 体状况和处方情况 。 1 _ 3 . 2中心数据端和监控端
数 据 服 务 器 结 构 如 图 6所 示 , 主 要 有 数 卫 星 链 路 发 送 到 北 斗 中 心 主 站 :北 斗 用 户 终 端 本 课 题 针 对 医 疗 改 革 中 出 现 的 问题 ,结 合
C RC 8 、C RC1 6和 C RC 3 2等 。计算 CR C校 验 码可 以用 串行和并行 的方法实现 。串行实现 电 1 C R C 校验原理 路结构简单 ,但 比较耗时 ,位数越多越费时。 在发送 方要 发送 的 K 位数据 码后 ,以一 并 行实 现 电路 结 构复 杂,但 节省 时间。本 文 定的规则产生 一个 r 位用 于校验的监督码 ,附 介 绍一种采 用 C R C1 6生成 多项 式 串行 移位产 加在原数据后面 ,构成 的信 息码 为 n = k + r 位, 生校 验码 的计算过程 。生成 多项式为 G ( x ) 因此 ,这种 编码 又 叫 ( n , k ) 码 。 接 收 方 根 据 = g l 6 x + g l 5 X ” + ……+ g l x + g o ,在实际使用中, 通 信 双 方 约 定 的 规 则 进 行 校 验 ,确 定 数 据 是 否 并 不 需要 考 虑 最 高 位 ,它 总 是 被 舍 弃 的 ,因 此 出错。这个规则即 “ 生 成 多 项 式 ” 。K 位 数 据 只要 考虑余 下 l 6个 数据位 。在 串行通信 中实 码表 示 为 M ( x ) , 选 择 合 适 的 CR C 生 成 多 现移位计算 C RC1 6 校验码的原理如图 1 所示。 项式 G ( x ) , G( x )的最高次幂为 r 。 把M ( x ) 图 l中0 为乘法 ,0为异或。
2-循环冗余码校验及VHDL实现
循环冗余码校验及VHDL 实现摘 要 在数据通信系统中,为确保数据传输的正确,通常都有差错检测控制机制。
循环冗余校验CRC(Cyclic Redundancy Check) 由于编码简单得到了广泛应用。
介绍了CRC 算法原理,详细分析了CRC 码的检错原理,推导了CRC 的编码与译码过程,并给出了实现CRC 的逻辑原理图和VHDL 设计及仿真结果。
关键词 检错 循环冗余校验 VHDL 设计1 数据通信中的差错检测数据通信是依照一定的协议,利用数据传输技术在两个终端之间传递数据信息的一 种通信方式。
数据通信中传递的信息均以二进制数据形式来表现。
因此数据通信中可以通过一定的算法检测在传输过程中是否发生差错,以保证传递数据的完整性。
常用的检测技术有奇偶校验(Parity Check),和校验(Sum Check)和循环冗余码校验(Cyclic Redundancy Check ,以下简称CRC)。
它们都是发送端对消息按照某种算法计算出校验码,然后将校验码和消息一起发送到接收端。
接收端对接收到的消息按照相同算法得出校验码,再与接收到的校验码比较,以判断接收到消息是否正确。
奇偶校验只需要1位校验码,其计算方法也很简单。
以奇检验为例,发送端只需要对所有消息位进行异或运算,得出的值如果是0(即所有消息位共有偶数个1),则校验码为1,否则为0。
接收端可以对消息进行相同计算,然后比较校验码。
也可以对消息连同校验码一起计算,若值是0则有差错,否则校验通过。
奇偶校验可以检测出任何奇数个位的差错。
和校验是将传输的消息当成若干个8位(或16、32位)的整数序列,将这些整数加起来而得出校验码,该校验码也叫校验和。
接收端将自己计算的校验和与收到的校验和进行比较,若一致则校验通过。
显然,奇偶校验与和校验都有明显的不足。
奇偶校验不能检测出偶数个位的差错。
对于和校验,如果若干个整数序列中有两个错,一个增加了一定的值,另一个刚好减小了相同的值,则这种差错就检测不出来。
串行和并行CRC架构及VHDL代码实现
CRC_VHDL_Summary1.CRC VHDL code and testbench;1.1 architecture of CRC_5(110101)Figure. 1. P(x)=X5+X4+X2+1 (i.e. 110101)1.2 CRC_5 Component--**************************************************--CRC生成多项式为P(x)= X5+X4+X2+1(即110101)--**************************************************library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;--**************************************************entity crc_5 isport(rst : in std_logic;clk : in std_logic;din : in std_logic;crc_en: in std_logic; --其高电平要一直持续到din输入完毕; 在crc_en信号由低变高后,din刚开始输入的“0”值都不会影响寄存器的输出(因为寄存器的初始值全为零,而两个零之间的异或运算还是零);一直到din的输入变为“1”值,此后,din输入的“0”和“1”值都会影响寄存器的输出。
dout : out std_logic);end crc_5;--**************************************************architecture a of crc_5 issignal shift_reg : std_logic_vector(4 downto 0);beginprocess(rst,clk)beginif(rst='1') thenshift_reg<=(others=>'0');elsif clk'event and clk='1' thenif crc_en='1' thenshift_reg(0)<=shift_reg(4) xor din;shift_reg(1)<=shift_reg(0);shift_reg(2)<=shift_reg(4) xor din xor shift_reg(1);shift_reg(3)<=shift_reg(2);shift_reg(4)<=shift_reg(4) xor din xor shift_reg(3);elseshift_reg<=shift_reg(3 downto 0)&'0';dout<=shift_reg(4);end if;end if;end process;end a;--**************************************************1.3 CRC_5 Testbench----------------------------------------testbench.vhd------------------------------------------------------------- library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity testbench isend testbench;architecture mtest of testbench iscomponent crc_5 isport(rst : in std_logic;clk : in std_logic;din : in std_logic;crc_en: in std_logic; --其高电平要一直持续到din输入完毕dout : out std_logic_vector(4 downto 0));end component;signal rst :std_logic;signal clk :std_logic:='0';signal din :std_logic;signal crc_en:std_logic; --其高电平要一直持续到din输入完毕signal dout :std_logic_vector(4 downto 0);constant clkpd:time:=20 ns;beginclk<=not clk after clkpd/2;crc_5_0:crc_5 port map(rst=>rst,clk=>clk, din=>din,crc_en=>crc_en,dout=>dout);processbeginrst<='1';din<='0';crc_en<='0';wait for 40 ns;rst<='0';wait for 30 ns;crc_en<='1';wait for 30 ns;din<='1';wait for 40 ns;din<='0';wait for 40 ns;din<='1';wait for 40 ns;crc_en<='0';wait;end process;end mtest;1.4 CRC_5 Test ResultsThe input data is “110011”, the final result is “10100”;2.New architecture of CRC [1]Figure 2. Architecture 1 of CRCFigure 3. Architecture 2 of CRC 3.Parallel CRC ArchitectureParallelFigure 1. General Parallel CRC Architecture3.1LFSR Architecture 1 and its corresponding coefficient matrix F 3.1.1 Architecture of LFSR 1ParallelFigure 2. Serial CRC Architecture 图中,红色的线代表有效的数据传输通道。
基于单片机的CRC编解码器设计
第一章绪论1.1 研究背景及意义在当今信息社会,单片机在计算机的网络通讯与数据传输、工业自动化过程的实时控制和数据处理等都有广泛的应用,它已经渗透到人们生产生活的各个领域。
而利用单片机进行数据通讯的控制应用得越来越广泛。
于此同时,人们对信息传递的要求逐渐提高,使得通信传输过程中,可靠性和有效性这对矛盾日益凸显。
随着对有效性不断提高,每个码元所占的时间越来越短,由于传输距离、现场状况等诸多因素的影响 ,设备(通常为嵌入单片机 )之间的通讯数据常会发生无法预测的错误。
为了防止错误所带来的影响 ,在数据的接收端必须保证其可靠性。
但由于数据在一个有干扰的环境中进行传输,任何数据中的任何信息包括确认信息都是不可靠的。
这里举一个红军和蓝军通信联合进攻山下的敌军的经典案例:第一天红军发了条信息要蓝军第二天一起进攻,蓝军收到之后,发一条确认信息,但是蓝军担心的是“确认信息”如果也不可靠而没有成功到达红军那里,那自己不是很危险?于是红军再发一条“对确认的确认信息”,但同样的问题还是不能解决,红军仍然不敢贸然行动。
对通信的可靠性检查就需要“校验”,校验是从数据本身进行检查,它依靠某种数学上约定的形式进行检查,校验的结果是可靠或不可靠,如果可靠就对数据进行处理,如果不可靠,就丢弃重发或者进行修复。
数据在向单片机或其它设备进行输入时,容易产生输入错误,为了减少输入错误,编码专家发明了各种校验检错方法,并依据这些方法设置了校验码。
凡设有校验码的信息码,是由本体码与校验码两部分组成(如组织机构代码),本体码是表示编码对象的号码,校验码则是附加在本体码后边,用来校验本体码在输入过程中准确性的号码。
每一个本体码只能有一个校验码,校验码通过规定的数学关系得到。
校验码的校验原理是:系统内部预先设置根据校验方法所导出的校验公式编制成的校验程序,当带有校验码的代码输入系统时,系统利用校验程序对输入的本体码进行运算得出校验结果之后,再将校验结果与输入代码的校验码进行对比来检测输入的正确与否。
用VHDL设计CRC发生器和校验器
用VHDL 设计CRC 发生器和校验器□井海明,高占凤(石家庄铁道学院,河北石家庄050043)摘 要:用VH D L 设计了一个在数字传输中常用的校验、纠错模块———循环冗余校验CRC 模块,完成数据传输中的差错控制。
通过时序仿真波形可看出,当输入12位信息位时,通过CRC 发生器和校验器,可得到准确的输出。
关键词:VH D L ;数字传输;差错控制;CRC 中图分类号:T N941.1 文献标识码:B 文章编号:1007-7022(2004)03-0060-02The Design of G enerator and Checker of CRC using VH DL□J I NG Hai 2ming ,G AO Zhan 2feng(Shijiazhuang Railway Institute ,Hebei Shijiazhuang 050043,China )Abstract :We design the checking and correcting m odule which is used frequently in digital transmission ,namely ,CRC m odule.It aims at accom plishing the error control from the simulation waveform ,when inputing 12effective information ,we can achieve exact output.K ey w ords :VH D L ;digital transmission ;error control ;CRC1 CRC 原理简介数字通信要求传输过程中所造成的数码差错足够低。
引起传输差错的根本原因是信道内存在噪声及信道传输特性不理想造成的码间串扰,为了减少误码率,必须进行差错检验,通常采用奇偶校验码、循环冗余等抗干扰编码来进行差错控制,如发现错误,请求重发,直到接到正确的码字为止。
VHDL的CRC校验——数字电路课程设计
数字电路课程设计题目CRC校验班级实验二班学号姓名时间第十五、十六周地点科A-304指导陈学英李尚泽【摘要】:根据CRC校验原理,在发送端对原始数据生成CRC校验位,并按照RS-232的传输协议组帧,在接收端对RS-232传输帧格式进行解析,并完成CRC校验。
整个过程在Modelsim上仿真实现。
【目录】:第一章、实验任务及原理第二章、设计思路方法及方案第三章、FPGA模块程序设计与仿真第四章、结束语【正文】【第一章】:实验任务及原理、任务指标、功能需求、原理阐述任务:发送端对原始数据生成CRC 校验位,并按照RS-232的传输协议组帧,在接收端对RS-232传输帧格式进行解析,并完成CRC 校验。
整个过程在Modelsim 上仿真实现。
CRC 校验原理:生成CRC 校验码的基本原理:任意一个由二进制位串组成的代码都可以和一个系数仅为‘0’或‘1’的多项式一一对应,例如‘1010111’对应的多项式为6421x x x x ++++。
CRC 码集选择的原则:若设码字长度为N ,信息字段长度为K ,校验字段长度为R ,则N=K+R ;对于CRC 码集中的任一码字,存在且仅存在一个R 次多项式g(x)使得:()()()()()R V x A x g x x m x r x ==+其中m(x)为K 次信息多项式,r(x)为R-1次校验多项式,g(x)称为生成多项式。
V(x)为发送的信息加码字多项式。
2012()...RR g x g g x g x g x =++++发送方通过指定的g(x)产生CRC 码字,接收方则通过g(x)来验证CRC 码字,若传输码字多项式V(x)能除尽g(x),则传输正确。
【第二章】:设计思路方法及方案、系统功能需求分析、方案确定及框图结构说明本实验采用如图1所示的结构实现CRC 的编解码。
本实验使用CRC-CCITT 标准进行仿真,其生成多项式为:16125()1g x x x x =+++1CRC 编码采用如图2所示的结构实现。
CRC16校验码移位算法及VHDL实现
CRC16校验码移位算法及VHDL实现作者:王玉玲王燕锋来源:《电子技术与软件工程》2017年第07期摘要在数据输出过程中,为保证数据的可靠性,通常会在数据的末尾加上校验信息。
CRC校验技术编码和解码过程简单,纠错能力强,被广泛应用于通信领域。
本文介绍一种移位产生CRC校验码的方法,并给出了其VHDL实现及仿真分析。
【关键词】CRC 校验移位 CRC16 VHDL在数据传输过程中,由于信道干扰,往往使得发送和接收的数据不一致。
为了降低误码率,保证传输数据的可靠性,通常会改进信道的传输质量或在传输的数据中加入校验信息。
在各种校验方法中,循环冗余校验CRC(CyclicRedundancy Check)是一种最常用的方法。
CRC 校验技术是一种十分有效的数据传输错误检测技术,由于其编码和解码过程简单,检错和纠错能力强,广泛应用于通信领域用于实现差错控制。
串行通信普遍应用于工业通信控制领域,如何提高数据的传输可靠性尤为重要,现有的串口在数据传输过程中加入CRC校验可提高数据传输的可靠性。
普通串行口不自带CRC校验功能,大多数应用中都是通过软件编程计算CRC 码后再附加在数据末尾传输的,由于软件执行耗费时间长,影响数据的传输速度。
现场可编程门阵列FPGA (Field-Programmable Gate Array)在数字系统设计中已被广泛使用。
用硬件描述语言(VHDL)实现CRC校验码的计算,然后下载到FPGA芯片中,硬件实现CRC校验,与软件实现相比,对数据的传输速度影响较小。
本文介绍一种CRC16校验码串行产生的方法,并给出了其VHDL实现及仿真分析。
1 CRC校验原理在发送方要发送的K位数据码后,以一定的规则产生一个r位用于校验的监督码,附加在原数据后面,构成的信息码为n=k+r位,因此,这种编码又叫(n,k)码。
接收方根据通信双方约定的规则进行校验,确定数据是否出错。
这个规则即“生成多项式”。
CRC校验码编码实验
实验四CRC校验码编码实验班级:电子C073 姓名:赵宣学号:075584一、实验目的1、复习C++语言基本编写方法,熟悉面向对象编程方法。
2、学习CRC编码基本流程, 学会调试循环冗余校验码编码程序。
3、根据给出资料,掌握CRC校验码的编码原理,重点掌握按字节(Byte)编码方法二、实验内容与原理(一)实验原理:1. CRC 校验码介绍CRC 校验的基本思想是利用线性编码理论,在发送端根据要传送的k 位二进制码序列,以一定的规则产生一个校验用的监督码(CRC 码)r 位,并附在信息后边,构成一个新的二进制码序列数共 (k+r) 位,最后发送出去。
在接收端,则根据信息码和CRC 码之间所遵循的规则进行检验,以确定传送中是否出错。
16 位的CRC 码产生的规则是先将要发送的二进制序列数左移16 位(乘以216)后,再除以一个多项式,最后所得到的余数既是CRC 码。
求CRC 码所采用模2 加减运算法则,既是不带进位和借位的按位加减,这种加减运算实际上就是逻辑上的异或运算,加法和减法等价,乘法和除法运算与普通代数式的乘除法运算是一样,符合同样的规律。
接收方将接收到的二进制序列数(包括信息码和CRC 码)除以多项式,如果余数为0,则说明传输中无错误发生,否则说明传输有误。
2.按位计算CRC一个二进制序列数可以表示为求此二进制序列数的CRC 码时,先乘以216后(左移16位),再除以多项式G(X) ,所得的余数就是所要求的CRC 码。
可以设:其中Q n (X) 为整数, R n (X) 为16位二进制余数,将上式代入前式得:再设:其中Qn-1(X) 为整数, Rn-1(X) 为16位二进制余数,继续代入前式,多次迭代得到:根据CRC 的定义,很显然,十六位二进制数R0(X) 即是要求的CRC 码。
3.按字节计算CRC对于一个二进制序列数可以按字节表示为下式,其中Bn(X) 为一个字节(共8位):求此二进制序列数的CRC码时,先乘以216后(左移16位),再除以多项式G(X),所得的余数即是所要求的CRC 码。
基于VHDL语言的CRC信道编解码电路设计与实现
0 引言
衡量数字通信系统的一个重要指标是误码率,它关系到 通信系统的通信质量,低的误码率就意味着很好的通信质 量。因此,如何降低误码率一直是通信系统设计首先要考虑 的头等大事。通信过程中产生的误码原因主要是由于传输过 程中信道的变化及噪声加入的结果,因此可以在信号传输前 进行信道编码,增加信号的冗余度;在接收端进行纠错检错 减少噪声的影响,从而尽可能的恢复原始信号,达到减少误 码的目的。循环冗余校验码(CRC)就是具有这种强检错功 能的技术,由于它的高效率、高性能,实现起来相对简单, 在 LAN、MODEM 等数字信息传送技术和 ARJ、PKZIP 等数据压 缩和解压缩技术中,CRC 被广泛采用作为检验手段,效果显 著。其中具有 16 个冗余比特的 CRC 编码进入了多个国际通 信标准。研究 CRC 码的实现具有实际意义。
1 CRC 码的原理
一个由若干个“0”或“1”组成 n 位二进制数可以表示 成为( n -1)阶的多项式的各项系数,也就是说,一个 n 位二 进制数可以用( n -1)阶多项式表示。一个8位二进制数可以用
一个7阶二进制码多项式表示[1],例如11000001 可表示为: B ( X) = 1 X7 + 1 X6 + 0 X5 + 0 X4+ 0 X 3+ 0 X 2 + 0 X1+ 1 X 0=
始信息位后添 r 个0后的数据除以生成多项式对应的二进制 数,所得余数即是校验位。
2.2 解码电路的设计思想 一个合法的CRC码的多项式,它应该能被 G(X ) 整除。据
此,现对一个位长为 n 的数据段(可能不是一合法CRC码), 其多项式除以 G(X ) ,若其余数为零,说明该码字是合法的,
12CRC编解码实验
实验二 CRC (循环冗余校验码)编解码实验一、实验目的1、掌握CRC 码的编解码原理。
2、掌握CRC 码的软件仿真方法。
3、掌握CRC 码的硬件仿真方法。
4、掌握CRC 码的硬件设计方法。
二、预习要求1、掌握CRC 码的编解码原理和方法。
2、熟悉matlab 的应用和仿真方法。
3、熟悉Quatus 的应用和FPGA 的开发方法。
三、实验原理CRC 码是一种循环码,有着极强的检错能力,在计算机通信和移动通信种广为应用。
定义变量m(x)为信息码元;T(x)为编码码组;g(x)为生成多项式。
CRC 码的编码步骤如下:(1) 用n k x - 乘m(x)。
这一运算实际上就是把信息码后附加上(n-k)个“0”。
例如,信息码为110,它相当m(x)=2x x +。
当n-k=7-3=4时,4265()()n k x m x x x x x x -=+=+,相当于1100000。
(2) 用g(x)除()n k x m x -,得到商Q(x)和余式r(x),即()()()()()n kxm x r x Q x g x g x -=+例如,若选定42()1g x x x x =+++,则65224242()1(1)()11n kxm x x xx xx g x xx x xxx -++==+++++++++相当于11000001011111011110111=+(3)编码码组T(x)为:()()()n kT x x m x r x -=+在上例中,T(x)=1100000+101=1100101。
上述几个步骤用硬件实现时,可以由除法电路来实现。
除法电路的主体由一些移位寄存器和模2加法器组成。
例如,上述(7,3)循环码的编码器组成如下图所示。
图 1 (7,3)循环码编码器图1中有四级移存器,分别用a,b,c,d 表示。
另外有一单刀双掷开关S 。
当信息位输入时,开关S 倒向下,输入信息码一方面送入除法器进行运算,另一方面直接输出。
CRC冗余校验编解码及FPGA实现
郑州轻工业学院毕业设计论文题目: CRC冗余校验编码与解码的FPGA实现姓名:院(系):电气信息工程学院专业班级:电子信息工程11-1学号:指导教师:成绩:时间:2015年5月16日至2015年6月20日课程设计成绩评定表评定项目内容满分评分总分学习态度学习认真,态度端正,遵守纪律。
10答疑和设计情况认真查阅资料,勤学好问,提出的问题有一定的深度,分析解决问题的能力较强。
40说明书质量设计方案正确、表达清楚;设计思路、实验(论证)方法科学合理;达到课程设计任务书规定的要求;图、表、文字表达准确规范,上交及时。
40回答问题情况回答问题准确,基本概念清楚,有理有据,有一定深度。
10总成绩采用五级分制:优、良、中、及格、不及格指导教师评语:签名:年月日郑州轻工业学院课程设计任务书题目 CRC冗余校验编码与解码的FPGA实现专业、班级电信1班主要内容、基本要求、主要参考资料等:利用所学过的通信原理中的纠错码的基础知识,利用硬件编程语言VHDL或者Verilog-HDL实现CRC冗余校验编码与解码的FPGA的设计。
给出完成控制电路所需要的设计模块;给出硬件编程语言的实现,并进行仿真;给出下载电路的设计,设计为2种下载方法,其中一种必须为JTAG;6个人可选择3组不同的校验码来进行编解码的设计,同时设计者报告不允许雷同。
参考资料:1、潘松、黄继业《EDA技术及其应用》(第四版)科学出版社 20092、樊昌信《通信原理》电子出版社完成期限:指导教师签名:课程负责人签名:年月日1 引言 (2)1.1 设计任务 (2)2 CRC的特征和生成原理 (3)2.1 常见标准CRC (3)2.2 CRC码集选择原则 (3)2.3 CRC基本原理 (4)3 CRC算法和功能简介 (5)3.1 算法简介 (5)3.1.1 比特型算法 (5)3.1.2 查表型算法 (5)3.1.3 模2算法 (6)3.2 功能模块的设计与实现 (7)3.2.1 模2除法器的设计与实现 (7)3.2.2 移位寄存器的设计与实现 (7)4 CRC模块实现及分析 (8)4.1 CRC生成模块和校验模块的设计 (8)4.2 生成模块设计 (8)4.3 校验模块设计 (9)4.4 顶层设计 (10)5 CRC硬件实现 (11)5.1 利用Quartus II调试 (11)5.2 硬件电路的实现 (12)5.3 下载电路 (12)5.3.1 AS简介: (13)5.3.2 JTAG模式简介 (14)总结体会 (15)参考文献 (16)附录 (17)数字通信要求传输过程中所造成的数字差错足够低。
基于VHDL语言的CRC加卷积编码系统
1
CRC 加卷积编码系统原理
在 GSM 和 CDMA 系统中, 话音信息、 控制信
息和同步信息在传输过程中都使用了 CRC 码[ 1] . 其中 GSM 同步信道所使用的 CRC 循环编+ x 5 + x 6 + x 8 + x 10 . 其原理框图如图 1 所示. 最后输出的码元序列总共 35 位, 前 25 位为输 入的信息 码元, 其 余 10 位是 CRC 编码, 即从 10 个寄存器中依次输出的码元 . 卷积码在 GSM 系统中应用广泛, 例如全速率 业务信道和控制信道就采用了 ( 2, 1, 4) 卷积编码, 而 CDMA 前向和反向信道都采用了 ( 2, 1, 9) 卷积 码. 本次设计中 , 将采用( 2, 1, 4) 卷积编码 , 即输入码元数为 1, 输出码元数为 2, 编码器的寄存器数为 4. 该卷 积编码器生成多项式的原理框图如图 2 所示 , 生成多项式为 g 1 ( x ) = 1+ x + x , g 2 ( x ) = 1+ x + x + x . 图 2 中, 每个编号的方框都代表一个存放二进制码元的寄存器. 从 CRC 编码器输出的 35 位码元 , 经过 上半部分的编码以后输出 39 位, 经过下半部分的编码以后输出也是 39 位 . 选择输出 轮流从上半部分和下 半部分输出生成的码元, 因此 , 经过卷积编码输出的信息码元总共为 78 位 ( 39+ 39= 78) .
keywordscrccyclicredundancycheckconvolutionencoding责任编辑内蒙古师范大学学报自然科学汉文版荣获中国北方十佳期刊奖为了展示中国北方期刊出版业取得的成就发挥优秀期刊在出版中的示范作用进一步推动北方期刊出版事业繁荣发展由中国期刊协会和北京天津河北山西内蒙古辽宁吉林黑龙江甘肃青海宁夏等中国北方11个省自治区直辖市新闻出版局期刊协会联合主办的中国北方优秀期刊评选活动在辽宁省沈阳市举行
基于vhdl卷积码编解码器的设计说明书
长沙理工大学《通信电路EDA》课程项目报告系别水利计通系专业通信工程班级通信1003班指导教师项目组组长学号项目组成员学号项目组成员学号项目组成员学号完成日期2012年11月14日目录1 引言 (3)1.1项目背景 (3)2 卷积码编解码器的结构概述 (4)2.1 卷积码编码器的结构 (4)2.2 卷积译码器的结构 (4)3 卷积码编解码器的VHDL 设计 (5)3.1 VHDL 设计的优点与设计方法 (5)3.2 卷积码编码器的VHDL 实现 (5)3.2.1 卷积编码器顶层建模的VHDL 描述 (5)3.2.2 用MAX+PLUSⅡ编译后生成的编码器图形符号 (7)3.2.3 卷积编码器VHDL仿真波形 (7)3.3 卷积码解码器的VHDL实现 (7)3.3.1 卷积解码器顶层建模的VHDL 描述 (7)3.3.2 用MAX+PLUSⅡ编译后生成的解码器图形符号 (9)3.3.3 卷积解码器VHDL仿真波形 (9)4 参考文献 (9)5 后记 (10)基于VHDL的卷积码编解码器的设计1 引言1.1项目背景现代数字通信有两个基本的理论基础,即信息论和纠错编码理论,它们几乎是同时在第二次世界大战结束后不久诞生的。
前者首先由Shannon以他的不朽名著“通信的数学理论”为标志建立起来的,而后者则以Hamming的经典著作“纠错和检错编码”为代表。
Shannon信息论主要讨论信息的度量,以及对于信息表示和信息传输的基本限制。
信道编码定理告诉我们,只要信息传输速率小于信道容量,则信息传输可以以任何小的错误概率进行。
但是,Shannon信息论并没有告诉我们如何去实现这一点。
Hanmming提出的纠错编码理论正是为了解决这个问题。
科学技术的发展使人类跨入了高度发展的信息化时代。
在政治、军事、经济等各个领域,信息的重要性不言而喻,有关信息理论的研究正越来越受到重视。
20世纪50年代信息论在学术界引起了巨大的反响。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
摘要循环冗余校验码是一种广泛应用检错编码,本设计以Max Plus II为开发平台利用VHDL语言完成了CRC编解码设计。
设计采用了模块化的方法,给出了CRC 编解码的结构框图和部分仿真结果,结果表明该系统的设计方案正确。
关键词:VHDL;循环冗余校验(CRC);检错ABSTRACTCyclic redundancy check code is a widely used error detection code, the design of the Max Plus II development platform for the completion of the CRC using VHDL language codec design. Design uses a modular approach, given the structure of CRC decoding block diagram and some simulation results, the results show that the system is designed correctly.Key words: VHDL; Cyclic redundancy check (CRC);Error detection目录摘要 (I)ABSTRACT (I)第1章引言 (1)1.1 概述 (1)1.2 内容概要 (3)第2章 CRC编解码理论 (4)2.1纠错编码的基本原理 (4)2.2 模2运算原理 (6)2.3 CRC分类 (7)2.3.1 标准的CRC (8)2.3.2 非标准的CRC (8)2.4 循环码理论基础 (8)2.5循环码编码方法 (10)2.5.1 CRC产生操作过程 (11)2.6循环码解码方法 (11)2.6.1 CRC解码操作过程 (12)第3章方案设计 (13)3.1 实现方案分析 (13)3.1.1 查表法实现方案分析 (13)3.1.2逐位运算法实现方案分析 (14)3.1.3 现实需求分析 (15)3.2 系统硬件设计 (16)3.2.1 电源模块 (17)3.2.2 时钟模块 (17)3.2.3 调试测试接口 (18)3.2.4 复位电路设计 (18)3.3 设计工具及开发流程 (19)第4章程序模块设计及仿真 (20)4.1 程序设计与仿真 (20)4.1.1 编码模块设计与仿真 (21)4.1.2 解码模块设计与仿真 (23)4.1.3 循环冗余码编码模块与解码模块联合运行 (25)第5章结束语 (27)致谢 (28)参考文献 (29)附录A (30)附录B (32)2第1章引言1.1 概述通信,指人与人或人与自然之间通过某种行为或媒介进行的信息交流与传递,从广义上指需要信息的双方或多方在不违背各自意愿的情况下无论采用何种方法,使用何种媒质,将信息从某方准确安全传送到另方。
模拟通信是利用正弦波的幅度、频率或相位的变化,或者利用脉冲的幅度、宽度或位置变化来模拟原始信号,以达到通信的目的。
图1-1模拟通信系统模型数字通信是用数字信号作为载体来传输消息,或用数字信号对载波进行数字调制后再传输的通信方式。
它可传输电报、数字数据等数字信号,也可传输经过数字化处理的语声和图像等模拟信号。
图1-2数字通信系统模型与模拟数据通信相比较,数字数据通信具有下列优点:●数字技术的发展较模拟技术更快,数字设备通过集成电路很容易实现,并与计算机相结合,而由于超大规模集成电路技术的迅速发展,数字设备的体积与成本的下降速度大大超过模拟设备,性能价格比高;●来自视频、声音和其他信息源的各类数据均可统一为数字信号的形式,并通过数字通信系统传输;●在长距离数字通信中可以通过中继器放大和整形来保证数字信号的完整性而不累积噪音;- 1 -●以数据帧为单位传输数据,并通过检错编码和重发数据帧来发现与纠正通信错误,从而有效保证通信的可靠性;●使用加密技术可有效增强通信的安全性;●多路光纤技术的发展大大提高了数字通信的效率。
“信息社会”“信息经济”等名称越来越多的出现在我们的生活中,生活离不开信息,随着社会生产的发展,科学技术的进步,人们对传输信息的要求急剧增加.到了20世纪20年代,如何提高传递信息的能力和可靠性已成为普遍重视的课题,在传输过程中发生错误后能在收端自行发现或纠正的码。
数字信号在传输过程中,由于受到干扰的影响,码元波形变坏。
接收端收到后可能发生错误的判决。
由于乘性干扰引起的码间串扰,可以采用均衡的办法纠正.而加性的影响则需要用其他的办法解决。
在设计数字数字通信系统时,应该首先从合理选择调制制度,解调方法以及发生功率等方面考虑,使加性干扰不足以影响达到误码率的要求,在仍不能满足要求是,就要考虑采用查错控制措施了。
一些通用的系统,其误码率要求因用途而异,也可以把查错控制作为附加手段,在需要时加用。
从查错控制角度看,按照加性干扰引起的错码分布规律的不同,信道可以分为三类。
即随机信道、突发信道和混合信道。
在随机信道中,错码的出现是随机的,而且错码之间的统计是独立的。
在突发信道中,错码是成串集中出现的,即在一些短促的时间段内会出现大量错码,而在这些短促的时间段之间存在较长的无错码区间。
查错控制技术主要有以下四种:检错重发:在发生码元序列中加入差错控制码元,接收端利用这些码元检测到有码元时,利用反相信道通知发送端,要求发送端重发,直到正确接收为止。
所谓检测到有码错,是指在一组接收码元中知道有一个或一些错码,但是不知道该错码该如何纠正。
采用检错重发技术时,通信系统需要有双向信道传送重发指令。
前向纠错:前向纠错一般简称FEC(Forward Error Correction)。
这时接收端利用发送端在发送码元序列中加入的差错控制码元,不但能够发现错码,还能将错码恢复其正确取值。
在二进制码元的情况下,能够确定错码的位置,就相当于能够就纠正错码。
采用FEC是,不需要反相信道传送重发指令,也没有因反复重发而产生的时延,故实时性好。
但是为了能够纠正错码,而不是仅仅检测到有错码,和检测重发相比,需要加入更多的差错控制码元。
故设备要比检测重发设备复杂。
2反馈校验(Feed Checkout):这时不需要在发送序列中加入差错控制码元。
接收端将接收到的码元原封不动地转发回发送端。
在发送端将它和原发送码元逐一比较。
若发现有不同,就认为接收端收到的序列中有错码,发送端立即重发。
这种技术的原理和设备都很简单。
但是需要双向信道,传输效率也比较低,因为每个码元都需要占用两次传输时间。
检错删除(deletion):它和检错重发的区别在于,在接收端发现错误码后,立即将其删除,不要求重发。
这种方法只适用在少数特定系统中,在那里发送码元中有大量多余度,删除不分接收码元不影响应用。
循环码是线性分组码中最重要的一个子类,它的结构完全建立在有限域的基础上,可以用近似代数的方法精确描述,循环码是1957年由普兰奇(Prange)提出的,此后几十年中得到了充分的研究和发展。
起初人们认识到并感兴趣的是循环码的外在特点,即循环码码字的循环移位后仍然是码字,这个特点给循环码的编译码实现带来了便利。
在以后的实践中,人们从循环群的角度,在代数机构、纠错性能控制等方面找到了循环码更加吸引人的优越之处。
目前,使用查错控制系统中使用的线性分组码几乎都是循环码或循环码的子类。
循环冗余校验码(CRC)是一种系统的缩短循环码,广泛应用于帧校验。
1.2 内容概要本设计主要分析循环冗余码理论,在理论基础上探讨其运用VHDL语言实现其算法,设计主要分为两个模块,即循环冗余码编码模块和循环冗余解码模块,主要编程工具为Max Plus II。
本设计主要内容首先从了解循环冗余校验码的实际应用入手,然后分析纠错编码的基本原理,研究程序设计中的基本运算规则(模2运算)入手,深入分析循环冗余码的编解码理论及其工程实现算法。
提出编解码方案并进行比较分析,选出符合本设计要求的实现方案,进行硬件设计,最后进行程序的模块化设计,并进行仿真验证,模块仿真验证无误进行模块组合调试仿真。
分析仿真结果得出结论。
- 3 -第2章CRC编解码理论2.1纠错编码的基本原理信道编码是在被传送的信息中附加一些监督码元,来检错和纠错。
下面以三位二进制码组为例,说明检错纠错的基本原理。
三位二进制码元共有32=8种可能的组合;000、001、010、011、100、101、110、111。
下面分三种情况讨论(l)如果这8种码组都用于传送消息,即每个码组都是许用码组。
在传输过程中若发生一个或多个误码,则一种码组会错误地变成另一种码组。
这样的编码既不能检错,也不能纠错,完全没有抗干扰能力;(2)若只选其中的000、011、101、110四种码组作为许用码组。
除上述4种许用码组以外的另外4种码组001、010、100、111称为禁用码组。
经观察我们可以发现,许用码组中“1”的个数为偶数个,禁用码组中“1”的个数为奇数个。
如果在传输过程中发生了一位或三位的错码,则“1”的个数就变为奇数个,许用码组就变为禁用码组;接收端一旦发现这些禁用码组,就表明传输过程中发生了错误。
用这种简单的校验关系可以发现一个和三个错误,但不能纠正错误。
例如,当接收到的码组为010时,我们可以断定这是禁用码组,但无法判断原来的正确码组是哪个许用码组。
虽然原发送码组为101的可能性很小(因为发生三个误码的情况极少),但不能绝对排除;即使传输过程中只发生一个误码,也有三种可能的发送码组:000、011和110。
显然,上述编码无法发现2个错码。
以上编码方法相当于只传递00、01、10、11四种信息,而第三位是附加的监督位。
这位附加的监督码位与前面两位信息码元和在一起,保证码组中“1”码的个数为偶数。
下表示出了这种情况:表2-1信息位与监督位的关系(3)如果进一步将许用码组限制为二种:000和111。
则不难看出,用这种方法可以发现所有不超过2个的误码;或能纠正一位错码。
纠正一位错码的方法是:将8个码组分成二个子集,其中{000、100、010、001}与许用码组000对应,{111、011、101、110}与许用码组111对应;这样,在接收端如果认为码4- 5 - 组中仅有一个错码,只要收到第一子集中的码组即判为 000,收到第二子集中的码组即判为 111。
例如,当收到的码组为禁用码组100时,如果认为该码组中仅有1个错码,则可判断此错码发生在“1”位,从而纠正为000;若认为上述接收码组中的错码数不超过两个,则存在两种可能性:000错一位和111错两位都可能变成100,因而只能检测出存在错码而无法纠正它。
分组码一般用符号(n,k)表示,其中k 是每个码组中二进信息码元的数目;n 是每个码组的总位数,又称为码组长度(码长);n -k = r 为每码组中的监督码元数目,或称监督位数目。