ImageVerifierCode 换一换
格式:DOCX , 页数:32 ,大小:291.37KB ,
资源ID:10226936      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10226936.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(CRC循环冗余校验码并行+串行.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

CRC循环冗余校验码并行+串行.docx

1、CRC循环冗余校验码并行+串行课程报告设计课题: CRC循环冗余校验码姓名:陈舒凌,高冉专业:电子信息工程学号:11151080071115106012日期2013年11月20日一2013年12月1日指导教师:傅文渊老师华侨大学信息科学与工程学院电子工程系CRC循环冗余校验码实验目的:设计一个在数字传输中常用的校验、纠错模块:循环冗余校验 CRC模块,学习使用FPGA器件完成数据传输中的差错控制实验内容:采用的CRC生成多项式为 X5+X4+X2+1,校验码为5位,有效信息数据为 12位。A、 根据以上信息,编写硬件描述语言完成上述功能,给出仿真波形。B、 CRC校验生成模块和 CRC校验查错

2、模块连接在一起,协调工作。引出必要的观察信号,锁定引脚,并在 EDA实验系统上实现之。C、 如果输入数据、输出 CRC码都是串行的,设计该如何实现?给出你的方案,并通过硬件 验证。模2运算的原理模2减法是不带借位的二进制减法运算。 这样,两个二进制位相运算时,这两个位的值就能确定运算结果,不受前一次运算的影响,也不对下一次造成影响。模2除法运算定义为:0- 1 = 0 1 - 1= 1多位二进制模2除法也类似于普通意义上的多位二进制除法,但是在如何确定商的问题上两者采用不同的规则。后者按带借位的二进制减法,根 据余数减除数够减与否确定商 1还是商0,若够减则商1,否则商 0。多位模2除法采用模

3、2减法,不带借位的二进制减法,因此考虑余数够减除数与否是没有意义 的。实际上,在CRC运算中,总能保证除数的首位为 1,则模2除法运算的商是由余数首位与除数首位的模 2除 法运算结果确定。因为除数首位总是 1,按照模2除法运算法则,那么余数首位是 1就商1,是0就商0。例如1100100 - 1011 = 1110110,列竖式计算:1 1 1 01 0 1 11 1 0 0 1 0 01 0 1 1引言 随着工业控制系统网络化的不断发展,建立可靠、稳定、高速的通信网络已成为控制系统的必然要求。然而,在数字通信中可靠与快速往往是一对矛盾。 若要求快速,则必然使得每个数据码元所占地时间缩短、波形

4、变窄、能量减少,从而在受到干扰 后产生错误的可能性增加,传送信息的可靠性下降。若是要求可靠,贝U使得传送消 息的速率变慢。其中差错检测和纠错控制是保证高可靠性的一种切实方法。在各种 通信领域,多项式编码循环冗余码 CRC简单且误判概率很低,被普遍应用。实现方法 CRC码是由两部分组成,前部分是信息码,就是需要校验的信息,后部分是校验码, 如果CRC码共长n个bit,信息码长k个bit,就称为(n,k)码。它的编码规则是:1)、首先将原信息码(kbit)左移r位(k+r= n)2) 、运用一个生成多项式g(x)(也可看成二进制数)用模 2除上面的式子,得到的余数就是校验码生成CRC码的基本原理:

