10G以太網系統中的并行CRC編解碼器的設計
摘要:為了解決10G以太網接入系統中大規模并行CRC編碼器的設計問題,提出了矩陣法、代入法、流水線法等三種設計方法。以此為基礎,給出了10G以太網接入系統CHC編碼器的實現方案。具體計算表明,在10G以太網接入系統采用直接并行的CRC編碼器是可行的。直接并行設計CRC編碼器已經通過了EDA模擬,并成功地應用于10G以太網接入系統中。關鍵詞:10G 以太網 CRC 并行
通信系統不可避免地要受到各種干擾的影響,使接收端收到的信息與發送端發出的信息不一致,即接收端收到的信息產生了誤碼。為了降低數據通信線路傳輸的誤碼率,通常有改善數據通信線路傳輸質量和差錯檢測控制兩種方法。差錯檢測控制的方法很多,本文討論在10G以太網接人系統中并行實現CRC-32編解碼的方法、并行CRC算法的Unfolding算法可以實現并行CRC的計算,但是并行電路所用的資源增加到了原來的J倍。8位并行CRC算法、并行CRC-16的編碼邏輯、USB技術中并行CRC算法給出的并行算法都建立在公式遞推的基礎上。當并行深度較小時,遞推算法比較適用。而當并行深度很大的情況下(10G以太網接人系統使用64比特并行數據通路),遞推過程就顯得過于煩瑣而缺乏實用性。為此,本文提出了矩陣法、代入法和流水線法等三種算法,解決了深度并行情況下CRC算法的實現問題。利用本文提出的算法,可以得出64比特并行CRC計算的邏輯表達式,并用于10G以太網接入系統的設計。設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,轉換成16進制碼為g=0x104C01DB7H。用m除以g(模2除法),所得余數0x3738F30BH就是0x9595H的CRC-32碼。實現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
[1] [2] [3] [4] [5]