汪智杰,周治柱,2
(1.武漢郵電科學(xué)研究院,湖北武漢 430074;2.武漢光迅科技股份有限公司,湖北武漢 430205)
電網(wǎng)在運(yùn)行過程中需要傳輸監(jiān)測信號(hào),由于電網(wǎng)監(jiān)測信息傳輸環(huán)境的特殊性,長跨距顯得尤為重要[1-2]。使用里德-索羅蒙(Reed-Solomone,RS)碼能夠降低收端的誤碼率[3-4],糾正突發(fā)或者連續(xù)的碼元錯(cuò)誤[5-7],提高信道容量[8],降低接收端光信噪比容限[9]。但由于專用RS 編譯碼器價(jià)格不菲,使用可編程邏輯門陣列(Field-Programmable Gate Array,FPGA)完成RS 碼編譯碼器的設(shè)計(jì),能夠降低成本,使用靈活。
現(xiàn)有的RS 編譯碼器使用的FPGA 芯片一般為Xillix 和Altera 這兩家公司產(chǎn)品,但近些年中國和美國的貿(mào)易摩擦越來越大,“中興制裁”和“華為斷供”的事件,警醒著我們核心技術(shù)必須要掌握在自己的手中,而電力通信系統(tǒng)更是需要自主可控。隨著國產(chǎn)FPGA 的發(fā)展,部分國產(chǎn)FPGA 的性能已經(jīng)滿足RS 編譯碼器設(shè)計(jì)的基本需求。
文中以RS(255,239)為例,詳細(xì)介紹了編碼器和譯碼器的實(shí)現(xiàn)原理與模塊設(shè)計(jì),并設(shè)計(jì)了FPGA 板卡和長距傳輸測試系統(tǒng),在安路最新推出的PH1A 100SFG676 芯片上完成了RS 編譯碼器的設(shè)計(jì)與應(yīng)用,并且實(shí)現(xiàn)了信號(hào)在編譯碼器上千兆速率的傳輸。
RS 碼的碼元是k個(gè)信息元加上n-k個(gè)校驗(yàn)元的組合,所以RS 碼的編碼過程就是求解校驗(yàn)多項(xiàng)式的過程[10]。RS 碼的碼元均來自伽羅華域GF(2m)。對于碼長為n=2m-1(m≥2)的RS(n,k)碼,其信息元長度為k,校驗(yàn)段長度為n-k,可糾正t=(n-k)/2 個(gè)錯(cuò)誤。RS 碼的校驗(yàn)元求解方程[11]如式(1)所示:
由式(1)可知,校驗(yàn)元r(x)可由信息多項(xiàng)式f(x)乘以xn-k然后對生成多項(xiàng)式g(x)取余數(shù)得到。
由RS 碼的編碼原理可知,RS 碼的編碼電路是一條除法電路,常見的RS 碼編碼器結(jié)構(gòu)框圖如圖1所示。
圖1 中的g0、g1…g15為生成多項(xiàng)式的系數(shù)。編碼電路的工作原理如下:
1)信息元輸入時(shí),SW1接到信息元一側(cè),SW2接到加法器一側(cè)。
2)經(jīng)過239 個(gè)時(shí)鐘周期后除法器電路中的除法運(yùn)算完成,SW2接到信號(hào)0 的一側(cè),SW1接到寄存器一側(cè)。
3)再經(jīng)過16 個(gè)時(shí)鐘周期后,寄存器r0、r1…r15中的校驗(yàn)元全部輸出,即得到編碼后的255 個(gè)碼元。
圖1 中的主要資源消耗為乘法器,一般實(shí)現(xiàn)乘法器是利用兩個(gè)元素相乘為元素冪指數(shù)相加的原理,先查找出兩個(gè)元素的指數(shù),然后指數(shù)相加對255取余,再通過計(jì)算后的指數(shù)來查找對應(yīng)的元素。因此一個(gè)乘法器需要消耗三個(gè)查找表,非常占用資源。
由圖1 可知,每一個(gè)乘法器的乘法因子中都有一個(gè)元素是確定的。通過多項(xiàng)式乘法展開后,合并相同次數(shù)項(xiàng),即可將乘法轉(zhuǎn)換為加法運(yùn)算[12]。
RS(255,239)的生成多項(xiàng)式特征向量是已知的,設(shè)另一元素c(x)的特征向量為(c7,c6,…,c0),將兩個(gè)多項(xiàng)式相乘,根據(jù)伽羅華域規(guī)則進(jìn)行化簡得到相乘后元素的特征向量。通過這種優(yōu)化乘法模塊的設(shè)計(jì)代替了查找表求積,減少了資源的消耗。
圖2 是編碼數(shù)據(jù)的仿真圖,使用的時(shí)鐘信號(hào)頻率為125 MHz,為了方便觀察,把輸入的碼元從1 開始累加到239 后開始輸出校驗(yàn)元。從圖2 可知,輸出的16 個(gè)校驗(yàn)元為(37,133,225,126,37,59,132,133,56,168,179,4,9,99,79,148)。
RS 譯碼一般使用時(shí)域譯碼,時(shí)域譯碼一般采用伯克利-梅西(Berlekamp-Massey,BM)算法或者歐幾里得算法[13],BM 算法具有消耗資源少、速度快等優(yōu)點(diǎn)。該文采用的是BM 算法改進(jìn)后的無逆伯克利-梅西(imversionless Berlekamp-Massey,iBM)算法。
RS 碼的譯碼步驟如下:
1)接收碼元R(x)進(jìn)入伴隨式模塊計(jì)算伴隨式。
2)通過計(jì)算出的伴隨式求解錯(cuò)誤位置多項(xiàng)式和錯(cuò)誤值多項(xiàng)式。
3)計(jì)算錯(cuò)誤位置和錯(cuò)誤值。
4)通過得到的錯(cuò)誤位置和錯(cuò)誤值求解正確碼元。
RS(255,239)的伴隨式如式(2)所示:
其中,系數(shù)sj可以展開為式(3):
在計(jì)算伴隨式系數(shù)sj過程中復(fù)用16 個(gè)單元來同時(shí)計(jì)算16 個(gè)伴隨式,以減少譯碼時(shí)間。伴隨式模塊框圖如圖3 所示。
初始化后寄存器D 清零,接收碼元依次輸入伴隨式計(jì)算電路,255 個(gè)時(shí)鐘周期后輸出16 個(gè)伴隨式,如果輸出的16 個(gè)伴隨式系數(shù)為零,則沒有誤碼;否則就出現(xiàn)了誤碼,需進(jìn)行糾錯(cuò)處理。
求解出2t個(gè)伴隨式后,開始計(jì)算錯(cuò)誤位置多項(xiàng)式σ(x),錯(cuò)誤位置多項(xiàng)式系數(shù)使用iBM 算法迭代求解。
改進(jìn)后的iBM 算法步驟[14-16]如下:1)初始狀態(tài)的條件如下:
2)根據(jù)下面各環(huán)節(jié)公式依次進(jìn)行循環(huán)迭代,每次迭代后k加1,當(dāng)k=2t-1 時(shí)完成迭代,完成一組碼元的糾錯(cuò):
Chien 搜索模塊的目的是通過代入法求解錯(cuò)誤位置多項(xiàng)式的根,從而得到接收碼元中的錯(cuò)誤碼元位置。直接求解位置多項(xiàng)式比較復(fù)雜,現(xiàn)在一般采用的是中國科學(xué)家錢聞天提出的Chien 搜索算法。Chien 搜索模塊框圖如圖4 所示。
設(shè)錯(cuò)誤值多項(xiàng)式為ω(x),記ω(x)為:
在求解出σ(x)后,將錯(cuò)誤位置多項(xiàng)式與伴隨式相乘得到錯(cuò)誤值多項(xiàng)式:
因?yàn)镾(x)和σ(x)的最高次冪均為t,所以ω(x)的最高次冪為x2t。直接求解錯(cuò)誤值多項(xiàng)式復(fù)雜度高,一般使用Forney 公式來求解錯(cuò)誤值,如式(6)所示:
完成設(shè)計(jì)后,使用Modelsim 仿真軟件進(jìn)行仿真,仿真圖像如圖5所示。為了方便觀察,將編碼器的輸出送入譯碼器的輸入并且在第1,2,3,4,5,8,9,10位添加噪聲,從圖5中可見,出現(xiàn)錯(cuò)誤后error_index 指示信號(hào)拉高,同時(shí)error信號(hào)輸出求解得到的噪聲值,error信號(hào)和data_out 信號(hào)異或后得到譯碼的數(shù)據(jù)correct_data。從仿真波形上看,能夠糾正最多8個(gè)錯(cuò)誤碼元,滿足預(yù)期設(shè)計(jì)目標(biāo)。通過流水線設(shè)計(jì)解碼速率能夠達(dá)到1 Gbit/s,初步滿足業(yè)務(wù)信號(hào)傳輸速率的要求。
為了驗(yàn)證編譯碼器的設(shè)計(jì)效果和對系統(tǒng)性能的提升程度,設(shè)計(jì)了一個(gè)長距傳輸測試平臺(tái)進(jìn)行驗(yàn)證。長距傳輸測試平臺(tái)包含了誤碼儀、功率放大器(Booster Amplifier,BA)、前置放大器(Pre-Amplifier,PA)、電可調(diào)光衰(Electronic Variable Optical Attenuators,EVOA)和FPGA 板卡。測試FPGA 系統(tǒng)示意框圖如圖6所示。
在實(shí)際測試環(huán)境中,由于沒有足夠長的光纖,所以測試系統(tǒng)通過調(diào)整光衰值的大小來模擬不同光纖長度帶來的衰減,測試編碼的增益效果。圖6 中RS 編譯碼器位于介質(zhì)訪問控制層(Medium Access Control Layer,MAC)和端口物理層(Port Physical Layer,PHY)中間,并對MAC 層產(chǎn)生的校驗(yàn)碼進(jìn)行糾錯(cuò),這樣能夠進(jìn)一步提升系統(tǒng)的性能。
FPGA 板卡最重要的是供電部分設(shè)計(jì)也就是電源模塊的設(shè)計(jì)。PH1A100SFG676 芯片內(nèi)部需要提供1.8 V、0.9 V 以及3.3 V 三種類型的電壓來給FPGA芯片內(nèi)部不同區(qū)域供電。為了降低外部供電設(shè)備的復(fù)雜程度,使用的外部電源統(tǒng)一為12 V,通過矽力杰的SY8386AQQC 降壓芯片以及外圍分壓電路輸出3.3 V、1.8 V 及0.9 V 電壓。
圖7所示為12 V轉(zhuǎn)3.3 V的FPGA供電轉(zhuǎn)換電路。設(shè)計(jì)的FPGA 板卡如圖8 所示。
由于G.652 的光纖固定損耗為0.18 dB/km,所以模擬長度為245 km 的光纖只需要將光衰值設(shè)置為34.1 dB。設(shè)置好各項(xiàng)參數(shù)后,誤碼儀測試結(jié)果如圖9所示。在1010個(gè)以太網(wǎng)報(bào)文中未發(fā)現(xiàn)丟包,誤碼率為0,基本滿足千兆速率傳輸要求。
基于國產(chǎn)安路PH1A100SFG676 芯片,該文設(shè)計(jì)并應(yīng)用了RS(255,239)編碼器和譯碼器,降低了系統(tǒng)誤碼率,提升系統(tǒng)性能并且傳輸速率能夠達(dá)到千兆。所有芯片及器件全部選用國產(chǎn)器件,初步滿足電網(wǎng)業(yè)務(wù)信號(hào)低誤碼率的傳輸要求。對通信速率要求不是很高并且需要長距傳輸?shù)男袠I(yè),該文提供了一種國產(chǎn)化替代的可能性。