5、任意一个由二进制位串组成的代码都可以和一个系数仅为0和1取值的多项式对应。例如:代码1010111对应的多项式为x6+x4+x2+x+1, 而多项式为x5+x3+x2+x+1对应的代码101111。程序设计的原理并行输入输出CRC校验生成模块:library IEEE;use ieee .nu meric_std.all;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;en tity crcversi on2 isPort ( sdata : in STD_LOGI

6、C_VECTOR (11 dow nto Q);message bitsclk : in STD_LOGIC;redu nda nt : out STD_LOGIC_VECTOR (4 dow nto 0;-redu nda nt bitsdataid:in stdo gic;hse nd:out std_logic;datacrco : out STD_LOGIC_VECTOR (16 dow nto (-message with redu nda nt bitsend crcversi on2;architecture Behavioral of crcversi on2 isbeg in

7、 process(clk)variable v:std_logic_vector(16 dow nto 0);variable u:stdogic_vector(16 downto 0);variable i,j:i nteger:=0;variable w:stdogic_vector(16 downto 0);constant multicoef :STD_LOGIC_VECTOR (5 downto 0):=110101;-crc polyno mialbeg inif clkevent and clk=1 thenif(dataid=1)the n w(16 downto 5):=sd

8、ata(11 downto 0); -v 有 m+(n-1)个位for j in 4 dow nto 0 loopw(j):=0; ,第 1 段end loop;elsif(dataid=0) then w(16 downto O):=(others=O);end if;v(16 downto 0):=w(16 downto 0);u(16 downto 11):=multicoef(5 downto 0); 第 2 段u(10 downto 0):=(others=0);Jfor i in 11 downto 0 loop -移位m次,为得到余数部分的 n-1个位 if(v(16)=1) t

9、he nv:=v xor u;else null;-什么也不做 ,第3段end if;v:= to_stdlogicvector(to_bitvector(v) sll 1);end loop; 丿redundant=v(16 downto 12);-redundant bitsdatacrco(16 downto 5)=w(16 downto 5); 第 4 段datacrco(4 dow nto 0)=v(16 dow nto 12);hse nd=1;- total messageend if;end process;end Behavioral;思路 段1.在时钟上升沿到来时,把输入

10、sdata的12个位赋给w的前12个位,后5个位都置0,构成一个17位。要是dataid是0,那不把sdata赋值给w,w置 0。段2.把w赋值给v,v便会参与我们的模2除法。要是w都为0, v模2运算后肯定也 是0。到时第4段里分别把w前12位给datacrco前12位,v的前5给datacrco 的后5个位。这时也把我们的 multicoeff扩展到17个位的u,把后11个位也都 赋0。(这个后来想想下还是可以把 v和u用12个位异或就好,只要移位够12次, 那v剩下的前5位就是余数)段3根据模2除法,做异或时我们的被除项的第一位必须是 1才能做。若v的第一个位是1,v和u异或再赋回给v

11、由于u(110101.)和v的第一个位是1,异或完v的第一个位一定变成0,然后再把v移前一位,后面补 0便可否则便不异或,v直接就移前一位。共要移位12次才能获得我们5个位的余数。 因此我们使用12次循环的loop语句。在每一次上升沿到,做12次的异或移位, 不异或也移位,就会移了12个位。这里使用的移位方法是向左位移的语句 sll,由于这个语句只能是给bit类型用,而我们的v是一个vector,那先强制转换成 bit再转换去vector。当然这里可以用移位寄存器法来实现,v(17 downto 1):=v(16downto0);v(0):=0;段4.最后,段3loop语句做完后,v的前5个位

12、是余数,赋给redundant,分别把w前12位的原信息数据给datacrco前12位,v的前5给datacrco的个 位,datacrco 便是我们的 crc 码了。Hsend0);end if; 丿v(16 dow nto 0):=w(16 dow nto 0);u(16 downto 11):=multicoef(5 downto 0); a 第 2 段u(10 downto 0):=(others=0);for i in 16 dow nto 0 loop -移位1 7次,为得到看是否能被整除 、if(v(16)=1) the nv:=v xor u;else n ull;end if

13、;v:= to_stdlogicvector(to_bitvector(v) sll 1); end loop;if(v(16 downto 0)=00000000000000000 )then error=0;rdata=w(16 dow nto 5);datafi ni=1;else error=1;rdata0);datafi ni 4trr orJ1 1 1 IIH II 11 1 11 11i i i1 1 1II 11 11 II1 1 II 1flIII*hrtcvmu uni iiuiaiiuaiiiMiiiiii MiiiaiKiiMiii.HiiiiHaini mi I g

14、 III 1i 1 H| |11 1 IIi i ci1 1 11 1 p 1I 1 11 I il |1 1II 11 IIH 11III-+田 rdataLiiiiOOOOOOODOOCO| |1山叩 00111011X i1 II当hrecv=1时,接收输入信号datacrci进行除法运算,datacrci能被110101整除时,error 为0。完成标志位datafini为1,输出信号rdata为原来要校验的信号;datacrci不能被 110101整除时error为1,完成标志位0,输出信号rdata为0;并行总的电路并行总的电路的仿真波形)P百SO. 0 m1池卩ns 换卩5 -Q

15、 ns叫7ZO.O ns1D p Jclkmnnnjwmm 1d 盘 tifini-i n i 1 1 i li i n 1 a i j i ci i1 II I 1 1 1 1 1 II 1 I I 1 1 11 1 I 1 1 II 1 a i a idataiderror 1 Illii ci inail国&IOIQOIIIOOo!X i10101000111 X101011110001 X1 a ioooooooooo13 redundenl匸11101F !00001II II 1V. 丿 imniinnnmi i iooooo矜23田 5dm F:iciooiuoociX U010

16、* X 10101111000iKOOOOODOOOi输入标志位dataid为1,输入数据才能进行运算。时钟信号到来,开始进行运算,校验之后输出原来要校验的数据,输出余数,错误警报也为置为0NodsfwtDiCCl-OrIJMifOr】Q Rsncef & ouuTgtrZR?r%bi SCGitW1A ckluXPIN?D1 N5UMSL :deidOr j.O cMacrmOutputdc-3ul:3i#1 eiUi:LlMmm 阳 uij冲2 ndOUiPLlf.阿 LVL Meruit)5i djido iLMOutputD4JS11J dt euioredjr)danLx. 06Ou

17、tputFIN斗01 HlIJVLfHl 仙和uh)rcdldndlBn:r 073 rvdLndncJOuiputMN?4B4J41mm如旳 圭阿LLL詛!切ulHndin:. 0|Ba dLndiflrlOutput化MlrpddndanT. Qma -乩為1:【二OutputPlh-lm31 科 LEL(d&Mredjnda,i.-. Q1CLoutPIh 24Bl Nil3 dcTJLl-)11令 口和和UnkrcwnPINJS4303J4J3 3 H .dtLl:;i2 ratHiUnkrcnPIN 7HI.N3i ja xr 门*七1.卜:11:UnkrownPTN?3RJ41J

