基于VHDL的CRC編解碼設(shè)計說明_第1頁
基于VHDL的CRC編解碼設(shè)計說明_第2頁
基于VHDL的CRC編解碼設(shè)計說明_第3頁
基于VHDL的CRC編解碼設(shè)計說明_第4頁
基于VHDL的CRC編解碼設(shè)計說明_第5頁
已閱讀5頁,還剩22頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

./摘要循環(huán)冗余校驗碼是一種廣泛應(yīng)用檢錯編碼,本設(shè)計以MaxPlusII為開發(fā)平臺利用VHDL語言完成了CRC編解碼設(shè)計。設(shè)計采用了模塊化的方法,給出了CRC編解碼的結(jié)構(gòu)框圖和部分仿真結(jié)果,結(jié)果表明該系統(tǒng)的設(shè)計方案正確。關(guān)鍵詞:VHDL;循環(huán)冗余校驗〔CRC;檢錯ABSTRACTCyclicredundancycheckcodeisawidelyusederrordetectioncode,thedesignoftheMaxPlusIIdevelopmentplatformforthecompletionoftheCRCusingVHDLlanguagecodecdesign.Designusesamodularapproach,giventhestructureofCRCdecodingblockdiagramandsomesimulationresults,theresultsshowthatthesystemisdesignedcorrectly.Keywords:VHDL;Cyclicredundancycheck<CRC>;Errordetection.目錄摘要IABSTRACTII第1章引言11.1概述11.2容概要3第2章CRC編解碼理論42.1糾錯編碼的基本原理42.2模2運算原理62.3CRC分類72.3.1標(biāo)準(zhǔn)的CRC82.3.2非標(biāo)準(zhǔn)的CRC82.4循環(huán)碼理論基礎(chǔ)82.5循環(huán)碼編碼方法102.5.1CRC產(chǎn)生操作過程112.6循環(huán)碼解碼方法112.6.1CRC解碼操作過程12第3章方案設(shè)計133.1實現(xiàn)方案分析133.1.1查表法實現(xiàn)方案分析13逐位運算法實現(xiàn)方案分析143.1.3現(xiàn)實需求分析153.2系統(tǒng)硬件設(shè)計163.2.1電源模塊173.2.2時鐘模塊173.2.3調(diào)試測試接口183.2.4復(fù)位電路設(shè)計183.3設(shè)計工具及開發(fā)流程19第4章程序模塊設(shè)計及仿真204.1程序設(shè)計與仿真204.1.1編碼模塊設(shè)計與仿真214.1.2解碼模塊設(shè)計與仿真234.1.3循環(huán)冗余碼編碼模塊與解碼模塊聯(lián)合運行25第5章結(jié)束語27致28參考文獻(xiàn)29附錄A30附錄B32.第1章引言1.1概述通信,指人與人或人與自然之間通過某種行為或媒介進(jìn)行的信息交流與傳遞,從廣義上指需要信息的雙方或多方在不違背各自意愿的情況下無論采用何種方法,使用何種媒質(zhì),將信息從某方準(zhǔn)確安全傳送到另方。模擬通信是利用正弦波的幅度、頻率或相位的變化,或者利用脈沖的幅度、寬度或位置變化來模擬原始信號,以達(dá)到通信的目的。模擬信息源模擬信息源調(diào)制器信道解調(diào)器受信者噪聲源圖1-1模擬通信系統(tǒng)模型數(shù)字通信是用數(shù)字信號作為載體來傳輸消息,或用數(shù)字信號對載波進(jìn)行數(shù)字調(diào)制后再傳輸?shù)耐ㄐ欧绞健K蓚鬏旊妶?、?shù)字?jǐn)?shù)據(jù)等數(shù)字信號,也可傳輸經(jīng)過數(shù)字化處理的語聲和圖像等模擬信號。信息源信息源信源編碼加密信道編碼數(shù)字調(diào)制信道數(shù)字解調(diào)信道譯碼解密信源譯碼受信者圖1-2數(shù)字通信系統(tǒng)模型與模擬數(shù)據(jù)通信相比較,數(shù)字?jǐn)?shù)據(jù)通信具有下列優(yōu)點:數(shù)字技術(shù)的發(fā)展較模擬技術(shù)更快,數(shù)字設(shè)備通過集成電路很容易實現(xiàn),并與計算機(jī)相結(jié)合,而由于超大規(guī)模集成電路技術(shù)的迅速發(fā)展,數(shù)字設(shè)備的體積與成本的下降速度大大超過模擬設(shè)備,性能價格比高;來自視頻、聲音和其他信息源的各類數(shù)據(jù)均可統(tǒng)一為數(shù)字信號的形式,并通過數(shù)字通信系統(tǒng)傳輸;在長距離數(shù)字通信中可以通過中繼器放大和整形來保證數(shù)字信號的完整性而不累積噪音;以數(shù)據(jù)幀為單位傳輸數(shù)據(jù),并通過檢錯編碼和重發(fā)數(shù)據(jù)幀來發(fā)現(xiàn)與糾正通信錯誤,從而有效保證通信的可靠性;使用加密技術(shù)可有效增強(qiáng)通信的安全性;多路光纖技術(shù)的發(fā)展大大提高了數(shù)字通信的效率。"信息社會""信息經(jīng)濟(jì)"等名稱越來越多的出現(xiàn)在我們的生活中,生活離不開信息,隨著社會生產(chǎn)的發(fā)展,科學(xué)技術(shù)的進(jìn)步,人們對傳輸信息的要求急劇增加.到了20世紀(jì)20年代,如何提高傳遞信息的能力和可靠性已成為普遍重視的課題,在傳輸過程中發(fā)生錯誤后能在收端自行發(fā)現(xiàn)或糾正的碼。數(shù)字信號在傳輸過程中,由于受到干擾的影響,碼元波形變壞。接收端收到后可能發(fā)生錯誤的判決。由于乘性干擾引起的碼間串?dāng)_,可以采用均衡的辦法糾正.而加性的影響則需要用其他的辦法解決。在設(shè)計數(shù)字?jǐn)?shù)字通信系統(tǒng)時,應(yīng)該首先從合理選擇調(diào)制制度,解調(diào)方法以及發(fā)生功率等方面考慮,使加性干擾不足以影響達(dá)到誤碼率的要求,在仍不能滿足要,就要考慮采用查錯控制措施了。一些通用的系統(tǒng),其誤碼率要求因用途而異,也可以把查錯控制作為附加手段,在需要時加用。從查錯控制角度看,按照加性干擾引起的錯碼分布規(guī)律的不同,信道可以分為三類。即隨機(jī)信道、突發(fā)信道和混合信道。在隨機(jī)信道中,錯碼的出現(xiàn)是隨機(jī)的,而且錯碼之間的統(tǒng)計是獨立的。在突發(fā)信道中,錯碼是成串集中出現(xiàn)的,即在一些短促的時間段會出現(xiàn)大量錯碼,而在這些短促的時間段之間存在較長的無錯碼區(qū)間。查錯控制技術(shù)主要有以下四種:檢錯重發(fā):在發(fā)生碼元序列中加入差錯控制碼元,接收端利用這些碼元檢測到有碼元時,利用反相信道通知發(fā)送端,要求發(fā)送端重發(fā),直到正確接收為止。所謂檢測到有碼錯,是指在一組接收碼元中知道有一個或一些錯碼,但是不知道該錯碼該如何糾正。采用檢錯重發(fā)技術(shù)時,通信系統(tǒng)需要有雙向信道傳送重發(fā)指令。前向糾錯:前向糾錯一般簡稱FEC〔ForwardErrorCorrection。這時接收端利用發(fā)送端在發(fā)送碼元序列中加入的差錯控制碼元,不但能夠發(fā)現(xiàn)錯碼,還能將錯碼恢復(fù)其正確取值。在二進(jìn)制碼元的情況下,能夠確定錯碼的位置,就相當(dāng)于能夠就糾正錯碼。采用FEC是,不需要反相信道傳送重發(fā)指令,也沒有因反復(fù)重發(fā)而產(chǎn)生的時延,故實時性好。但是為了能夠糾正錯碼,而不是僅僅檢測到有錯碼,和檢測重發(fā)相比,需要加入更多的差錯控制碼元。故設(shè)備要比檢測重發(fā)設(shè)備復(fù)雜。反饋校驗〔FeedCheckout:這時不需要在發(fā)送序列中加入差錯控制碼元。接收端將接收到的碼元原封不動地轉(zhuǎn)發(fā)回發(fā)送端。在發(fā)送端將它和原發(fā)送碼元逐一比較。若發(fā)現(xiàn)有不同,就認(rèn)為接收端收到的序列中有錯碼,發(fā)送端立即重發(fā)。這種技術(shù)的原理和設(shè)備都很簡單。但是需要雙向信道,傳輸效率也比較低,因為每個碼元都需要占用兩次傳輸時間。檢錯刪除〔deletion:它和檢錯重發(fā)的區(qū)別在于,在接收端發(fā)現(xiàn)錯誤碼后,立即將其刪除,不要求重發(fā)。這種方法只適用在少數(shù)特定系統(tǒng)中,在那里發(fā)送碼元中有大量多余度,刪除不分接收碼元不影響應(yīng)用。循環(huán)碼是線性分組碼中最重要的一個子類,它的結(jié)構(gòu)完全建立在有限域的基礎(chǔ)上,可以用近似代數(shù)的方法精確描述,循環(huán)碼是1957年由普蘭奇<Prange>提出的,此后幾十年中得到了充分的研究和發(fā)展。起初人們認(rèn)識到并感興趣的是循環(huán)碼的外在特點,即循環(huán)碼碼字的循環(huán)移位后仍然是碼字,這個特點給循環(huán)碼的編譯碼實現(xiàn)帶來了便利。在以后的實踐中,人們從循環(huán)群的角度,在代數(shù)機(jī)構(gòu)、糾錯性能控制等方面找到了循環(huán)碼更加吸引人的優(yōu)越之處。目前,使用查錯控制系統(tǒng)中使用的線性分組碼幾乎都是循環(huán)碼或循環(huán)碼的子類。循環(huán)冗余校驗碼〔CRC是一種系統(tǒng)的縮短循環(huán)碼,廣泛應(yīng)用于幀校驗。1.2容概要本設(shè)計主要分析循環(huán)冗余碼理論,在理論基礎(chǔ)上探討其運用VHDL語言實現(xiàn)其算法,設(shè)計主要分為兩個模塊,即循環(huán)冗余碼編碼模塊和循環(huán)冗余解碼模塊,主要編程工具為MaxPlusII。本設(shè)計主要容首先從了解循環(huán)冗余校驗碼的實際應(yīng)用入手,然后分析糾錯編碼的基本原理,研究程序設(shè)計中的基本運算規(guī)則〔模2運算入手,深入分析循環(huán)冗余碼的編解碼理論及其工程實現(xiàn)算法。提出編解碼方案并進(jìn)行比較分析,選出符合本設(shè)計要求的實現(xiàn)方案,進(jìn)行硬件設(shè)計,最后進(jìn)行程序的模塊化設(shè)計,并進(jìn)行仿真驗證,模塊仿真驗證無誤進(jìn)行模塊組合調(diào)試仿真。分析仿真結(jié)果得出結(jié)論。第2章CRC編解碼理論2.1糾錯編碼的基本原理信道編碼是在被傳送的信息中附加一些監(jiān)督碼元,來檢錯和糾錯。下面以三位二進(jìn)制碼組為例,說明檢錯糾錯的基本原理。三位二進(jìn)制碼元共有=8種可能的組合;000、001、010、011、100、101、110、111。下面分三種情況討論〔l如果這8種碼組都用于傳送消息,即每個碼組都是許用碼組。在傳輸過程中若發(fā)生一個或多個誤碼,則一種碼組會錯誤地變成另一種碼組。這樣的編碼既不能檢錯,也不能糾錯,完全沒有抗干擾能力;

