基于FPGA的CRC編解碼器設(shè)計說明書
基于FPGA的CRC編解碼器設(shè)計說明書,基于,fpga,crc,編解碼器,設(shè)計,說明書,仿單
設(shè)計任務(wù)書
課題: 基于FPGA的CRC編解碼器設(shè)計
專業(yè)
學(xué)生姓名
班級
學(xué)號
指導(dǎo)教師
專業(yè)系主任
發(fā)放日期
XXX
1. 畢業(yè)設(shè)計(論文)任務(wù)的內(nèi)容和要求(包括原始數(shù)據(jù)、技術(shù)要求、工作要求)
1、 主要內(nèi)容以及技術(shù)參數(shù)
在通信系統(tǒng)中,數(shù)據(jù)在傳輸過程中,由于通道傳輸特性不理想,并且受到干擾或噪聲的影響。循環(huán)冗余校驗(CRC)是一種最常用的信道編碼方法,廣泛應(yīng)用于通信領(lǐng)域以提高數(shù)據(jù)傳輸?shù)目煽啃?。隨著半導(dǎo)體技術(shù)的迅速發(fā)展,在現(xiàn)代數(shù)字系統(tǒng)設(shè)計中,F(xiàn)PGA和CPLD的使用越來越廣泛。與此同時,基于大規(guī)模可編程邏輯器件的EDA硬件通信解決方案也被廣泛采用。
分析CRC編解碼算法,采用VHDL語言實現(xiàn)CRC碼的生成和校驗?zāi)K。在Quartus II+ModelSim的仿真平臺上進行仿真驗證。
2、設(shè)計中要求做的工作
a) 搭建Quartus II+ModelSim仿真開發(fā)平臺。
b) 搞清楚CRC工作原理。
c) 給出CRC實現(xiàn)思路。
d) 完成系統(tǒng)程序的編寫。
e) 仿真調(diào)試。
f) 完成畢業(yè)設(shè)計論文的編寫。
3、 工作要求
a) 對待設(shè)計工作要具有認真的態(tài)度、嚴謹?shù)淖黠L(fēng)
b) 要求每天按照計劃保質(zhì)保量地完成當天的任務(wù)
c) 遵守設(shè)計場所的紀律制度,做好值日生工作
2. 圖紙內(nèi)容及張數(shù):
1、系統(tǒng)總體實現(xiàn)框圖 ………………1張
3. 實物內(nèi)容及要求(包括開題報告、畢業(yè)設(shè)計說明書(論文)、源程序、成果實物、資料光盤等):
(1) 完成畢業(yè)實習(xí)報告一份。
(2) 完成開題報告一份。寫明課題研究的意義,設(shè)計或研究的思路,采用的主要器件,以及設(shè)計最終所獲得的成果。詳細列出在畢業(yè)設(shè)計期間各個時間段要完成的工作。
(3) 完成8000字的資料摘要一份。
(4) 完成與本課題相關(guān)的外文資料譯文一份(3000漢字以上)。
(5) 按照鹽城工學(xué)院畢業(yè)設(shè)計(論文)教學(xué)工作手冊中的要求完成畢業(yè)設(shè)計說明書一份。符合學(xué)校制定的本科畢業(yè)設(shè)計(論文)的格式要求、字數(shù)要求,文筆流暢、條理清晰,無原則性錯誤。任務(wù)書、開題報告、設(shè)計說明書等資料刻成光盤。
4. 其他:
無
5. 參考文獻:
[1] 梅文龍,王輝. 基于FT245BM和FPGA的數(shù)據(jù)采集設(shè)計[J]. 電子技術(shù)應(yīng)用. 2013(06)
[2] 周悅芝,董代潔. 基于FPGA的計算機系統(tǒng)接口實驗平臺的設(shè)計與研制[J]. 實驗技術(shù)與管理. 2013(05)
[3] 陳喬,姚遠,梁志毅. 基于FPGA的高幀頻CCD成像系統(tǒng)設(shè)計[J]. 科學(xué)技術(shù)與工程. 2013(12)
[4] 初華,萬強,曹海源,張廣遠,黎偉. 基于DSP和FPGA的數(shù)字示波器設(shè)計[J]. 自動化儀表. 2013(03)
[5] 潘家頂,楊光杰. TS流的CRC譯碼器設(shè)計[J]. 現(xiàn)代電子技術(shù). 2012(19)
[6] 霍旭東,朱衛(wèi)華. 大數(shù)據(jù)量高復(fù)雜度CRC校驗的串并優(yōu)化設(shè)計[J]. 鐵道通信信號. 2012(04)
[7] 楊利娟,陳多觀. 循環(huán)冗余校驗CRC的分析及硬件實現(xiàn)[J]. 蘇州科技學(xué)院學(xué)報(自然科學(xué)版). 2010(04)
[8] 黃戈,余松煜,管云峰,潘宇. LDPC碼構(gòu)造及編譯碼技術(shù)研究[J]. 光通信技術(shù). 2006(02)
[9] 王文君,朱曉暄,康桂霞,張平. 結(jié)構(gòu)化LDPC碼的高速編譯碼器FPGA實現(xiàn)[J]. 數(shù)據(jù)采集與處理. 2008(S1)
[10] 劉朋利,何歡. 基于ACE約束的S-IRA編譯碼器設(shè)計[J]. 山西電子技術(shù). 2010(02)
[11] 周美紅,黎海濤,陳晨. IEEE802.11n信道編譯碼器的FPGA設(shè)計[J]. 中國電子科學(xué)研究院學(xué)報. 2010(05)
6. 畢業(yè)設(shè)計(論文)進度計劃
起訖日期
工 作 內(nèi) 容
備 注
3月8日~3月28日
畢業(yè)實習(xí)以及畢業(yè)設(shè)計的前期工作,完成中文文獻摘要、英文文獻翻譯、實習(xí)報告和設(shè)計的開題報告
3月29日~4月7日
進行開題陳述和答辯,設(shè)計正式開題
4月8日~4月14日
軟件開發(fā)平臺搭建
4月15日~5月10日
CRC工作原理
5月11日~5月24日
用VHDL語言實現(xiàn)
5月25日~6月10日
仿真調(diào)試與優(yōu)化
6月11日~6月20日
撰寫畢業(yè)設(shè)計說明書,準備畢業(yè)答辯
6月21日~6月27日
完成畢業(yè)答辯以及設(shè)計資料的歸檔工作
7.教師簽字: 制定日期: 年 月 日
8. 審批
專業(yè)系意見:
專業(yè)系主任(簽字)
年 月 日
設(shè)計開題報告
課題:
基于FPGA的CRC編解碼器的設(shè)計
專業(yè)
學(xué)生姓名
班級
學(xué)號
指導(dǎo)教師
專業(yè)系主任
撰寫日期
XXXXX
課題名稱:基于FPGA的CRC編解碼器的設(shè)計
課題類型: (√) 應(yīng)用型 ( ) 研究型
1. 本課題的意義(本部分字數(shù)不小于600字)
在高速通信系統(tǒng)中,為了適應(yīng)速度和通信傳輸?shù)囊?,CRC校驗部分往往都設(shè)計為串行輸入的硬件實現(xiàn)。在數(shù)字通信系統(tǒng)中可靠與快速往往是一對矛盾的詞。若要求快速,則必然使得每個數(shù)據(jù)碼元所占的時間縮短、波形變窄、數(shù)量減少,從而在受到干擾后產(chǎn)生錯誤的可能性增加,傳送信息的可靠性下降。若是要求可靠,則使得傳送信息的可靠性下降。若是要求可靠,則使得傳送消息的速率變慢。因此,如何合理地解決可靠性和速度這一對矛盾,是正確設(shè)計一個通信系統(tǒng)的關(guān)鍵問題之一。引起傳輸差錯的根本原因是信道內(nèi)存在噪聲及信道傳輸特性不理想造成的碼間串擾。為了盡可能地提供通信的可靠性就需要采用信道編碼技術(shù),對可能或已經(jīng)出現(xiàn)的差錯進行控制,CRC碼就是其中的一種編碼技術(shù)。
循環(huán)冗余校驗是由分組線性碼的分支而來,其主要應(yīng)用是二元碼組。編碼簡單而且誤判概率很低,在通信系統(tǒng)中得到廣泛的應(yīng)用,各種現(xiàn)場總線協(xié)議中的數(shù)據(jù)幀的校驗一般采用這種檢驗方式。
循環(huán)冗余校驗(Cyclic redundancy check,CRC)是一類重要的線性分組碼,因其編碼和解碼的方法簡單、檢錯糾錯能力強而被廣泛應(yīng)用于許多領(lǐng)域以實現(xiàn)差錯控制。目前已經(jīng)有多種CRC的生成多項式被列為國際標準中,如在數(shù)字通信中使用的CRC-4、CRC-16以及ZIP,RAR,LAN\FDDI,IEEE1394中使用的CRC-32等。數(shù)字通信中的CRC實現(xiàn)主要分為硬件實現(xiàn)和軟件實現(xiàn)兩類。
近年來迅速發(fā)展的FPGA技術(shù)改變了基于芯片集成的數(shù)字系統(tǒng)設(shè)計理念,在使用FPGA實現(xiàn)復(fù)雜數(shù)字系統(tǒng)時,可以利用FPGA的剩余資源實現(xiàn)一些簡單的功能模塊如(UART,CRC等)以替代專用集成電路芯片(ASIC),從而提高系統(tǒng)的集成度。循環(huán)冗余碼CRC校驗技術(shù)廣泛應(yīng)用于檢測及通信領(lǐng)域,是當前在信源編碼中用來降低誤碼率的有效手段之一。
2. 課題的基本內(nèi)容:
CRC碼由兩部分組成,前部分是信息碼,就是需要校驗的信息,后部分是校驗碼。實際的CRC校驗生成是采用二進制模2算法得到的,即加法不進位,減法不借位,是一種異或操作。如果數(shù)據(jù)在傳輸過程中沒有發(fā)生差錯,那么接收端收到的帶CRC校驗比特序列定能被同一生成多項式序列整除,即本設(shè)計完成12位信息加5位CRC校驗發(fā)送,接收,有兩個功能模塊構(gòu)成,CRC校驗生成模塊(發(fā)送)和CRC校驗檢錯模塊(接收),采用輸入、輸出都為并行的CRC校驗生成方式。
3. 課題的研究方法、技術(shù)路線、設(shè)計(研究)方案:
研究方法:搞清楚CRC碼的原理,分析CRC編碼、解碼電路設(shè)計思路.利用VHDL語言設(shè)計CRC編解碼器并通過QuartusⅡ仿真平臺進行仿真驗證,最后下載到FPGA芯片實現(xiàn)CRC編解碼電路.
技術(shù)線路:運用CRC編碼的原理,分析CRC的三種算法:比特型算法、查表型算法以及公式法,并進行公示推導(dǎo),可以得到CRC碼的產(chǎn)生與校驗算法,并利用軟件實現(xiàn)。
設(shè)計方案:結(jié)合多數(shù)字信號處理間串行通信的應(yīng)用,采用標準的CRC碼,設(shè)計系統(tǒng)結(jié)構(gòu),寫入模塊代碼。
4. 課題的效果預(yù)測
本課題CRC編解碼器的設(shè)計運用FPGA實現(xiàn)時由于內(nèi)部的LUT單元可實現(xiàn)任何4輸入的組合邏輯,故該設(shè)計的最大延遲有兩個邏輯門的延遲。編碼器設(shè)計無誤,則輸出的循環(huán)碼與計算結(jié)果一致。解碼器輸出為正確信息序列,信號位為低電平,解碼正確,如果輸出為接受信息與輸入信息一致且信息位為高電平則接受誤碼。
5. 畢業(yè)設(shè)計(論文)進度計劃
起訖日期
工 作 內(nèi) 容
備 注
3月8日~3月28日
畢業(yè)實習(xí)以及畢業(yè)設(shè)計的前期工作,完成中文文獻摘要、英文文獻翻譯、實習(xí)報告和設(shè)計的開題報告
3月29日~4月7日
進行開題陳述和答辯,設(shè)計正式開題
4月8日~4月14日
軟件開發(fā)平臺搭建
4月15日~5月10日
CRC工作原理
5月11日~5月24日
用VHDL語言實現(xiàn)
5月25日~6月10日
仿真調(diào)試與優(yōu)化
6月11日~6月20日
撰寫畢業(yè)設(shè)計說明書,準備畢業(yè)答辯
6月21日~6月27日
完成畢業(yè)答辯以及設(shè)計資料的歸檔工作
6. 開題報告審批意見
指導(dǎo)教師意見:
指導(dǎo)教師(簽字):
年 月 日
專業(yè)系意見:
專業(yè)系主任(簽字):
年 月 日
畢業(yè)設(shè)計外文翻譯
專業(yè)
電氣工程及其自動化
學(xué)生姓名
張志成
班級
電氣115
學(xué)號
1110603517
指導(dǎo)教師
周磊
專業(yè)系主任
顧春雷
撰寫日期
2015.3.06
電氣工程學(xué)院
5
基于FPGA的CRC編解碼器的設(shè)計
摘要:CRC校驗碼是數(shù)據(jù)通信領(lǐng)域中最常用的一種差錯校驗碼,其特征是信息字段和校驗字段的長度可以任意選定。它依靠某種數(shù)學(xué)上約定的形式進行檢查。校驗的結(jié)果是可靠或不可靠,如果可靠就對數(shù)據(jù)進行處理,如果不可靠,就丟棄重發(fā)或者進行修復(fù)。CRC檢驗的基本思想是利用線性編碼理論,在發(fā)送端根據(jù)要傳送的k 位二進制碼序列,以一定的規(guī)則產(chǎn)生一個檢驗碼r位(就是CRC碼),附在信息后面,構(gòu)成一個新的二進制碼序列數(shù)共(k+r)位,最后發(fā)送出去。接收端根據(jù)同樣的規(guī)則校驗,以確定傳送中是否出錯。CRC循環(huán)冗余校驗具有比奇偶校驗強得多的檢錯能力。在實際設(shè)計中CRC校驗碼獲得了非常廣泛的應(yīng)用。
本論文首先介紹了FPGA的基本知識,包括對FPGA的開發(fā)軟件工具Quartus II 和硬件描述語言VHDL的詳細介紹,然后對循環(huán)校驗碼的原理進行了分析,給出設(shè)計方案,進行編寫VHDL代碼設(shè)計,用Quartus II軟件自動生成封裝圖進行連線,利用Modelsim進行軟件仿真,并對結(jié)果與進行驗證,驗證顯示設(shè)計完全正確。
關(guān)鍵詞:CRC;VHDL;FPGA;檢錯
Cyclic code circuit design based on FPGA
Abstract:CRC checksum is the most common kind of error checking code in data communications, that the length of the information field and a check field can be arbitrarily selected is its feature. It checks relaying on some kind of agreement in the form of mathematics. Whether results of the check is reliable, if its reliable,then process the data, if its not reliable, then discarded and retransmitted or repair. The basic idea of CRC check is using linear coding theory, at the transmitting end according to k-bit binary code sequence to be transmitted, in certain rules to generate a r bits -checksum(this is CRC data). And attached the information to the back, to form a new binary Total number of code sequences (k + r) bits, and finally sent. The receiving end according to the same rules check to determine whether transmission error. CRC cyclic redundancy check error detection capability than parity much stronger. In the actual design of CRC received very wide range of applications.
This thesis introduces the basic knowledge of FPGA, including details of Quartus II development software tools of FPGA and hardware description language VHDL. Then analysised the principle of cyclic checksum, be written in VHDL code design automatically generated by the Quartus II software package, and wiring diagram. Using Modelsim simulation software to simulate, and verif the results and the verification display design is correct.
Keywords: CRC ; VHDL;FPGA; error detection
目 錄
1概述 1
1.1 背景意義 1
1.2 發(fā)展現(xiàn)狀 1
1.3 EDA技術(shù) 2
1.4 課題的主要工作 2
2 算法實現(xiàn) 4
2.1 CRC編解碼理論 4
2.2 模2運算原理 6
2.3 CRC基礎(chǔ)計算 6
2.4 CRC編碼方法 8
2.4.1 CRC產(chǎn)生操作過程 9
2.5循環(huán)碼解碼方法 9
2.5.1 CRC解碼操作過程 10
3 仿真實現(xiàn) 11
3.1 仿真實現(xiàn)方案分析 11
3.1.1 查表法實現(xiàn)方案分析 11
3.1.2逐位運算法實現(xiàn)方案分析 12
3.1.3 需求分析 14
3.2 編解碼設(shè)計 14
3.2.1 編碼模塊 14
3.2.2 解碼模塊 17
3.3 仿真驗證 19
3.3.1 編碼器仿真 19
3.3.2 解碼器仿真 21
3.4分析與總結(jié) 23
4 結(jié)束語 25
參考文獻 26
致謝 27
附錄1:程序清單 28
附錄2:設(shè)計圖紙 31
基于FPGA的CRC編解碼器的設(shè)計
1概述
1.1 背景意義
如今科技的發(fā)展突飛猛進,尤其是在通訓(xùn)這個方面,幾乎人手一部手機、一臺PC。然而人們在物質(zhì)水平提高的同時,對科技的需求也越來越高。比如在通信方面,人們會要求各種信息、數(shù)據(jù)準確無誤的傳達,并且一定要足夠清晰,幾乎不受外界的干擾。
但在實際應(yīng)用中,傳輸數(shù)據(jù)的無線信道非常復(fù)雜。由于信道有時變性、衰減性、帶寬資源有限、干擾大等特點。信號會受到信道噪聲的干擾,也會因為信道本身的復(fù)雜衰落變化而造成影響;而這兩種因素也是導(dǎo)致接收出現(xiàn)誤碼的主要原因。對于話音或圖像,誤碼會造成話音或圖像質(zhì)量的下降;而對于各種數(shù)據(jù)文件,誤碼則可能使得整個文件作廢。差錯控制中的循環(huán)碼技術(shù)正是降低誤比特率、提高通信質(zhì)量的主要技術(shù)手段之一。
在本課題的研究中,我們還要涉及到VHDL語言的編程,利用它來實現(xiàn)差錯控制中的循環(huán)碼。即使使用當前最先進的計算機,如果使用人類語言來描述數(shù)字系統(tǒng),并希望計算機能夠理解設(shè)計者的意圖,這仍然是不可能的。計算機要求定義具有嚴格規(guī)則的語言。VHDL就是一種應(yīng)用廣泛的計算機編程語言。
通過本課題的研究,我可以深入了解循環(huán)碼,熟悉并掌握其實現(xiàn)方法;熟悉VHDL的編程方法,并能熟練地運用VHDL編程實現(xiàn)循環(huán)碼CRC-8實現(xiàn)電路;熟悉Quatus Ⅱ的基本功能,能利用它進行仿真并用其產(chǎn)生電路,實現(xiàn)循環(huán)碼的功能;掌握通信原理二次開發(fā)模板上各個按鈕的功能,并能在二次模板上實現(xiàn)循環(huán)碼的實測。由此親身體驗循環(huán)碼在生活中的重要性。
1.2 發(fā)展現(xiàn)狀
信息在傳遞數(shù)據(jù)的過程中,有可能會因為某種因素使信息所包含的數(shù)據(jù)發(fā)生錯誤.為了減少并且防止這一類錯誤的發(fā)生,除了從外部減弱干擾提高可靠性外,也應(yīng)該在數(shù)據(jù)的編碼上完成檢查錯誤和糾正錯誤的過程??梢赃@樣來完成:在要傳遞的數(shù)據(jù)代碼中加入數(shù)個校驗位,在傳遞的過程中如果收到干擾發(fā)生錯誤就會生成錯誤代碼而被發(fā)現(xiàn),更能夠根據(jù)錯誤代碼而確定錯誤的位置并且糾錯。這就是校驗碼。當傳遞數(shù)據(jù)時校驗位和數(shù)據(jù)位一起被發(fā)出,如果在傳輸過程中沒有錯誤發(fā)生時,接收的一方去掉校驗位而留住數(shù)據(jù)位,否則檢驗后得到正確的代碼,或請求重傳(錯誤檢測碼),其中循環(huán)冗余校驗可以實現(xiàn)兩種功能,而且誤差校正(關(guān)于選擇和生成多項式),是一個以數(shù)據(jù)塊為對象有效和可靠的誤差檢測和校正方法,因為它的編解碼器設(shè)計簡單,強糾錯功能和低的概率發(fā)生錯誤的判斷,這已經(jīng)在工業(yè)測量和控制應(yīng)用程序和通信系統(tǒng)中應(yīng)用很廣。
FPGA在過去30年產(chǎn)生了長足的發(fā)展。尤其是工藝的不斷提高使得FPGA的生產(chǎn)成本不斷降低,同時性能卻在大幅度的提升。他的應(yīng)用成本已經(jīng)能夠為一些設(shè)計所接受。另外由于其具有通用性好,代碼的可移植性強。設(shè)計的保密性和穩(wěn)定性高等特點受到越來越多的設(shè)計者青睞,他們已經(jīng)不再只是軍工領(lǐng)域的專享產(chǎn)品。由于FPGA的結(jié)構(gòu)可以很好的并行,適合做大量的數(shù)據(jù)處理的工作。能更有效的保證系統(tǒng)的實時性,另外基于FPGA的設(shè)計能夠具有很好的靈活性和可重用性。
1.3 EDA技術(shù)
EDA是一門新興技術(shù),發(fā)展快速,它在設(shè)計上的載體主要是規(guī)模龐大并且可以編程運行的邏輯器件。主要的系統(tǒng)描述方式是硬件描述語言??梢宰詣佑密浖瓿筛鞣N設(shè)計,非常的方便快捷。國際上對于EDA應(yīng)用的范疇很寬。在機械、通信、航天航空、化工、電子、醫(yī)學(xué)等多個領(lǐng)域中都有廣泛的應(yīng)用。相比之下國內(nèi)定義的EDA范圍就比較狹隘了,主要是指IC、PCB以及電子電路的設(shè)計。本次設(shè)計所涉及的EDA技術(shù)主要是對CRC生成及校驗進行驗證仿真,先通過Quartus Ⅱ?qū)υO(shè)計程序進行編譯無誤后,再使用Modelsim仿真驗證,確保設(shè)計可以準確無誤的運行。
FPGA是現(xiàn)場可編程門陣列的簡稱,可分為邏輯元件、輸入輸出元件和連線三個部分,最能代表的優(yōu)點就是高集成度,高速和高可靠性。時鐘延時短,在很多應(yīng)用領(lǐng)域具有廣闊的應(yīng)用前景。設(shè)計完善的話,不會出現(xiàn)別的軟件會出現(xiàn)的一系列問題。
而且它的集成規(guī)模很大,可以用EDA技術(shù)進行前期設(shè)計和后期開發(fā)。強大的兼容性使得FPGA可以與EDA技術(shù)很好的結(jié)合在一起,使得產(chǎn)品的設(shè)計速度大幅變快。
VHDL語言是一種設(shè)計數(shù)字電子系統(tǒng)的描述語言,在美國發(fā)起,經(jīng)過一段時間的調(diào)整、完善、開發(fā),最終標準化并且使得集成電路高度系統(tǒng)化。VHDL的語法很嚴格,描述方法多樣,對新手來說難以上手,但是對于熟練的用戶來說就是一種很棒的編程語言。歸納起來,VHDL語言具有以下優(yōu)點:功能強大,設(shè)計方式多樣;具有強大的硬件描述能力;具有很強的移植能力;設(shè)計描述與器件無關(guān);程序易于共享和復(fù)用。
Quartus II 13.1是Altera公司淘汰Maxplus II后開發(fā)出來的一款PLD開發(fā)平臺軟件。支持多種設(shè)計以及器件的開發(fā),并且還支持多種設(shè)計方式,內(nèi)部自帶多種綜合仿真器,可以完成完整的PLD設(shè)計。Quartus II與Modelsim結(jié)合在一起,可以實現(xiàn)設(shè)計,仿真的一個很好的平臺,并且方便。隨著Quartus II版本不斷更新,軟件的更新主要體現(xiàn)在對于支持的芯片類型更多。本文設(shè)計中采用了比較可靠的Quartus II 13.1版本。
1.4 課題的主要工作
本論文設(shè)計了一款基于FPGA的循環(huán)碼產(chǎn)生電路,通過對在Quartus II上進行具體的設(shè)計;完成了功能仿真和驗證、分析、改進,直至能夠得出功能完善并且方便的CRC編解碼器。本論文的具體內(nèi)容共分為四節(jié):
第一節(jié)概述主要介紹了本設(shè)計的研究背景以及意義、發(fā)展的現(xiàn)狀以及EDA技術(shù)的概述。
第二節(jié)主要介紹了CRC編解碼的算法理論、實現(xiàn)以及各視圖的解釋。
第三節(jié)主要介紹了編解碼器的仿真驗證。
第四節(jié)是結(jié)論,對整個研究工作進行歸納和綜合的總結(jié),包括研究所得結(jié)果、與已有結(jié)果的比較、本次研究中尚存在的問題、對進一步研究的見解與建議。
2 算法實現(xiàn)
2.1 CRC編解碼理論
需要額外增加數(shù)個監(jiān)督碼元來完成信道的編碼,可以用來檢查錯誤和糾正錯誤。舉個例子,用三位二進制碼組來說明檢查錯誤和糾正錯誤的原理。三位二進制碼組共有8種可能的組合,下面分三種情況討論:
a)如果這8種碼組都用于傳送消息,就是說其中的每個碼組都是可用的。在傳輸信息的過程如果出現(xiàn)誤碼,那么一種碼組會錯誤地成為另外七個碼組中的一個。這樣的編碼既不能檢查錯誤,也不能糾正錯誤,沒有任何抵抗抗干擾的能力。
b)如果選擇其中的000、011、101、110作為可用的碼組。除上述4種可用的碼組以外,另外的4種碼組稱為不可用碼組。經(jīng)觀察我們可以發(fā)現(xiàn),可用碼組中“1”偶數(shù)個,不可用碼組中“1”為奇數(shù)個。如果在傳輸過程中發(fā)生了一位或三位的錯碼,則“1”的個數(shù)就變?yōu)槠鏀?shù)個,許用碼組就變?yōu)榻么a組;如果不可用碼組被接收方發(fā)現(xiàn),就可以說明傳輸過程有錯。有一個或者有三個錯誤可以被這種簡單的校驗發(fā)現(xiàn),但是并不能糾錯。比如說,接收到的碼組是010,可以確定它是不可用碼組,不過不能看出來原來的正確的碼組是哪個。即使原發(fā)送碼組是101的可能性很小,但是還是會有這種情況發(fā)生的;哪怕傳輸信息的過程中只出現(xiàn)了一個誤碼,也有三種可能的發(fā)送碼組。顯然,上述編碼無法發(fā)現(xiàn)2個錯碼。上面所描述的編碼方法只是傳遞了三位二進制碼組的前兩位一共四種信息,并且第三位是額外的監(jiān)督位。這位附加的監(jiān)督碼位與前面兩位信息碼元和在一起,保證碼組中“1”碼的個數(shù)為偶數(shù)。下表示出了這種情況:
表2-1 信息位與監(jiān)督位的關(guān)系
信息位
監(jiān)督位
晴
00
0
云
01
1
陰
10
1
雨
11
0
c)假設(shè)限制兩種可用碼組:000和 111。那么可以看出,這種明了的方法可以發(fā)現(xiàn)小于等于2個的誤碼;或者能夠糾正一位錯碼。糾正一位錯碼的方法是:將 8個碼組分成二個子集,其中{000、 100、 010、001}與許用碼組000對應(yīng),{111、011、101、110}與許用碼組111對應(yīng);這樣,在接收端如果認為碼組中僅有一個錯碼,只要收到第一子集中的碼組即判為 000,收到第二子集中的碼組即判為 111。如果接收的碼組是不可用碼組100時,假設(shè)這個碼組中只有1個錯誤的碼,就可以確定這個錯碼發(fā)生在“1”位,然后吧錯誤糾正成000;假設(shè)接收碼組中的錯碼的個數(shù)小于等于兩個,就可能有兩種情況:000錯一位,111錯兩位都有成為100的可能,所以不能糾錯只能檢驗到錯誤。
分組碼一般用數(shù)學(xué)符號表示,符號中k是每個碼組中信息碼的數(shù)目;n是每個碼組的總位數(shù),又稱為碼組長度(碼長),的數(shù)字是每碼組中的監(jiān)督碼元的個數(shù)。通常,將分組碼規(guī)定為具有如下圖所示的結(jié)構(gòu)。圖中前面k位(an-1…ar)為信息位,后面附加個監(jiān)督位(ar-1…a0)。
K個
信息位
碼長n=k+r
r個
監(jiān)督位
圖2-1分組碼的結(jié)構(gòu)
在信道編碼中,碼重就是碼組中不是零的碼元的個數(shù),比如說, 1101碼組的碼重是3,1100碼組的碼重為2。兩個碼組中所對應(yīng)碼位上所具有的不同二進制碼元的位數(shù)就是兩個碼組之間的距離,稱為碼距。最小碼距可記為。上面三位二進制碼組的討論中,8種碼組都是可以用的碼組的時候,兩個碼組之間的最小距離是1,可以記成。四種碼組都是可用碼組的話,最小碼距式中;使用了兩種可用碼組的時候,。
從上面可以知道,最小碼距關(guān)系到編碼碼的糾正錯誤和檢測錯誤的能力,所以說最小碼距在信道編碼中是重要參數(shù)。沒有特殊的情況下,對于分組碼有下面幾個結(jié)論:
a)為檢測e個誤碼,要求該編碼的最小碼距
b)為糾正t個誤碼,要求該編碼的最小碼距
c)為糾正t個誤碼,同時檢測e(e>t)個誤碼,要求最小碼距
“檢測e個誤碼的同時糾正t個誤碼”,說的是當接收碼組與某一個可用碼組間的距離在糾錯能達到的范圍內(nèi),就自動糾正誤碼;與隨意可用碼組間的距離都超過t時,則按“糾檢結(jié)合的方式”工作。
簡單分析了編碼的糾錯和檢錯的能力之后,再看看差錯控制編碼的能力。
如果在信道中傳輸“0”和“l(fā)”并且發(fā)生錯誤的概率P一樣,并且P<<1,那么在碼長為n位的碼組中出現(xiàn)r位錯碼的概率為;
例如,當碼長n=7,時,則有:
可見,采用了差錯控制編碼,哪怕僅僅糾正(或檢測)出了碼組中的一或二個錯誤碼,還是能夠讓誤碼率下降許多。這就能夠說明,僅僅糾錯(檢測)出一到二個錯碼編碼也很有用,即使只是很簡單的編碼。
2.2 模2運算原理
模2運算是一種二進制算法,CRC校驗技術(shù)中的核心部分,因此,我們在分析CRC算法之前,必須掌握模2運算的規(guī)則。與四則運算相同,模2運算也包括模2加、模2減、模2乘、模2除四種二進制運算。而且,模2運算也使用與四則運算相同的運算符,即“+”表示模2加,“-”表示模2減,“×”或“·”表示模2乘,“÷”或“/”表示模2除。這樣,兩個二進制位相運算時,這兩個位的值就能確定運算結(jié)果,不受前一次運算的影響,也不對下一次造成影響。
a)模2加法運算定義為:
0+0=0; 0+1=1; 1+0=1; 1+1=0
b)模2減法運算定義為:
0-0=0; 0-1=1; 1-0=1; 1-1=0
c)模2乘法運算定義為:
0×0=0; 0×1=0; 1×0=0; 1×1=1
多位二進制模2乘法類似于普通意義上的多位二進制乘法,不同之處在于后者累加中間結(jié)果(或稱部分積)時采用帶進位的加法,而模2乘法對中間結(jié)果的處理方式采用的是模2加法。
d)模2除法運算定義為:
0÷1=0 1÷1=1
多位二進制模2除法也類似于普通意義上的多位二進制除法,但是在如何確定商的問題上兩者采用不同的規(guī)則。按帶借位的二進制減法,通過計算余數(shù)減除數(shù)能不能夠減確定商0還是商1,若夠減則商1,否則商0。多位模2除法采用模2減法,不帶借位的二進制減法,因此考慮余數(shù)夠減除數(shù)與否是沒有意義的。實際上,在CRC運算中,總能保證除數(shù)的首位為1,則模2除法運算的商是由余數(shù)首位與除數(shù)首位的模2除法運算結(jié)果確定。因為除數(shù)首位總是1,按照模2除法運算法則,那么余數(shù)首位是1就商1,是0就商0。
2.3 CRC基礎(chǔ)計算
循環(huán)碼屬于分組碼也記為(n,k),可分為線性循環(huán)碼和非線性循環(huán)碼兩種。循環(huán)碼仍是線性分組碼,但另有循環(huán)移位不變特性。
循環(huán)碼的碼字和多項式:
設(shè)循環(huán)碼的任一個碼字為:
在二元情況下,只取1或0,為了完整描述一個碼字,需要知道的取值及其在碼字中的位置。用多項式來描述碼字是很方便的,于是表示的碼字用次多項式來表示,即:
上式表示一個n位長的碼字可以用一個次多項式來表示。可見多項式僅是碼字的一個數(shù)學(xué)描述工具,但不是碼字本身,但兩者有一一對應(yīng)的關(guān)系。
如果改寫為:
就可以讓碼字中的碼元循環(huán)向左移一位,所對照的多項式就相當于乘以:
上式中采用了模多項式運算,表明碼字的左移,相對于多項式乘(升冪)后取的模剩余。同理左移位相對于乘。兩多項式間一個常用的運算是加法,應(yīng)為同冪次項系數(shù)相加,在二元的情況下應(yīng)做模2加,例如:
則:
其中的一對和由于模2加消掉了,也可以認為做了減法。
多項式另一個常用的運算是除法,可排豎式長除法。
已知多項式:
列豎式做:
可見不能除盡,故有余式。如果將余式加到被除式即:
2.4 CRC編碼方法
在編碼時,首先要根據(jù)給定的(n,k)值選定生成多項式,即從()的因子中選一個(n-k)次多項式作為。
所有碼多項式都可以被整除。根據(jù)這條原則,就可以對給定的信息位進行編碼:設(shè)為信息碼多項式,其次數(shù)小于k。用乘,得到的次數(shù)必定小于n。用除,得到余式,的次數(shù)必定小于的次數(shù),即小于。把這個余式加在信息位后面當成監(jiān)督位,就是讓+,他們加的結(jié)果的多項式肯定是一個多項式。是因為它一定會被整除。
根據(jù)上述原理,編碼步驟如下:
用乘。
用除,得到商和余式,即:
編出的碼組為:
2.4.1 CRC產(chǎn)生操作過程
以下是一個8位的數(shù)據(jù)0x02產(chǎn)生一個16位的CRC的過程。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0
1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1
8 0 0 F
圖2-2 8位數(shù)據(jù)0x02的16位CRC數(shù)據(jù)產(chǎn)生
可以從上圖得出,0x02擴充到了24位,之后和0x8005(CRC-16生成多項式)做模2運算。運算的時候,第17位一直被丟掉。第16位如果是0的話,只能和0x0000異或,就是數(shù)據(jù)向左移一位。如果是1的話,就要和0x8005作異或運算。每次計算完,拋棄最高的位,然后將數(shù)據(jù)的下一位移過來,繼續(xù)進行模2運算,一直到所有的數(shù)位移完才停止。
2.5循環(huán)碼解碼方法
解碼器有兩個要求:檢測錯誤和糾正錯誤。因為隨便一個碼組多項式都是能夠被生成多項式整除的,那么在接收端接收的碼組用多項式去除。如果傳輸?shù)倪^程中并沒有發(fā)生錯誤,那么接收碼組與發(fā)送碼組一樣,就是,所以接收碼組一定能夠被整除;如果碼組在傳輸?shù)倪^程有錯,那么,被除時會出現(xiàn)除不盡而有余項的情況,所以,可以看余項是否為零判斷接收碼組中有沒有錯的碼。
提出一點,有可能除的盡R(x)。這個時候的錯誤碼就不能檢測出來。這種不在誤差之內(nèi)的錯誤就叫做不可檢錯誤。不可檢錯誤中的誤碼數(shù)超出了這種編碼的檢錯能力。
2.5.1 CRC解碼操作過程
以前文0x02數(shù)據(jù)(CRC = 0x800F)為例,計算如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1
1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0
圖2-3 8位數(shù)據(jù)0x02的16位CRC數(shù)據(jù)校驗
當然,也可以使用比較直觀的辦法,求數(shù)據(jù)0x02的CRC值,如果相等,那么也可以表明數(shù)據(jù)沒有問題。
3 仿真實現(xiàn)
3.1 仿真實現(xiàn)方案分析
硬件和軟件都可以實現(xiàn)CRC算法,硬件實現(xiàn)的方式電路結(jié)構(gòu)復(fù)雜,使得應(yīng)用系統(tǒng)功能模塊增多,增大系統(tǒng)體積降低了集成度,批量生產(chǎn)的產(chǎn)品中提高了產(chǎn)品成本;使用軟件實現(xiàn)的方法計算的速度受限于系統(tǒng)CPU的速度,但是隨著科技的發(fā)展,CPU已經(jīng)足以讓這樣的影響忽略不計,所以采用軟件實現(xiàn)的方法增加了系統(tǒng)集成度,從而提升系統(tǒng)的通信效率,在進行批量生產(chǎn)時可以極大的降低成本。
利用軟件實現(xiàn)可以采用的器件有MCU和CPLD,基于MCU的方案中由于MCU的處理數(shù)據(jù)的位寬固定,且運行速度不如基于CPLD的方法快,基于CPLD的方案管腳配置更靈活,運行速度更快更穩(wěn)定。故次設(shè)計中采用基于CPLD的軟件實現(xiàn)方法來完成CRC的編解碼校驗。
根據(jù)應(yīng)用的需要,有兩種常用的方法,來實現(xiàn)CRC的算法,查表法和逐位運算法,它們特點如下。
3.1.1 查表法實現(xiàn)方案分析
查表法,就是在編寫代碼之前計算好各種基本CRC的值,并且存儲在存儲器里面,需要時直接查詢存儲器中的CRC數(shù)據(jù)表,不用進行耗時的位運算,因為使用字和字節(jié)存在里面的。這樣查表法的速度就會增加,與基于位運算的方法相比在達到同等效果的時候就可以降低系統(tǒng)主頻和功耗,但是需要大量的寄存器來存儲CRC值。
8位數(shù)據(jù)的CRC查表法實現(xiàn)流程圖如下:
是
否
CRC與表數(shù)據(jù)做異或運算
運算結(jié)束
CRC左移n位
產(chǎn)生CRC表索引
初始化CRC寄存器
開始
最后異或運算
結(jié)束
圖3-1 查表法流程圖
3.1.2逐位運算法實現(xiàn)方案分析
逐位運算法,利用表3-2的原理來實現(xiàn)。數(shù)據(jù)左移一位時,要再次對每一位進行第二次運算,所以,總的數(shù)據(jù)位數(shù) - 16=移位操作的次數(shù)。
這樣子就可以得到,CPU使用的時間也不是太多的,當數(shù)據(jù)位數(shù)比較多時。數(shù)據(jù)位數(shù)越多,就要使用更多的CPU,為了超越查表法的速度,需要大幅度提高系統(tǒng)主頻,會增加功耗。
8位數(shù)據(jù)逐位運算法實現(xiàn)CRC的流程圖如下:
否
是
否
是
高位為1?
左移1位
異或運算
最后異或運算
結(jié)束
運算結(jié)束嗎
初始化CRC寄存器
設(shè)定下一個字節(jié)
開始
左移1位
圖3-2 逐位運算法流程圖
3.1.3 需求分析
根據(jù)對查表法和逐位運算法的分析與比較,發(fā)現(xiàn)雖然查表法能夠使用系統(tǒng)主頻低的cpu,而且只需要很小的功耗,但是,現(xiàn)在科技發(fā)展迅速,系統(tǒng)主頻的要求并不算難以應(yīng)付,就是功耗會大一點,而且逐位運算法的速度很快,比較方便。所以,決定使用逐位運算法來實現(xiàn)CRC編解碼的設(shè)計。
3.2 編解碼設(shè)計
先進行簡單的12位信息加5位CRC校驗碼發(fā)送、接收設(shè)計,由兩個模塊構(gòu)成CRC校驗生成模塊(發(fā)送)和CRC校驗檢錯模塊(接收),其中CRC生成多項式采用,二進制表示為110101。輸入、輸出都為并行的CRC校驗生成方式。
3.2.1 編碼模塊
數(shù)據(jù)生成模塊就是要生成17位串行的數(shù)據(jù),用這個數(shù)據(jù)來做CRC校驗的輸入,該部分代碼的實體定義如下所示:
entity shishikan is
Port (
clk : in std_logic;
coded_data : out STD_LOGIC_VECTOR(16 downto 0);
send : out std_logic;
data: in std_logic_vector(11 downto 0):="110011010101";
load : in std_logic
);
end shishikan;
其中,每個實體的含義如下:
data:12位的待發(fā)送信息;
clk:時鐘信號;
load:data的裝載信號;
send:生成、檢錯模塊的握手信號,協(xié)調(diào)相互之間關(guān)系;
coded_data:在生成模塊被發(fā)送。
該部分代碼生成的模塊如下圖:
圖3-3 CRC生成模塊
該部分的結(jié)構(gòu)體定義如下圖:
architecture Behavioral of shishikan is
constant multi_coef: std_logic_vector(5 downto 0) :="110101";
signal data_r: std_logic_vector(11 downto 0):="110011010101";
signal cnt: std_logic_vector(7 downto 0);
begin
process(clk)
variable crcvar : std_logic_vector(5 downto 0);
VARIABLE dtemp: STD_LOGIC_VECTOR(11 DOWNTO 0);
VARIABLE sdatam: STD_LOGIC_VECTOR(11 DOWNTO 0);
variable st: std_logic :='0';
begin
if(clk'event and clk = '1')then
if(st='0'and load='1')then
dtemp:=data_r; sdatam:=data_r; cnt<=(others=>'0'); send<='0'; st:='1';
elsif(st='1' and cnt<7)then
cnt<=cnt+1;
if(dtemp(11)='1')then
crcvar:=dtemp(11 downto 6)xor multi_coef(5 downto 0); dtemp:=crcvar(4 downto 0)& dtemp(5 downto 0) & '0';
else dtemp:=dtemp(10 downto 0) & '0';
end if;
elsif(st='1' and cnt=7)then
coded_data<=sdatam & dtemp(11 downto 7);
data<=data_r;
send<='1';cnt<=cnt+1;
elsif(st='1' and cnt=8)then
send<='0'; st:='0';
end if; end if;
end process;
end Behavioral;
對該部分代碼進行編譯綜合之后產(chǎn)生的rtl視圖和technology視圖見附錄2.1-2.5
附錄2.1-2.3表示的是寄存器cnt通過加法器自加,并且通過觸發(fā)器向內(nèi)部傳輸信號。Coded_data通過與dtemp的不停的互動輸出最后的數(shù)據(jù),而dtemp則不停的左移然后和crc-5異或得到數(shù)據(jù)送給coded_data.
資源使用圖如下:
圖3-4 編碼器資源使用圖
3.2.2 解碼模塊
解碼模塊的設(shè)計是本文的主要功能,該部分的代碼的實體定義如下所示:
entity jiemaqia is
Port (
clk : in std_logic;
coded_data : in STD_LOGIC_VECTOR(16 downto 0):="11001101010101000";
reception : in std_logic;
decode_data: out std_logic_vector(11 downto 0);
error1: out std_logic;
datafini : out std_logic
);
end jiemaqia;
每個實體的含義如下:
clk:時鐘信號;
error1:誤碼警告信號 ;
datafini:數(shù)據(jù)接收校驗完成;
reception:解碼模塊的握手信號,協(xié)調(diào)相互之間關(guān)系;
decode_data:接收模塊(檢錯模塊)接收的12位有效信息數(shù)據(jù);
coded_data:附加上5位CRC校驗碼的17位CRC碼,在生成模塊被發(fā)送。
該部分代碼生成的模塊如下圖:
圖3-5 crc解碼模塊
該部分的結(jié)構(gòu)體定義如下:
architecture Behavioral of jiemaqia is
constant multi_coef: std_logic_vector(5 downto 0) :="110101";
signal coded_data_r: std_logic_vector(16 downto 0):="11001101010101000";
signal rcnt: std_logic_vector(7 downto 0);
begin
process(clk,reception)
variable rcrcvar : std_logic_vector(5 downto 0);
variable rdtemp : std_logic_vector(11 downto 0);
variable rt: std_logic :='0';
variable rdatacrc : std_logic_vector(16 downto 0);
begin
if(clk'event and clk = '1')then
if(rt='0'and reception='1')then
rdtemp:=coded_data_r(16 DOWNTO 5);rdatacrc:=coded_data_r;
rcnt<=(others=>'0'); error1<='0';rt:='1';
elsif(rt='1'and rcnt<7)then
datafini<='0';rcnt<=rcnt+1;
rcrcvar:=rdtemp(11 downto 6)xor multi_coef;
if(rdtemp(11)='1')then
rdtemp:=rcrcvar(4 downto 0)& rdtemp(5 downto 0)& '0';
else rdtemp:=rdtemp(10 downto 0) & '0';
end if;
elsif(rt='1' and rcnt=7)then datafini<='1';
decode_data<=rdatacrc(16 downto 5); rt:='0';
if(rdatacrc(4 downto 0) /=rdtemp(11 downto 7)) then
error1<='1';
end if; end if; end if;
end process; end Behavioral;
對該部分代碼進行編譯綜合之后產(chǎn)生的rtl視圖以及technology視圖見附錄2.6-2.9
Rtl視圖表示了其中電路連接以及邏輯運算情況,17位數(shù)據(jù)輸入,12位數(shù)據(jù)輸出。通過邏輯元件進行運算。
資源使用圖如下:
圖3-6 解碼器資源使用圖
3.3 仿真驗證
在Quartus Ⅱ中編譯過代碼后打開Modelsim 進行仿真并且驗證。
3.3.1 編碼器仿真
添加激勵信號clk時鐘信號周期為10ns,數(shù)據(jù)裝載load為1,輸入數(shù)據(jù)data:110011010101
Testbench代碼如下:
LIBRARY altera ;
LIBRARY cycloneiii ;
LIBRARY ieee ;
USE altera.altera_primitives_components.all ;
USE cycloneiii.cycloneiii_components.all ;
USE ieee.std_logic_1164.all ;
ENTITY shishikan_tb IS
END ;
ARCHITECTURE shishikan_tb_arch OF shishikan_tb IS
SIGNAL load : STD_LOGIC :='0' ;
SIGNAL coded_data : std_logic_vector (16 downto 0) ;
SIGNAL data : std_logic_vector (11 downto 0) ;
SIGNAL send : STD_LOGIC ;
SIGNAL clk : STD_LOGIC :='0' ;
COMPONENT shishikan
PORT (
load : in STD_LOGIC ;
coded_data : buffer std_logic_vector (16 downto 0) ;
data : buffer std_logic_vector (11 downto 0) ;
send : buffer STD_LOGIC ;
clk : in STD_LOGIC );
END COMPONENT ;
BEGIN
DUT : shishikan
PORT MAP (
load => load ,
coded_data => coded_data ,
data => data ,
send => send ,
clk => clk ) ;
clk <= not clk after 10ns;
load <='1' after 20ns;
END ;
給clk賦初值為0,給load賦初值為0,添加代碼clk <= not clk after 10ns;和 load <='1' after 20ns;設(shè)置時鐘周期為20ns,load在20ns后置1,開始編碼。
仿真結(jié)果如下圖:
圖3-7 編碼器仿真圖
可以看出在8個時鐘周期后,編碼完成,由一開始的信息碼輸入OXCD5變成了輸出0X19AA8。
110011010101多項式表示為:
110101多項式表示為:
多項式五位二進制表示01000
編碼后的CRC編碼:11001101010101000用信息多項式表示為
不難看出11001101010101000轉(zhuǎn)換成16進制數(shù)就是0X19AA8.所以CRC編碼模塊功能正常。
3.3.2 解碼器仿真
添加激勵信號clk時鐘信號周期為10ns,數(shù)據(jù)裝載reception為1,輸入數(shù)據(jù)coded_data: 11001101010101000,激勵信號添加完成,按照軟件設(shè)計進行仿真。
Testbench代碼如下:
LIBRARY altera ;
LIBRARY cycloneiii ;
LIBRARY ieee ;
USE altera.altera_primitives_components.all ;
USE cycloneiii.cycloneiii_components.all ;
USE ieee.std_logic_1164.all ;
ENTITY jiemaqia_tb IS
END ;
ARCHITECTURE jiemaqia_tb_arch OF jiemaqia_tb IS
SIGNAL datafini : STD_LOGIC ;
SIGNAL coded_data : std_logic_vector (16 downto 0) ;
SIGNAL decode_data : std_logic_vector (11 downto 0) ;
SIGNAL reception : STD_LOGIC :'1' ;
SIGNAL clk : STD_LOGIC :='0';
SIGNAL error1 : STD_LOGIC ;
COMPONENT jiemaqia
PORT (
datafini : out STD_LOGIC ;
coded_data : out std_logic_vector (16 downto 0) ;
decode_data : out std_logic_vector (11 downto 0) ;
reception : in STD_LOGIC ;
clk : in STD_LOGIC ;
error1 : out STD_LOGIC );
END COMPONENT ;
BEGIN
DUT : jiemaqia
PORT MAP (
datafini => datafini ,
coded_data => coded_data ,
decode_data => decode_data ,
reception => reception ,
clk => clk ,
error1 => error1 ) ;
clk <= not clk after 10ns;
END ;
同樣的,給clk賦初值0,
收藏