李傳輝,劉純武,黃芝平
(國(guó)防科學(xué)技術(shù)大學(xué) 機(jī)電工程與自動(dòng)化學(xué)院,湖南 長(zhǎng)沙 410073)
?
100G以太網(wǎng)中高位寬并行CRC的簡(jiǎn)化方法
李傳輝,劉純武,黃芝平
(國(guó)防科學(xué)技術(shù)大學(xué) 機(jī)電工程與自動(dòng)化學(xué)院,湖南 長(zhǎng)沙 410073)
在100G以太網(wǎng)媒體接入控制器(Media Access Control,MAC)的設(shè)計(jì)中,需要采用高位寬的并行數(shù)據(jù)來(lái)降低對(duì)時(shí)鐘的要求。在使用并行循環(huán)冗余校驗(yàn)(Cyclical Redundancy Check,CRC)時(shí)會(huì)有一個(gè)問(wèn)題,即需要計(jì)算CRC的數(shù)據(jù)域長(zhǎng)度不一定是數(shù)據(jù)通道位寬的整數(shù)倍,導(dǎo)致最后一組數(shù)據(jù)無(wú)法使用數(shù)據(jù)通道的位寬對(duì)其進(jìn)行CRC計(jì)算。為了解決這個(gè)問(wèn)題,本文提出了在幀前填充0的處理方法。仿真和測(cè)試結(jié)果都驗(yàn)證了該方法的可行性。該處理方法也能應(yīng)用到其他的通信系統(tǒng)中。
100G以太網(wǎng);并行CRC;高位寬
IEEE在2010年發(fā)布了40/100G以太網(wǎng)標(biāo)準(zhǔn)[1],其中MAC層仍然沿用以前的規(guī)定未作大的改變,只是100 Gb/s的高速率使得無(wú)法沿用以前的方法完成CRC值的計(jì)算,為此,本文提出了一種簡(jiǎn)單有效的解決方法。
在數(shù)字通信系統(tǒng)中,為了確保接收到的數(shù)據(jù)與發(fā)送端的數(shù)據(jù)一致,需要引入差錯(cuò)控制機(jī)制。循環(huán)冗余校驗(yàn)碼由于其誤碼監(jiān)測(cè)能力強(qiáng),抗干擾能力優(yōu)異,被廣泛應(yīng)用于線路檢錯(cuò)。循環(huán)冗余檢驗(yàn)是一種系統(tǒng)的縮短循環(huán)碼,它采用多項(xiàng)式編碼方法[2]。設(shè)被檢驗(yàn)的信息碼有n位,信息系列M={mn-1mn-2…m0},用多項(xiàng)式M(x)可表示為:
M(x) =mn-1xn-1+mn-2xn-2+ … +m1x1+m0x0
(1)
發(fā)送方和接收方使用同一個(gè)生成多項(xiàng)式G(x),其是一個(gè)k階的二進(jìn)制多項(xiàng)式,而且G(x)的首位和最后一位的系數(shù)都必須是1,其通用表達(dá)式為:
G(x)=xk+gk-1xk-1+gk-2xk-2+…+g1x+1
(2)
CRC的計(jì)算規(guī)則為發(fā)送方以xk·M(x)除以生成多項(xiàng)式G(x),將得到的余數(shù)R(x)作為校驗(yàn)值,這里的計(jì)算規(guī)則都是使用二進(jìn)制運(yùn)算規(guī)則,R(x)可表示為:
R(x)=CRC(M(x))=xk·M(x)modG(x)
(3)
發(fā)送方將CRC值隨數(shù)據(jù)一起發(fā)送給接收方,接收方對(duì)接收到的數(shù)據(jù)進(jìn)行CRC值的計(jì)算,并將它與發(fā)送方的CRC值進(jìn)行比較。如果數(shù)據(jù)傳輸過(guò)程中沒(méi)有錯(cuò)誤,兩者的校驗(yàn)值就會(huì)是一致的,相反如果得到的校驗(yàn)值不一致,就可以判斷出數(shù)據(jù)在傳輸過(guò)程中發(fā)生了錯(cuò)誤,這時(shí)接收方就可以丟棄當(dāng)前數(shù)據(jù)或要求發(fā)送方重傳數(shù)據(jù)。CRC校驗(yàn)可以百分百地檢測(cè)出所有的奇數(shù)個(gè)的隨機(jī)錯(cuò)誤和長(zhǎng)度小于等于k的突發(fā)錯(cuò)誤。
圖1 以太網(wǎng)幀格式
在以太網(wǎng)通信中,CRC校驗(yàn)具有重要作用。依據(jù)IEEE802.3以太網(wǎng)的幀格式(如圖1所示),CRC計(jì)算的數(shù)據(jù)區(qū)域包括目的地址、原地址、長(zhǎng)度/類(lèi)型和負(fù)載數(shù)據(jù)區(qū)域。得到的CRC值作為幀校驗(yàn)序列(Frame Check Sequence,F(xiàn)CS)填充在數(shù)據(jù)幀尾。其中規(guī)定了以太網(wǎng)幀F(xiàn)CS字段的生成算法為CRC-32,其生成的多項(xiàng)式表達(dá)式為:
G(x)=x32+x26+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1
(4)
在吉比特以上速率的通信系統(tǒng)中,傳統(tǒng)的串行CRC校驗(yàn)方法已無(wú)法滿足要求,所以現(xiàn)在有很多新型并行CRC計(jì)算方法[3-5]。因此在100G以太網(wǎng)中,其CRC也必須采用并行方法,CRC計(jì)算的并行位寬就是數(shù)據(jù)通道的位寬。提高數(shù)據(jù)位寬可以降低系統(tǒng)的時(shí)鐘頻率,但另一方面隨著并行數(shù)據(jù)位寬的增加會(huì)使得CRC電路的延遲時(shí)間增加,影響系統(tǒng)的時(shí)序性能。經(jīng)過(guò)綜合考慮本文中設(shè)計(jì)的數(shù)據(jù)并行位寬為320。
使用320位的高并行位寬會(huì)使得數(shù)據(jù)的處理變得復(fù)雜。比如在MAC層的發(fā)送方,上層客戶(hù)每個(gè)時(shí)鐘就會(huì)有一組320位40 B的數(shù)據(jù)送給MAC處理,CRC模塊就會(huì)使用320位的并行算法對(duì)其計(jì)算。當(dāng)前的CRC值只與上一次數(shù)據(jù)得到的CRC值及當(dāng)前的數(shù)據(jù)有關(guān),CRC值初始化為全0,如圖2所示。
圖2 并行CRC生成模塊
問(wèn)題是數(shù)據(jù)并不一定是40 B的整數(shù)倍關(guān)系,最后一組數(shù)據(jù)可能結(jié)束于任意位置,如圖3所示。
圖3 以太網(wǎng)幀邊界
在10G以太網(wǎng)中,數(shù)據(jù)位寬為64 bit,在參考文獻(xiàn)[6]中對(duì)這種情況的處理方法為同時(shí)設(shè)計(jì)從8 bit到64 bit的CRC生成模塊,根據(jù)有效字節(jié)數(shù)選擇使用其中一個(gè)。這一方法無(wú)疑會(huì)占用大量資源,而且利用率低。在100G以太網(wǎng)中數(shù)據(jù)位寬如果按320設(shè)計(jì),需要多達(dá)40個(gè)不同的CRC模塊,加上一個(gè)40路的多選一電路,這樣的電路在資源使用和時(shí)序性能方面都是很糟糕的。所以這一方法無(wú)法用于100G以太網(wǎng)中。文獻(xiàn)[7]中提到了一種級(jí)聯(lián)結(jié)構(gòu)可以計(jì)算任意字節(jié)的CRC,但此結(jié)構(gòu)有個(gè)很明顯的缺點(diǎn),即級(jí)聯(lián)越大,電路延遲線性增加,320位就需要級(jí)聯(lián)40次,這樣的電路無(wú)法滿足時(shí)序要求。文獻(xiàn)[2]中利用了CRC校驗(yàn)具有的Magic Number特性,在數(shù)據(jù)幀后面添加0,使得可以只用一個(gè)64 bit的CRC模塊完成接收方的CRC校驗(yàn),但無(wú)法在數(shù)據(jù)發(fā)送方完成CRC值的計(jì)算。
上節(jié)提到的10G以太網(wǎng)CRC的處理方法都無(wú)法直接應(yīng)用于100G以太網(wǎng)中。下面說(shuō)明本文提出的方法:幀前補(bǔ)0后再進(jìn)行CRC計(jì)算。
假設(shè)原始序列M有n位數(shù)據(jù),n不是320位的整數(shù)倍。i是一個(gè)小于320的整數(shù),且i+n為320的整數(shù)倍,在M前增加i個(gè)0構(gòu)造為新序列M′:
M′(x)=0·xi+n-1+…+0·xn+M(x)=0+M(x)=M(x)
(5)
可以看出新序列在數(shù)值上與原來(lái)的序列值是一樣的。這個(gè)很好理解,就像在十進(jìn)制中在最前面添加任意位數(shù)的0并不會(huì)改變這個(gè)數(shù)的數(shù)值一樣,當(dāng)然這在二進(jìn)制數(shù)當(dāng)中同樣適用。新序列的數(shù)據(jù)長(zhǎng)度成為了320的整數(shù)倍。
由CRC的計(jì)算公式(3)來(lái)看,CRC的結(jié)果只與序列的數(shù)值有關(guān),所以用新序列計(jì)算CRC會(huì)得到與用原始數(shù)列同樣的結(jié)果。所以依據(jù)此原理,只需要設(shè)計(jì)一個(gè)320位的并行CRC模塊,計(jì)算時(shí)使用新的序列送給CRC模塊,這個(gè)方法可以計(jì)算任意字節(jié)數(shù)據(jù)幀的CRC值。
假設(shè)有一幀數(shù)據(jù)負(fù)載字節(jié)長(zhǎng)度為len,加上目的地址、源地址和數(shù)據(jù)/類(lèi)型字段的長(zhǎng)度14 B,則該幀需要參與CRC計(jì)算的數(shù)據(jù)總長(zhǎng)為L(zhǎng)=len+14。令n=ceil(L/40),ceil函數(shù)得到的是大于等于L/40的最小整數(shù)。令rem=mod(L,40)為L(zhǎng)/40的余數(shù),表示最后一組數(shù)據(jù)中有效數(shù)據(jù)的字節(jié)數(shù),對(duì)應(yīng)的com=40-rem表示無(wú)效的字節(jié)數(shù),V=8*com則表示無(wú)效的比特?cái)?shù),也就是需要在幀前添加的0的比特個(gè)數(shù)。
在客戶(hù)端向MAC發(fā)送數(shù)據(jù)時(shí),每個(gè)時(shí)鐘MAC層會(huì)收到一組數(shù)據(jù)Cur_data_in[319:0],設(shè)計(jì)一組初始化為全0的寄存器Last_data_in[319:0]用來(lái)保存上一時(shí)鐘的數(shù)據(jù)。根據(jù)V值的大小將Cur_data_in和Last_data_in組合成一組新的數(shù)據(jù)Data_to_crc[319:0],其組合關(guān)系為:
Data_to_crc[319:0]=Last_data_in[V-1:0]&Cur_data_in[319:V]
(6)
“&”表示并置連接,處理過(guò)程如圖4所示。新的序列就是送給CRC模塊的數(shù)據(jù),從圖中可以看到在原始數(shù)據(jù)的前面添加了V個(gè)比特0。每組數(shù)據(jù)都可以使用320位的并行CRC進(jìn)行處理,而且最后得到的結(jié)果與使用原始數(shù)據(jù)一樣。
圖4 數(shù)據(jù)處理過(guò)程
使用硬件描述語(yǔ)言VHDL實(shí)現(xiàn)上述的處理過(guò)程,并將程序下載到FPGA中進(jìn)行測(cè)試,綜合出來(lái)的結(jié)果表明該方法在面積使用和運(yùn)行速度方面的效果都很好。測(cè)試時(shí)客戶(hù)端給出了一些不同長(zhǎng)度的以太網(wǎng)幀,使用Quartus II中的SignalTap工具對(duì)數(shù)據(jù)流進(jìn)行采樣。圖5是rem值為18的一幀數(shù)據(jù)的第一組數(shù)據(jù),可以看到data_to_crc在cur_data_in前面添加了22個(gè)比特0,這是符合設(shè)計(jì)預(yù)期結(jié)果的。圖6所示是該幀數(shù)據(jù)的最后一組數(shù)據(jù),根據(jù)rem值,cur_data_in只有18 B的有效數(shù)據(jù),所以data_to_crc也只取了其中的18 B有效數(shù)據(jù),在CC處結(jié)束,此時(shí)的CRC值就是最終的FCS值為83ACF5C1。
為了驗(yàn)證該值的正確性,使用8位并行CRC算法計(jì)算該幀的CRC值,在ModelSim平臺(tái)下進(jìn)行了仿真。結(jié)果如圖7所示,可以看到計(jì)算完CC后CRC值為83ACF5C1,與前面的結(jié)果一致,說(shuō)明了該方法得到的結(jié)果是正確的。
圖5 rem為18的第一組數(shù)據(jù)
圖6 rem為18的最后一組數(shù)據(jù)
圖7 rem為18的一組幀數(shù)據(jù)進(jìn)行8位CRC計(jì)算仿真
由于100G以太網(wǎng)中會(huì)使用很高的并行數(shù)據(jù)位寬,但是數(shù)據(jù)幀中需要進(jìn)行CRC計(jì)算的數(shù)據(jù)長(zhǎng)度不一定是位寬的整數(shù)倍,本文針對(duì)這個(gè)問(wèn)題提出了一種新的處理方法,并且通過(guò)了測(cè)試。該方法簡(jiǎn)單有效,能夠克服傳統(tǒng)方法的缺陷,在性能上有很大的提升。雖然本文是以100G以太網(wǎng)的CRC-32作說(shuō)明,該方法也能很容易地應(yīng)用于其他的高速通信系統(tǒng)。
[1] IEEE. IEEE Std. 802.3ba[S]. 2010.
[2] 彭建輝. 10G以太網(wǎng)接口并行CRC校驗(yàn)的一種簡(jiǎn)化算法[J].微計(jì)算機(jī)信息,2006,22(20):213-215.
[3] STAVINOV E.A practical parallel CRC generation method [J]. Circuit Cellar, 2010(234):38-45.
[4] 畢占坤,張羿猛,黃芝平,等.基于邏輯設(shè)計(jì)的高速CRC并行算法研究及其FPGA實(shí)現(xiàn)[J]. 儀器儀表學(xué)報(bào), 2007,28(12):2244-2249.
[5] KENNEDY C E, MOZAFFARI-KERMANI M.Generalized parallel CRC computation on FPGA[C]. Canadian Conference on Electrical and Computer Engineering (CCECE), 2015:107-113.
[6] 張友亮,劉志軍,馬成海,等. 萬(wàn)兆以太網(wǎng)MAC層控制器的FPGA設(shè)計(jì)與實(shí)現(xiàn)[J]. 計(jì)算機(jī)工程與應(yīng)用, 2012,48(6):77-79.
[7] 劉昭,蘇厲,金德鵬,等.10G以太網(wǎng)系統(tǒng)中的并行CRC編解碼器的設(shè)計(jì)[J]. 電子技術(shù)應(yīng)用, 2004,30(4):47-50.
A simple method of high-bit-wide parallel CRC for 100G Ethernet
Li Chuanhui,Liu Chunwu,Huang Zhiping
(School of Mechatronic Engineering and Automation, National University of Defense Technology, Changsha 410073, China)
In the process of 100G Ethernet MAC (Media Access Controller) design, in order to reduce the requirements on the clock, high-bit-wide parallel data should be used. When using the parallel CRC (Cyclical Redundancy Check), there will be a problem that the length of CRC calculation span is not an integer multiple of parallel width. It causes that we can’t use the parallel width’s CRC to handle the last data. In order to solve this problem, this paper proposes a method of adding zero before the frame. The simulation and test results have verified the feasibility of the method, and this method can also be applied to other communication systems.
100G Ethernet; parallel CRC; high-bit-wide
TN911.22
A
1674-7720(2016)07- 0057- 03
李傳輝,劉純武,黃芝平. 100G以太網(wǎng)中高位寬并行CRC的簡(jiǎn)化方法[J].微型機(jī)與應(yīng)用,2016,35(7):57-59.
2015-12-09)
李傳輝(1991-),通信作者,男,在讀碩士研究生,主要研究方向:網(wǎng)電空間測(cè)控。E-mail:chankli@163.com。
劉純武(1963-),男,碩士,副教授,主要研究方向:網(wǎng)電空間測(cè)控。
黃芝平(1965-),男,博士,教授,主要研究方向:網(wǎng)電空間測(cè)控。