〔2若只選其中的000、011、101、110四種碼組作為許用碼組。除上述4種許用碼組以外的另外4種碼組001、010、100、111稱為禁用碼組。經(jīng)觀察我們可以發(fā)現(xiàn),許用碼組中"1"的個數(shù)為偶數(shù)個,禁用碼組中"1"的個數(shù)為奇數(shù)個。如果在傳輸過程中發(fā)生了一位或三位的錯碼,則"1"的個數(shù)就變?yōu)槠鏀?shù)個,許用碼組就變?yōu)榻么a組;接收端一旦發(fā)現(xiàn)這些禁用碼組,就表明傳輸過程中發(fā)生了錯誤。用這種簡單的校驗關(guān)系可以發(fā)現(xiàn)一個和三個錯誤,但不能糾正錯誤。例如,當(dāng)接收到的碼組為010時,我們可以斷定這是禁用碼組,但無法判斷原來的正確碼組是哪個許用碼組。雖然原發(fā)送碼組為101的可能性很小〔因為發(fā)生三個誤碼的情況極少,但不能絕對排除;即使傳輸過程中只發(fā)生一個誤碼,也有三種可能的發(fā)送碼組:000、011和110。顯然,上述編碼無法發(fā)現(xiàn)2個錯碼。以上編碼方法相當(dāng)于只傳遞00、01、10、11四種信息,而第三位是附加的監(jiān)督位。這位附加的監(jiān)督碼位與前面兩位信息碼元和在一起,保證碼組中"1"碼的個數(shù)為偶數(shù)。下表示出了這種情況:表2-1信息位與監(jiān)督位的關(guān)系信息位監(jiān)督位晴000云011陰101雨110〔3如果進(jìn)一步將許用碼組限制為二種:000和111。則不難看出,用這種方法可以發(fā)現(xiàn)所有不超過2個的誤碼;或能糾正一位錯碼。糾正一位錯碼的方法是:將8個碼組分成二個子集,其中{000、100、010、001}與許用碼組000對應(yīng),{111、011、101、110}與許用碼組111對應(yīng);這樣,在接收端如果認(rèn)為碼組中僅有一個錯碼,只要收到第一子集中的碼組即判為000,收到第二子集中的碼組即判為111。例如,當(dāng)收到的碼組為禁用碼組100時,如果認(rèn)為該碼組中僅有1個錯碼,則可判斷此錯碼發(fā)生在"1"位,從而糾正為000;若認(rèn)為上述接收碼組中的錯碼數(shù)不超過兩個,則存在兩種可能性:000錯一位和111錯兩位都可能變成100,因而只能檢測出存在錯碼而無法糾正它。分組碼一般用符號<n,k>表示,其中k是每個碼組中二進(jìn)信息碼元的數(shù)目;n是每個碼組的總位數(shù),又稱為碼組長度<碼長>;n-k=r為每碼組中的監(jiān)督碼元數(shù)目,或稱監(jiān)督位數(shù)目。通常,將分組碼規(guī)定為具有如下圖所示的結(jié)構(gòu)。圖中前面k位<an-1…ar>為信息位,后面附加個監(jiān)督位<ar-1…a0>。K個信息位K個信息位碼長n=k+rr個監(jiān)督位圖2-1分組碼的結(jié)構(gòu)

