首先,了解實(shí)驗(yàn)的大體要求,該實(shí)驗(yàn)要求我們對(duì)16位數(shù)據(jù)進(jìn)行CRC編碼,生成22位數(shù)據(jù);再將22位CRC編碼進(jìn)行解碼成16位數(shù)據(jù),且判斷數(shù)據(jù)是否在傳輸過(guò)程中發(fā)生一位錯(cuò),兩位錯(cuò)的情況,若出錯(cuò),則必須對(duì)數(shù)據(jù)進(jìn)行糾正。因此該實(shí)驗(yàn)要進(jìn)行兩個(gè)的電路圖的設(shè)計(jì)。
一、16位CRC并行編碼電路設(shè)計(jì)
1.解題思路
①已知該實(shí)驗(yàn)輸入的是16位數(shù)據(jù),輸出22位CRC編碼數(shù)據(jù),其中包括16位原始數(shù)據(jù),6位校驗(yàn)位,其中一位為總的奇偶校驗(yàn)位(校驗(yàn)位的位數(shù)也可由k+r<=2^r-1得到)。因此此時(shí)的r=5(不包含奇偶校驗(yàn)位),選擇的多項(xiàng)式G(x)位數(shù)則為r+1=6位,此時(shí)我選擇的多項(xiàng)式是G(x)=100101(該多項(xiàng)式不固定,選擇其它六位的多項(xiàng)式也是可以的)。
②CRC編碼原理:原始16位數(shù)據(jù)Q(X),左移r=5位成21位Q’(x)(即后面補(bǔ)r個(gè)0),再與多項(xiàng)式100101做模2運(yùn)算,得到的r位的余數(shù),將該余數(shù)替換掉Q’(X)后面的r位,即將它后面的r個(gè)0替換成該余數(shù)。如圖所示r5r4r3r2r1便是得到的余數(shù),而r6是總的奇偶校驗(yàn)位,對(duì)所有數(shù)據(jù)進(jìn)行異或便可得到該偶校驗(yàn)位r6。
③由于要采用并行編碼,又有以下公式
因此可先對(duì)該16位數(shù)據(jù)按位與該多項(xiàng)式進(jìn)行模2除運(yùn)算,再根據(jù)其實(shí)際數(shù)據(jù)進(jìn)行異或操作。
舉個(gè)例子:
因此根據(jù)該思路,先將16位原始數(shù)據(jù)所對(duì)應(yīng)位置上取1時(shí),與G(x)進(jìn)行模2除運(yùn)算得到各自的5位余數(shù),再用選擇器進(jìn)行根據(jù)每一位數(shù)據(jù)選擇輸入的是余數(shù)還是0,最后將16個(gè)輸入數(shù)據(jù)進(jìn)行異或,即可得到5位最終的余數(shù)。
③選擇器的使用原理:
此時(shí)選擇器的選擇端連接的是D1,由于D1數(shù)據(jù)位寬為1,則選擇器有2^1=2個(gè)輸入端。當(dāng)D1為0,則輸入0端的數(shù)據(jù)即00;若D1為1時(shí),則輸入1端的數(shù)據(jù)即0a。
因此根據(jù)選擇器的選擇原理,將16位數(shù)據(jù)Di(i=1,2…16)作為選擇端控制每位數(shù)據(jù)輸入的是00還是該位與多項(xiàng)式進(jìn)行模2運(yùn)算后的余數(shù),最后將最終輸入的16個(gè)5位數(shù)據(jù)進(jìn)行異或,即可得到最終的余數(shù)。
2.求16位與多項(xiàng)式的余數(shù)
如上圖所示,Di(i=1,2…16)分別位數(shù)CRC編碼的第7,8,9…22位上,因此其各自取1時(shí)與多項(xiàng)式模2除運(yùn)算后的余數(shù)如下所示:
3.電路圖設(shè)計(jì)
(r6是總的偶校驗(yàn)位)
二、16位CRC并行解碼電路設(shè)計(jì)
該電路會(huì)比較難理解,要進(jìn)行檢錯(cuò)以及數(shù)據(jù)糾正得到原始的16位數(shù)據(jù)。
1.檢錯(cuò)原理
① 接收方在接受到CRC編碼后,將該編碼與多項(xiàng)式進(jìn)行模2除運(yùn)算,得到余數(shù)r’,再根據(jù)q(假設(shè)q為總的奇偶檢驗(yàn)位,將所有數(shù)據(jù)進(jìn)行異或可得)的值進(jìn)行判斷數(shù)據(jù)是否產(chǎn)生錯(cuò)誤,及產(chǎn)生錯(cuò)誤后是一位錯(cuò)還是兩位錯(cuò)。其檢查原理同海明碼的檢錯(cuò)原理相同。
有以下情況:
①當(dāng)r’ =0,q=0,表示數(shù)據(jù)無(wú)出錯(cuò);
②r’ !=0,q=1,表示發(fā)生一位數(shù)據(jù)出錯(cuò);
③r’ =0,q=1,表示該奇偶校驗(yàn)位出錯(cuò),即發(fā)生一位出錯(cuò);
④r’ !=0,q=0,表示發(fā)生兩位數(shù)據(jù)出錯(cuò)。
②求余數(shù)時(shí),可參照設(shè)計(jì)CRC編碼時(shí)求余數(shù)的方法
因?yàn)镃RC編碼最后的r位少于多項(xiàng)式位數(shù),因此可將最后r位看作一個(gè)整體,讓它與多項(xiàng)式進(jìn)行模2除運(yùn)算后,得到的余數(shù)顯然是它本身,因此讓它與其它16位數(shù)據(jù)與G(x)模2除后所得的余數(shù)進(jìn)行異或,即可得最后接收方檢驗(yàn)的余數(shù)。
如下圖所示,箭頭所指的該5位數(shù)據(jù)位便是其最終得到的余數(shù)(異或門(mén)輸出位寬為5)。
2.糾錯(cuò),得原始16位數(shù)據(jù)
①若CRC編碼發(fā)生出錯(cuò),而它的出錯(cuò)位可能為第7,8,9…22位(不考慮第1到6位,因?yàn)槲覀円玫脑?6位數(shù)據(jù)處于第7…22位上,因此只需要判斷這些位是否出錯(cuò),若出錯(cuò)對(duì)它們進(jìn)行糾正,再輸出即可)。因此將CRC編碼按位取反后再與G(x)進(jìn)行模2除運(yùn)算,若余數(shù)為0,則說(shuō)明該位出錯(cuò),因此將余數(shù)取反為1,再與該位數(shù)據(jù)進(jìn)行異或從而糾正該位的數(shù)據(jù);若余數(shù)不為0,則說(shuō)明該數(shù)據(jù)位并未發(fā)生傳輸錯(cuò)誤,因此對(duì)該余數(shù)取反為0,再與該位的數(shù)據(jù)進(jìn)行異或得到的數(shù)據(jù)仍為該數(shù)據(jù)位。(x異或0=x,x異或1=x反)
②CRC編碼按位取反(即按位異或1)后再與G(x)進(jìn)行模2除運(yùn)算,根據(jù)公式可化成
CRC編碼%G(x)異或該數(shù)據(jù)位取1%G(x)。
例如:假設(shè)第7位出錯(cuò)
CRC%100101異或100 0000%100101=CRC%100101異或0a。
3.電路圖設(shè)計(jì):
以下為完整電路圖
以下分開(kāi)截圖
4.通過(guò)測(cè)試
注:①(“老母親幫的叮囑‘)希望好好理解下實(shí)驗(yàn)原理,再去做,就不會(huì)產(chǎn)生太多的錯(cuò)誤短路什么的?。?!
②做編碼的實(shí)驗(yàn)時(shí),注意要檢查下該隧道是否連接上了數(shù)據(jù)
③在解碼的電路設(shè)計(jì),常量0和余數(shù)都是五位,所以設(shè)置其對(duì)應(yīng)器件位寬是五位的。
例如以下的器件(不止這些數(shù)據(jù)位是5位,就不一一舉出了)
如果設(shè)置位寬不對(duì),后面可能會(huì)產(chǎn)生短路即顯示紅線?。?!
④太多用錯(cuò)邏輯門(mén)的,要好好理解下原理再去做就不會(huì)花太多時(shí)間卡在這一關(guān)啦
以下是常被用錯(cuò)的邏輯門(mén),至于原理為何用這些門(mén),上面解題思路講到了,這里就不說(shuō)了哈
編輯:黃飛
?
評(píng)論