摘 要:RS碼是糾錯能力很強的一類線性糾錯碼類,被廣泛用于各種通信系統和計算機存儲系統中。介紹了一種優化編碼生成多項式RS編碼器的設計方法,用VHDL語言編寫,利用ISE 9.0軟件仿真,燒寫入FPGA,驗證該RS編碼方法正確。
關鍵詞:RS碼; 編碼器; FPGA; ISE
中圖分類號:TN762-34文獻標識碼:A
文章編號:1004-373X(2010)17-0088-03
Optimization Design of RS Communication Coder and Implementation of FPGA
CHEN Chen1,2, XU Wei1, JIN Guang1
(1. Changchun Institute of Optics, Fine Mechanics and Physics, Chinese Academy of Sciences Changchun, Jilin 130033, China;
2. Graduate School, Chinese Academy of Sciences, Beijing 100039, China)
Abstract:
RS code, which is widely used in various kinds of communication systems and computer storage systems, is a linear one with fine error-correcting capability. The method of designing RS coder with optimized code generator polynomials is described. It is written with VHDL and simulated with ISE 9.0. The result obtained by writing into FPGA is presented . The correctness and efficiency of this method is validated .Keywords: RS code; coder; FPGA; ISE
0 引 言
Reed-Solomon碼首先是由 Reed和Solomon兩人于1960年提出來的,簡稱為RS碼[1-2]。這是一類具有很強糾錯能力的多進制BCH碼,既能糾正隨機錯誤,也能糾正突發錯誤,也是一類典型的代數幾何碼。RS碼一直以來都是國際通信領域研究的熱點之一[3-7]。
本文以戰術軍用通信系統的首選碼RS (31,15)碼[8]為例,對生成多項式進行了優化,并采用查表法的原理極大地提高了編碼器運算數據的能力,縮短了運算周期,最終利用VHDL語言編譯,在FPGA中實現,得到了正確的RS編譯碼。
1 RS編碼原理
能糾正t個錯誤的RS(n,k)碼具有如下特性:
碼長:n=2m-1符號或m(2m-1)比特;
信息碼元數:k=n-2t符號或mk比特;
監督碼元數:n-k=2t符號或m(n-k)比特;
最小距離:d=2t+1=n-k-1符號或m(n-k+1)比特;
最小距離為d的本原RS碼的生成多項式一般為:
g(x)=(x-α)(x-α2)(x-α3)…(x-αd-2)
令信息元多項式為:
M(x)=m0+m1x+m2x2+…+mk-1xk-1
監督多項式為:
R(x)=r0+r1x+r2x2+…+rr-2xr-2+rr-1xr-1
則碼多項式為:
C(x)=c0+c1x+c2x2+…+cn-2xn-2+cn-1xn-1=
xrM(x)+R(x)=g(x)Q(x)
式中:Q(x)是g(x)整除C(x)所得的商式[9]。所有這些原理都與二進制循環碼一樣,不同的僅在于運算方法。對于二進制碼,碼多項式各項系數只能取0或1,多項式的加減乘除是模二運算,是定義在GF(2)域上的多項式。現在碼多項式各項系數可以取q=2m種不同的值,應當是定義在GF(2m)域上的多項式。
2 生成多項式的優化
以RS(31,15)為例,n=31,k=15,可糾正錯誤數為t=(n-k)/2=8;以x5+x2+1為本原多項式,可得到GF(25)上的元素如表1所示。
一般的生成多項式為:
g(x)=(x-α)(x-α2)…(x-α16)=
x16+α23x15+α13x14+x13+α8x12+α3x11+
αx10+α21x9+α25x15+α7x7+α4+α23x3+
α22x2+α18x+α12
則碼字多項式以α,α2,α3,…,α15,α16為零點。
由于注意到:
(x+α7)(x+α24)(x+α11)(x+α20)(x+α10)(x+α21)#8226;
(x+α12)(x+α19)(x+α3)(x+α28)(x+α13)#8226;
(x+α18)(x+α9)(x+α22)(x+α14)(x+α17)=
(x2+α6x+1)(x2+α27x+1)(x2+α29x+1)#8226;
(x2+α3x+1)(x2+α24x+1)(x2+α15x+1)#8226;
(x2+α23x+1)(x2+α12x+1)=
(x4+x3+α2x2+x+1)(x4+x3+αx2+x+1)#8226;
(x4+x3+α8x2+x+1)(x4+x3+α4x2+x+1)=
(x8+α11x6+α19x5+α3x4+α19x3+α11x2+1)#8226;
(x8+α13x6+α14x5+α12x4+α14x3+α13x2+1)=
x16+α16x14+α16x13+α21x12+α27x10+α29x9+
α15x8+α29x7+α27x6+α21x4+α16x3+α16x2+1
(x+α7)(x+α24)(x+α11)(x+α20)(x+α10)(x+α21)(x+α12)(x+α19)(x+α3)(x+α28)
(x+α13)(x+α18)(x+α9)(x+α22)(x+α14)(x+α17)=
(x2+α6x+1)(x2+α27x+1)(x2+α29x+1)(x2+α3x+1)(x2+α24x+1)(x2+α15x+1)-
(x2+α23x+1)(x2+α12x+1)=
(x4+x3+α2x2+x+1)(x4+x3+αx2+x+1)(x4+x3+α8x2+x+1)(x4+x3+α4x2+x+1)=
(x8+α11x6+α19x5+α3x4+α19x3+α11x2+1)(x8+α13x6+α14x5+α12x4+α14x3+α13x2+1)-=x16+α16x14+α16x13+α21x12+α27x10+α29x9+α15x8+α29x7+α27x6+α21x4+α16x3+α16x2+1
以α3,α7,α9,α10,α11,α12,α13,α14,α18,α17,α19,α21,α20,α22,α24,α28為碼字多項式的零點,可以看到生成多項式的系數有四項為零,且對稱,這樣只要在ROM中存入α16,α21,α27,α29,α15相關的乘法表即可。
表1 GF(25)上的元素
冪次表示二進制表示(α4 α3 α2 α α0)冪次表示二進制表示
(α4 α3 α2 α α0)冪次表示二進制表示(α4 α3 α2 α α0)
000000α1010001α2111000
100001α1100111α2210101
α00010α1201110α2301111
α200100α1311100α2411110
α301000α1411101α2511001
α410000α1511111α2610111
α500101α1611011α2701011
α601010α1710011α2810110
α710100α1800011α2901001
α801101α1900110α3010010
α911010α2001100α3100001
3 RS編碼器的設計
在GF(2m)域上的加法運算實際上就是每位作異或運算,由異或門組合而成即可。
由于優化了生成多項式g(x),這里只需要在ROM中存入α16,α21,α27,α29,α15的乘法表即可。
由加法模塊和乘法模塊組成的一級模二運算電路如圖1所示。
利用ISE 9.0仿真軟件得到的運算一級模二運算的仿真圖如圖2所示。
M(x)=x14+αx13+α2x12+α3x11+α4x10+αx9+α2x8+
α3x7+α4x6+α5x5+α6x4+α7x3+α8x2+α9x+α10
生成的一級模二運算模塊如圖3所示。
圖1 一級模二運算電路
圖2 一級模二運算的仿真結果
圖3 模二運算模塊
依次連接多個模二運算模塊,進行一步步模二運算,得到余數多項式的系數,即為RS校驗碼。圖4為當信息碼字為M時的RS編譯結果。
M=
000010001001011
000100010010110
001000100101100
010001000010010
100000000100101
1αα2α3α4αα2α3α4α5α6α7α8α9α10
可看到此時:
C=
0000100010010110101100111011010
0001000100101101010110101000100
0010001001011001100100000011011
0100010000100100000000101110110
1000000001001010000110010110001
1αα2α3α4αα2α3α4α5α6α7α8α9α10α20α7α3α4α14α290α9α10α9α18α26α7α6α28α5
圖4 RS編譯結果仿真圖
4 FPGA實現
通過RS編碼后的數據為5×31的矩陣,形如:
C=a0a1…a29a30
b0b1…b29b30
c0c1…c29c30
d0d1…d29d30
e0e1…e29e30
將5行數據交織編碼,交織度為I=5[10],得到(a0 b0 c0 d0 e0 a1 b1 c1 d1 e1…a30 b30 c30 d30 e30)的形式,利用示波器從串口讀出,得到波形圖如圖5所示。
圖5 示波器上觀察到的交織編碼后串行輸出結果
5 結 語
給出的RS編碼器設計方法對生成多項式進行了優化,使得ROM中需要存入的乘法表大幅減少,模擬模二運算的步驟設計編碼過程,最終燒入FPGA中,利用示波器采集到了正確的數據,證明RS編碼器編碼正確。本文介紹的RS編碼器設計方法簡單,占用資源少。
參考文獻
[1]胡國慶,馬丕明,宋文瞳. FPGA內RS編碼器的3種算法實現[J].無線電通信技術,2009,35(2):52-55.
[2]張澤云,徐朝陽,張友益.RS(255,247)譯碼器的FPGA實現[J].艦船電子對抗,2008,32(1):92-96.
[3]任友.RS碼編譯碼算法研究及其硬件實現[D].成都:電子科技大學,2003.
[4]單寶堂,王延豪,崔玉紅.高速率多模式RS編解碼系統的設計與實現[J].應用天地,2009,28(3):73-77.
[5]李秀娟,孟克其勞,李勇,等.基于FPGA的RS(31,23)編碼器設計[J].機械工程與自動化,2009,2(1):36-38.
[6]何秋陽.基于FPGA的RS編碼器的設計與實現[J].電子科技,2009,22(2):44-50.
[7]郭旭靜,王祖林,涂歆瀅,等.衛星數傳通信仿真系統設計與實現[J].光學精密工程,2009,17(10):2594-2599.
[8]堯勇仕.DVD系統的RS編解碼的設計及ASIC實現[D].無錫:江南大學,2008.
[9]陶偉.DSP嵌入式無線通信系統開發實例精講[M].北京:電子工業出版社,2009.
[10]鄧宏貴,黎輝勇,李志堅.RS+交織+卷積碼級聯糾錯FPGA實現[J].信息與控制,2007,36(6):772-776.