18、3 Lrrn.T dp;*lAnlirflwn30? N331MLE园為斶15使用了模式0串行输入输出的接收模块:library IEEE;use ieee .nu meric_std.all;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;en tity crcseriesversi on3 isPort ( sdata : in STD_LOGIC; -message bitsdatald: in std_logic;clk : in STD_LOGIC;red

19、u ndant: out STD_LOGIC_VECTOR (4 dow nto 0)-redu nda nt bits datacrco : out STD_LOGIC-message with red undant bits hse nd: out std_logic);end crcseriesversi on3;architecture Behavioral of crcseriesversion3 is beg in process(clk)variable v:stdogic_vector(16 downto 0);variable d:std_logic_vector(16 do

20、wnto 0);variable u:stdogic_vector(16 downto 0);variable q:stdogic_vector(16 downto 0);variable i,j:i nteger:=0;variable coun t: in teger:=0;variable coun t2:i nteger:=0;variable t : STD_LOGIC_VECTOR (16 dow nto 0);variable c: std_logic:=1;variable y:std_logic_vector(16 downto 0);variable g :in teger

21、:=0;constant multicoef :STD_LOGIC_VECTOR (5 downto 0):=110101; -crc polyno mial beg inif clkevent and clk=1 then if (count17 and datald=1)then coun t:=co un t+1;if(cou nt12)then v(17-cou nt):=0;end if; end if;if(co un t=17) the ny(16 downto 0):=v(16 downto 0);count:=0; 第 2 段g:=g+1;end if; - u(16 dow

22、nto 11):=multicoef(5 downto 0);u(10 downto 0):=(others=0); 第 3 段hse nd=0;if(c=1) thend(16 downto 0):=y(16 downto 0);q(16 downto 0):=d(16 downto 0);for i in 11 downto 0 loop -移位12次,为得到余数部分的 if(q(16)=1) thenq:=q xor u; 第 4 段else n ull;end if;q:= to_stdlogicvector(to_bitvector(q) sll 1);end loop;end if;redundan t=q(16 dow nto 12); - redu ndant bitst(16 downto 5):=d(16 downto 5); 第 5 段

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1