變參數(shù)RS編碼器IP核的設(shè)計(jì)與實(shí)現(xiàn)
引言
數(shù)字信號(hào)在傳輸過(guò)程中可能受到各種干擾及信道傳輸特性不理想的影響而使信號(hào)發(fā)生錯(cuò)誤, 從而接收到錯(cuò)誤的信息。為了實(shí)現(xiàn)數(shù)字系統(tǒng)在傳輸過(guò)程中的可靠性, 幾乎所有的現(xiàn)代通信系統(tǒng)都把糾錯(cuò)編碼作為一個(gè)基本組成部分。Reed-So lomon (RS)碼是目前最有效、應(yīng)用最廣的差錯(cuò)控制編碼之一,是一類具有很強(qiáng)糾錯(cuò)能力的多進(jìn)制BCH 碼, 它既可以糾正突發(fā)錯(cuò)誤, 也可以糾正隨機(jī)錯(cuò)誤。RS 碼主要應(yīng)用于實(shí)時(shí)性較高的移動(dòng)通信系統(tǒng)、深空通信、數(shù)字衛(wèi)星電視、磁記錄系統(tǒng)等方面。
目前對(duì)RS 編碼器的設(shè)計(jì)主要局限于單一碼長(zhǎng)和固定糾錯(cuò)能力的RS 碼編碼器設(shè)計(jì)。本文提出的這種碼長(zhǎng)可變、糾錯(cuò)能力可調(diào)的RS 編碼器是把常用的RS (7, 3) 碼、RS (15, 11) 碼、RS (15, 9) 碼在一個(gè)編碼電路中實(shí)現(xiàn), 把它做成IP 核, 這樣既可以大大地減少了芯片的面積而且給用戶提供了方便,又有很大的選擇空間。該編碼電路采用基于多項(xiàng)式乘法理論GF (2m ) 上的m 位快速有限域乘法的方法, 使電路的編碼速度有了很大的提高。本文設(shè)計(jì)的編碼器的最高工作頻率可達(dá)到100MHz, 完全滿足無(wú)線通信中,語(yǔ)音通信和數(shù)據(jù)通信的數(shù)據(jù)傳輸速率為幾百kbp s 的要求。
編碼算法選取
一般來(lái)說(shuō), RS 碼可以用(n, k , t) 三個(gè)參數(shù)來(lái)表示, 其中n 表示碼字長(zhǎng)度, k 表示信息位長(zhǎng)度, t 為糾錯(cuò)能力, 滿足關(guān)系: t= (n- k )/2。RS 碼的所有元素都是定義在GF (2m ) 上, 其中有:m = log2n。對(duì)于不同的m 對(duì)應(yīng)著一個(gè)本原多項(xiàng)式, 從本原多項(xiàng)式就可以得到有限域各元素。
RS (7, 3) 碼的有限域見表1。
RS 編碼的生成多項(xiàng)式定義為:
所以可以得到各碼的生成多項(xiàng)式:
RS (7, 3) 碼:
g (x ) = x 4 + a3x 3 + x 2 + ax + a3
RS (15, 11) 碼:
g (x ) = x 4 + a13x 3 + a6x 2 + a3x + a10
RS (15, 9) 碼:
g (x ) = x 6 + a10x 5 + a14x 4 + a4x 3 +a6x 2 + a9x + a6
用m (x ) 表示信息碼字多項(xiàng)式, c (x ) 表示編碼后的碼字多項(xiàng)式, 則RS 碼的編碼過(guò)程可以用下面編碼多項(xiàng)式來(lái)表示:
c (x ) = m (x ) x n- k + [m (x ) x n- k ]modg (x )
上式中, [m (x ) x n- k ]modg (x ) 是求余運(yùn)算, 得到是校驗(yàn)位。
RS 編碼器的硬件實(shí)現(xiàn)過(guò)程, 就是運(yùn)用電路來(lái)完成上述編碼多項(xiàng)式中信息位多項(xiàng)式k (x ) 與x n- k的乘法運(yùn)算及k (x ) x n- kmodg (x ) 的求余運(yùn)算的過(guò)程。下面將詳細(xì)討論編碼電路的構(gòu)成及工作原理。
編碼電路的實(shí)現(xiàn)
RS編碼電路的求余運(yùn)算可以用n- k 級(jí)的移位寄存器來(lái)實(shí)現(xiàn), 因此可以選取6 級(jí)的移位寄存器; 信息位的輸入個(gè)數(shù)用計(jì)數(shù)器來(lái)控制, 可以加一選擇端來(lái)控制計(jì)數(shù)器是對(duì)哪一種碼字進(jìn)行編碼計(jì)數(shù); 信息位與校驗(yàn)位的輸出可以用選擇器來(lái)切換。因此我們可以得到編碼電路的原理框圖如圖1。
在圖1 的電路中, 所有的信息數(shù)據(jù)傳輸均采用4 位比特寬的傳輸。Reset 是系統(tǒng)復(fù)位信號(hào)。電路的工作原理描述如下:
(1) 當(dāng)sel 置為01 時(shí), 編碼電路處于RS (7, 3)碼的編碼狀態(tài)。因?yàn)镽S (7, 3) 碼的信息用3 位的二進(jìn)制表示, 所以數(shù)據(jù)線的最高位為零, 只有低3 位起作用。
A 編碼前首先給電路一個(gè)reset 復(fù)位信號(hào),使計(jì)數(shù)器和移位寄存器中的觸發(fā)器處于零狀態(tài), 復(fù)位采用異步復(fù)位。
B 輸入信息(m 2, …,m 0 ) , 計(jì)數(shù)器開始計(jì)數(shù),每輸入一個(gè)信息位, 計(jì)數(shù)器計(jì)一次數(shù), 然后輸出。此時(shí), selecto r2 的輸出與計(jì)數(shù)器的輸出端相接, 因此信息位一方面從編碼電路的輸出端輸出, 另一方面送入移位寄存器電路進(jìn)行求余運(yùn)算。
C 當(dāng)3 位信息位輸入完后, 計(jì)數(shù)器輸出一個(gè)控制信號(hào)ct r, 它是控制信息位與校驗(yàn)位的輸出, 此時(shí)selcto r2 的輸出與selecto r1 的輸出端相接,add5 的兩個(gè)輸入端均為selecto r1 的輸出端, 由于有限域加法不考慮各位之間的進(jìn)位, 因此add5 的輸出為0, 從而各乘法器m u l 的輸出為0, 所以移位寄存器中的校驗(yàn)位會(huì)一次輸出。所以校驗(yàn)位(D 3,…,D 0) 一次輸出。校驗(yàn)位輸出后寄存器和計(jì)數(shù)器回到零狀態(tài)。因而得到編碼后的碼字為(m 2, .,m 0,D 3, …,D 0)。
D 因?yàn)镽S (7, 3) 碼編碼電路的求余運(yùn)算只需要4 級(jí)的移位寄存器來(lái)實(shí)現(xiàn), 因此開關(guān)K 斷開,后面兩級(jí)移位寄存器不工作, 這樣就降低了電路的功耗。A dd5 的輸入端接D3 的輸出端。
{{分頁(yè)}}
(2) 當(dāng)sel 置為10 時(shí), 編碼電路處于RS (15,11) 碼的編碼狀態(tài), 在編碼前要給電路一個(gè)復(fù)位信號(hào)。過(guò)程與上面一樣, 編碼后得到碼字為(m 10, …,m 0, D 3, …,D 0)。同樣RS (15, 11) 碼編碼電路的求余運(yùn)算只需要4 級(jí)的移位寄存器來(lái)實(shí)現(xiàn), 因此K斷開, add5 的輸入端接D3 的輸出端。
(3) 當(dāng)sel 置為11 時(shí)編碼電路處于RS (15, 9)碼的編碼狀態(tài), 編碼前, 給電路一個(gè)復(fù)位信號(hào)。編碼后便可得到碼字為(m 8, …, m 0, D 3, …, D 0 )。RS(15, 9) 碼編碼電路的求余運(yùn)算要6 級(jí)的移位寄存器來(lái)實(shí)現(xiàn)。因此K 開通, add5 的輸入端接D5 的輸出端。
在編碼電路中乘法器采用了基于多項(xiàng)式乘法理論GF (2m ) 上的m 位有限域乘法的方法, 大大地提高了電路的運(yùn)算速度。
快速有限域乘法器實(shí)現(xiàn):
快速有限域乘法的實(shí)現(xiàn)思路如下, 以RS (7, 3)碼為例:
因此就可以實(shí)現(xiàn)快速有限域乘法器, 這樣對(duì)電路的運(yùn)算速度將會(huì)有很大的提高。由于RS (15,11) 碼和RS (15, 9) 碼基于同一個(gè)有限域GF (24 ) ,因此它們的乘法器一樣。當(dāng)sel 置為01 時(shí), 乘法器工作在GF (23 ) 的乘法狀態(tài), 當(dāng)sel 置為10 或11時(shí), 乘法器工作在GF (24) 的乘法狀態(tài)。只不過(guò)工作在GF (23 ) 狀態(tài)時(shí)乘法器輸入輸出端的第4 位為0。
電路仿真及測(cè)試
編碼電路模塊可以表示為:
sel 是編碼電路的選擇端, clk 是時(shí)鐘輸入端,reset 是系統(tǒng)復(fù)位端, in 是信息輸入端, ou t 是碼字輸出端。
用V erilog HDL 語(yǔ)言編寫電路的代碼后, 再用Cadence 公司的NC V erilog HDL 仿真工具進(jìn)行仿真, 得到各種編碼的仿真結(jié)果。
A ) 給reset 一個(gè)復(fù)位信號(hào), 使電路處于零狀態(tài), sel 置為01 時(shí), 輸入信息電路開始編碼。輸入信息位為(0, 1, 2) , 編碼后得到校驗(yàn)位(2, 3, 1, 3) , 因此輸出端輸出碼字為(0, 1, 2, 2, 3, 1, 3)。然后再輸入信息位, 循環(huán)進(jìn)行編碼。輸出波形如圖3 所示。
B) 給reset 一個(gè)復(fù)位信號(hào), sel 置為10 時(shí), 輸入信息電路開始編碼。輸入信息為(0, 1, 2, 3, 4, 5, 6,7, 8, 9,A ) , 編碼后得到校驗(yàn)位(C, E, 8, 3) , 所以輸出端輸出碼字為(0, 1, 2, 3, 4, 5, 6, 7, 8, 9,A , C, E,8, 3)。輸入端再次輸入信息, 循環(huán)進(jìn)行編碼。輸出波形如圖4 所示。
C) 給reset 一個(gè)復(fù)位信號(hào), sel 置為11 時(shí), 輸入信息電路開始編碼。輸入信息為(0, 1, 2, 3, 4, 5,6, 7, 8) , 編碼后得到校驗(yàn)位(B, C, 0, 5, 7, 8) , 所以輸出端輸出碼字為(0, 1, 2, 3, 4, 5, 6, 7, 8,B, C, 0,5, 7, 8)。輸入端再次輸入信息, 循環(huán)進(jìn)行編碼。
仿真完成后, 采用Xilinx 的FPGA 板, 主芯片為SPARTAN II XC2SPQ 208 進(jìn)行驗(yàn)證, 輸入信息與仿真輸入的信息一致, 然后用邏輯分析儀觀測(cè)輸出結(jié)果。
A ) 給reset 一個(gè)復(fù)位信號(hào)后, 使電路工作在RS (7, 3) 碼的編碼狀態(tài)。用邏輯分析儀觀測(cè)輸入與輸出的結(jié)果如下圖6 所示, 虛線圈起來(lái)的(0, 1, 2,2, 3, 1, 3) 表示一個(gè)完整的輸出碼字。
B) 先使電路復(fù)位, 然后讓電路工作在RS (15,11) 碼的編碼狀態(tài), 用邏輯分析儀觀測(cè)輸入與輸出結(jié)果如下圖7 所示, 虛線圈起來(lái)的(0, 1, 2, 3, 4, 5,6, 7, 8, 9,A , C, E, 8, 3) 表示一個(gè)完整的輸出碼字。
C) 電路復(fù)位后, 使它工作在RS (15, 9) 碼的編碼狀態(tài), 用邏輯分析儀觀測(cè)結(jié)果如下圖8 所示, 虛線圈起來(lái)的(0, 1, 2, 3, 4, 5, 6, 7, 8,B, C, 0, 5, 7, 8)表示一個(gè)完整的輸出碼字。
從上面的仿真波形和測(cè)試結(jié)果可以看到他們的輸出結(jié)果一致, 驗(yàn)證了設(shè)計(jì)的正確性。
電路參數(shù)
用Xilinx 公司的Pro ject Navigator 綜合工具對(duì)電路代碼進(jìn)行綜合后, 得到電路的等效門單元數(shù)1339; 測(cè)得電路的靜態(tài)功耗為12.50 mW , 最高作頻率為100MHz。
結(jié)論
提出了一種碼長(zhǎng)可變、糾錯(cuò)能力可調(diào)的RS 碼編碼器, 它解決了以往RS 編碼器只能對(duì)單一碼長(zhǎng)和固定糾錯(cuò)能力編碼的局限, 同時(shí)采用快速有限域乘法的方法提高了電路的運(yùn)算速度。設(shè)計(jì)后通過(guò)在FPGA 上測(cè)試, 驗(yàn)證了設(shè)計(jì)的正確性。
評(píng)論