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