資源描述:
《CRC循環(huán)冗余校驗碼(并行+串行).docx》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、課程報告設(shè)計課題:CRC循環(huán)冗余校驗碼姓名:陳舒凌,高冉專業(yè):電子信息工程學(xué)號:日期2013年11月20日—2013年12月1日指導(dǎo)教師:傅文淵老師華僑大學(xué)信息科學(xué)與工程學(xué)院電子工程系CRC循環(huán)冗余校驗碼實驗?zāi)康模涸O(shè)計一個在數(shù)字傳輸中常用的校驗、糾錯模塊:循環(huán)冗余校驗CRC模塊,學(xué)習(xí)使用FPGA器件完成數(shù)據(jù)傳輸中的差錯控制實驗內(nèi)容:采用的CRC生成多項式為X5+X4+X2+1,校驗碼為5位,有效信息數(shù)據(jù)為12位。A、根據(jù)以上信息,編寫硬件描述語言完成上述功能,給出仿真波形。B、CRC校驗生成模塊和CRC校驗查錯模塊連接在一起,協(xié)調(diào)工作。引出必要的觀察信號,鎖定引腳,并在EDA實驗系
2、統(tǒng)上實現(xiàn)之。C、如果輸入數(shù)據(jù)、輸出CRC碼都是串行的,設(shè)計該如何實現(xiàn)?給出你的方案,并通過硬件驗證。模2運算的原理模2減法是不帶借位的二進(jìn)制減法運算。這樣,兩個二進(jìn)制位相運算時,這兩個位的值就能確定運算結(jié)果,不受前一次運算的影響,也不對下一次造成影響。模2除法運算定義為:0÷1=01÷1=1多位二進(jìn)制模2除法也類似于普通意義上的多位二進(jìn)制除法,但是在如何確定商的問題上兩者采用不同的規(guī)則。后者按帶借位的二進(jìn)制減法,根據(jù)余數(shù)減除數(shù)夠減與否確定商1還是商0,若夠減則商1,否則商0。多位模2除法采用模2減法,不帶借位的二進(jìn)制減法,因此考慮余數(shù)夠減除數(shù)與否是沒有意義的。實際上,在CRC運算中
3、,總能保證除數(shù)的首位為1,則模2除法運算的商是由余數(shù)首位與除數(shù)首位的模2除法運算結(jié)果確定。因為除數(shù)首位總是1,按照模2除法運算法則,那么余數(shù)首位是1就商1,是0就商0。例如÷1011=1110……110,列豎式計算:1110────────1011〕1100100-1011──────1111-1011──────1000-1011──────0110-0000──────11引言隨著工業(yè)控制系統(tǒng)網(wǎng)絡(luò)化的不斷發(fā)展,建立可靠、穩(wěn)定、高速的通信網(wǎng)絡(luò)已成為控制系統(tǒng)的必然要求。然而,在數(shù)字通信中可靠與快速往往是一對矛盾。若要求快速,則必然使得每個數(shù)據(jù)碼元所占地時間縮短、波形變窄、能
4、量減少,從而在受到干擾后產(chǎn)生錯誤的可能性增加,傳送信息的可靠性下降。若是要求可靠,則使得傳送消息的速率變慢。其中差錯檢測和糾錯控制是保證高可靠性的一種切實方法。在各種通信領(lǐng)域,多項式編碼循環(huán)冗余碼CRC簡單且誤判概率很低,被普遍應(yīng)用。---實現(xiàn)方法CRC碼是由兩部分組成,前部分是信息碼,就是需要校驗的信息,后部分是校驗碼,如果CRC碼共長n個bit,信息碼長k個bit,就稱為(n,k)碼。它的編碼規(guī)則是:1)、首先將原信息碼(kbit)左移r位(k+r=n)2)、運用一個生成多項式g(x)(也可看成二進(jìn)制數(shù))用模2除上面的式子,得到的余數(shù)就是校驗碼生成CRC碼的基本原理:任意一個由
5、二進(jìn)制位串組成的代碼都可以和一個系數(shù)僅為‘0’和‘1’取值的多項式一一對應(yīng)。例如:代碼對應(yīng)的多項式為x6+x4+x2+x+1,而多項式為x5+x3+x2+x+1對應(yīng)的代碼。程序設(shè)計的原理并行輸入輸出CRC校驗生成模塊:libraryIEEE;useieee.numeric_std.all;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entitycrcversion2isPort(sdata:inSTD_LOGIC_VECTOR(11downto0);---
6、messagebitsclk:inSTD_LOGIC;redundant:outSTD_LOGIC_VECTOR(4downto0);---redundantbitsdataid:instd_logic;hsend:outstd_logic;datacrco:outSTD_LOGIC_VECTOR(16downto0));---messagewithredundantbitsendcrcversion2;architectureBehavioralofcrcversion2isbeginprocess(clk)variablev:std_logic_vector(16downto0
7、);variableu:std_logic_vector(16downto0);variablei,j:integer:=0;variablew:std_logic_vector(16downto0);constantmulticoef:STD_LOGIC_VECTOR(5downto0):="";---crcpolynomialbeginifclk'eventandclk='1'thenif(dataid='1')thenw(16downto5):=sdata(11