在信道編碼中,碼組的重量就是碼組中非零碼元的數(shù)目,簡稱碼重,例如0010碼組的碼重為1,0011碼組的碼重為2。漢明〔Hamming距離就是兩個碼組中對應(yīng)碼位上具有不同二進(jìn)制碼元的位數(shù)定義為兩碼組的距離,簡稱碼距。我們把某種編碼中各個碼組間距離的最小值稱為最小碼距,可記為。在上述三位二進(jìn)制碼組例子中,8種碼組均為許用碼組時,兩碼組間的最小距離為1,常記作。在選四種碼組為許用碼組情況下,最小碼距式中;采用兩種許用碼組時,。由上例可知,一種編碼的最小碼距直接關(guān)系到這種碼的檢錯和糾錯能力,碼距實際上是由一種碼組變成另一種碼組必須變化的比特數(shù)。因此最小碼距是信道編碼的一個重要參數(shù)。在一般情況下,對于分組碼有以下結(jié)論:①為檢測e個誤碼,要求該編碼的最小碼距

〔2.1-1

②為糾正t個誤碼,要求該編碼的最小碼距

〔2.1-2

③為糾正t個誤碼,同時檢測e〔e>t個誤碼,要求最小碼距

〔2.1-3所謂"糾正t個誤碼,同時檢測e個誤碼",是指若接收碼組與某一許用碼組間的距離在糾錯能力圍t,則按前向糾錯方式工作,自動將誤碼予以糾正;而當(dāng)與任何許用碼組間的距離都超過t時,則按檢錯方式工作。也就是按"糾檢結(jié)合的方式"工作。

在簡要討論了編碼的糾〔檢錯能力后,再來分析一下差錯控制編碼的效用。

