- 相關(guān)推薦
10G以太網(wǎng)系統(tǒng)中的并行CRC編解碼器的設(shè)計
摘要:為了解決10G以太網(wǎng)接入系統(tǒng)中大規(guī)模并行CRC編碼器的設(shè)計問題,提出了矩陣法、代入法、流水線法等三種設(shè)計方法。以此為基礎(chǔ),給出了10G以太網(wǎng)接入系統(tǒng)CHC編碼器的實現(xiàn)方案。具體計算表明,在10G以太網(wǎng)接入系統(tǒng)采用直接并行的CRC編碼器是可行的。直接并行設(shè)計CRC編碼器已經(jīng)通過了EDA模擬,并成功地應(yīng)用于10G以太網(wǎng)接入系統(tǒng)中。通信系統(tǒng)不可避免地要受到各種干擾的影響,使接收端收到的信息與發(fā)送端發(fā)出的信息不一致,即接收端收到的信息產(chǎn)生了誤碼。為了降低數(shù)據(jù)通信線路傳輸?shù)恼`碼率,通常有改善數(shù)據(jù)通信線路傳輸質(zhì)量和差錯檢測控制兩種方法。差錯檢測控制的方法很多,本文討論在10G以太網(wǎng)接人系統(tǒng)中并行實現(xiàn)CRC-32編解碼的方法、并行CRC算法的Unfolding算法可以實現(xiàn)并行CRC的計算,但是并行電路所用的資源增加到了原來的J倍。8位并行CRC算法、并行CRC-16的編碼邏輯、USB技術(shù)中并行CRC算法給出的并行算法都建立在公式遞推的基礎(chǔ)上。當(dāng)并行深度較小時,遞推算法比較適用。而當(dāng)并行深度很大的情況下(10G以太網(wǎng)接人系統(tǒng)使用64比特并行數(shù)據(jù)通路),遞推過程就顯得過于煩瑣而缺乏實用性。為此,本文提出了矩陣法、代入法和流水線法等三種算法,解決了深度并行情況下CRC算法的實現(xiàn)問題。利用本文提出的算法,可以得出64比特并行CRC計算的邏輯表達式,并用于10G以太網(wǎng)接入系統(tǒng)的設(shè)計。設(shè)M/(x)為信息多項式,G(x)為生成多項式。一般的CRC編碼方法是:先將信息碼多項式左移r位,即M(x)·xr,然后作模2除法
(M(x)· x r)/G(x)=Q(x) R(x)/G(x) (1)
所得到的月(x)就是CRC校驗碼。以二進制碼0x9595H的CRC-32編碼為例:
· 將信息碼左移32比特變成0x959500000000H,記為m。
·CRC-32G的生成多項G(x)=x32 x26 x23 x22 x16 x12 xll x10 x8 x7 x5 x4 x2 x 1,轉(zhuǎn)換成16進制碼為g=0x104C01DB7H。用m除以g(模2除法),所得余數(shù)0x3738F30BH就是0x9595H的CRC-32碼。實現(xiàn)0x9595H的基本CRC-32編碼的Matlab程序如下:
g(33:-1:1)=[1,0 0 0 0 0 1 0 0,1 1 0 0 0 0 0 1,0 0 0 1 1 1 0 1,1 0 1 1 0 1 1 1];
a(48:-1:1)=[1 0 0 1 0 1 0 1,1 0 0 1 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];
for i=48:-1:33,
if a(i)= =1
a(i:-1:i-32)=xor(a(i:-1:i-32),i(33:-1:1));
end
end
crc=a(32:-1:1)
如果想用以上CRC-32程序計算其他長為L的序列的基本CRC-32碼,只需將數(shù)組α的上界和for循環(huán)中i的初始值改為32 L,并用該序列代替數(shù)組。開始的序列"1001010110010101"即可。用數(shù)字電路實現(xiàn)的串行CRC編碼器如圖1所示。圖1中每個矩形表示D觸發(fā)器。gi的取值范圍是1或者0。取1時表示通路,取0時表示斷路。進行基本CRC-32編碼時,每個D觸發(fā)器初始狀態(tài)為0,從數(shù)據(jù)端串行輸入二進制的信息碼。信息碼輸入結(jié)束后,D觸發(fā)器中鎖存的數(shù)值就是信息碼的基本CRC-32編碼。此電路適用于信息碼長為任意值的情況。在某些信息系統(tǒng)中以基本CRC產(chǎn)生算法為基礎(chǔ)附加了新的規(guī)定。例如IEEE802.3協(xié)議規(guī)定,以太網(wǎng)的FES(幀校驗序列)域以CRC-32為基礎(chǔ),并且在編碼時首先將信息碼的最初4個字節(jié)取反碼,對目的地址、源地址、長度/類型域、數(shù)據(jù)域、PAD域求出基本CRC-32碼之后再將結(jié)果取反,最后的結(jié)果才是FCS。同上述過程等價的另一種實現(xiàn)方法是將圖1中所有D觸發(fā)器的初值置1,這樣結(jié)果不必取反。為使電路設(shè)計者驗證其FCS編碼正確,IEEE802.3還給出了一個樣本,即:將序列0xBED723476B8FB3145EFB3559H重復(fù)126次,最后得到的FCS值應(yīng)該為0x94D254ACH。10G以太網(wǎng)是IEEE802.3ae工作組提出的建議。它保持了以前以太網(wǎng)的幀結(jié)構(gòu),但是線速度達到了10Gbps的量級。為了降低10G以太網(wǎng)接入系統(tǒng)的功耗并達到芯片加工工藝的要求,必須采用并行數(shù)據(jù)通路。為計算FCS需要研究并行CRC算法。所設(shè)計的10G以太網(wǎng)接入系統(tǒng)采用64比特并行數(shù)據(jù)通路,因此本文主要討論64比特并行CRC-32的實現(xiàn)方法。本文共介紹三種實現(xiàn)方法,其中矩陣法和代入法是基于組合邏輯的直接實現(xiàn)方法,第三種方法是基于流水線的實現(xiàn)方法。
1 矩陣法
記圖1中的32個D觸發(fā)器的輸出從右至左依次為d31,d30,…,d0。信息碼元的輸入端為i。令D=[d0d1…d31]T表示編碼器當(dāng)前所處的狀態(tài),I=[i63i62…i0]表示第1至第64個時鐘的信息碼元輸入,向量Dˊ=[d0ˊd1ˊ,…d31ˊ] T表示編碼器的下一個狀態(tài),D(64)表示64個時鐘之后CRC編碼器所處的狀態(tài)。則設(shè)計64位并行CRC邏輯編碼器,就是找出函數(shù)關(guān)系D(64)=f(D,I)。
do'=d31 i63
d1'=d0 d31 i63
d2'=d1 d31 i63
d3'=d2
…
d31'=d30
寫成行列式,有D'=TD Si63
【10G以太網(wǎng)系統(tǒng)中的并行CRC編解碼器的設(shè)計】相關(guān)文章:
異地并行設(shè)計中WEB數(shù)據(jù)庫設(shè)計*03-18
TM1300 DSP系統(tǒng)以太網(wǎng)接口的設(shè)計03-18
CPLD在DSP系統(tǒng)中的應(yīng)用設(shè)計03-18
嵌入式系統(tǒng)中的線性Flash文件系統(tǒng)設(shè)計03-21
基于FPGA的快速并行FFT及其在空間太陽望遠鏡圖像鎖定系統(tǒng)中的應(yīng)03-18
擴頻系統(tǒng)中卷積編碼的Verilog設(shè)計與仿真03-07