李繼豪,沈劍良,陳 艇
(中國(guó)人民解放軍戰(zhàn)略支援部隊(duì)信息工程大學(xué) 信息技術(shù)研究所,河南 鄭州 450002)
2017年IEEE發(fā)布了802.3bs協(xié)議,標(biāo)志著200 Gb/s,400 Gb/s以太網(wǎng)正式投入使用。從早期的10 Mb/s發(fā)展到現(xiàn)在的400 Gb/s,以太網(wǎng)帶寬的不斷增大提升了信道容量,但也帶來(lái)了信道損耗、信號(hào)間干擾、誤碼率等問(wèn)題[1]。為了降低傳輸誤碼率,滿足以太網(wǎng)對(duì)傳輸可靠性的要求,IEEE以太網(wǎng)標(biāo)準(zhǔn)規(guī)定100 Gb/s以上以太網(wǎng)必須使用FEC對(duì)傳輸過(guò)程中發(fā)生的錯(cuò)誤進(jìn)行檢測(cè)與糾錯(cuò)[2]。
當(dāng)前100 Gb/s以上以太網(wǎng)使用的FEC糾錯(cuò)碼有兩種:RS(528,514,7)碼和RS(544,514,15)碼。RS碼是在伽羅華域GF(2m)上運(yùn)算的一種線性分組循環(huán)碼,對(duì)于RS(n,k,t)碼,n是碼字長(zhǎng)度,k是信息位長(zhǎng)度,t=(n-k)2表示最大可糾錯(cuò)個(gè)數(shù)。RS碼具有極強(qiáng)的隨機(jī)錯(cuò)誤和突發(fā)錯(cuò)誤糾正能力,廣泛應(yīng)用于有線通信、無(wú)線通信、光通信等領(lǐng)域[3]。
根據(jù)IEEE 802.3第73條自動(dòng)協(xié)商結(jié)果,端口中的PCS層需要支持兩種不同規(guī)范的FEC編解碼方案。為在同一個(gè)端口中支持兩種規(guī)范,解碼器中需要兩個(gè)專用實(shí)例分別執(zhí)行RS(528,514)和RS(544,514)的解碼功能,而同一時(shí)間只能按照一種規(guī)范來(lái)進(jìn)行傳輸。這意味著在以RS(528,514)為FEC方案的數(shù)據(jù)傳輸過(guò)程中,只有RS(528,514)解碼器占用的資源處于工作狀態(tài),RS(544,514)解碼器資源處于空閑狀態(tài),造成了資源浪費(fèi)。
當(dāng)前主流的方法是對(duì)以太網(wǎng)FEC解碼模塊中的兩種RS解碼器分別進(jìn)行優(yōu)化設(shè)計(jì),通過(guò)對(duì)解碼器中SC、KES、CSEE模塊的并行設(shè)計(jì)[4-5]、流水線處理[6]、降低關(guān)鍵路徑,來(lái)提升傳輸速率,降低時(shí)延。但隨著以太網(wǎng)傳輸速率提升到800 GB,1.6 TB甚至更高,以太網(wǎng)支持的FEC類型更多,針對(duì)每一種FEC解碼器進(jìn)行優(yōu)化設(shè)計(jì)的方法產(chǎn)生的效果越來(lái)越小,并沒(méi)有從根本上解決解碼資源占用率高、資源利用率低的問(wèn)題,解碼芯片中包含多個(gè)獨(dú)立的解碼模塊,造成了面積、資源和功耗的浪費(fèi)。
RS碼的多模解碼器最早由Hsu Huai-Yi設(shè)計(jì)[7],實(shí)現(xiàn)了0≤t≤8,0≤n≤255多種RS碼的解碼。該設(shè)計(jì)不足之處在于:需要手動(dòng)配置來(lái)更換RS碼編解碼模式,最大吞吐量?jī)H為3.2 Gb/s,無(wú)法適用于超高速以太網(wǎng)。文獻(xiàn)[8]中提出了一種適用于Polar碼、LDPC碼、Turbo、卷積碼的多模解碼器,支持WiMAX等多種協(xié)議,但該設(shè)計(jì)考慮的是不同種類FEC碼之間的融合,沒(méi)有考慮不同參數(shù)RS碼的解碼器融合問(wèn)題。
本文針對(duì)以上問(wèn)題,將雙模RS解碼器的思想引入以太網(wǎng)解碼器設(shè)計(jì),提出一種能夠針對(duì)RS(528,514)和RS(544,514)兩種FEC編碼方式進(jìn)行解碼的雙模解碼器,同時(shí)基于Vivado等軟件構(gòu)建該RS雙模解碼器設(shè)計(jì)的仿真測(cè)試平臺(tái)。
以太網(wǎng)中RS解碼采用硬判決解碼,BM算法及其改進(jìn)算法由于關(guān)鍵路徑短、易于硬件實(shí)現(xiàn),是當(dāng)前以太網(wǎng)RS解碼器硬件設(shè)計(jì)中的主流算法[9]。
硬判決RS解碼器主要包含三個(gè)模塊:
1)SC模塊。根據(jù)接收到的碼字,SC模塊計(jì)算求出校驗(yàn)子Si(0≤i≤2t-1),如果Si全為0,則傳輸?shù)臄?shù)據(jù)沒(méi)有產(chǎn)生誤碼。
2)KES模塊。KES模塊對(duì)SC模塊產(chǎn)生的伴隨式S(x)進(jìn)行求解,得到錯(cuò)誤多項(xiàng)式Λ(x)和錯(cuò)誤值多項(xiàng)式Ω(x),這一過(guò)程稱為關(guān)鍵方程求解。
3)CSEE模塊。CSEE模塊使用錢搜索算法求解出錯(cuò)誤多項(xiàng)式Λ(x),得到每個(gè)錯(cuò)誤出現(xiàn)的位置,通過(guò)Forney公式計(jì)算每個(gè)位置處碼字的錯(cuò)誤值。
除了這三個(gè)主要模塊之外,還有用于存儲(chǔ)接收數(shù)據(jù)的緩存區(qū),RS解碼器工作流程如圖1所示。
圖1 硬判決RS解碼器流程
RS解碼器輸入為接收信息多項(xiàng)式R(x)的各項(xiàng)系數(shù),R(x)=rn-1xn-1+…+r1x+r0,SC模塊根據(jù)接收碼字多項(xiàng)式R(x)計(jì)算出校驗(yàn)子Si,公式如下:
如果所有校驗(yàn)子值都為0,表明傳輸過(guò)程中沒(méi)有發(fā)生錯(cuò)誤,接收碼字多項(xiàng)式R(x)等于發(fā)送的碼字多項(xiàng)式C(x);否則表明傳輸過(guò)程中發(fā)生了錯(cuò)誤。錯(cuò)誤多項(xiàng)式表示為:
式中:ejv為錯(cuò)誤幅值;xjv表示錯(cuò)誤位置;v表示錯(cuò)誤個(gè)數(shù)且0≤v≤t,接收碼字R(x)=C(x)+E(x),將ri=ci+ei代入式(2)可得:
令αjl=βl來(lái)指示錯(cuò)誤位置,則有:
當(dāng)0≤v≤t時(shí),2t個(gè)方程可以解出2v個(gè)未知數(shù)β1~βv,ej1~ejv,由此求出錯(cuò)誤多項(xiàng)式E(x)與解碼輸出碼字R(x)。當(dāng)v>t時(shí),傳輸過(guò)程中發(fā)生的錯(cuò)誤個(gè)數(shù)超出了RS(n,k,t)碼的糾錯(cuò)能力上限,無(wú)法恢復(fù)發(fā)送端的原始信號(hào)。
直接求解2t個(gè)方程會(huì)帶來(lái)大量的復(fù)雜計(jì)算,采用間接方法能降低計(jì)算復(fù)雜度,易于硬件實(shí)現(xiàn)。錯(cuò)誤位置多項(xiàng)式表示為:
令Λ(x)=0的根為β-1k(k=1,2,…,v),代入式(5),經(jīng)過(guò)變換:
對(duì)k求和:
將式(4)代入式(7)得:
由Ω(x)=S(x)·Λ(x)得:
由式(8)得出式(9)中x次數(shù)高于v-1的項(xiàng)系數(shù)全為0,而S(x)中Si(i≥t)的項(xiàng)數(shù)均為0,因此Ω(x)最高次數(shù)不超過(guò)2t-1,即:
式(10)稱為關(guān)鍵方程[9],Ω(x)為錯(cuò)誤值多項(xiàng)式,滿足:
關(guān)鍵方程的求解是RS碼解碼過(guò)程中最關(guān)鍵的步驟,Berlekamp和Massey最早提出BM算法對(duì)關(guān)鍵方程求解[10],此后研究者們不斷對(duì)BM算法進(jìn)行改進(jìn),提出了無(wú)求逆的IBM算法[11]、RIBM算法[12]、ePIBM算法[13]等。
在完成關(guān)鍵方程求解后,下一步是根據(jù)錯(cuò)誤位置多項(xiàng)式Λ(x)和錯(cuò)誤值多項(xiàng)式Ω(x)計(jì)算錯(cuò)誤位置和錯(cuò)誤值,采用錢搜索算法完成錯(cuò)誤位置搜索,通過(guò)Forney算法計(jì)算出錯(cuò)誤值。錢搜索算法對(duì)r n-1,rn-2,…,r1,r0依次進(jìn)行驗(yàn)證,將有限域中的所有元素代入Λ(x)中求解,求出Λ(x)的根,這個(gè)遍歷GF(2m)域中所有元素求解Λ(x)根的過(guò)程就是錢搜索。二進(jìn)制碼可以通過(guò)對(duì)錯(cuò)誤位置進(jìn)行比特翻轉(zhuǎn)完成解碼,但對(duì)于多進(jìn)制碼,還必須計(jì)算錯(cuò)誤位置處的錯(cuò)誤值,在得到錯(cuò)誤位置之后,借助Forney算法可完成錯(cuò)誤值ejl的計(jì)算,其公式表示如下(本文中m0取0):
文獻(xiàn)[7]中給出了多模RS解碼器的設(shè)計(jì)思路,屬于同一種伽羅華域的RS碼,其解碼器的各個(gè)模塊都具有相似性,這為融合設(shè)計(jì)提供了可能。
當(dāng)前100 GB以太網(wǎng)FEC的兩種規(guī)范RS(528,514)碼和RS(544,514)碼具有共同的域GF(210),域中每個(gè)元素對(duì)應(yīng)的位數(shù)和值都相同,因此兩者共用一個(gè)元素值表。SC模塊中RS(528,514)中的校驗(yàn)子計(jì)算邏輯是RS(544,514)中計(jì)算邏輯的一個(gè)子集,后者的校驗(yàn)子計(jì)算電路經(jīng)過(guò)修改可以直接用于前者的校驗(yàn)子計(jì)算。兩種RS碼KES模塊中的初始值λ,b,γ,k和計(jì)算步驟相同。CSEE模塊中錢搜索對(duì)GF(210)域中全部1 024個(gè)元素依次驗(yàn)證,尋找使得Λ(x)=0的根,根的倒數(shù)代入式(12)計(jì)算錯(cuò)誤值。由于RS(528,514)和RS(544,514)共用所有元素,遍歷根的過(guò)程完全相同。基于以上分析,本文針對(duì)以太網(wǎng)中RS(528,514)和RS(544,514)兩種FEC解碼標(biāo)準(zhǔn)設(shè)計(jì)了一種通用的RS雙模解碼器。
2.2.1 雙模SC模塊
本文設(shè)計(jì)的SC模塊校驗(yàn)子計(jì)算結(jié)構(gòu)包含2t2個(gè)SC計(jì)算單元PE0,如圖2所示。解碼器接收到碼字后,此模塊進(jìn)行伴隨多項(xiàng)式計(jì)算,當(dāng)解碼模式為RS(528,514)時(shí),調(diào)用其中的t1=14個(gè)PE0單元完成校驗(yàn)子計(jì)算,RS(544,514)的解碼模式下使用全部的t2=30個(gè)PE0單元完成30個(gè)校驗(yàn)子Si的計(jì)算。
圖2 雙模SC模塊校驗(yàn)子計(jì)算結(jié)構(gòu)
融合后的SC模塊相較于單模解碼器,既省去了14個(gè)校驗(yàn)子計(jì)算單元,又減小了一種解碼模式運(yùn)行時(shí)另一套解碼模式空閑的資源數(shù)量,提高了資源利用率。除此之外,SC計(jì)算單元PE0中乘法器輸入元素α0~α2t2-1的存儲(chǔ)空間同樣共享。
p路并行的SC模塊每個(gè)時(shí)鐘周期傳輸p個(gè)符號(hào)數(shù)據(jù),同一時(shí)鐘內(nèi)每個(gè)PE0需完成p個(gè)符號(hào)的計(jì)算量,即p次加法運(yùn)算與p次乘法運(yùn)算,被乘數(shù)αi具有規(guī)律性,提前計(jì)算出所有被乘元素存入矩陣即可在單周期內(nèi)完成并行計(jì)算。
2.2.2 雙模KES模塊
KES模塊隨著伴隨式的輸入,完成計(jì)算過(guò)程。本文雙模KES模塊采用IBM算法,KES模塊電路結(jié)構(gòu)分為DC和ELU兩部分,如圖3、圖4所示。
圖3 KES模塊DC結(jié)構(gòu)
圖4 KES模塊ELU結(jié)構(gòu)
圖4中,MC(r)為控制信號(hào),前2t次迭代,DC模塊中寄存器存放有SC模塊計(jì)算的校驗(yàn)子值S1,S2,…,S2t2-1,S0。首次迭代時(shí),ELU模塊根據(jù)初始值嘗試計(jì)算出2t個(gè)關(guān)鍵方程的解,獲得第一次迭代的λi(t)值輸入DC模塊。經(jīng)過(guò)2t2次迭代后錯(cuò)誤位置多項(xiàng)式Λ(x)各階系數(shù)Λi=λi,第2t+1次迭代DC塊中寄存器內(nèi)的值更新為S1,S2,…,St,0,…,0,S0,Λi作為輸入歷經(jīng)t次迭代計(jì)算出錯(cuò)誤值多項(xiàng)式Ω(x)各階系數(shù)Ωj。當(dāng)工作模式為RS(528,514)時(shí),調(diào)用雙模KES模塊的部分資源完成計(jì)算。傳統(tǒng)基于IBM的RS解碼器3t次迭代需要3t個(gè)周期,本文在雙模KES模塊的基礎(chǔ)上設(shè)計(jì)了流水線結(jié)構(gòu),采用4個(gè)slice,每個(gè)時(shí)鐘周期迭代4次,進(jìn)一步降低解碼時(shí)延,其具體結(jié)構(gòu)如圖5所示。每個(gè)slice包含一個(gè)DC模塊與ELU模塊,同一slice的DC模塊中存儲(chǔ)Si的寄存器每個(gè)時(shí)鐘周期移位4次。在流水線處理模式下,上一個(gè)slice的輸出作為下一個(gè)slice的輸入。采用4個(gè)slice的流水線結(jié)構(gòu)雖然會(huì)增加額外的資源開銷,但是能夠縮減KES模塊迭代時(shí)間,滿足以太網(wǎng)中FEC解碼器中的傳輸速率。slice模塊受控制信號(hào)MC(r)的控制,可以通過(guò)設(shè)置在RS(528,514)模式下啟用2個(gè)slice,RS(544,514)模式啟用4個(gè)slice,使兩種模式下KES模塊解碼周期相同,實(shí)現(xiàn)多個(gè)使能信號(hào)的復(fù)用。
圖5 基于流水線的雙模KES結(jié)構(gòu)
2.2.3 雙模CSEE模塊
圖6a)給出了雙模CSEE模塊的結(jié)構(gòu)圖,每個(gè)PE2計(jì)算單元包含一個(gè)乘法器和一個(gè)寄存器,如圖6b)所示,使用2t-1個(gè)PE2單元完成錯(cuò)誤位置與錯(cuò)誤值的計(jì)算。PE21-PE2t中寄存器存儲(chǔ)了KES模塊計(jì)算的Λi,PE2t+1-PE22t-1中寄存器存儲(chǔ)了Ωj。
圖6 PE2計(jì)算單元結(jié)構(gòu)和雙模CSEE模塊結(jié)構(gòu)
將GF(210)中所有元素代入式(5)進(jìn)行驗(yàn)證,如果Λ(αi)=0,則r n-i出現(xiàn)錯(cuò)誤。傳統(tǒng)CSEE模塊時(shí)延為n個(gè)周期,采用l路并行的方式,可將延時(shí)縮短為n l,再經(jīng)過(guò)流水線處理,進(jìn)一步降低CSEE模塊時(shí)延。錯(cuò)誤位置計(jì)算出后,式(12)計(jì)算錯(cuò)誤值的過(guò)程中有求逆運(yùn)算,為了提高計(jì)算速度,將GF(210)中n個(gè)元素與其求逆后的值一一對(duì)應(yīng)存入查找表中,將除法操作轉(zhuǎn)換為查找表操作。RS(528,514)碼和RS(544,514)碼同屬于伽羅華域GF(210),具有相同的本原多項(xiàng)式x10+x3+1,因此同樣共用一個(gè)查找表。
本文實(shí)驗(yàn)的仿真部分在Vivado、VCS等平臺(tái)上進(jìn)行,基于第2節(jié)的雙模RS解碼器設(shè)計(jì)了100 GB以太網(wǎng)標(biāo)準(zhǔn)下雙模RS解碼器,輸入為4路80 bit位寬的SerDes并行數(shù)據(jù),時(shí)鐘頻率為333 MHz。雙模解碼器每個(gè)時(shí)鐘周期內(nèi)輸入32個(gè)符號(hào)數(shù)據(jù),RS(544,514)碼的每個(gè)碼字恰好在17個(gè)周期內(nèi)傳輸完成。為保證雙模解碼器解碼流程的一致性,需提前將RS(528,514)碼的每個(gè)碼字進(jìn)行預(yù)處理,在每個(gè)碼字最后添加16個(gè)符號(hào)的數(shù)據(jù)“0”,補(bǔ)足544個(gè)符號(hào),預(yù)處理流程開始于SerDes數(shù)據(jù)傳輸之前,傳統(tǒng)100 GB以太網(wǎng)在將數(shù)據(jù)送入解碼器之前同樣會(huì)進(jìn)行預(yù)處理,因而本文設(shè)計(jì)預(yù)處理部分不歸于雙模RS解碼器設(shè)計(jì),不占用解碼器資源。通過(guò)硬件描述語(yǔ)言Verilog進(jìn)行設(shè)計(jì),對(duì)雙模RS解碼器進(jìn)行功能驗(yàn)證,RS(528,514)解碼模式的功能驗(yàn)證結(jié)果如圖7a)所示。其中,rsd_data_i是輸入信號(hào),被標(biāo)記的rsd_data_o為輸出信號(hào),rsd_chfr_err_den_i和rsd_chfr_err_num_i分別對(duì)應(yīng)錯(cuò)誤位置和錯(cuò)誤值,err_mag_o是計(jì)算得到的錯(cuò)誤圖樣,men_rd_data_i是存儲(chǔ)在FIFO區(qū)的輸入數(shù)據(jù),symb_err_o為錯(cuò)誤計(jì)數(shù)信號(hào)。對(duì)于添加的7個(gè)錯(cuò)誤,設(shè)計(jì)的RTL代碼能成功完成糾錯(cuò),在Testbench頻率設(shè)置為500 MHz時(shí),RS(528,514)工作模式的時(shí)延為31個(gè)時(shí)鐘周期62 ns。
圖7b)給出了RS(544,514)解碼模式的功能驗(yàn)證結(jié)果,輸出信號(hào)rsd_data_o和插入的15個(gè)錯(cuò)誤err_mag_o被標(biāo)出,結(jié)果顯示成功完成了對(duì)接收碼字中的15個(gè)符號(hào)進(jìn)行糾錯(cuò),產(chǎn)生的時(shí)延為32個(gè)時(shí)鐘周期64 ns。由此推算333 MHz的時(shí)鐘頻率下,兩種解碼模式的時(shí)延分別為93 ns和96 ns,優(yōu)于文獻(xiàn)[4]中的106 ns和166 ns。實(shí)驗(yàn)證明,設(shè)計(jì)的雙模RS解碼器能夠成功實(shí)現(xiàn)RS(528,514)和RS(544,514)兩種模式的解碼。使用Vivado軟件平臺(tái)對(duì)雙模RS解碼器進(jìn)行綜合驗(yàn)證和布局布線仿真,F(xiàn)PGA選擇Xilinx公司Virtex UltraScale+HBM系列xcvu35pfsvh2892-3-e,I/O標(biāo)準(zhǔn)選擇LVCMOS12。對(duì)100 GB以太網(wǎng)下集成兩種單模RS解碼模塊的傳統(tǒng)以太網(wǎng)RS解碼器同樣進(jìn)行仿真測(cè)試。為了對(duì)比公平性,參考文獻(xiàn)[4]的設(shè)計(jì)思路撰寫了兩種單模解碼器的RTL代碼,保持與本文雙模RS解碼器代碼風(fēng)格、內(nèi)部功能模塊一致性。選擇輸入并行數(shù)p=32,每個(gè)周期傳輸32個(gè)符號(hào)的數(shù)據(jù),時(shí)鐘周期同為333 MHz。表1給出了100 GB以太網(wǎng)雙模RS解碼器與傳統(tǒng)RS解碼器[4]資源開銷對(duì)比。
圖7 RS(528,514)、RS(544,514)碼功能驗(yàn)證
結(jié)果表明,使用傳統(tǒng)方法設(shè)計(jì)的RS解碼器資源消耗為118 962個(gè)LUT,10 100個(gè)FF,本文設(shè)計(jì)的雙模RS解碼器消耗80 518個(gè)LUT,6 309個(gè)FF,分別減小了32.32%的LUT與37.53%的FF資源開銷。各個(gè)子模塊之間的使用資源對(duì)比同樣在表1中給出,相比于傳統(tǒng)RS解碼器,SC、KES、CSEE模塊LUT開銷分別降低了28.11%,22.32%,34.45%,F(xiàn)F開銷分別降低了31.94%,29.10%,44.60%。雙模RS解碼器不僅降低了資源開銷,還減少了解碼器中空閑資源數(shù)量。傳統(tǒng)解碼器中兩種解碼實(shí)例獨(dú)立存在,沒(méi)有共用的資源和內(nèi)存,以RS(528,514)的解碼模式為例,RS(544,514)工作模式的資源處于空閑狀態(tài),實(shí)際上的資源利用率不到50%。雙模RS解碼器各個(gè)子模塊之間存在資源共享、內(nèi)存共享,工作時(shí)空閑的資源更少,減小了靜態(tài)功耗。
表1 雙模RS解碼器資源使用情況
表2所示為雙模RS解碼器與傳統(tǒng)解碼器的功耗情況,通過(guò)對(duì)比,本文設(shè)計(jì)的雙模RS解碼器至少能降低17.34%的功耗。
表2 雙模RS解碼器功耗對(duì)比
當(dāng)前100 GB及以上以太網(wǎng)FEC編解碼規(guī)范只有RS(528,514)和RS(544,514)兩種,事實(shí)上,本文設(shè)計(jì)中的雙模RS解碼器不僅能實(shí)現(xiàn)這兩種工作模式的解碼,而且對(duì)于滿足元素域?yàn)镚F(210),n≤544,t≤15的任意RS(n,k,t)碼,此設(shè)計(jì)都能在現(xiàn)有的資源下實(shí)現(xiàn)前向糾錯(cuò)功能。綜上,本文設(shè)計(jì)中的雙模RS解碼器不僅能解決當(dāng)前100 GB以上以太網(wǎng)中RS(528,514)和RS(544,514)兩套解碼模塊資源不能共享的問(wèn)題,還具有可擴(kuò)展性,當(dāng)更高速率以太網(wǎng)采用RS碼作為FEC標(biāo)準(zhǔn)時(shí),該設(shè)計(jì)思路同樣有效。
本文提出一種面向超高速以太網(wǎng)的雙模RS解碼器設(shè)計(jì),通過(guò)對(duì)各子模塊進(jìn)行理論分析與優(yōu)化設(shè)計(jì),實(shí)現(xiàn)不同工作模式下資源復(fù)用和部分內(nèi)存共享,達(dá)到降低資源開銷和功耗的目的。實(shí)驗(yàn)部分通過(guò)硬件描述語(yǔ)言Verilog構(gòu)建100 GB以太網(wǎng)下的雙模RS解碼器,在Vivado等平臺(tái)上進(jìn)行仿真驗(yàn)證。實(shí)驗(yàn)結(jié)果表明,該雙模RS解碼器相對(duì)于集成了兩個(gè)單模RS解碼模塊的傳統(tǒng)FEC解碼器至少降低了32.32%的LUT與37.53%的FF資源開銷,以及17.34%的功耗。