假設(shè)在信道中傳輸"0"和"l"的錯誤概率p相等,且p<<1,則在碼長為n位的碼組中發(fā)生r位錯碼的概率〔誤碼率為〔2.1-4例如,當(dāng)碼長n=7,時,則有可見,采用了差錯控制編碼,即使只能糾正〔或檢測碼組中的l~2個錯0碼,也可以使誤碼率下降幾個數(shù)量級。這就表明,只能糾〔檢1~2個錯碼的簡單編碼也有很大實用價值。事實上,常用的差錯控制編碼大多數(shù)也只能糾正〔或檢測碼組中的l~2個錯碼。2.2模2運算原理模2運算是一種二進(jìn)制算法,CRC校驗技術(shù)中的核心部分,因此,我們在分析CRC算法之前,必須掌握模2運算的規(guī)則。與四則運算相同,模2運算也包括模2加、模2減、模2乘、模2除四種二進(jìn)制運算。而且,模2運算也使用與四則運算相同的運算符,即"+"表示模2加,"-"表示模2減,"×"或"·"表示模2乘,"÷"或"/"表示模2除。與四則運算不同的是模2運算不考慮進(jìn)位和借位,即模2加法是不帶進(jìn)位的二進(jìn)制加法運算,模2減法是不帶借位的二進(jìn)制減法運算。這樣,兩個二進(jìn)制位相運算時,這兩個位的值就能確定運算結(jié)果,不受前一次運算的影響,也不對下一次造成影響。

①模2加法運算定義為:

0+0=0;0+1=1;1+0=1;1+1=0②模2減法運算定義為:0-0=0;0-1=1;1-0=1;1-1=0③模2乘法運算定義為:

0×0=0;0×1=0;1×0=0;1×1=1

