基于FPGA的循環(huán)冗余校驗(yàn)實(shí)驗(yàn)系統(tǒng)的實(shí)現(xiàn)
摘要:文章首先分析了循環(huán)冗余校驗(yàn)碼的功能,在此基礎(chǔ)上提出了基于FPGA的實(shí)現(xiàn)方法,詳細(xì)闡述了CRC校驗(yàn)編解碼的實(shí)現(xiàn)方法,并提出了基于現(xiàn)有的實(shí)驗(yàn)箱設(shè)備實(shí)現(xiàn)小型的CRC校驗(yàn)系統(tǒng)的總體設(shè)計(jì)框架和設(shè)計(jì)思路,完成了CRC校驗(yàn)實(shí)驗(yàn)系統(tǒng)的設(shè)計(jì),充分提高了設(shè)備的使用效率。
關(guān)鍵字:循環(huán)冗余校驗(yàn) CRC編解碼 實(shí)驗(yàn)系統(tǒng)
一、引言
隨著人們對(duì)數(shù)據(jù)業(yè)務(wù)的需求越來(lái)越多,數(shù)據(jù)通信在近來(lái)得到了長(zhǎng)足的發(fā)展。但是由于通信信道傳輸特性的不理想和加性噪聲的影響,設(shè)備之間的數(shù)據(jù)通信常會(huì)發(fā)生一些無(wú)法預(yù)測(cè)的錯(cuò)誤,為確保高效而無(wú)差錯(cuò)的傳輸數(shù)據(jù),降低錯(cuò)誤而帶來(lái)的影響,必須對(duì)數(shù)據(jù)進(jìn)行差錯(cuò)檢測(cè)及控制。在諸多檢錯(cuò)手段中,循環(huán)冗余檢測(cè)方法(CRC)是非常有效的一種方法。CRC是對(duì)傳送數(shù)據(jù)進(jìn)行校驗(yàn)的特點(diǎn)是:檢錯(cuò)能力極強(qiáng),開(kāi)銷(xiāo)小,易于編程。從其檢錯(cuò)能力來(lái)看,它所不能發(fā)現(xiàn)錯(cuò)誤的幾率達(dá)0.0047%以下,從其性能及開(kāi)銷(xiāo)上均遠(yuǎn)遠(yuǎn)優(yōu)于奇偶校驗(yàn)以及算術(shù)和檢錯(cuò)等方式。因而,在數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)通信領(lǐng)域,CRC無(wú)處不在。
FPGA是在PAL、GAL、PLD等可編程器件的基礎(chǔ)上進(jìn)一步發(fā)展的產(chǎn)物,采用了邏輯單元陣列這樣一個(gè)新概念,內(nèi)部包括可配置邏輯模塊CLB、輸出輸入模塊IOB和內(nèi)部連線(xiàn)三個(gè)部分。用戶(hù)可對(duì)FPGA內(nèi)部的邏輯模塊和I/O模塊重新配置,以實(shí)現(xiàn)用戶(hù)的邏輯。它還具有靜態(tài)可重復(fù)編程和動(dòng)態(tài)在系統(tǒng)重構(gòu)的特性,使得硬件的功能可以像軟件一樣通過(guò)編程來(lái)修改。FPGA如同一張白紙或是一堆積木,工程師可以通過(guò)傳統(tǒng)的原理圖輸入法,或是硬件描述語(yǔ)言自的設(shè)計(jì)一個(gè)數(shù)字系統(tǒng)。通過(guò)軟件仿真,我們可以事先驗(yàn)證設(shè)計(jì)的正確性。因此,F(xiàn)PGA的使用非常靈活。利用FPGA實(shí)現(xiàn)CRC校驗(yàn)是一個(gè)高效的切實(shí)可行的方法。
在教學(xué)過(guò)程中,我們嘗試?yán)矛F(xiàn)有的EDA實(shí)驗(yàn)箱設(shè)備,設(shè)計(jì)實(shí)現(xiàn)小型的CRC校驗(yàn)系統(tǒng),拓展設(shè)備的功能,提高設(shè)備使用效率。
二、系統(tǒng)總體設(shè)計(jì)
循環(huán)冗余校驗(yàn)CRC是數(shù)據(jù)通信領(lǐng)域中最常用的一種差錯(cuò)校驗(yàn)碼,其特征是信息字段和校驗(yàn)字段的長(zhǎng)度可以任意選定。它的基本原理是:在K位信息碼后再拼接R位的校驗(yàn)碼,整個(gè)編碼長(zhǎng)度為N位,因此,這種編碼又叫(N,K)碼。對(duì)于一個(gè)給定的(N,K)碼,可以證明存在一個(gè)最高次冪為N-K=R的多項(xiàng)式G(x)。根據(jù)G(x)可以生成K位信息的校驗(yàn)碼,而G(x)叫做這個(gè)CRC碼的生成多項(xiàng)式。
校驗(yàn)碼的具體生成過(guò)程為:假設(shè)發(fā)送信息用信息多項(xiàng)式C(x)表示,將C(x)左移R位,則可表示成C(x)*2R,這樣C(x)的右邊就會(huì)空出R位,這就是校驗(yàn)碼的位置。通過(guò)C(x)*2R除以生成多項(xiàng)式G(x)得到的余數(shù)就是校驗(yàn)碼。
生成多項(xiàng)式是接受方和發(fā)送方的一個(gè)約定,也就是一個(gè)二進(jìn)制數(shù),在整個(gè)傳輸過(guò)程中,這個(gè)數(shù)始終保持不變。在發(fā)送方,利用生成多項(xiàng)式對(duì)信息多項(xiàng)式做模2除(異或運(yùn)算)生成校驗(yàn)碼。在接受方利用生成多項(xiàng)式對(duì)收到的編碼多項(xiàng)式做模2除(異或運(yùn)算)檢測(cè),當(dāng)被傳送信息(CRC
碼)任何一位發(fā)生錯(cuò)誤時(shí),被生成多項(xiàng)式做模2除(異或運(yùn)算)后應(yīng)該使余數(shù)不為0。
基于這樣的原理,利用FPGA實(shí)現(xiàn)的小型的循環(huán)冗余校驗(yàn)實(shí)驗(yàn)系統(tǒng)可以由五個(gè)部分組成:數(shù)據(jù)輸入電路、CRC編碼處理電路、CRC解碼處理電路、時(shí)鐘電路、顯示電路。作為CRC校驗(yàn)的輸入部分,本設(shè)計(jì)采用通用的數(shù)字機(jī)械式鍵盤(pán)。本系統(tǒng)顯示信息電路采用共陰極8位7段數(shù)碼管顯示碼值,使用3-8譯碼器譯碼。CRC校驗(yàn)結(jié)果提示電路用LED燈顯示,方便、簡(jiǎn)潔。時(shí)鐘電路使用可調(diào)數(shù)字信號(hào)源產(chǎn)生時(shí)鐘。編解碼處理電路使用FPGA適配器。發(fā)送端首先將數(shù)據(jù)寫(xiě)入設(shè)計(jì)好的FIFO存儲(chǔ)器,然后依次地調(diào)出數(shù)據(jù)進(jìn)行編碼,然后將生成的CRC碼發(fā)送出去,并給以接收端一個(gè)接收信號(hào);接收端收到信號(hào)后,開(kāi)始對(duì)接收到的數(shù)據(jù)進(jìn)行解碼,并將解碼信息反饋給發(fā)送方。當(dāng)解碼正確時(shí),發(fā)送方繼續(xù)發(fā)送下一個(gè)數(shù)據(jù),當(dāng)解碼錯(cuò)誤時(shí),發(fā)送方把剛發(fā)的數(shù)據(jù)重新調(diào)出,進(jìn)行編碼,發(fā)送出去。系統(tǒng)原理圖見(jiàn)圖1。
三、系統(tǒng)具體設(shè)計(jì)
1、CRC編解碼的設(shè)計(jì)
本系統(tǒng)最主要的部分是CRC編解碼的設(shè)計(jì)。
首先來(lái)討論編碼的設(shè)計(jì)。本文設(shè)計(jì)完成12位信息位加5位CRC校驗(yàn)位的通信系統(tǒng)的發(fā)送和接收,CRC模塊的端口的數(shù)據(jù)定義如下:
sdata:12位待發(fā)送的信息 datald:sdata的裝載信號(hào)
error:誤碼警告信號(hào) datafini:數(shù)據(jù)接收完成
rdata:接收模塊接收的12位有效信息數(shù)據(jù)
clk:時(shí)鐘信號(hào)
datacrc:附加5位CRC校驗(yàn)碼的17位CRC嗎,在生成模塊發(fā)送,被接收模塊接收
hsend、hrecv:生成、檢錯(cuò)模塊的握手信號(hào),協(xié)調(diào)相互之間的關(guān)系
設(shè)計(jì)的總體思路:首先裝載信息位12位數(shù)據(jù),取出其中的高6位與生成多項(xiàng)式系數(shù)作異或運(yùn)算,得到的結(jié)果取其低5位與原來(lái)信息碼的低6位并置并在其后補(bǔ)上一個(gè)”0”,補(bǔ)足12位,再與生成多項(xiàng)式做同樣的異或運(yùn)算,連續(xù)作7次這樣的運(yùn)算,最后得到的異或結(jié)果就是CRC校驗(yàn)位。這樣通過(guò)巧妙的移位運(yùn)算實(shí)現(xiàn)多項(xiàng)式的相除運(yùn)算。
部分程序代碼的實(shí)現(xiàn)如下:
解碼部分的設(shè)計(jì)與編碼部分類(lèi)似,不過(guò)更加簡(jiǎn)單,只需要將接收的CRC碼直接與發(fā)端相同的生成多項(xiàng)式相除,除盡表示沒(méi)有出現(xiàn)傳輸差錯(cuò),直接去掉校驗(yàn)位,就可以得到信息碼了。關(guān)鍵的部分代碼如下:
2、其他部分的設(shè)計(jì)
(1)數(shù)據(jù)輸入電路部分:將其設(shè)計(jì)成為一個(gè)FIFO的數(shù)據(jù)緩存器,這樣做的目的,可以接收源源不斷傳來(lái)的數(shù)據(jù),另一方面考慮到可能傳輸出現(xiàn)差錯(cuò),可以從緩存將數(shù)據(jù)調(diào)出來(lái)重新傳輸一遍,直到正確傳輸為止,才刪去數(shù)據(jù)。
(2)顯示電路部分:輸入數(shù)據(jù)與輸出數(shù)據(jù)都可以采用數(shù)碼管來(lái)進(jìn)行顯示,通過(guò)數(shù)碼管顯示可以清楚地觀察到傳輸過(guò)程中數(shù)據(jù)傳輸?shù)臏?zhǔn)確性。傳輸過(guò)程出現(xiàn)的差錯(cuò)可以由接收端反饋,在發(fā)送端可以用LED燈進(jìn)行提示。
(3)按鍵消抖電路部分:由于設(shè)計(jì)采用開(kāi)關(guān)是機(jī)械開(kāi)關(guān)結(jié)構(gòu),因此在開(kāi)關(guān)切換的瞬間會(huì)在接觸點(diǎn)出現(xiàn)信號(hào)來(lái)回彈跳的現(xiàn)象。基于VHDL的按鍵消抖法主要有三種:電平檢測(cè)消抖法、定時(shí)檢測(cè)消抖法以及脈寬檢測(cè)消抖法。本系統(tǒng)采用定時(shí)檢測(cè)消抖法可以進(jìn)行按鍵的消抖。
至于時(shí)鐘電路,對(duì)于數(shù)碼顯示電路而言,需要額外提供一個(gè)較高頻率的掃描電路,其他的時(shí)鐘可以用普通的時(shí)鐘提供。
實(shí)驗(yàn)系統(tǒng)的實(shí)物圖如下:
四、結(jié)束語(yǔ)
基于以上的系統(tǒng)的架構(gòu)和主要的設(shè)計(jì)思想,我們通過(guò)兩臺(tái)EDA實(shí)驗(yàn)箱完成了CRC循環(huán)冗余校驗(yàn),模擬了現(xiàn)實(shí)的完整的包含發(fā)送、傳輸和接收模塊的系統(tǒng),實(shí)驗(yàn)證明,系統(tǒng)能夠完成CRC校驗(yàn),拓展了設(shè)備的功能,提高了設(shè)備的利用率,達(dá)到了設(shè)計(jì)的目的。