多位二進(jìn)制模2乘法類似于普通意義上的多位二進(jìn)制乘法,不同之處在于后者累加中間結(jié)果〔或稱部分積時采用帶進(jìn)位的加法,而模2乘法對中間結(jié)果的處理方式采用的是模2加法。④模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運算中,總能保證除數(shù)的首位為1,則模2除法運算的商是由余數(shù)首位與除數(shù)首位的模2除法運算結(jié)果確定。因為除數(shù)首位總是1,按照模2除法運算法則,那么余數(shù)首位是1就商1,是0就商0。2.3CRC分類在線性分組碼中,有一種重要的碼稱為循環(huán)碼<cycliccode>。循環(huán)碼是建立在嚴(yán)密的代數(shù)學(xué)理論基礎(chǔ)上之上的。這種碼的檢〔糾錯能力較強(qiáng),而且編碼和解碼設(shè)備都不太復(fù)雜。循環(huán)碼除了具有線性碼的一般性質(zhì)外,還具有循環(huán)性。循環(huán)性是指任一碼組循環(huán)移位以后,仍是該碼中的一個碼組。作為數(shù)據(jù)傳輸中差錯控制的基本方法之一,循環(huán)冗余校驗〔CyclicRedundantCheck已被廣泛用于通信應(yīng)用中。目前CRC的應(yīng)用分為非標(biāo)準(zhǔn)和標(biāo)準(zhǔn)兩種,已被國際標(biāo)準(zhǔn)化組織規(guī)定的標(biāo)準(zhǔn)生成多項式為標(biāo)準(zhǔn),用戶自定義的生成多項式為非標(biāo)準(zhǔn),這也是目前廣泛使用的幾種。2.3.1標(biāo)準(zhǔn)的CRC在通信協(xié)議中常見并被廣泛使用的標(biāo)準(zhǔn)列于表中。表2-2標(biāo)準(zhǔn)CRC多項式名稱多項式簡記應(yīng)用CRC-40x13ITUG.704CRC-160x8005IBMSDLCCRC-CCITT0x1201ISOHDLC,ITUX.25,SDLC,V.34/V.41/V.42,PPP-FCSCRC-320x104C11DB7ZIP,RAR,IEEE802LAN/FDDI,IEEE1394,PPP-FCSCRC-32C0x11EDC6F41SCTP2.3.2非標(biāo)準(zhǔn)的CRC非標(biāo)準(zhǔn)的CRC一般是為了某種用途而采用不同于標(biāo)準(zhǔn)的生成多項式,而實際的操作原理是相同的,主要用于需要CRC而需要低成本的應(yīng)用,或者為了減輕設(shè)計算機(jī)處理負(fù)擔(dān)而又能夠保證數(shù)據(jù)可靠性的折中辦法,此外,部分的加密算法也是采用CRC來生成。2.4循環(huán)碼理論基礎(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)的多項式相對于乘:上式中采用了模多項式運算,表明碼字的左移,相對于多項式乘<升冪>后取的模剩余。同理左移位相對于乘。兩多項式間一個常用的運算是加法,應(yīng)為同冪次項系數(shù)相加,在二元的情況下應(yīng)做模2加,例如:則:其中的一對和由于模2加消掉了,也可以認(rèn)為做了減法。多項式另一個常用的運算是除法,可排豎式長除法。已知多項式:列豎式做:可見不能除盡,故有余式。如果將余式加到被除式即:2.5循環(huán)碼編碼方法在編碼時,首先要根據(jù)給定的<n,k>值選定生成多項式,即從〔的因子中選一個〔n-k次多項式作為。所有碼多項式都可以被整除。根據(jù)這條原則,就可以對給定的信息位進(jìn)行編碼:設(shè)為信息碼多項式,其次數(shù)小于k。用乘,得到的次數(shù)必定小于n。用除,得到余式,的次數(shù)必定小于的次數(shù),即小于。將此余式加于信息位之后作為監(jiān)督位,即將和相加,得到的多項式必定是一個碼多項式。因為它必定能夠被整除,且商的次數(shù)不大于。根據(jù)上述原理,編碼步驟如下:用乘。用除,得到商和余式,即編出的碼組為2.5.1CRC產(chǎn)生操作過程以下是一個8位的數(shù)據(jù)0x02產(chǎn)生一個16位的CRC的過程。1234567891011121314151617181920212223240000001000000000000000000000000000000000000000010000000000000000000000000000000000100000000000000000000000000000000010000000000000000000000000000000001000000000000000000000000000000000100000000000000000000000000000000010000000000000000110000000000001010100000000000010101100000000000010101000000000001111800F表2-3,8位數(shù)據(jù)0x02的16位CRC數(shù)據(jù)產(chǎn)生在圖中我們可以看到,這個0x02數(shù)據(jù)被擴(kuò)充到24位〔原數(shù)據(jù)8位+16位CRC,不足的用零填充,然后再與0x8005〔CRC-16生成多項式做模2運算。在運算過程中,第17位總是被舍去〔圖中紅色的位。第16位如果是零,那么,只能與0x0000作異或運算,即數(shù)據(jù)左移一位。如果為1,那么就要與0x8005作模2〔異或運算。每次運算完畢,丟棄最高位,然后將數(shù)據(jù)下一位移入,再進(jìn)行模2〔異或運算,直到所有的位移完為止。2.6循環(huán)碼解碼方法接收端解碼的要求有兩個:檢錯和糾錯。由于任意一個碼組多項式都應(yīng)該能被生成多項式整除,所以在接收端可以講接收的碼組用原生成多項式去除。當(dāng)傳輸中未發(fā)生錯誤時,接收碼組與發(fā)送碼組相同,即,故接收碼組必定能被整除;若碼組在傳輸中發(fā)生錯誤,則,被除時可能除不盡而有余項,即有因此,我們就以余項是否為零來判別接收碼組中有無錯碼。需要指出,有錯碼的接收碼組也有可能被整除。這時的錯碼就不能檢出了。這種錯誤稱為不可檢錯誤。不可檢錯誤中的誤碼數(shù)必定超過了這種編碼的檢錯能力。2.6.1CRC解碼操作過程以前文0x02數(shù)據(jù)<CRC=0x800F>為例,計算如下:12345678910111213141516171819202122232400000010100000000000111100000000000000000000000101000000000000000000000000000000001010000000000000000000000000000000101000000000000000000000000000000010100000000000100000000000000000001010000000000011000000000000000000101000000000001111100000000000010101100000000000010111000000000000101000000000000000000000表2-4,8位數(shù)據(jù)0x02的16位CRC數(shù)據(jù)校驗當(dāng)然,也可以使用比較直觀的辦法,只對數(shù)據(jù)0x02求CRC值,如果等于接收到的CRC,那么也說明數(shù)據(jù)沒有問題。.第3章方案設(shè)計3.1實現(xiàn)方案分析CRC算法可以用硬件實現(xiàn),也可以用軟件實現(xiàn),硬件實現(xiàn)的方式電路結(jié)構(gòu)復(fù)雜,使得應(yīng)用系統(tǒng)功能模塊增多,增大系統(tǒng)體積降低了集成度,批量生產(chǎn)的產(chǎn)品中提高了產(chǎn)品成本;使用軟件實現(xiàn)的方法計算的速度受限于系統(tǒng)CPU的速度,但是隨著CPU的集成度和運行速度的提高,這樣的影響顯得微不足道,所以采用軟件實現(xiàn)的方法增加了系統(tǒng)集成度,從而提升系統(tǒng)的通信效率,在進(jìn)行批量生產(chǎn)時可以極大的降低成本。利用軟件實現(xiàn)可以采用的器件有MCU和CPLD,基于MCU的方案中由于MCU的處理數(shù)據(jù)的位寬固定,且運行速度不如基于CPLD的方法快,基于CPLD的方案管腳配置更靈活,運行速度更快更穩(wěn)定。故次設(shè)計中采用基于CPLD的軟件實現(xiàn)方法來完成CRC的編解碼校驗。常用CRC軟件實現(xiàn)方法是串行計算方法,使用一位數(shù)據(jù)輸入,n位長度的原始數(shù)據(jù)連續(xù)計算n次后得出校驗碼,軟件串行方式處理需要較多個CPU時鐘周期,可以工作在較高的時鐘頻率下。但隨著通信速度的不斷提高,高的數(shù)據(jù)傳輸帶寬要求CRC的計算速度越來越快,串行計算的方法已經(jīng)不適應(yīng)要求,所以越來越多的使用并行計算方法。根據(jù)應(yīng)用的需要,有兩種常用的方法,來實現(xiàn)CRC的算法,查表法和逐位運算法,它們特點如下。3.1.1查表法實現(xiàn)方案分析查表法,就是預(yù)先算好基本的CRC值,并存儲于存儲器中,需要時直接查詢存儲器中的CRC數(shù)據(jù)表,它是以字或字節(jié)為單位進(jìn)行操作的,而不進(jìn)行耗時的位運算。這樣查表法的速度就會增加,與基于位運算的方法相比在達(dá)到同等效果的時候就可以降低系統(tǒng)主頻,從而使功耗大大降低,但這樣的代價就是付出大容量的存儲器。以一個8位的數(shù)據(jù)為例,作一次異或操作就能夠完成著一個字節(jié)。表中的CRC值與其索引值有一個一一對應(yīng)的關(guān)系。8位數(shù)據(jù)的CRC查表法實現(xiàn)流程圖如下:CRC與表數(shù)據(jù)做異或運算運算結(jié)束嗎?CRC與表數(shù)據(jù)做異或運算運算結(jié)束嗎?CRC左移n位產(chǎn)生CRC表索引初始化CRC寄存器開始最后異或運算結(jié)束圖3-1查表法流程圖3.1.2逐位運算法實現(xiàn)方案分析逐位運算法,直接根據(jù)表2-3的原理實現(xiàn)的。數(shù)據(jù)每次移入一位時,就需要重新對每一位進(jìn)行再次運算,因此:移位操作的次數(shù)=總的數(shù)據(jù)位數(shù)-16由此可以得出,當(dāng)數(shù)據(jù)位數(shù)比較多時,CPU使用的時間還是比較多的,數(shù)據(jù)位數(shù)越多,就意味著使用更多的CPU機(jī)時,為了達(dá)到查表法同樣的速度,就必須加倍的提高系統(tǒng)主頻,由此會帶來了功耗增加的問題。8位數(shù)據(jù)逐位運算法實現(xiàn)CRC的流程圖如下:高位為1嗎?高位為1嗎?左移1位下一字節(jié)最高位移入異或運算最后異或運算結(jié)束運算結(jié)束嗎?初始化CRC寄存器設(shè)定下一個字節(jié)開始左移1位下一字節(jié)最高位移入圖3-2逐位運算法流程圖3.1.3現(xiàn)實需求分析CRC碼校驗根據(jù)第二章理論分析可知,實現(xiàn)CRC的基本原理,簡單的說,就是原始數(shù)據(jù)通過某種算法,得到一個新的數(shù)據(jù),而這個新的數(shù)據(jù)與原數(shù)據(jù)有著固定的在關(guān)系,通過把原數(shù)據(jù)和新數(shù)據(jù)組合在一起,形成新的數(shù)據(jù),因此這個新數(shù)據(jù)具有自我檢驗的能力。然而,前面經(jīng)驗證的理論公式僅適用于理論模型,而實際中還需要考慮幾個問題。首先要考慮CRC的數(shù)據(jù)位,不管有多長的數(shù)據(jù)位,總是希望有一個固定位數(shù)的,以便在實現(xiàn)時可以節(jié)省很多資源。同時考慮到的數(shù)據(jù)位長度可能比CRC位數(shù)短,為了得到一個16位〔或者32位的數(shù)據(jù)長度,必須將原有數(shù)據(jù)擴(kuò)展到16位以上,才能得到一個16位的余數(shù)。通常的做法是在的右邊添加相應(yīng)的CRC位數(shù),例如16位則需要增加16個數(shù)據(jù)位,32位需要增加32個數(shù)據(jù)位。其次,規(guī)定CRC的最高位和最低位必須為1,由于標(biāo)準(zhǔn)的CRC是17位和32位,因此,如何在目前8位、16位、32位、64位等數(shù)據(jù)總線的計算機(jī)上實現(xiàn)通常是需要考慮的。在實際應(yīng)用中,我們并不需要考慮這個最高的CRC位,因為它是總是被舍去,故只要考慮余下的16位〔或者32位就可以了。第三,商不需要,因此根本不要考慮。第四,除法運算沒有數(shù)學(xué)上的含義,而是計算機(jī)中的模2算法,即每個數(shù)據(jù)位,與除數(shù)作邏輯異或運算,因此不存在進(jìn)位或者借位問題。3.2系統(tǒng)硬件設(shè)計本設(shè)計以CPLD為核心進(jìn)行設(shè)計,通過需求分析本設(shè)計中所需外圍電路主要有:控制器核心、電源模塊、時鐘模塊、調(diào)試測試接口、復(fù)位及復(fù)位配置系統(tǒng)。由于CPLD的I/O管腳的可配置性,在設(shè)計中必須考慮I/O管腳功能的分配,以便使系統(tǒng)設(shè)計中PCB布局布線簡潔和操作方便。CPLD核心CPLD核心復(fù)位系統(tǒng)時鐘系統(tǒng)調(diào)試測試接口電源模塊圖3-3系統(tǒng)框圖3.2.1電源模塊電源模塊工作原理,首先接入220V市電電源,經(jīng)過變壓器降壓,然后經(jīng)橋式整流器并通過濾波電容濾波得到紋波電壓較小的直流電壓,此電壓輸入穩(wěn)壓器7805后輸出穩(wěn)定的5V直流電壓且紋波電壓較小,5V電壓輸入低壓差穩(wěn)壓器〔LDOAMS1117得到3.3V電壓即可供系統(tǒng)使用。同時在此系統(tǒng)中增加了USB供電設(shè)計,在無外接電源的時候可采用USB供電。圖3-4電源模塊原理圖3.2.2時鐘模塊系統(tǒng)時鐘模塊猶如人的心臟汽車的發(fā)動機(jī),系統(tǒng)時鐘的穩(wěn)定性決定了系統(tǒng)工作的穩(wěn)定性,且系統(tǒng)時鐘頻率越高系統(tǒng)運行速度越快,常用使用晶振有無源和有源,有源晶振具有穩(wěn)定性高,且頻率更高,應(yīng)用更加簡單。在本設(shè)計中采用有源晶振進(jìn)行設(shè)計。圖3-5時鐘模塊原理圖3.2.3調(diào)試測試接口程序設(shè)計完成需要下載到系統(tǒng)電路板上進(jìn)行相應(yīng)的調(diào)試,進(jìn)行系統(tǒng)級的軟硬件聯(lián)合測試,只有通過軟硬件聯(lián)合測試的系統(tǒng)才是完整的系統(tǒng),集成電路的集成度越來越高,如何進(jìn)行測試顯得極為重要。CPLD系統(tǒng)開發(fā)主要用JTAG進(jìn)行程序的下載及測試。標(biāo)準(zhǔn)的JTAG接口是4線:TMS、TCK、TDI、TDO,分別為模式選擇、時鐘、數(shù)據(jù)輸入和數(shù)據(jù)輸出線。圖3-6JTAG測試接口3.2.4復(fù)位電路設(shè)計復(fù)位就是將微機(jī)系統(tǒng)中的硬件邏輯恢復(fù)到一個初始的確定狀態(tài),復(fù)位是現(xiàn)代智能電子系統(tǒng)中不可缺少的組成部分,其與時鐘系統(tǒng)具有同等重要的地位。因此在電子系統(tǒng)設(shè)計中系統(tǒng)復(fù)位必須合理的考慮和設(shè)計。CPLD的復(fù)位采用低電平復(fù)位。圖3-7復(fù)位電路3.3設(shè)計工具及開發(fā)流程進(jìn)行基于VHDL語言的系統(tǒng)設(shè)計,主要需要掌握相關(guān)電子基礎(chǔ)知識,具備一定程序設(shè)計基礎(chǔ),熟練應(yīng)用基于Windows平臺的開發(fā)軟件。在本設(shè)計中主要應(yīng)用Max+PlusII開發(fā)軟件,以VHDL語言進(jìn)行程序設(shè)計,通過Max+PlusII完成編譯及仿真驗證。原理圖/VHDL文本編輯綜合原理圖/VHDL文本編輯綜合時序與功能門級仿真FPGA/CPLD編程下載FPGA/CPLD器件和電路系統(tǒng)FPGA/CPLD適配第4章程序模塊設(shè)計及仿真4.1程序設(shè)計與仿真本設(shè)計完成12位信息加5位CRC校驗碼發(fā)送、接收,由兩個模塊構(gòu)成CRC校驗生成模塊<發(fā)送>和CRC校驗檢錯模塊<接收>,其中CRC生成多項式采用,二進(jìn)制表示為110101。輸入、輸出都為并行的CRC校驗生成方式。程序模塊設(shè)計端口數(shù)據(jù)定義:CRC校驗生成模塊CRC校驗生成模塊datacoded_dataclkloadsendCRC校驗校驗?zāi)Kcoded_datadecode_dataclkreceptionerror1datafini圖4-1CRC編解碼模塊框圖data:12位的待發(fā)送信息;clk:時鐘信號;load:data的裝載信號;error1:誤碼警告信號;datafini:數(shù)據(jù)接收校驗完成;send、reception:生成、檢錯模塊的握手信號,協(xié)調(diào)相互之間關(guān)系;decode_data:接收模塊<檢錯模塊>接收的12位有效信息數(shù)據(jù);coded_data:附加上5位CRC校驗碼的17位CRC碼,在生成模塊被發(fā)送,在接收模塊被接收;4.1.1編碼模塊設(shè)計與仿真根據(jù)前面的論述,用VHDL代碼實現(xiàn)逐位運算的程序如下:process<clk>variablecrcvar:std_logic_vector<5downto0>; begin if<clk'eventandclk='1'>thenif<st='0'andload='1'>then dtemp<=data;sdatam<=data;cnt<=<others=>'0'>; send<='0';st<='1'; elsif<st='1'andt<7>then cnt<=cnt+1; if<dtemp<11>='1'>then crcvar:=dtemp<11downto6>xormulti_coef; dtemp<=crcvar<4downto0>&dtemp<5downto0>&'0'; elsedtemp<=dtemp<10downto0>&'0'; endif; elsif<st='1'andt=7>then coded_data<=sdatam&dtemp<11downto7>; send<='1';cnt<=cnt+1; elsif<st='1'andt=8>then send<='0';st<='0'; endif; endif;endprocess;endhev;圖4-2CRC生成模塊仿真波形:添加激勵信號clk時鐘信號周期為10ns,數(shù)據(jù)裝載load為1,輸入數(shù)據(jù)data:1,激勵信號添加完成按照軟件設(shè)計進(jìn)行仿真輸出數(shù)據(jù)為,同時按照理論公式進(jìn)行計算驗證結(jié)果相同,CRC編碼模塊功能正常。1多項式表示為:110101多項式表示為:多項式五位二進(jìn)制表示01000編碼后的CRC編碼:用信息多項式表示為圖4-3CRC生成模塊仿真4.1.2解碼模塊設(shè)計與仿真根據(jù)前面的論述,程序校驗采用CRC碼中包含的數(shù)據(jù)信息位與生成多項式相除,將得到的結(jié)果與CRC碼中的校驗位作比較,如果相等則判為數(shù)據(jù)傳輸無誤,反之判為數(shù)據(jù)傳輸錯誤,用VHDL代碼實現(xiàn)運算的程序如下:process<clk,reception>variablercrcvar:std_logic_vector<5downto0>;beginif<clk'eventandclk='1'>then if<rt='0'andreception='1'>then rdtemp<=coded_data<16DOWNTO5>;rdatacrc<=coded_data; rcnt<=<others=>'0'>; error1<='0';rt<='1'; elsif<rt='1'andrcnt<7>then datafini<='0';rcnt<=rcnt+1; rcrcvar:=rdtemp<11downto6>xormulti_coef; if<rdtemp<11>='1'>then rdtemp<=rcrcvar<4downto0>&rdtemp<5downto0>&'0'; else rdtemp<=rdtemp<10downto0>&'0'; endif; elsif<rt='1'andrcnt=7>thendatafini<='1';decode_data<=rdatacrc<16downto5>;rt<='0';if<rdatacrc<4downto0>/=rdtemp<11downto7>>then error1<='1'; endif; endif; endif;endprocess;endhev;解碼功能模塊圖4-4CRC解碼模塊仿真波形:添加激勵信號clk時鐘信號周期為10ns,數(shù)據(jù)裝載reception為1,輸入數(shù)據(jù)coded_data:,激勵信號添加完成,按照軟件設(shè)計進(jìn)行仿真輸出數(shù)據(jù)decode_data為1,將解碼器模塊仿真數(shù)據(jù)與編碼器仿真數(shù)據(jù)做對比,可以看出編碼模塊的輸出數(shù)據(jù)coded_data輸入解碼模塊后解碼出的數(shù)據(jù)與編碼器的輸入數(shù)據(jù)相同,可以證明解碼器模塊功能能夠準(zhǔn)確實現(xiàn)。圖4-5CRC解碼仿真4.1.3循環(huán)冗余碼編碼模塊與解碼模塊聯(lián)合運行模塊聯(lián)合連接示意圖:圖4-6CRC編解碼模塊連接聯(lián)合仿真波形圖:將CRC編碼器與CRC解碼器兩個程序模塊進(jìn)行組合,編碼和解碼一次仿真中完成,從仿真波形整數(shù)據(jù)可以看出數(shù)據(jù)結(jié)果與兩個模塊單獨工作時產(chǎn)生的數(shù)據(jù)相吻合,經(jīng)過多組數(shù)據(jù)的驗證,表明CRC編解碼模塊聯(lián)合工作正常,數(shù)據(jù)結(jié)果正確可靠。圖4-7CRC編解碼聯(lián)合仿真.第5章結(jié)束語本文詳細(xì)的介紹了循環(huán)冗余校驗碼的編解碼器的基本理論和方法,通過仿真實驗驗證正確無誤,方案切實可行。在進(jìn)行本設(shè)計之初對CRC知之甚少,在設(shè)計的開始階段感到非常的迷茫,常常感覺無從下手,在大量查閱資料之后慢慢的找到了一點突破口,了解到設(shè)計循環(huán)冗余校驗碼需要深厚的理論基礎(chǔ),而且涉及的理論學(xué)科圍較廣囊括了大學(xué)期間的多門重要基礎(chǔ)課程。首先進(jìn)行了CRC的理論學(xué)習(xí),系統(tǒng)地對《信息論基礎(chǔ)》做了學(xué)習(xí),也再一次復(fù)習(xí)了《通信原理》、《線性代數(shù)》、《數(shù)字電子技術(shù)》、《EDA技術(shù)》。通過本次設(shè)計可以看出自己在基礎(chǔ)理論知識方面上存在的薄弱環(huán)節(jié),看到了自己理論聯(lián)系實際的不足。通過本次設(shè)計增強(qiáng)了自己的動手能力,提高了自學(xué)能力。.致大學(xué)生活即將告一段落,在理工學(xué)院學(xué)習(xí)的四年將是我終身難忘,母校對我的培養(yǎng)和各位老師的付出我不甚感激,再此更要特別感我的導(dǎo)師彬老師,本設(shè)計的完成是在我們的導(dǎo)師彬老師的細(xì)心指導(dǎo)下進(jìn)行的。在每次設(shè)計遇到問題時老師不辭辛苦的講解才使得我的設(shè)計順利的進(jìn)行。從設(shè)計的選題到資料的搜集直至最后設(shè)計的修改的整個過程中,花費了老師很多的寶貴時間和精力,在此向?qū)煴硎局孕牡馗?!?dǎo)師嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度,開拓進(jìn)取的精神和高度的責(zé)任心都將使學(xué)生受益終生!其次在此還要感我的室友,在設(shè)計中遇到問題我們互相學(xué)習(xí),共同討論,使我受益匪淺。總之,感每一位關(guān)心過我,愛護(hù)過我的人。滴水之恩,當(dāng)涌泉相報。最后,再次感我的導(dǎo)師彬老師。此外,我還要對在這次設(shè)計中,幫助和支持我的同學(xué),表示感! 此外,我還要對在這次設(shè)計中,幫助和支持我的同學(xué),表示感!參考文獻(xiàn)[1]樊昌信,麗娜通信原理:國防工業(yè),2009[2]斗,殷悅,羅燕信息論與編碼理論:電子工業(yè),2004[3]廖海紅,通信系統(tǒng)的CRC算法的研究和工程實現(xiàn)[D]:郵電大學(xué)信息工程學(xué)院,2006[4]王新梅,肖國鎮(zhèn)糾錯碼-原理與方法〔修訂版:電子科技大學(xué),2001[5]宗橙糾錯編碼原理和應(yīng)用:電子工業(yè),2003[6]春陽基于FPGA的串行通信實現(xiàn)與CRC校驗:化工大學(xué),2006[7]傅祖蕓信息論-基礎(chǔ)理論與應(yīng)用:電子工業(yè),2001[8]萬哲先代數(shù)與編碼:科學(xué),1980[9]雪虹信息論與編碼:清華大學(xué),2009[10]同濟(jì)大學(xué)應(yīng)用數(shù)學(xué)系線性代數(shù):高等教育,2008[11]徐秀娟線性代數(shù):科學(xué),2007[12]松,王國棟VHDL實用教程〔第二版[M].:電子科技大學(xué),2001[13]松EDA技術(shù)實用教程〔第四版[M].:科學(xué),2005[14]宇,鳳榮,瑞朋基于FPGA的CRC算法和VHDL設(shè)計:防空兵指揮學(xué)院,2010[15]井海明,高占鳳用VHDL設(shè)計CRC發(fā)生器和校驗器:鐵道學(xué)院,2004[16]BerrouC,GlavieuxA,TthitimajshimaP.NearShannonLimitErrorCorrectingCodingandDecoding:TurboCodes.Proc.IEEEInt.Conf.Commun.,1993:1064-1070[17]GallagerR,Low-densityParity-checkcodes,IRETrans.onIT,1962,8<1>:21-28[18]JohnG.Proakis.DigitalCommunications.ThirdEdition1995[19]LuckyRW,SalzJ,Weldon,EJ.PrinciplesofDataCommunication,McGraw-Hill,1968.附錄A程序代碼CRC校驗生成模塊:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;ENTITYCRCSENDISPORT<SDATA:INSTD_LOGIC_VECTOR<11DOWNTO0>;CLK,DATALD:INSTD_LOGIC;DATACRCO:OUTSTD_LOGIC_VECTOR<16DOWNTO0>;HSEND:OUTSTD_LOGIC>;ENDCRCSEND;ARCHITECTURECOMMOFCRCSENDISCONSTANTMULTI_COEF:STD_LOGIC_VECTOR<5DOWNTO0>:="110101";SIGNAL

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論