Download as pdf or txt
Download as pdf or txt
You are on page 1of 64

國立宜蘭大學電子工程學系

碩士論文

Department of Electronic Engineering

National Ilan University

Master Thesis

平行化改良型步階式里德-所羅門解碼器之晶片設計

Chip Design of Parallel Modified Step-by-Step

Reed-Solomon Decoder

研究生:李匡效

Graduate Student::Kuang-Hsiao Lee

指導教授:游 竹 博士

Advisor : Chu Yu, Ph. D.

中華民國 106 年 7 月

July, 2017
中文摘要

里德-所羅門碼(Reed-Solomon Code)因具有良好的叢發錯誤(Burst Error)更正能


力,故廣泛成為目前各種通訊及多媒體視訊系統所選用的錯誤更正碼。相較於廣為人
知的 Berlekamp-Massey(BM)與 Euclidean 演算法,步階式演算法(Step-by-Step Algorithm)
原只應用於 BCH(Bose-Chaudhuri-Hocqyenghem)碼的一種解碼方式,特點在偵測錯誤
位置外,可同時計算出錯誤值。但不幸的對於非二進制(Non-Binary)的里德-所羅門碼,
需要較長的處理時間及較大的功率消耗。隨著通訊的蓬勃發展,對於傳輸速率與傳輸
的穩定性的要求也越來越高,本論文採用改良型步階式演算法與二維高斯消去法,大
幅減低硬體複雜度與功率消耗,而此演算法無須利用疊代去尋找錯誤位置多項式,以
及再利用 Forney 演算法去找尋其相對應的錯誤值的優勢,它可同時找尋錯誤位置並且
加以更正,以此優勢我們提出三個平行化的硬體架構,並以常用的 RS(255, 239)規範
為例,使運算週期減少為原先所需的 1/3,用以提升原先速度。最後利用 TSMC 90nm
的製程技術,晶片執行速度可達到 286MHz,共使用 131K 個邏輯閘,吞吐量達到
6.8Gb/s。

關鍵詞:里德所羅門碼、步階式演算法、高斯消去演算法、心跳式陣列架構。

I
Abstract
Reed-Solomon (RS) codes provide the capability of excellent recovery data suffered

from random and burst errors. Thus, RS codes have been widely used in various

communications and multimedia video systems. Compared to the well-known

Berlekamp-Massey and Euclidean algorithm, step-by-step RS decoding algorithm, which is

suited for Bose-Chaudhuri-Hocqyenghen, can simultaneously determine the error locations

and their corresponding error values. However, the processing time and the power

consumption of this algorithm are huge for non-binary RS codes. As the communication

developments, the requirements of data transfer rate and stability are getting higher and

higher. In this Thesis, the modified step-by-step algorithm and two-dimensional Gaussian

elimination method were adopted to reduce the foregoing issues at the hardware complexity

and power consumption. According to the aforementioned advantages, we propose the

three-parallel hardware architecture to increase the decoding rate without searching the

error-location polynomial and performing the Forney algorithm. Finally, using TSMC 90nm

technology, the proposed design has a working frequency of up to 286MHz. The gate counts

and throughput of this chip core are approximately 131K gates and 6.8Gb/s at 286MHz,

respectively.

Keywords: Reed-Solomon Code, Step-by-Step Algorithm, Gaussian Elimination Algorithm,

Systolic Array.

II
致謝

本篇論文的完成,要感謝我的指導教授、研究所同學、朋友以及家人的支持。首
先要感謝我的指導教授,也是在這兩年研究生涯中的貴人游竹博士,對於許多我在細
節上的疏忽,以及耐心的提點與指導,讓我在專業領域的研究中,得到許多寶貴的經
驗與知識,在此向游教授致上最深的謝意。

還要感謝口試委員周賢興教授以及海洋大學資工系的嚴茂旭教授,在本論文上提
供了的寶貴意見與看法,讓我的論文能更加完善。此外,也向相關研究領域上的作者
們獻上無線的謝意。

再來,感謝在碩士求學期間彼此互相照顧砥礪的學長、同學,還有朋友們。感謝
郭建豐學長以及林志鴻學長常常在我研究迷網時給予幫助及方向;感謝張雲翔、王偉
旭、陳俊錡、陳錕愷等同學,在這段期間分享的苦與樂,使碩班生活更加有趣。以上,
很幸運地有這些良朋益友,謝謝你們,因為有你們的陪伴,讓我的碩士生涯增添許多
色彩,謝謝你們,期許大家未來都能夠順順利利。

最後,我要特別感謝我的家人,謝謝爸媽在我研究遇到瓶頸的時候,還能全心全
意的支持我,提供我精神以及物質上無私的資助,讓我能無後顧之憂;感謝我的表哥
蔡譽良,謝謝他陪我度過最艱難的階段,謝謝你們。

III
目錄
中文摘要 .....................................................................................................................................I
Abstract ...................................................................................................................................... II
致謝 .......................................................................................................................................... III
目錄 .......................................................................................................................................... IV
圖索引 ...................................................................................................................................... VI
表索引 ................................................................................................................................... VIII
第1章 緒論 ........................................................................................................................ 1
1.1 簡介 .................................................................................................................... 1
1.2 研究動機 ............................................................................................................ 2
1.3 論文架構 ............................................................................................................ 2
第2章 有限場 .................................................................................................................... 3
2.1 群(Groups)與場(Fields) ..................................................................................... 3
2.2 伽洛瓦場與多項式 ............................................................................................ 3
2.3 伽洛瓦場的基本四則運算 ................................................................................ 5
2.3.1 變數-變數之乘法運算 ................................................................................. 5
2.3.2 常數-變數之乘法運算 ................................................................................. 6
2.3.3 伽洛瓦場的除法運算 .................................................................................. 7
第3章 里德-所羅門碼原理 ............................................................................................... 8
3.1 簡介 .................................................................................................................... 8
3.2 里德所羅門碼基本架構 .................................................................................... 8
3.3 里德所羅門碼之編碼 ........................................................................................ 9
3.4 里德所羅門碼之解碼 ...................................................................................... 10
3.4.1 代數解碼演算法 ........................................................................................ 12
3.4.1.1 傳統 Berlekamp 演算法................................................................ 12
3.4.1.2 傳統 Euclidean 演算法 ................................................................. 15
3.4.2 傳統步階式解碼演算法 ............................................................................ 17
3.4.3 新型步階式解碼演算法 ............................................................................ 21
3.4.4 改良型步階式解碼演算法 ........................................................................ 26
第4章 里德-所羅門解碼電路 ......................................................................................... 30
4.1 平行化改良型步階式里德-所羅門解碼器硬體架構 ..................................... 30
4.2 伽洛瓦場乘法器 .............................................................................................. 30
4.2.1 變數-變數乘法器 ....................................................................................... 31
4.2.2 常數-變數乘法器 ....................................................................................... 32
4.3 徵狀值計算器 .................................................................................................. 33
4.3.1 單輸入之徵狀值計算器 ............................................................................ 33
4.3.2 平行化之徵狀值計算器 ............................................................................ 34
4.4 行列式值計算器 .............................................................................................. 35
IV
4.4.1 高斯消去演算法 ........................................................................................ 35
4.4.2 高斯消去法之心跳式架構介紹 ................................................................ 36
4.4.3 一維心跳式陣列 ........................................................................................ 38
4.4.3.1 一維行列式值計算器 ................................................................... 39
4.4.4 二維心跳式陣列 ........................................................................................ 42
4.4.4.1 二維行列式值計算器 ................................................................... 42
4.5 錯誤數目偵測電路 .......................................................................................... 43
4.6 累乘與加總電路 .............................................................................................. 44
4.7 錯誤更正電路與先進先出暫存器 .................................................................. 47
4.8 電路設計與模擬 .............................................................................................. 48
第5章 結論與未來發展 .................................................................................................. 50
參考文獻 .................................................................................................................................. 52

V
圖索引
圖 1-1、數位通訊系統方塊圖 ....................................................................................... 1
圖 3-1、里德-所羅門碼區塊示意圖 ............................................................................. 8
圖 3-2、RS(255, 239)封包組成 ..................................................................................... 9
圖 3-3、RS 碼之系統化編碼 ....................................................................................... 10
圖 3-4、傳統式步階式演算法應用於 BCH 碼示意圖............................................... 18
圖 3-5、傳統式步階式應用於 RS 碼示意圖 .............................................................. 18
圖 3-6、步階式演算法流程圖 ..................................................................................... 20
圖 3-7、新型步階式演算法流程圖 ............................................................................. 25
圖 3-8、改良型步階式演算法流程圖 ......................................................................... 28
圖 4-1、平行化改良型步階式 RS 解碼器架構圖 ...................................................... 30
圖 4-2、一般乘法運算過程示意圖 ............................................................................. 31
圖 4-3、GF(24)乘法運算過程示意圖 .......................................................................... 31
圖 4-4、GF(24)全平行乘法器[9] ................................................................................. 32
圖 4-5、徵狀值計算器硬體架構 ................................................................................. 33
圖 4-6、平行化徵狀值計算器架構 ............................................................................. 34
圖 4-7、平行化之電路模擬時序圖 ............................................................................. 34
圖 4-8、行列式計算器基本架構圖 ............................................................................. 35
圖 4-9、三角矩陣矩陣示意圖 ..................................................................................... 36
圖 4-10、軸元模組[7] .................................................................................................. 36
圖 4-11、列運算模組[7] .............................................................................................. 36
圖 4-12、軸元模組之運算流程圖 ............................................................................... 37
圖 4-13、列運算模組之運算流程圖 ........................................................................... 38
圖 4-14、高斯消去之一維心跳式陣列電路 ............................................................... 38
圖 4-15、99 矩陣之高斯消去電路時序模擬圖 ........................................................ 39
圖 4-16、RS 解碼之 3 階段分配圖 ............................................................................. 40
圖 4-17、兩種行列式值之計算示意圖 ....................................................................... 41
圖 4-18、有儲存矩陣資料功能之行列式值計算器[6] .............................................. 41
圖 4-19、高斯消去之二維心跳式陣列電路(n=4) ...................................................... 42
圖 4-20、二維高斯消去之軸元值的電路模擬圖 ....................................................... 43
圖 4-21、錯誤數目偵測電路 ....................................................................................... 44
圖 4-22、錯誤數目 v 與行列式值 det(Nvxx)之計算電路模擬圖 ................................ 44
圖 4-23、有限場元素間的關係 ................................................................................... 45
圖 4-24、累乘與加總電路(j=2) ................................................................................... 45
圖 4-25、累乘與加總電路方塊圖 ............................................................................... 46
圖 4-26、累乘與加總電路模擬圖 ............................................................................... 46
圖 4-27、錯誤更正電路架構圖 ................................................................................... 47
圖 4-28、RS 解碼器所使用之先進先出記憶體模組 ................................................. 48
VI
圖 4-29、平行化之 RS(255, 239)解碼器模擬圖 ........................................................ 49
圖 4-30、邏輯閘分布圖 ............................................................................................... 50

VII
表索引
表 2-1、Module-2 加法與 Module-2 乘法 .................................................................. 4
2-2、由 f ( x)  x  x  1 所產生之 GF(24)有限場的基本元素列表 .................... 5
4

表 3-1、Berlekamp 遞迴演算法之初始值設定 .......................................................... 14
表 3-2、Euclidean 遞迴演算法之初始值設定 ............................................................ 16
表 3-3、錯誤數目為 v 之偵測情況 ............................................................................. 21
表 4-1、常數-變數乘法器之 XOR 閘邏輯閘數 ......................................................... 33
表 4-2、高斯消去電路之心跳式架構比較表 ............................................................. 43
表 4-3、三平行累乘分解表 ......................................................................................... 45
表 4-4、平行化之 RS(255, 239)效能數據 .................................................................. 49
表 4-5、RS 解碼器之使用硬體資源比較表 ............................................................... 50

VIII
第1章 緒論
1.1 簡介
隨著現在通訊應用的發展,數位通訊系統在傳輸的過程中,難免因傳輸過程的環
境不佳或是外在因素的干擾,而降低接收資料的正確性。而各種通訊規則也陸續被提
出及制定,對於資料傳輸的速度與可靠性要求越來越高,因此在通訊系統中要如何保
持高速率、可靠性以及傳輸準確性,儼然已成為通訊系統中重要的議題。

錯誤更正碼(Error-Correction Codes)被廣泛的運用在各種通訊及儲存系統上,主要
是藉由在欲傳輸的訊息符號中,加入額外具有數學結構特性的符號元,在接收端依原
有之數學結構進行偵測錯誤,進而將經過傳輸通道後所造成的錯誤訊息加以更正。圖
1-1 為一個簡單的數位通訊系統方塊圖,訊息在傳輸過程中難免會遇到各種雜訊干擾
而導致失真,因此在傳輸前,必須先對訊息進行編碼,確保後續接收到的訊息若是錯
誤的情況下,仍可透過解碼演算法將錯誤訊息更正回來。

Source Source Error-Correction


Message Coding coding

Demodulation Channel Modulation

Error-Correction Source Source


decoding Message Message

圖 1-1、數位通訊系統方塊圖

錯誤更正碼大致上區分為迴旋碼(Convolution Codes)及區塊碼(Block Codes),而區


塊碼的資料是以一個固定大小的訊息區塊為單位,增加額外的檢查碼(Parity Code)來進
行編碼,使通訊系統具有錯誤更正的能力。當接收端收到信息時,可依接受資料的編
碼特性進行解碼,由於檢查碼是在原始資料外,額外增加的冗餘位元(Redundant
Bytes),故在解碼過程中資料的可讀性並不會受到影響。在眾多的區塊碼中以 BCH 碼
(Bose-Chaudhuri-Hocquenghem)及里德-所羅門碼(Reed-Solomon Codes)較為著名,由於
二者的運算基礎都建立在伽洛瓦場(Galois Field)上,因而具有循環性,故本篇論文所
討論的里德-所羅門碼(Reed-Solomon code, RS)屬 BCH 碼中非二進制碼 (Non-Binary
Codes)特例,此種更正碼是由 I. S. Reed 與 G. Solomon 兩位學者在 1960 年所提出,具
有優良的叢集錯誤(Burst Error)與隨機錯誤(Random Error)更正能力,因此使其被廣泛
地運用在眾多的數位通訊及儲存系統當中。
1
1.2 研究動機
為了提升 RS 碼在傳輸上的效能,解碼演算法的研究及其硬體實現架構的議題便
不斷被討論,其中以 Euclidean Algorithm 及 Berlerkamp-Massey 最為著名,這兩者都
屬於代數解碼演算法(Algebraic Decoding Algorithm)。除此之外,由 Massey 在 1965 年
所提出之步階式解碼演算法(Step-by-Step Decoding Algorithm)[1],此演算法相較於傳
統的演算法有所不同。傳統的演算法需先算出錯誤位置多項式,再找尋錯誤值進而更
正,而步階式演算法直接針對每一個符元,在偵測錯誤位置的同時,將所有可能的錯
誤值進行測試,在偵測錯誤位置的同時算出錯誤值,並增加解碼的速度。由於步階式
演算法針對每一個符元逐步解碼的特性,與代數解碼法相比在運算上較為直覺,且解
碼的先後順序並不會影響到運算結果,因此對於平行運算較為適合,並應用在相關的
高速運算產品上,如無線通訊和多媒體信號傳輸等。
而步階式演算法原本是適用於 BCH 碼的解碼方法,但由於 RS 碼為非二進制碼,
在運算上的複雜度及消耗功率都相當大,當時並不廣泛用於 RS 碼,因此隨著 RS 碼解
碼演算法不斷改進,由 Tung-Chou Chen 等在 1993 年發表出新型步階式演算法[2],並
提出其硬體架構[2]-[3]。雖然[2]所提出之新型步階式演算法改善了運算複雜度,但在
硬體上還是過於複雜。直到 Xiaobei Liu 等在 2007 年所提出之論文[5]改善此問題,使
步階式解碼演算法效能大幅提升,相較先前更適合於硬體架構設計。
根據 Xiaobei Liu 的演算法,在 2015 年由 Chu Yu 等人設計出其硬體架構[6],此架
構僅是單一資料處理單元非平行架構,對於步階式在平行上的優勢硬體架構尚未有人
提出,因此本論文將會詳述平行化改良型步階式演算碼的原理以及其電路架構。

1.3 論文架構
本文架構總共分成 5 章,第 2 章介紹 RS 碼的基礎原理,其中包括伽洛瓦的基本
運算,以及各參數之定義。第 3 章則開始介紹 RS 編解碼做一個整理,並將步階式解
碼與代數幾何解碼演算法做比較,並詳述改良型步階式演算法的演算流程。第 4 章則
針對平行化之改良型步階式演算法提出硬體架構,在此章節中我們將分別對各個演算
流 程 及 相 對 應 的 硬 體 單 元 進 行 講 解 與 設 計 , 並 利 用 Matlab 與 硬 體 描 述 語 言
Verilog-HDL 進行模擬與實作。第 5 章則為結論與未來展望。

2
第2章 有限場
伽洛瓦場(Galois Field, GF)是一個元素個數有限的場結構,也稱為有限場(Finite
Field)。一般而言,數位訊號在傳輸中普遍為二進制碼,因此我們使用二元場 GF(2)或
二元擴充場 GF(2m)。在基本的代數運算中,常被運用在編碼理論(Coding Theory)、密
碼學(Cryptography)以及錯誤更正碼(Error Correction Codes)上,RS 編解碼即是由伽洛
瓦場 GF(2m)為基礎所建立。在本章節中,將先簡單介紹群(Groups)與場(Fields),接著
介紹有限場與多項式之間的關係,最後再詳述伽洛瓦場四則運算的方式。

2.1 群(Groups)與場(Fields)
群(Groups):
設一個集合 G 具有二元運算元 ,且 a、b 屬於 G 集合的兩任意元素,而 c 為 a  b
後所產生的第三個元素, G 只要滿足以下條件便可稱為群:

1. 封閉性(Closure):若 a, b  G ,則 a  b  G 。
2. 結合性(Associative) :對所有 a, b, c  G ,則 (a  b)  c  a  (b  c) 。
3. 單一性(Identity) :對所有 a  G ,存在一個單位元素 e  G 滿足 a  e  e  a  a 。
4. 反元素(inverse) :對每一個 a  G ,存在反元素 a' G 滿足 a  a  a  a  e 。

若在集合 G 稱為有限群,則在集合 G 中的元素必為有限的個數,反之稱為無限群;若


集合 G 內的兩元素 a 、 b 滿足 a  b  b  a ,則稱為交換群(Commutative or Abelian)。
而在交換群中擁有運算元“+”的被稱為加法群,可滿足 a  0  0  a ,0 為其加法單
元元素;若將 a 以反元素(  a )表示,可得到 a  (a)  (a)  a  0 。同理,乘法交換群
中滿足 a  1  1 a  a ,1 為乘法單位元素, a  (a 1 )  1 ,而 (a 1 ) 為乘法反元素。

場(Fields):
介紹完群後的條件後,我們進一步介紹另一個比較大的代數結構“場”,場是一個
比群還大的代數結構。令一個具有乘法與加法兩種運算外,含有任意 a 、 b 兩元素的
集合 F,滿足下列條件即可稱為場:

1. 封閉性(Closure):集合 F 須滿足二元運算中加法及乘法的封閉性。
2. 交換性(Commutative):集合 F 須滿足二元運算裡,加法及乘法中交換群的特
性。
3. 分配性(Distributive):集合 F 中的任意元素 a 、 b 、 c 同時滿足加法及乘法的
運算,使得 a  (b  c)  a  b  a  c 。

對 於 上 述 運 算 中 , 減 法 和 除 法 可 依 據 反 元 素 的 特 性 表 示 成 a  b  a  (b) 與
a  b  a  (b 1 ) ,其中 (b) 與( b 1 )分別表示為元素 b 的加法和乘法反元素。

2.2 伽洛瓦場與多項式
伽洛瓦場中,以二元場 GF(2)={0,1}為最簡易的有限場,同理 GF(2)也可被擴展成
一有限場 GF(2m) 。在編碼理論中,這兩種應用最為常見,其加法與乘法分別建構在
3
Module-2 加法及 Module-2 乘法上,定義如表 2-1:
表 2-1、Module-2 加法與 Module-2 乘法

0 1 ˙ 0 1

0 0 1 0 0 0

1 1 0 1 0 1

在 GF(2)的伽洛瓦場中,加法跟乘法的運算都滿足場的封閉性與結合性,根據
Module-2 加法及乘法的運算結果,若有一多項式其係數由 GF(2)場中的元素{0,1}所構
成,則稱為 GF(2) 多項式,而此多項式的係數可依照上表運算的結果做四則運算。在
討論伽洛瓦場與多項式的關係之前,首先定義下面兩種多項式:

1. 不可約多項式 (Irreducible polynomial):若有一多項式 f (x) 不可被因式分解(即因


式只有 1 與本身),則稱為不可約多項式。
2. 本質多項式 (Primitive polynomial):若一不可約多項式 f (x) ,可以將 x M  1 整除
且 M 的最小值為 2 m  1 ,則稱為 m 階本質多項式。

假設 f (x) 為有限場 GF(2m)的本質多項式。其本質元素  為本質多項式的根,且代入後


m 1
f (x) =0 且 a 2  1 ,則可構成一個有限場 GF (2 m ) 表示如下:

GF (2m )  {0, 1, ,  , ,,  2m2 } (2-1)

因 RS 碼為循環碼,且 GF (2 m ) 具有著循環性,故適合運用在此。而有限場的基本元素
能以三種方式來表示,依序分別為 Power、Polynomial 以及 Binary 表示法。表 2-2 是
以本質多項式 f ( x)  x  x  1 為例所建立的 GF(24)有限場。
4

4
表 2-2、由 f ( x)  x  x  1 所產生之 GF(24)有限場的基本元素列表
4

Power representation Polynomial Binary representation


0 0 0000
1 1 0001
  0010
2  2
0100
3  3
1000
4  +1 0011
5  + 2
0110
6  + 2
3
1100
7 3 +  +1 1011
8  2
+1 0101
9  3
+ 1010
 10  +  +1
2
0111
 11  + 2 +
3
1110
 12  3 +  2 +  +1 1111
 13  3 + 2 +1 1101
 14  3
+1 1001

2.3 伽洛瓦場的基本四則運算
在有限場中,因元素 0 與 1 的反元素都為元素本身,因此伽洛瓦場的減法如同加
法,除法則如同乘法,都可利用反元素運算完成。而 GF(2m)在硬體上則是直接使用 m
個 XOR 閘來設計,之後再將其結果與 GF(2m)的對照表作轉換即可,如表 2-2。在 RS
解碼器中乘法運算方式可分為兩種,分別為變數-變數,以及常數-變數乘法運算,接
下來將介紹這兩種不同的運算過程。因除法為乘法之反元素,故在此先用乘法來介紹,
最後再說明如何在伽洛瓦場中做除法運算。

2.3.1 變數-變數之乘法運算
變數-變數乘法運算是將兩指數 a x 、 b y 相加並以 2m-1 取餘數[ (x + y) mod (2m-1)],
再與表 2-2 做為對照便得到相對應的元素。為了方便運算,RS 碼將每個  i 元素都視
為一個數值,但此方式在硬體上並不適合,而較適合使用一般所熟悉的多項式乘法運
算,且在硬體實現上採用 m 位元的全乘法器來實現。
當 m 階多項式的相乘後,展開部分乘積並加總後,其運算結果階數可能會超過 m,
但表中最大的元素只有到  2 m2 。因此在多項式相乘後,在有限場階數內必須經過餘式
化簡(Modular Reduction)的步驟。下列說明變數-變數乘法運算,令 O(x) 為多項式乘
積,相當於 a(x) 與 b(x) 的乘積,其關係式為:

 ( x)  b( x) mod f ( x)  O( x) (2-2)

5
其中 f ( x)  x 4  x  1 為本質多項式,假設 a(x) 與 b(x) 表示為:

a( x)  a3 x3  a2 x 2  a1x1  a0 x0 (2-3)

b( x)  b3 x3  b2 x 2  b1x1  b0 x0

首先將 a(x) 與 b(x) 相乘展開:

a( x)  b( x)  a3  b3 x 6
 (a3 * b2  a 2 * b3 ) x 5
 (a3 * b1  a 2 * b2  a1 * b3 ) x 4
 (a3 * b0  a 2 * b1  a1 * b2  a0 * b3 ) x 3 (2-4)
 (a 2 * b0  a1 * b1  a0 * b2 ) x 2

 (a1 * b0  a0 * b1 ) x1
 a0 * b0 x 0

然而以 GF(2m)為例,針對超過有限場範圍階數的次方項分別取 f ( x)  x 4  x  1 的餘
式,也可對照表 2-2 所知:

x 4 mod f ( x)  x  1 , x 5 mod f ( x)  x 2  x , x 6 mod f ( x)  x 3  x 2 (2-5)

基於簡化後的(2-5),將其展開並將相同次方之係數做合併,得到結果如式(2-6):

 ( x)  b( x) mod f ( x)
 (a3 * b3  a3 * b0  a 2 * b1  a1 * b2  a0 * b3 ) x 3
 (a 2 * b0  a1 * b1  a0 * b2  a3 * b3  a3 * b2  a 2 * b3 ) x 2 (2-6)
 (a1 * b0  a0 * b1  a3 * b2  a 2 * b3  a3 * b1  a 2 * b2  a1 * b3 ) x 1

 (a0 * b0  a3 * b1  a 2 * b2  a1 * b3 ) x 0

2.3.2 常數-變數之乘法運算
上述變數-變數的全乘法器,足以作為 RS 解碼器的基本乘法運算,但常數-變數乘
法器在徵狀值產生器(Syndrome Generator)中,只需乘上固定常數  i ( 1  i  2t ),為了
減少使用面積,其採用一輸入端為固定值之常數的乘法器[8]。

首先以 a(x) 為係數組成的多項式,經過式(2-6)的變換後,可視為一個由 0 與 1 組


成的常數矩陣,舉例來說, a(x) 為常數  2 (二進位=0100),而常數-變數乘法運算透過
(2-6)運算後為式(2-7),隨後再將式(2-7)以將各位置的係數取出,便可得到僅由一變數
b(x) 所組成的方程式 O(x) ,如(2-8)所示。

6
 ( x)  b( x) mod f ( x)
 (0  0  b1  0  0) x 3
 (b0  0  0  0  0  b3 ) x 2 (2-7)
 (0  0  0  b3  0  b2 ) x 1

 (0  0  b2  0) x 0

O3  b1 , O2  b0  b3 , O1  b2  b3 , O0  b2 (2-8)

由上述簡化後,在硬體實現上能夠將固定的常數帶入多項式乘法展開,再加以展
開便可得到由變數 b(x) 所組成的一方程式。

2.3.3 伽洛瓦場的除法運算/乘法反元素
由於有限場的除法在硬體上有著高複雜度,依據有限場的性質,除法的運算可以
利用乘法與反元素來運算,除法 a  b 可表示為 a  (b 1 ) 。因此可先求得 b 的乘法反元
素( b 1 ),再與 a 進行乘法運算,而關於求得乘法反元素的方式,以 Euclid 提出的輾轉
相除法較為著名,但此法複雜度跟運算時間較大,因此大多會使用事先建立好的反元
素表,來尋找出 b 的反元素,即為查表法(Look-up Table),目前大多數論文中都是採用
此法來節省硬體面積。

7
第3章 里德-所羅門碼原理

3.1 簡介
於 1960 年由 I. Reed 和 G. Solomon 所共同發表里德-所羅門碼(Reed-Solomon, RS
Code),屬於線性區塊碼(Linear Block Code),根據其非二進制的特性,RS 碼將規範內
一連串的位元視為一個值,每一個值都統稱為一個符元(Symbol)。當訊息因傳輸過程
中,受到雜訊干擾而產生一連串錯誤位元時,稱為叢發錯誤(Burst Error)。與二進制的
BCH 碼相比起來,RS 碼可將包含這一連串錯誤值的符元做更正,達到一次對多個位
元做更正的效果。由於 RS 碼擁有良好的叢發錯誤的更正能力,使得其發展迅速受到
各種通訊系統的青睞,近年來擴展至光纖通訊及衛星通訊。
針對各種 RS 解碼演算法已陸續被提出,如 Berlekamp-Massey 及 Euclidean 演算
法,此兩種演算法為代數解碼演算法;然而步階式解碼演算法由 Massey 針對 BCH 碼
所研發的解碼演算法,並於 1965 年所提出。目前已有許多論文針對步階式演算法進行
改良,並利用此演算法進行解碼器的硬體設計與實現。

3.2 里德所羅門碼基本架構
RS 碼通常被定義為(n, k)的形式,表示一個完整 RS 碼的字碼(Codeword)含有 n 個
符元數及 k 個原始訊息,運算建立在有限場 GF(2m),m 則代表 n 個符元數中每個符元
的位元數。圖 3-1 為 RS 碼封包組成,由 k 個原始訊息及 n–k 個查核碼(Parity-Check Code)
所組成,一個建立在 RS 碼可更正 t 個錯誤,其參數間的關係如下:

m :每個符元(Symbol)的位元數
t :可更正錯誤符元數最大量
k  n  2t :原始訊息符元數
n  2m  1 :字碼長度(Codeword Length)
n  k  2t :查核碼(Parity Check Code)
dmin = 2t+1:最小距離(Minimum Distance)

Original Message Parity Check


symbols symbols

Symbol
( bits)

RS CodeWord
symbols

圖 3-1、里德-所羅門碼區塊示意圖

以 RS(63,57)為例,n = 63 及 k = 57,最多可更正(n-k)/2 = t = 3 個符元的錯誤,且


一個符元有 6 個位元(m = 6),而這樣的參數規格適用於有限場 GF(26)。
8
在本論文中,我們將設計 RS 碼 RS(255, 239),RS(255, 239)由 239 個符元數的字
碼原始訊息,經過編碼產生 16 個符元數的查核碼,並成為一串 255 個符元數的字碼長
度,如圖 3-2 所示。
239 Symbols 16 symbols

mk-1, … ,m1,m0 p2t-1,…,p1,p0


RS (255,239) wordlength
255 Symbols

圖 3-2、RS(255, 239)封包組成

3.3 里德所羅門碼之編碼
在 RS 碼編碼中,主要是將每一訊息區塊透過加入額外資料,以達到保全訊息的
作用,這些額外的資料稱為查核碼,此碼在解碼端可被用來達成錯誤更正時參考之用。
RS 碼(n, k)表示將長度為 k 的訊息符號元,編碼成長度為 n 的字碼符號元序列,其中
每一個訊息符號元及字碼符號元均為 GF(2m)中的元素,而查核碼個數為 n-k 個,最多
可改正(n-k)/2 個錯誤符號元。因每個符元都具有 m 個位元(Bit)訊息,藉此能有效的更
正叢發錯誤,因為無論一個符號元中有多少位元產生錯誤,都僅僅表示一個符號元發
生錯誤,而對於隨機錯誤(Random Errors)而言,RS 碼的性能較不顯著。
令α為有限場 GF(2m)的本質元素,則可改正 t 個錯誤符號元的生成多項式
(Generator Polynomial) g(x)包括α, α2, …, α2t 這些根,因此 g(x)可表示為
2 t 1
g ( x)   ( x   i )  ( x   0 )( x   2 )  ( x   2t 1 )
i 0 (3-1)
2t 1
 g 0  g1 x  g 2 x    g 2t 1 x
2
x 2t

由此可知,當 g(x)設計的階層越高,代表增加的查核符號元也越多,即糾錯能力就越
強 。 一 般 編 碼 方 式 可 分 為 兩 種 , 分 別 為 非 系 統 化 (Nonsystematic) 編 碼 與 系 統 化
(Systematic)編碼,以下將介紹其優點及缺點。在 RS 碼中,可將原始訊息視作 k 個符
元數,其序列為(m0, m1, …, mk-1),它的訊息多項式 m(x)可表示為:

m( x)  m0  m1 x1    mk 1 xk 1 (3-2)

非系統化編碼是利用生成多項式與訊息多項式相乘,其字碼是隨機的。原本的訊息訊
號會被改變,以至於解碼端接收到時,需要將收到的訊息除以生成多項式,才能獲得
原始訊息。故在電路設計上的難度大增,因此較少被採用。
相較於非系統化編碼,系統化編碼與前者相比雖較複雜,但其優點為較具系統化,
原始訊息不會因編碼而改變,故在解碼過程中可以快速地得到原始的訊息,進而提升
解碼效率。對於編碼的方式,首先將訊息多項式 m(x) 移位過後,再與生成多項式 g (x)
相除,得到需額外增加的查核碼(Parity Codes),查核碼 p(x)可表示為:

9
p( x)  p0  p1 x1    pk 1 xk 1 (3-3)

將以上查核碼與訊息多項式合併便可完成 RS 的編碼動作。
根據前一節的定義, n  k  2t ,因此需先將原始訊息多項式 m(x) 乘上 x n k ,在數
學上的意義等同於位移 2t ,又因 RS 碼為循環碼(Cyclic Code)。因此在數學意義上,
經過位移後的字碼不會被改變,接著再除以生成多項式 g (x) 取餘數,就會得到我們要
的查核碼 p(x) 。

m(x)
Original Message mk-1, … ,m1,m0
m( x ) x 2 t Shift 2t symbols

mk-1, … ,m1,m0
mod g(x)

mk-1, … ,m1,m0 p2t-1,…,p1,p0


p(x)
Encoded Message 2t symbols

圖 3-3、RS 碼之系統化編碼

根據圖 3-3 的流程,可得到一個商多項式 q(x) 及餘數多項式 p(x) :

m( x)  x nk
 q( x)  p ( x) (3-4)
g ( x)

將式(3-4)做一個整理,等號左邊即為 RS 碼的表示式,如式(3-5):

m( x )  x n  k
 p( x)  q( x)
g ( x) (3-5)
nk
m( x)  x  p ( x)  g ( x)  q ( x)

由式(3-5)當中可得知,訊息多項式中含有生成多項式 g (x) 的因式。同理可推,在接收


端若字碼因雜訊產生錯誤,再與生成多項式 g (x) 相除時便不會整除,也就是餘數便不
會為零。因此在解碼的過程中,利用計算徵狀值(Syndrome Value)是否為 0,以判斷餘
數是否為零的最主要依據。

3.4 里德所羅門碼之解碼
由於 RS 碼為非二元碼,所以需要決定符號元的錯誤位置(Error Location),以及其
相對應的錯誤值(Error Value)。與編碼部分相比,解碼過程一直是大家熱烈探討的部
10
分。以下,我們將分別介紹代數解碼演算法以及步階式解碼演算法的流程。
假設原始訊息的字碼為 c(x) :

c( x)  c0  c1 x  c2 x 2    cn1 x n1 (3-6)

接收到的訊息字碼假設為 r (x) :

r ( x)  r0  r1 x  r2 x 2    rn1 x n1 (3-7)

若經過通道傳輸,傳輸訊息有可能受到通道雜訊的干擾,故接收訊息包含原始訊息及
外加的雜訊(Error Pattern),而這接收到的訊息可表示為 r ( x)  c( x)  e( x) 。假設錯誤多
項式為 e(x) :

e( x)  e0  e1 x  e2 x 2    en1 x n1 (3-8)

若 e( x)  0 ,則代表沒有錯誤發生,也就是接收訊息 r (x) 整除於生成多項式 g (x) ,這


也代表將所有有限場元素的根  i , i  1, 2, , 2t 代入接收訊息多項式 r (x) 會與原始訊
息多項式相等,因此得到以下的關係:

r ( i )  c( i )  0 (3-9)

若 e( x)  0 ,則代表在通道傳輸的過程中,受到通訊雜訊的干擾,在原始訊息裡產生雜
訊。然而,因接收訊息多項式是由原始訊息與錯誤訊息所組成,故將所有的有限場元
素之根  i , i  1, 2, , 2t 代入接收訊息多項式 r (x) 後,原始訊息多項式必為 0,故只會
剩下錯誤多項式,因此可以得到以下的關係:

r ( i )  c( i )  e( i )  e( i ) (3-10)

當接收端收到訊號時,我們需要確認收到的訊息是否為正確,可利用計算徵狀值
(Syndrome)加以判斷資料是否有誤。若徵狀值為零,則代表收到的信號是正確的;反
之,若傳輸過程中受到雜訊干擾而導致錯誤產生,則有非零徵狀值出現。然而,不論
採用那種演算法來進行解碼,都必須先經過徵狀值計算。
徵狀值的計算原理是將生成多項式 g(x)中包含的所有根 a ,  2 ,  ,  2t 代入接收訊
息多項式 r(x)中,其更正能力為 t 個錯誤的 RS 碼會產生 2t 個徵狀值。藉由所計算出
的徵狀值來判斷是否有錯誤,只要其中任一徵狀值不為零,就代表接收訊息有錯誤產
生;反之,所有徵狀值皆為零,則接受訊息即為正確。由式(3-11)可得知徵狀值的計算
方式如下:

Si  r ( i )  e( i ) (3-11)

由上列描述可知,計算徵狀值僅須將有限場元素的根  i 代入即可算出,但計算徵狀值

11
只能偵測接收到的訊息有無錯誤,實際還是需找出錯誤位置及相對應的錯誤值,這些
程序得依靠解碼演算法來解決,以下將分別介紹代數解碼及步階式解碼演算法。

3.4.1 代數解碼演算法
代數解碼法在 RS 碼解碼上,較常使用之兩種演算法:Berlekamp-Massey(BM)以
及 Euclidean 演算法,以上兩種主要都是用來求解關鍵方程式(Key Equation)後,再去
找尋錯誤位置多項式(Error-Locator Polynomial)與其相對應的錯誤值。解碼流程大致分
為以下五個部分:
1. 計算徵狀值 S i (Syndromes)
2. 依據 Berlekamp-Massey 或 Euclidean 演算法決定錯誤位置多項式  (x) 。
3. 利用 Chine search 找出錯誤位置的根,即為錯誤位置。
4. 對於每個錯誤位置利用 Forney 演算法找出其對應之錯誤值。
5. 利用 r ( x)  c( x)  e( x) 將錯誤更正回來。

3.4.1.1 傳統 Berlekamp 演算法


以 Berlekamp-Massey 為例,首先依據式(3-11)計算徵狀值 S i ,再從徵狀值中找出
錯誤多項式。在此我們先定義錯誤位置多項式,假定錯誤樣本方程式 e(x) 包含 v 個非
零的元素,即有 v 個錯誤產生,錯誤的位置便分別在 e(x) 中的 x j1 , x j2 ,, x jv ,其中 0 
j1 < j2 …< jv  n-1 為對應的錯誤位置,承式(3-8),可表示為:

e( x)  e j1 x j1  e j2 x j2    e jv x jv (3-12)

因此,為了解出 e(x),必須得知 i = 1, 2, …, v 中所有錯誤位置 x ji 及 e ji ,故我們定義錯


誤位置係數i 為:

i   j , for i = 1, 2, …, v
i
(3-13)

由式(3-11)和式(3-12)得知
S1  e j1 j1  e j 2 j2    e jv jv
S 2  e j1 2 j1  e j 2 2 j2    e jv 2 jv
(3-14)

S 2t  e j1 2tj1  e j 2 2tj2    e jv 2tjv
由式(3-14)中,等號左邊為已知的徵狀值,而等號右邊錯誤位置 e ji 與錯誤值  ji 則是我
們所需要求得的。在此,我們定義錯誤位置多項式(x)為:
 ( x)  (1  1 x)(1   2 x)  (1   v x)
(3-15)
  0   1 x   2 x 2  ...   v x v

12
其中
0 1
 1  ( 1   2     v )
 2  1  2   2  3     v 1  v (3-16)

 v  (1) v 1  2   v

而經由推導,可以將(3-14)與(3-15)中的係數 S i 與  i 得到下列之關係式:

Siv   1Siv1     v Si  0 , i  1,, 2t  v (3-17)

因此,首要的重點為找出可以滿足式(3-17)之最小階數多項式  (x) ,而 Berlekamp


依據此關係式提出一個有效率的演算法,利用反覆疊代的方式解決發生錯誤數為 v 的
更正問題,從滿足 S1 的  (x) 開始計算,依序往下計算滿足 S1 , S 2 的  (x) ,透過不斷的
疊代直到  (x) 滿足所有 S i 為止,故若有 2t 個徵狀值,則總共需疊代 2t 次。此外,發
生錯誤個數 v 必須小於等於最大可更正錯誤個數 t,否則將無法有效的正確解碼。
我們假設第 i 次疊代之最小階數多項式且滿足 S1 , S 2 , , Si 之前 i 個等式為:

 (i ) ( x)  1   1(i ) x   2(i ) x 2  ...   l(i ) x l , li 為  i (x) 之級數


i
i
(3-18)

接著在檢驗是否滿足下一個徵狀值 S i 1 時會產生差量(Discrepancy)

di ( x)  Si1  Si 1(i )  Si1 2(i )  ...  Si1li li(i ) (3-19)

若 d i  0 ,則可往下檢查下一個徵狀值,不需修改錯誤位置多項式,故

 (i1) ( x)   i ( x) , li1  li (3-20)

若 d i  0 ,則需要透過加入修正項來修正錯誤位置多項式使得滿足徵狀值。此修正項
必須回到先前得第 q 個步驟得到  ( q ) ( x) ,其中 d q  0 且符合 q  lq 為最大值與 lq  lq1 。
因此,我們可以將  (i1) ( x) 改寫為:

 (i1) ( x)   i ( x)  di d q1 x (iq ) q ( x) (3-21)

其階數改變為

li1  max( li , lq  i  q) (3-22)

將表 3-1 依序計算出,最後 2t 次疊代完後,將得到  ( x)   2t ( x) ,就是我們所需


的錯誤位置多項式。如果 deg(  2t ( x)) > t 則代表有超過 t 個錯誤產生,即無法解碼。

13
表 3-1、Berlekamp 遞迴演算法之初始值設定

i  ( i ) ( x) di li i  li

-1 1 1 0 -1

0 1 S1 0 0

    

2t

在式(3-15)中得知,若得到錯誤位置方程式的根,將伽洛瓦場 GF(2m)中的所有元
素帶入,若能令錯誤位置多項式  (x) 為零者,表示此元素為方程式之根,根之倒數即
為錯誤位置。而依序尋找所有元素帶入錯誤位置多項式的方法,即為著名的秦式搜尋
法(Chien Search)。
當找出錯誤位置後,Forney 利用錯誤位置多項式  (x) 與徵狀值多項式 S (x) 的關
係,推導出如何計算錯誤值的方程式。在此,我們先定義  (x) (Key Equation)為:
 ( x)   ( x) S ( x) mod x 2t
 1  ( S1   1 ) x  ( S 2   1S1   2 ) x 2   (3-23)
 ( S v   1S v1   2 S v2     v ) x v

透過  (x) 與  (x) 來求得錯誤位置所對應之錯誤值,錯誤值為:

 (  i1 )
e ji   (3-24)
 (  i1 )

最後將錯誤位置以及其對應之錯誤值加入接收訊息即可將錯誤更正回來。
為了更清楚了解 Berlekamp 的解碼過程,以下我們將用實例說明。假設一個在
GF (24 ) 含最大可更正 3 個錯誤的 RS 碼(t = 3),欲傳送字碼為:
v( x)  (0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)
經由通道傳輸後,接收到的字碼為
r ( x)  (0 0 0  7 0 0 3 0 0 0 0 0 4 0 0)
若將接收字碼改寫為多項式型態可得
r ( x)   7 x3   3 x 6   4 x12
如前述將 g ( x) 包含所有根, 2, ..., 6 代入式(3-11),可得 6 個徵狀值計算分別如下:
S1  r ( )   10   9     12
S2  r ( 2 )   13  1   13  1
S3  r ( 3 )     6   10   14
S4  r ( 4 )   4   12   7   10
S5  r ( 5 )   7   3   4  0

14
S6  r ( 6 )   10   9     12
根據表 3-1、式(3-20)以及式(3-21),分別計算 i = 0, 1, …, 5:
1 0  ( 1) 1
當 i = 0, d0 = S1,  ( x)   ( x)  d0 d 1 x  ( x)  1   12x
1 0

1 10 0
當 i = 1, d1  S 2  S1 1  1    1   ,  ( x)   ( x)  d1d 0 x  ( x)  1   x
(1) 24 9 2 1 3

當 i = 2, d 2  S3  S 2 1(2)   14   3  1 ,

 3 ( x)   2 ( x)  d 2 d11 x 21 1 ( x)
 (1   3 x)   7 x(1   12 x)  1   13x   5 x 2

當 i = 3, d3  S 4  S31(3)  S 2 2(3)   10   12   5   11 ,

 4 ( x)   3 ( x)  d 3d 21 x 32 2 ( x)
 (1   13x   5 x 2 )   11x(1   3 x)  1   4 x   12 x 2

當 i = 4, d 4  S5  S 4 1(4)  S3 2(4)   14   26   10


 5 ( x)   4 ( x)  d 4 d 31 x 43 3 ( x)
1
 (1   4 x   12 x 2 )   10 x(1   13x   5 x 2 )  1   9 x   4 x 3
 11

當 i = 5, d5  S6  S5 1(5)  S 4 2(5)  12


 18
  10

 6 ( x)   5 ( x)  d 5 d 41 x 54 4 ( x)
 1   9 x   4 x 3  x   4 x 2   12 x 3  1   7 x   4 x 2   6 x 3

最後可得出錯誤位置多項式(x)為 1   7 x   4 x2   6 x3 ,利用 Chien Search 將 1, , 2,


…, 2t 依序代入,代入後為零之值的倒數,即為錯誤位置,因此可得根為3, 9, 12,
其倒數為12, 6,3,這三個值即為錯誤位置。將  12 ,  6 ,  3 代入式(3-23)及(x)的一階
微分’(x),可求得(x) = 1 + 2x + x2 + 6x3,再計算式(3-24),可求得錯誤方程式
e( x)   7 x3   3 x6   4 x12 ,更正後為 v( x)  r ( x)  e( x)  0 ,即得到正確的字碼更正。

3.4.1.2 傳統 Euclidean 演算法


Euclidean 演算法則是將算完徵狀值後,以表 3-2 為初始值,重複以下之遞迴:
zi 2 ( x)  qi ( x) zi 1 ( x)  zi ( x)
ui ( x)  ui 2 ( x)  qi ( x)ui 1 ( x) (3-25)
vi ( x)  vi 2 ( x)  qi vi 1 ( x)

15
表 3-2、Euclidean 遞迴演算法之初始值設定

i ui (x) vi (x) zi (x) qi (x)

-1 1 1 x 2t -

0 0 1 S (x) -

    

若 deg( vi ( x))  t 及 deg( zi ( x))  t  1 則演算法停止,否則 i  i  1。當演算法停止後,


我們即可得知錯誤位置多項式  (x) = vi ( x) / vi (0) 以及關鍵方程式  ( x)  zi ( x) / vi (0) ,透
過得知錯誤位置多項式與關鍵方程式便可再次利用 Fornry 演算法求出錯誤位置所對應
之錯誤值 e ji 為:

 (  i1 )
e ji   (3-26)
 (  i1 )

為了更清楚了解 Euclidean 的解碼過程,以下我們將用實例說明。假設一個在


GF (24 ) 含最大可更正 3 個錯誤的 RS 碼(t = 3),欲傳送字碼為:
v( x)  (0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)
經由通道傳輸後,接收到的字碼為
r ( x)  (0 0 0  7 0 0 3 0 0 0 0 0 4 0 0)
若將接收字碼改寫為多項式型態可得
r ( x)   7 x3   3 x 6   4 x12
如前述將 g ( x) 包含所有根, 2, ..., 6 代入式(3-11),可得 6 個徵狀值計算分別如下:
S1  r ( )   10   9     12
S 2  r ( 2 )   13  1   13  1
S3  r ( 3 )     6   10   14
S4  r ( 4 )   4   12   7   10
S5  r ( 5 )   7   3   4  0
S6  r ( 6 )   10   9     12
根據以及式(3-25),分別計算 i = 0, 1, …,直到 deg( vi ( x))  t 及 deg( zi ( x))  t  1 :
當 i =1
x 6  q1 ( x)( 12  x   14 x 2   10 x 3   12 x 5 )  z1 ( x)
q1( x)   3 x, z1( x)  x   3 x 2   2 x3   13x 4
當 i =2
 12  x   14 x 2   10 x 3   12 x 5  q2 ( x)( x   3 x 2   2 x 3   13x 4 )  z2 ( x)
q2 ( x)   3   14x, z2 ( x)   12   14x   6 x 2   8 x3

16
當 i =3
x   3 x 2   2 x 3   13x 4  q3 ( x)( 12   14 x   6 x 2   8 x 3 )  z3 ( x)
q3 ( x)     5 x, z3 ( x)   13   2 x
計算 u(x)
i  1, u1 ( x)  1  ( 3 x)0  1
i  2, u2 ( x)  0  ( 3   14 x)1   3   14 x
i  3, u3 ( x)  1  (   5 x)( 3   14 x)     2 x   4 x 2
計算 v(x)
i  1, v1 ( x)  0  ( 3 x)1   3 x
i  2, v2 ( x)  1  ( 3   14 x)( 3 x)  1   6 x   2 x 2
i  3, v3 ( x)   3 x  (   5 x)(1   6 x   2 x 2 )     8 x   5 x 2   7 x 3

將 u(x)及 v(x)最後求得的結果,可求出錯誤位置多項式 (x)及錯誤評估多項式(x)如下:

 ( x)  v3 ( x) / v3 (0)  1   7 x   4 x 2   6 x 3
 ( x)  z3 ( x) / v3 (0)   12  x
接著將 1, , 2, …, 2t 代入可得 (x)之根為3, 9, 12,再取(x)根之倒數,可得錯誤
位置為12, 6,3。再利用 Forney 演算法,可分別得出對應錯誤位置的錯誤值,即

 ( 12 )  ( 9 )  ( 3 )
e3   7 , e6   3 , e12   4
 ' ( )
12
 ' ( )
9
 ' ( )
3

最後得出錯誤多項式 e( x)   7 x3   3 x6   4 x12 ,更正後為 v( x)  r ( x)  e( x)  0,即得到


正確的 RS 錯誤碼更正。

3.4.2 傳統步階式解碼演算法
步階式(Step-by-Step)解碼演算法與代數解碼演算法,最大的不同在於無須尋找錯
誤位置多項式的根及其對應錯誤值的計算。它是直接針對每一個符元,利用徵狀矩陣
(Syndrome Matrix)的特性,在偵測錯誤位置的同時,將所有可能的錯誤值進行測試,
進而求得錯誤值去加以更正,其主要優點為適用於平行運算,運算方式上與代數解碼
法相比也較為直覺。在現今高速環境下,利用平行運算的方式來達到速度的提升也儼
然成為一個重要的考量。
傳統式步階式演算法在設計之初,是針對 BCH 碼所設計的,由於其屬於二進制
循環碼,在錯誤值上僅有 0 與 1 的差異而已,因此只需要檢測該位置的符元是否錯誤,
圖 3-4 可看出步階式演算法在 BCH 碼的運算過程中,共需要 2m-1 的時脈週期,且整
個更正過程中,只要加上 1 便可更正錯誤。

17
2m-1 nonzero element

‧‧‧

S1 S 2  S v
 S3  S v1
 Si   , det[ N v (  , l )]  S 2
j j
S 'i
   
S v S v1  S 2 v 1
Operation times: 2m-1 x 2m-1

圖 3-4、傳統式步階式演算法應用於 BCH 碼示意圖

由 BCH 碼轉化成非二元碼 RS 碼後,我們可以將傳統式 BCH 步階式圖 3-4 轉化


成傳統式 RS 步階式圖 3-5,如下:

2m-1 nonzero element

‧‧‧

S1 S 2  S v
S 2 S3  S v1
S 'i  Si   , det[ N v (  , l )] 
l l

   
S v S v1  S 2 v 1
Operation times: 2m-1 x 2m-1

圖 3-5、傳統式步階式應用於 RS 碼示意圖

由徵狀值 Si (0  i  2t ) 所組成徵狀矩陣,當偵測到接收的 RS 碼 r (x) 的錯誤數目為

18
v 時,步階式演算法只需依靠 j  j 的徵狀矩陣 N j (1  j  v) 的行列式(Determinant)值,
就能夠進行更正的動作。若接收中實際錯誤的符元數目 v 小於 t ,組成的矩陣稱為奇
異矩陣(Singular Matrix),也就是說徵狀矩陣的行列式值 det(N v )  0 ;當實際錯誤數目
v 等同於最大容忍的錯誤數目 t 時,則稱它為非奇異矩陣(Nonsingular Matrix),其中 v  v
的徵狀矩陣 N v 為
 S1 S2  Sv 
S S3  S v1 
Nv   2 (3-27)
    
 
 Sv S v1  S 2v1 

當徵狀矩陣行列式 det(Nv) = 0 時,則判定實際錯誤數目由 v  t 減少為 v  1 ,接著


再計算 det(Nv-1),直到找到第一個非零的徵狀矩陣之行列式值,實際錯誤數目 v 就能
被確定,記為 det(Nv0)。當錯誤數目 v 被確定後,隨著符元計數值 j 的增加,即移動偵
測的位置,將有限場 GF(2m)中的所有 2m-1 個非零元素  ,依序加到 r0、rn-j-1、…、rn-j,
而 RS 碼為一循環碼,為了在硬體實現上的方便性,將接收訊息 r (x) 整個右移位一個
符元位置,便能夠將第一個位置固定成 rn-j,經過移位及加上非零元素  後得到一個新
的 RS 碼 r (x) 。

r ( x)  r (  , j ) ( x)  r ( j ) ( x)  
(3-28)
 rn- j    rn- j 1 x    rn-1 x j -1  r0 x j    rn- j -1 x n-1

由於 RS 碼屬於循環碼(Cyclic Codes),因此將 r (x) 做移位,字碼意義也不會改變,


但對於同一組接收訊息,每加入一個非零元素  ,就會得到一個新的徵狀值 Si (  , j),
利用新的徵狀值再組成新的徵狀矩陣 Nv (  , j)及其行列式 det[Nv (  , j)],分別表示為
式(3-28)及(3-29)。其中因為加入非零元素  而暫時改變的徵狀矩陣 Nv (  , j),我們稱
此矩陣為暫時變更徵狀矩陣(Temporarily Changed Syndrome Matrix) 。

Si  Si ( , j )  r ( j )  Si  
j
(3-29)

S1 S 2  S v
S S 3  S v1
det[ N v (  , j )]  2 (3-30)
   
S v S v1  S 2 v 1

利用徵狀矩陣的特性,若有一非零元素  加到某個符元做偵測,使得暫時變更徵
狀矩陣 Nv (  , j) 的行列式值為零,此時錯誤數目由 v 降為 v  1,代表被偵測的符元原
先是一個錯誤的值,而在解碼過程中,是透過將錯誤值  加至 r (x) 使得錯誤數目減少
一個,於是錯誤位置其相對應的錯誤值便等於  。透過不斷地計算新的暫時改變徵狀
矩陣,重複此步驟共 j ( j  1, 2, , n) 次,直到 j  n ,代表所有的符元都被檢測完畢,

19
即可完成整個解碼動作,圖 3-6 為以上所述之步階式演算法流程圖。

Receive massage r(x)

Compute Syndrome
Si  r ( i )  e( i ) Yes
det[Nv1 ( , j )]  0 ?
No
v = t, j = 0
Yes
Calculate determinant of syndrome
matrix for error number v No
S1
0
S2
0
 Sv
0 det[Nv ( , j )]  0 ?

 
0 0 0
S2 S3  S v 1
det N v0 
    Yes
0 0 0
Sv S v 1  S 2 v 1 r ( x)  r ( x)  

Yes
 
det N v0  0 ? v = v-1
j = n?
No
No
Calculate determinant of Yes
temporarily changed syndrome matrix
S '1j S '2j  S 'vj End
S' j
S' j
 S 'vj1
' j
 Si   , det[ N v (  , j )] 
j 2 3
S i
   
S 'vj S 'vj1  S '2j v 1 j=j+1

圖 3-6、步階式演算法流程圖

另外根據步階式演算法,當 det(Nv)≠0 時,即錯誤數目為 v,每經過一次非零元


素的測試,字碼 r (x) 中的錯誤符元數目,會有下列三種可能情形出現:
1. 錯誤數目 v → v – 1:假設欲測試的符元,其位元值因經過通道受到雜訊干
擾,因而帶有一錯誤的訊息 e(x)。在此情形下,若 det[Nv (β, j)] = 0,表示測試
元素  符合該符元相對應的錯誤值。因此將  與該符元相加後,使得字碼
r (x) 的錯誤數目從 v 增加為 v - 1 個,即偵測的符元位置值更正完成。
2. 錯誤數目 v → v :假設欲測試的符元,其位元值因經過通道受到雜訊干擾,
因而帶有一錯誤的訊息 e(x)。在此情形下,若 det[Nv (β, j)]≠0,表示測試元素
並不符合該符元相對應的錯誤值。因此即使將  與該符元相加,則字碼 r (x)
錯誤數目依舊為 v,無須更正錯誤。即偵測的符元位置值為錯誤,加上 β 後
仍為錯誤。
3. 錯誤數目 v → v + 1:假設欲測試的符元,即使經過通道受到雜訊干擾,其
位元值依然保有原本的數值。在此情形下,加上任一測試元素 β 後,將導致
字碼 r (x) 錯誤數目由 v 增加為 v + 1,由於 det[Nv (  , j)] 僅能偵測錯誤數目
是否為 v,而不管 det[Nv (β, j)]是否為零,皆不能當作可靠的判斷依據。因此
需要計算 det[Nv+1 (β, j)] 是否為零,若 det[Nv+1 (β, j)]≠0,則代表此情況成立。
即偵測的符元位置值為正確,而加上 β 後導致錯誤數量增加。
20
上述所討論之三種不同偵測該符元是否有誤的方式,我們將這些敘述整理成表
3-3。從表可觀察要得知該符元是否有誤,需特別注意要先計算 det[Nv+1 (β, j)] 是否等
於零值,爾後再根據 det[Nv (β, j)]的值來判斷,是否存在一非零元素 β,能夠使得字碼
r (x) 的錯誤符元數目由 v 降為 v - 1。
表 3-3、錯誤數目為 v 之偵測情況

Error Number det[Nv (β, j)] det[Nv+1 (β, j)] Initial symbol correct

v→v+1 Can’t detect ≠0 X

v→v ≠0 =0 X

v→v-1 =0 =0 O

前述傳統的步階式演算法步驟,歸納如下:

1. 利用接收到的訊息 r(x)計算初始徵狀值 S i (i=1, 2, …, 2t)。


2. 計算初始徵狀矩陣 det(N v ) ,v 由可更正能力之最大數目 t 開始遞減(v = t,
t-1, …),直到找到第一個非零的 det(N v ) ,藉此決定接收資料的錯誤數目 v。
3. 若 v = 0,則前往步驟 8。
4. 將 2m-1 個非零元素β加入步驟 1 所求出之徵狀值 S i ,利用式(3-25)求出新的
行列式值。
5. 若 det(N v ( , j ))  0 ,則往下一個符元位置偵測。
6. 若 det(N v ( , j ))  0 ,再接著利用若 det(N v1 ( , j )) 是否為零來判斷上方表格
的情況。當 det(N v1 ( , j ))  0 ,則前往步驟 7;反之,則往下一個符元位置偵
測。
7. 將接收訊息 r ' ( x) 與錯誤值β相加: r ( x)  r ' ( x)   ,進而把錯誤訊息更正為
正確訊息。
8. 解碼完成。

3.4.3 新型步階式解碼演算法

以傳統式解碼演算法來說,每一個位置的符元皆必須加上 2m-1 個非零元素的測


試,才能求得錯誤值。從圖 3-5 得知,在每次的測試過程中,利用不同位置所產生出
的徵狀值,而組成的暫時變更徵狀矩陣(Temporarily Changed Syndrome Matrix)會隨著
2m-1 個非零元素 β 不斷更新,所以行列式值需一再的計算,又因為一個 RS 碼擁有 2m-1
的符元,以致於在整個解碼過程便需耗費(2m-1) × (2m-1)次的運算。因此傳統式解碼演
算法在 RS 碼上會耗費比較多的時間,以及在運算上消耗大量的功率。基於這個緣故,
步階式演算法在 RS 解碼與硬體實作上有著很大的進步空間,後文將聚焦在此做探討。
21
1993 年由 Tung-Chou Chen 等提出改進之後[2],偵測錯誤位置的計算便只需要針
對每一個符元位置計算一次行列式值,在此方面文獻[2]提出將式(3-25)簡化成兩個不
同的徵狀矩陣,將這兩個不同的徵狀矩陣,透過相除的方式,便可以決定錯誤位置上
之相對應的錯誤值,此方式無須透過加入所有非零元素 β,不必計算 2m-1 次的行列式
值,故將傳統式解碼演算法計算的次數 2m-1 × 2m-1 次降低成 2m-1 次,此新型步階式
演算法大幅降低傳統式步階式演算法在 RS 解碼的複雜度。
依照式(3-24)的定義,傳統步階式演算法在每個位置符元測試 2m-1 個非零元素 β
時,將徵狀值 S i j 加上 β,並求出新的徵狀值,再經過式(3-25)求出其暫時變更矩陣 Nv (β,
j),此法必須在符元上計算 2m-1 次 v  v 的行列式值。而依照文獻[2]所提之新型步階式
RS 解碼方法,式(3-30)經推導後可得到由兩個矩陣所組成的式子,β 為一有限場 GF(2m)
中存在的 2m-1 的非零元素。
當每加一個有限場中任一個非零元素 β 到 r(x),將式(3-30)分解後可得到式(3-31):

S1 S 2  S v S1j   S 2j    S vj  
S S 3  S v1 Sj  S 3j    S vj1  
det[ N v (  , j )]  2  2
       
S v S v1  S 2 v 1 S vj   S vj1    S 2jv 1   (3-31)

S1  S 3 S2  S4 S v-1  S v 1
j j j j j j
S1j S 2j  S vj 
S2  S4 S3  S5  S v  S v2
j j j j j j
Sj S 3j  j
S v 1
 2 
       
S v-1  S v 1 S j  S v2  S 2 v-3  S 2v 1
j j j j j j
S vj S vj1  S 2jv 1

在討論式(3-31)前,在此我們先定義 det(M vj ) 如下:

S1j  S 3j S 2j  S 4j  S vj  S vj 2
S j  S 4j S 3j  S 5j  S vj1  S vj3
det(M vj )  2 (3-32)
   
S v  S vj 2
j
S v1  S vj3
j
 S 2v 1  S 2jv 1
j

因此式(3-31)中包含兩個不同的徵狀矩陣,分別表為 det(N vj ) 及 det(M vj1 ) (1≦j≦n),其


中 det(M vj1 ) 可由式(3-32)推導而得。這表示我們對於有限場 GF(2m)中的所有 2m-1 個非
零元素 β 做檢測時,不需依照圖 3-5 的流程,去計算 2m-1 個 v  v 行列式,而只需要先
求出 det( N vj ) 及 det(M vj1 ) ,便可以算出 det[Nv (  , j)] 的值,如(3-33)式。

det[Nv ( , j )]  det(Nvj )    det(M vj1 ) (3-33)

而根據文獻[4]所提出之新型步階式演算法, det( N vj ) 可以由 det(N v0 ) 做簡單的乘法


運算來得到,如(3-34)式。

det( N vj )   v  det(N vj 1 )
2
(3-34)

22
因此根據表 3-3 的錯誤偵測方式,我們只需針對每一個符元求 det(M vj1 ) ,之後只要透
過 det(M vj1 ) 以及 det( N vj ) 兩式相除即可,便可以求得錯誤位置其對應之錯誤值 β

S1  S 3 S2  S4 S v-1  S v 1
j j j j j j

S2  S4 S3  S5 S v  S v 2
j j j j j j

det(M v 1 ) 
j
(3-35)
   
S v-1  S v 1 S j  S v 2  S 2v-3  S 2v 1
j j j j j j

det( N vj )
 (3-36)
det(M vj1 )

由表 3-3 可知,步階式演算法是以位置來依序對每個符元做解碼,因此假設錯誤
數目為 v 時,必須再次利用式(3-31)來計算 det[Nv+1 (β, j)],以防止表 3-3 所描述之錯誤
數由 v→v+1 之情形,而計算 det[Nv+1 (β, j)]的同時需得知 det(Nv+1)及 det(M vj ) ,後者則
是前面所定義的式(3-32)。根據徵狀矩陣的特性,假設錯誤數目為 v 時, det( N vj ) 為偵
測錯誤時所計算出第一個非零的行列式,故 det(N vj1 ) 必定為零,因此我們只需計算
det(M vj ) 是否為零,若 det(M vj ) 為零,則 det[Nv+1 (β, j)]=0;反之,若 det(M vj ) ≠0,則
det[Nv+1 (β, j)]同樣不為零。
根據上段說明,在檢測 det[Nv+1(β, j)]的方式,僅需計算 det(M vj ) 是否為零即可偵
測錯誤數量是否增加的情況。此外當 v = t 時,不免會發現 det(M vj ) 中會有一個不存在
的徵狀值 S 2t 1 ,在求徵狀值時只能求出 S1  S 2t ,並無 S 2t 1 的產生,因此無法計算 det(M
j
v )。所以先利用(3-36)優先算出錯誤值 β,再針對 β 直接計算 det[Nt+1 (β, j)],雖然其中

徵狀值 S 2t 1 還是存在:

S1 S 2  S t1
S t S 3  S t 2
det[ N t 1 (  , j )] 
   
S t1  
S t  2  S 2t 1
(3-37)
S1   S 2    S t  
S 2   S 3    S t1  

   
S t   S t 2    S 2 t 1  

在此之前,如何計算含有不存在的徵狀值 S 2t 1 的行列式,在更正能力為 t=8 的 RS


碼下,徵狀值 S i 最多只到 S16 (0  i  2t ),因此式(3-37)中 S 2t 1 為一個不存在的徵狀值,
但我們可以由計算矩陣的餘因子定理得知,對於一 n  n 之矩陣 Z,其行列式可表示為:

23
z11 z12  z1n
z z 22  z1n
Z  21 (3-38)
   
z n1 zn 2  z nn

將式(3-38)化簡後可得到式(3-39):

det(Z )  zn1Cn1  zn 2Cn 2    znnCnn (3-39)

其中 C nn 為在矩陣 Z 中將第 n 行及第 n 列刪除後之行列式:


z11 z12  z1n z11 z12  z1( n1)
z z 22  z2n z 21 z 22  z 2( n1)
Cnn  21  (3-40)
       
z n1 zn2  z nn z( n1)1 z( n1) 2  z( n1)( n1)

依照上述的定義,在式(3-39)中,det[Nt (  , j)]正好是 S 2t 1 的餘因式,而在偵測錯誤數


目 t + 1 的情形下計算 det[Nt+1 (  , j)] = 0,所以在計算時,可以忽略 S 2t 1  det[N t ( , j )] 。
透過此方式,我們可以將計算徵狀值時不存在的 S 2t 1 作為 0 計算,利用 S 2t 1  0 代入式
(3-37)就可得知 det[Nt+1(β, j)]是否為零。
新型步階式演算法,在偵測錯誤位置其對應之錯誤值,不必不斷地計算暫時變更
徵狀矩陣 det[N t ( , j )] ,而是利用相除的方式去求得錯誤值,此方法改善傳統步階式演
算法在計算錯誤值的大量計算。除了徵狀值 S i j 可以利用 S i j 1   i 以外, det(N vj ) 也可以
透過 det( N vj 1 ) 累上一個  v 值來得到,徵狀值以及行列式在硬體上可利用累乘的方式求
2

得;而錯誤值  不必使用除法器求得,可利用有限場的特性,利用乘法反元素來相乘,
以達到和除法相同效果,此舉簡化傳統步階式演算法對於行列式計算的大量運算,圖
3-7 為新型步階式演算法的流程圖。

24
Receive massage r(x)

Compute Syndrome
Si  r ( i )  ei ( i )
det( M v 1 )  0 ?
j

Yes

v = t, j = 0 No
Calculate error value β
j
det( N v )
Calculate determinant of syndrome  j
matrix for error number v det(M v 1 )
0 0 0
S1 S2  Sv
0 0 0

det  N 0  
S2 S3 S v 1 Calculate
v = t?
    det[Nt+1 ( β, j)]
0 0 0
No
Sv S v 1  S 2v 1
det( M v )  0 ?
j

No
Yes
Yes
det N   0?
' v = v-1 Error correct Yes
det[Nt 1 ( , j )]  0 ?
j
r ( x)  r ( x)  
No
No
Calculate S 'i j  Si j   det(N v j )   v  det(N v j 1 ) 2

No
S1  S 3
j j
S2  S4
j j
 S v-1  S v 1
j j j = n?
S2  S4 S3  S5 S v  S v 2
j j j j j j

det(M v 1 ) 
j

    Yes
S v-1  S v 1 S j  S v 2  S 2v-3  S 2v 1
j j j j j j

End
j=j+1

圖 3-7、新型步階式演算法流程圖

根據上述,在此將新型步階式演算法的步驟,歸納如下:
1. 利用接收到的訊息 r(x)計算初始徵狀值 S i (i=1, 2, …, 2t)。
2. 計算初始徵狀矩陣 det(N v ) ,v 由可更正能力之最大數目 t 開始遞減(v = t,
t-1, …),直到找到第一個非零的 det(N v ) ,藉此決定接收資料的錯誤數目
v。
3. 若 v =0,則前往步驟 10。
4. 計算行列式 det(M v1 ) ,若 det( M v1 )  0 ,則代表沒有錯誤;反之,前往步
驟 5。
5. 將步驟 2 所求 det(N v ) 與步驟 4 所求的 det(M v1 ) 相除,以求出錯誤值β,
前往步驟 6。
6. 若 v = t,前往步驟 8。
7. 若 v≠t,則只要計算 det(M v ) 的值,當 det(M v )  0 ,前往步驟 9;反之,
無需更改
8. 透過(3-28)求得 det(N v1 ( , j )) ,當 det(N v1 ( , j ))  0,前往步驟 9;反之,
則無需更改。
9. 將接收訊息 r ' ( x) 與錯誤值β相加: r ( x)  r ' ( x)   ,進而把錯誤訊息更
正為正確訊息。
10. 解碼完成。

25
3.4.4 改良型步階式解碼演算法
上述由 Tung-Chou Chen 等所提出的演算法,對於找出錯誤值的運算次數雖然有所
改進,但仍然需要運算 det(M vj1 ) 的次數為 2m-1,而隨著字碼長度 n 及錯誤數目 v 的增
加,解碼的計算將會越來越複雜。在 2007 年 Xiaobei Liu 等提出不需再每個位置都去
計算行列式 det(M vj1 ) 的問題,可透過化簡成其他行列式來簡化其複雜度,根據此文獻
[5],式(3-29)可重新表示如下:

Si ( , j )
 r0  r1 i    (r j   ) ji   rn1 ( n1)i
(3-41)
 r ( i )   ji
 S i   ji

求出新的徵狀值之後,帶入到式(3-30)可得到:

S1 (  , j ) S 2 (  , j )  S v ( , j) S1   j S 2   2 j  S v   vj
S ( , j) S 3 ( , j)  S v1 (  , j ) S 2   2 j S 3   3 j  S v1   (v1) j
det[ N v ( , j )]  2  (3-42)
       
S v (  , j ) S v1 ( , j )  S 2v1 ( , j ) S v   S v1   (v1) j
vj
 S 2v1   ( 2v1) j

接著利用餘因子定理,將  與  ( 2 x1) j 提出後化簡,最後的化簡式如式(3-43)所示

 
v
det[ N v (  , j )]  det N v      ( 2 x1) j det N vxx (3-43)
x 1

( vj ) 與 det(M vj1 ) 化 簡 成 等 號 右 邊 的 det( N v ) 與


式 (3-33) 中 , 原 本 需 要 計 算 的 d e t N

det N vxx  。其 det(N v ) 為去除 x 行與 x 列的矩陣行列式,如式(3-44)所示為


v

 ( 2 x 1) j
xx

x 1

det(N vvv ) :

S1 S2  Sv
 S v1
det N vvv   S
 2

S3
  
(3-44)

Sv S v1  S 2v1

假設一個錯誤數目 v,其 0 < v  t ,我們將 Hv, j 定義為式(3-45):

 
v
H v , j   ( 2 x1) j det N vxx (3-45)
x 1

然而,判斷錯誤數目時,可以分成以下兩點來討論:

26
1. 若 Hv, j= 0:依照步階式演算法,我們先假設偵測的位置符元為錯誤的,因此
會有一非零元素  存在,當錯誤位置加上錯誤值  ,錯誤數目就會減少,透
過式(3-43)可知,當 Hv, j= 0 時,可將式(3-43)改寫成
det[N v ( , j )]  det N v   0,則代表沒有非零元素  存在,所以第 j 個偵測的
位置符元,其相對應的值必為正確的值。
2. 若 Hv, j≠0,依照步階式演算法,我們先假設偵測的位置符元為錯誤的,因此
會有一非零元素  存在,當錯誤位置加上錯誤值  ,錯誤數目就會減少,透
過式(3-43)可知,當 Hv, j≠0 時,可將式(3-43)會得到一非零元素  ,因此在第
j 個偵測的位置符元,其相對應的值必為錯誤的值,而非零元素  要如何求
得,後面會再加以介紹。
然而最終判斷錯誤與否則要透過表 3-3 去判斷,以下將表 3-3 的情況來敘述,一個能
夠更正 t 個錯誤值的 RS 碼,即更正能力為 t,在判斷錯誤數目是否由 v→v+1 時,會出
現 Hv+1, j,如式(3-46),並分成下列兩種情況來討論:

 
v 1
H v1, j   ( 2 x1) j det N vxx1 (3-46)
x 1

1. Hv+1, j≠0:則代表第 j 個偵測符元其相對應的值必定為正確。


假設第 j 個偵測的符元為正確的值,將測試元素  與該符元相加後,使得待
偵 測 字 碼 r (x) 的 錯 誤 數 目 由 v → v + 1 個 。 當 Hv+1, j ≠ 0 時 , 可 得
det(N v1 ( , j ))  0,於是根據表 3-3,若 Hv+1, j≠0 時,將使得待偵測字碼 r (x)
的錯誤數目從 v 增加為 v + 1 個,代表更正後錯誤數不減反增,即原先所偵測
位置其對應的值為正確的,才會導致更正後錯誤數量增加。

2. Hv+1, j=0:則代表第 j 個偵測符元其相對應的值為錯誤。


假設第 j 個偵測的符元為錯誤的值,將測試元素  與該符元相加後,使得字碼
r (x) 的錯誤數目由 v→v - 1 個,根據表 3-3,得到 det(N v1 ( , j ))  0 。然而從
步階式演算法得知,我們透過計算 det(Nv )的值,直到第一個 det(Nv )的值為零,
便可決定此訊息的錯誤數目為 v,此時 det(N v1 )  0 。因此,我們再計算錯誤數
目時,已知 det(N v1 )  0 ,若此時 Hv+1, j = 0,必定會得到 det(N v1 ( , j ))  0 ,
代表欲偵測字碼 r (x) 的錯誤數目將從 v 減少為 v - 1 個,代表更正後錯誤數減
少,即原先所偵測位置其對應的值為錯誤的,才會使錯誤數量減少。

對此演算法來說,det(Nv)決定訊息的錯誤數目 v 後,計算 det(N vxx ), x  1, 2,, v ,


並將這 v 個值儲存起來,之後將儲存起來的行列式分別乘上  ( 2 x1) j ,並將乘上後的值
加總起來,藉此可以計算出式(3-45)。也就是說,演算法一開始,將徵狀值算完後,便
把需要用到的行列式值求出,後續隨著訊號符元移動 j 個位置後,只需要利用累乘與
加總,便可以求出式(3-45)。

27
上述只解說了找尋錯誤位置,以下將描述如何找出其相對應的錯誤值,並更正。
改良型步階式演算法,若 Hv+1, j = 0 且 Hv, j ≠ 0,可以判別接收字碼 r (x) 的錯誤位置
已被偵測出來,而在每個符元上,透過將式(3-43)等號右邊的 det(Nv )與 Hv, j 相除,即
可求得錯誤值 β,如式(3-47)。

det N v 
 (3-47)
H v, j

圖 3-8 為改良型步階式演算法的流程,此流程圖與新型步階式演算法所提出的簡
化方式略同,將步階式演算法的運算次數維持在 2m-1,不同處在於改良型步階式演算
法將行列式的計算與步階式的解碼計算做區隔,而不需像新型在每移動一個符元位置
後,去計算 v  v 矩陣之行列式值,只需計算 v 個 det(N vxx ) 後,並利用式(3-45)的特性,
便可求出錯誤值。基於這改良型的步階式演算法,在硬體實現時,便只須專注在行列
式運算電路的設計上即可。

圖 3-8、改良型步階式演算法流程圖

最後將改良型步階演算法的步驟歸納如下[5]:

1. 利用接收到的訊息 r(x)計算初始徵狀值 S i (i=1, 2, …, 2t)。


2. 計算初始徵狀矩陣 det(N v ) ,錯誤數目 v 由可更正能力之最大數目 t 開始遞

28
減,直到找到第一個非零的 det(N v ) ,藉此決定接收資料的錯誤數目 v。
3. 若 v =0,則前往步驟 9。
4. 計算行列式 det(N vxx ) 與 det( N vxx1 ) ,並將所有的行列式值儲存起來。
5. 若 v = t,則前往步驟 7。
6. 對於 j = 0, 1…, n-1,必須計算 Hv+1, j。若 Hv+1, j≠0,表示原先的接收值為正
確,加上錯誤值後,使錯誤數目由 v 增加為 v+1,故無須更正錯誤;若 Hv+1, j
= 0,則計算 Hv, j,透過(3-38)求得錯誤值β,前往步驟 8。
7. 對於 j = 0, 1…, n-1,必須計算 Hv, j。若 Hv, j = 0,表示原先的接收值為正確;
反之,若 Hv, j ≠0,利用式(3-38) 求得錯誤值β。接著透過假設 S 2t 1  0 去計
算 det( N v1 ( , j )) ,若 det(N v1 ( , j ))  0 ,前往步驟 8。若 det(N v1 ( , j ))  0 ,
表示原先的接收值為正確,加上錯誤值後,使錯誤數目由 v 增加為 v+1,故
無須更正錯誤。
8. 將接收訊息 r ' ( x) 與錯誤值β相加: r ( x)  r ' ( x)   ,進而把錯誤訊息更正為
正確訊息。
9. 解碼完成。

29
第4章 里德-所羅門解碼電路

4.1 平行化改良型步階式里德-所羅門解碼器硬體架構
由上述改良型步階式演算法 的流程可知,整個解碼過程順序為徵狀值計算
(Syndrome Calculator) 、 行 列 式 值 計 算 (Determinant Calculator) 、 錯 誤 數 目 偵 測
(Error-Number Detector)、錯誤值偵測(Error-Value Detector),以及最後得更正而完成解
碼。

det(Nv)

det(Nv+1)
input det(Nv+1xx)
Error
Ch1 Error det(Nv+1xx)
Syndrome Determinant det(Nv) Hv,j Correct
Ch2 Number
Calculator Si 0 Calculator Delta

Error Value
Detector V Hv+1,j
Ch3 Accumulation
det(Nvxx) & Summation

det(Nvxx)

Ch1
8x170 FIFO Register File Ch2

Ch3

output

圖 4-1、平行化改良型步階式 RS 解碼器架構圖

整體硬體架構如圖 4-1 所示,下面幾節我們將講解下列使用到的所需電路的實作:

1. 伽洛瓦場乘法器
2. 徵狀值計算器
3. 行列式計算器
4. 錯誤數目偵測器
5. 錯誤值檢測器
6. 先進先出緩衝暫存器

4.2 伽洛瓦場乘法器
在 RS 解碼的過程中,乘法器為重要的基礎運算電路,而乘法運算與加法運算相
比也複雜許多。因此,在討論各電路之前,先介紹伽洛瓦場乘法器的架構,其中在 2.3
節已經有伽洛瓦場的基礎理論,而下面分為兩種乘法器,分別為變數-變數與變數-常
數之乘法器,依照所需條件的不同,去取決於要使用哪種乘法器,以節省大量的硬體
面積。

30
4.2.1 變數-變數之乘法器
變數-變數乘法器為最通用的乘法器,其輸入均為非固定值之變數,為了降低乘法
器的複雜度,參考許多文獻後,我們採用全平行乘法器(Full Parallel Multiplier)作為 RS
解碼器的基本乘法運算架構。我們以 GF(24)為例,假設在有限場中的兩個變數元素分
別為 a  a3 x 3  a2 x 2  a1 x  a0 及 b  b3 x 3  b2 x 2  b1 x  b0,其運算過程主要分成下列三個
步驟[8]:

1. 將兩兩相乘後,依照一般的乘法運算,將其結果展開,再將相同階層的係數
做加法運算。
2. 將超過有效階層的係數,分別依序對本質多項式取餘式,此動作將會得到低
階多項式,此稱為餘式化簡(Modular Reduction)。
3. 透過將餘式化簡後,將相同階層的係數再做一次加法運算,化簡得到的簡化
係數會成為有限場內的元素。

如圖 4-2 所示,為一般乘法運算的展開過程,而圖 4-3 為在有限場 GF(24)下,透過餘


式化簡後的乘法運算結果,將一般乘法運算後超出有效階層的係數,將其成為方塊內
有效階層區域的係數。

超過有效階層之係數區域

圖 4-2、一般乘法運算過程示意圖

超過有效階層之係數區域

將超過有效階層之係數區域
化簡成有效階層

圖 4-3、GF(24)乘法運算過程示意圖

31
圖 4-2 先利用 AND 及 XOR 邏輯閘來達成運算,接著圖 4-3 透過事先決定整理好
的所有運算方式,計算出需要利用多少 AND 及 XOR 去運算。

圖 4-4、GF(24)全平行乘法器[9]

4.2.2 常數-變數之乘法器

一個輸入端為固定值之乘法器,稱為常數-變數乘法器,為徵狀值計算器與後續電
路所使用到的乘法運算,能夠降低面積及功率消耗。一個建立在 GF(28)有限場的常數
-變數乘法運算式子,依照 2.3.2 小節可化簡表示為:

a0 a7 a6 a5 a4 a3  a7 a2  a6  a7 a1  a5  a6  a7  b0  O0 


a a0 a7 a6 a5 a4 a3  a7 a2  a6  a7  b  O 
 1  1   1  (4-1)
a2 a1  a7 a0  a6 a5  a7 a4  a6 a3  a5  a7 a2  a4  a6  a7 a1  a3  a5  a6  b2  O2 
  b  O 
 a3 a2  a7 a1  a6  a7 a0  a5  a6 a4  a5  a7 a3  a4  a6  a7 a2  a3  a5  a6 a1  a2  a4  a5   3   3
a4 a3  a7 a2  a6  a7 a1  a5  a6  a7 a0  a4  a5  a6 a3  a4  a5 a2  a3  a4 a1  a2  a3  a7  b4  O4 
  b  O 
 a5 a4 a3  a7 a2  a6  a7 a1  a5  a6  a7 a0  a4  a5  a6 a3  a4  a5 a2  a3  a4   5  5
a a5 a4 a3  a7 a2  a6  a7 a1  a5  a6  a7 a0  a4  a5  a6 a3  a4  a5  b6  O6 
 6     
a7 a6 a5 a4 a3  a7 a2  a6  a7 a1  a5  a6  a7 a0  a4  a5  a6  b7  O7 

在式(4-1)中,a 為變數矩陣,b 則為常數矩陣,將固定值之常數代入 b 矩陣,便可事先


利用常數與變數之間的關係,在硬體實作上節省大量不必要的 XOR 邏輯閘,以計算
1 16
徵狀值的計算器所需使用到的常數-變數乘法器為例,表 4-1 將 α 至 α 所需之 XOR 邏
輯閘數量列出,由此可知,對於常數為 α1 的常數乘法器來說,圖 4-4 的全平行乘法器,

32
16
為最省邏輯閘數,但對於 α 來說卻耗費相當大的邏輯閘數,因此常數-變數乘法器與
全乘法器相比,仍然能夠省下不少的晶片面積。

表 4-1、常數-變數乘法器之 XOR 閘邏輯閘數

GF(28)常數-變數乘法器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
常數值 α α α α α α α α α α α α α α α α

XOR
3 6 9 12 16 19 21 23 22 21 21 21 20 21 23 24
邏輯閘數量

4.3 徵狀值計算器
由解碼流程可知,首先必須先計算徵狀值,其主要目的為判斷接收訊息 r(x) 是否
因受到雜訊的干擾而產生錯誤 e(x) 方程式。若徵狀值為零,表示 r(x) 沒有受到雜訊
干擾,無須進行錯誤更正程序;反之則將此值傳給下一個模組,執行計算行列式的值,
式(3-11)的徵狀值可展開表示為:

S i  r ( i ), 1  i  2t
 rn1 ( i ) n1  rn2 ( i ) n2    r1 ( i )  r0 (4-2)
 ( ((0   i  rn1 ) i  rn2 ) i )    r1 ) i  r0

4.3.1 單輸入之徵狀值計算器
由式(4-2)可知,計算徵狀值的方式,相當於連續遞迴乘以同一個常數  i ,因此,
只需要一個乘法器及加法器便可完成,其中常數  i 隨著 i 值的變化而有所不同。以
RS(255, 239)的解碼器來說,共需要 255-239 = 2t = 16 個徵狀值,即 S1~ S16,而將式(4-2)
實現需要使用到 16 個常數-變數乘法器,圖 4-5 為徵狀值計算器的電路架構。

Receive message r(x)

α1 α2 α3 αi

……
D D D D

S1 0 S2 0 S3 0 Si 0

圖 4-5、徵狀值計算器硬體架構

33
4.3.2 平行化之徵狀值計算器
對於上述電路中,僅計算徵狀值就需 255 個時脈週期,而在本論文中,可利用
Honor’s Rule 將式(4-2)改寫成為:
S i  r ( i ), 1  i  2t
 (( (rn1 ( i ) 2  rn2 ( i )1  rn3 )( i ) 3
(4-3)
 (rn4 ( i ) 2  rn5 ( i )1  rn6 ))( i ) 3
   r2 ( i ) 2  r1 ( i )1  r0

為增加計算速度,我們一次輸入三個值,並且透過式(4-3)將原式(4-2)計算 RS(255, 239)


徵狀值的硬體改成圖 4-6,相比之下每一個徵狀值計算額外多出兩個乘法器,共多出
16*2=32 個乘法器,但計算速度卻比原先需要 255 個運算週期減少到 85 個運算週期,
且僅需要花費原先的 1/3 計算週期,即可將徵狀值 S1~ S2t 完成計算,圖 4-7 為平行化
之電路模擬時序圖。

load

8
0

1 0 load
8

0 8
8
D 1

圖 4-6、平行化徵狀值計算器架構

85 clock 85 clock 85 clock 85 clock

圖 4-7、平行化之電路模擬時序圖

34
4.4 行列式值計算器
如前章節所述,改良型步階式演算法必須先計算所有的行列式值,再傳送至下一
個模組做儲存。文獻[2]使用先前所提過的新型步階式演算法,但在計算行列式的電路
的設計上,卻只利用最基本的乘法器與加法器構成,以達到行列式的乘加運算,此種
計算及設計方式,僅適用於低維數的矩陣行列式計算,隨著矩陣維度的增加,單純的
乘加運算在計算上面會過於複雜,並且在硬體實作上,會因使用大量乘法器而增加晶
片面積,這就是步階式 RS 演算法沒有受到太多關注的主要原因。
針對行列式計算,我們採用高斯消去演算法 (Gaussian Elimination Algorithm),比
起眾多計算行列式值的方式,此方法能有效減少硬體複雜度的一種計算方式,其方式
是將矩陣透過乘法與加法化簡成三角矩陣,並利用對角線上的軸元值(Pivot Value),逐
步累乘來計算出所需之行列式值,因此在硬體設計上需要加一個乘法器以及暫存器,
圖 4-8 為行列式計算器的基本架構圖。

Syndrome axis
Gaussian Elimination

MUX
D

圖 4-8、行列式計算器基本架構圖

接下來將分別簡單介紹高斯消去法以及一維心臟式陣列架構與二維心臟式陣列架
構之高斯消去演算法的運算方式及其優缺點。

4.4.1 高斯消去演算法
高斯消去法為線性代數中常見的計算,其主要目的是藉由消去過程使矩陣化簡,
進而求得線性方程組所有的解。若將線性方程組的係數視為一個矩陣,假設有一大小
為 i  j 的矩陣,其具有下列三種運算性質:

1. 放大縮小:將第 i 列同乘 k 且 k≠0 (k 屬任意實數)。


2. 取代:將縮放後的第 i 列 值加進第 j 列。
3. 交換:將第 i 列和第 j 列交換位置。

上述三種運算稱之為基本列運算(Elementary Row Operation),高斯消去法即是透


過列運算依序執行一連串的高斯消去法,直到原始矩陣被簡化為三角矩陣(Triangular
Matrix),而行列式值的求法,便只需要將三角矩陣之對角線元素,也就是軸元值(Pivot
Value)累乘後即可得之。三角矩陣擁有以下之特性:

1. 軸元值:指該列由左至右最先出現的非零元素。
2. 三角矩陣的零列通常置於矩陣最底下。
3. 每個軸元會形成一對角線。

35
圖 4-9 是利用高斯消去法後所得到之三角矩陣,倒三角形表示的一個不為零的軸元
值,而右上方的部分則可為任意值。

     
0    
 
0 0   
 
 0 0 0   
 0 0 0 0  
圖 4-9、三角矩陣矩陣示意圖
透過將三角矩陣中對角線上的值累乘,即可求出所需之行列式值,因此在一個大
小為 i  j 的矩陣中,下一次的高斯消去便從第(i + 1)行第(j + 1)列中,由新求出的軸元
值開始做運算。而利用列運算逐步地一行一行化簡為三角矩陣的過程,便稱為部分軸
元化 (Partial Pivoting)。

4.4.2 高斯消去法之心跳式架構介紹
為了實現高斯消去演算法,在步階式中我們參考許多文獻[6][7],皆以[7]所提出的
心跳式架構(Systolic Array Architecture)為參考依據,而此兩篇文獻所用模組為圖 4-10
的軸元模組及圖 4-11 的列運算模組。

ain
init OPout

Dout
axis

圖 4-10、軸元模組[7]

init ain
OPin OPout

Din Dout
aout

圖 4-11、列運算模組[7]

36
1. 軸元模組(Pivot Module):當控制信號 init = 1 的時候,先將第一個載入的 ain 當做
軸元值輸出並儲存,接著確認下一個載入的 ain 的大小,來判斷整列元素是否該交
換、不變或是取代。當 init = 0 時,將訊號 OPout 傳遞給列運算模組,而在每一個
計算時,需將縮放值 Dout 的大小傳遞給列運算模組。

2. 列運算模組(Row Operation Module):當控制信號 init = 1 的時候,先將第一個載


入的 ain 儲存起來,再由軸元模組傳遞過來的訊號 OPin 去決定是否該「交換」 、
「不
變」或是「取代」。當 init = 0 的時候,利用軸元模組所傳遞過來的 Din 與儲存起
來的 ain 做相乘的動作,達到縮放的目的,等待下一個載入的 ain,在將其相加得
到 aout。

圖 4-12 與圖 4-13 分別為軸元模組以及列運算模組之運算流程圖。

Input data

Yes axis = ain


init = 1? (store ain)
No

Opout = perm (x,0) (0,0) OPout = id


(exchange rows) (ain, axis) (still looking for a pivot)

(x,x) (0,x)

Opout = add Opout = id


(XOR operation) (element already zero)

Dout = ain  axis-1

End

圖 4-12、軸元模組之運算流程圖

37
Input data

Yes rowreg = ain


init = 1? (store ain)
No

multi_row = rowreg  Din

aout = rowreg perm id aout = rowreg


rowreg = ain OPin = ? (still looking for a pivot)
(exchange rows) or (element already zero)

add

aout = rowreg + multi_row


(XOR operation)

OPout = OPin
Dout = Din

End

圖 4-13、列運算模組之運算流程圖

4.4.3 一維心跳式陣列

在文獻[6]的架構中,為使用一維心跳式陣列去實現高斯消去法,其電路主要由一
個軸元模組與八個列運算模組所組成,經由軸元模組計算後所求之數值,透過移位暫
存器先儲存起來,當第一個軸元模組計算完畢後,再將先前所儲存的值,依序載入至
下一個列模組。此方式的優勢為,在晶片面積上可以大大減少乘法器與加法器的使用,
其缺點為所需運算得週期較長。如圖 4-14 所示為高斯消去之一維心跳式陣列電路。

8 8 mode
8 8 8 8


1

0
1

init

r1 S1 S2 … S6 S7 S8
rowout

64




axis

圖 4-14、高斯消去之一維心跳式陣列電路

38
依據上述所提之基本列運算性質,下列將對於兩個主要使用的模組作為介紹:
1. 軸元模組:如圖 4-10 中的圓形模組,首先將第一個非零元素當作軸元作輸出並儲
存起來,接著利用下一個載入的元素,若載入的元素為非零元素,則將整列的元
素做縮放後並且取代;若載入的元素為零則不變,此判斷結果也在下一週期一併
傳遞給下一個列運算模組。
2. 列運算模組:如圖 4-11 中的方型模組,大致上與軸元模組相同,載入的第一個元
素並且儲存起來,接著根據軸元模組所傳送過來的信號,來決定要做何種動作,
包括與第一列的元素做相加取代、交換以及不變的動作。

4.4.3.1 一維行列式值計算器
一維高斯消去電路與二維高斯消去電路相比,雖然在硬體方面會節省許多,但換
來的確是在運算週期上需要較多的時間。當利用一維高斯消去電路去計算一個 t  t 的
行列式值時,需要計算 t + (t – 1)+ …+ 1 的運算時間。若錯誤數目 v = 8 時,步階式演
算法在計算 det(Nv+1)時,需要計算 9  9 的矩陣行列式值,因此對於一個 9  9 矩陣的
高斯消去法的運算週期為 44 個 clock cycle,圖 4-15 是一維高斯消去電路 99 矩陣的
模擬時序圖。
44 clock



圖 4-15、99 矩陣之高斯消去電路時序模擬圖

由改良型演算法可知,必須先計算所有需要的行列式值:det(Nv)、det(Nv+1)、det(Nvxx)
及 det(Nv+1xx) (x = 1, 2, 3, …, v+1),而其中行列式值 det(Nv)等於 det(Nv+199),隨著高斯
消去的進行,共需計算出 9 個行列式值,除了一開始 det(Nv+1)為 9  9 且需 44 個時脈
週期之外,其餘均為 35 個時脈週期。
根據前述的一維高斯消去法電路,每求出一個新的軸元值,都必須透過累乘軸元
值的動作,以求得行列式值,這代表會隨矩陣大小而增加。舉例來說,當第 1 個軸元
值被求出時,代表的是 11 的矩陣行列式值,隨著高斯消去的進行,第 2 個軸元值也
被求出,並與第一個軸元值做相乘,此時便可求出 22 矩陣的行列式值。接著依此類

39
推,直到求出 vv 矩陣之行列式值為止,因此在行列式計算器上運作的所需的時間為
44 + 35  8 = 324 個時脈週期。
RS 的解碼時間是由接收端接收資料後,並輸入至徵狀值電路的時間開始計算,直
到第一個符元的位元值被輸出為止,而為了使資料連續進行不中斷的處理,一般在設
計上會選擇採取管線化的進行方式,管線化能當 RS 解碼在第二階段的行列式值計算
處理第一階段的第一筆資料時,同時將第二筆資料輸入至徵狀值計算器,等到第三筆
資料輸入時,此時第一筆資料已經在第三階段的電路中作錯誤更正的動作,並從第一
個符元的位元值開始逐步輸出,此時第二階段的電路就能對第二筆資料進行運算。圖
4-16 為管線化之 RS 解碼器的三個階段分配圖,Stage1 的部分是徵狀值電路,負責計
算徵狀值,在 Stage2 的部分在其他文獻中是用來解關鍵方程式的代數解碼法,而在此
則是步階式解碼演算法用以計算行列式值的電路,最後的 Stage3 則為錯誤更正電路。

圖 4-16、RS 解碼之 3 階段分配圖

如圖 4-16 所示,一筆資料從輸入到解碼後輸出的運算時間,最多是兩筆資料的時
間,即是 2n。因此在設計 RS 解碼器時,會在兩個筆資料的時間內,將所需計算之值
全部算出。而對於徵狀值來說,必須計算週期剛好為 n,固定在一個資料的時間內。
因此後續的行列式計算器與錯誤更正的運作時間,必須在一筆資料的計算週期內計算
完畢。但是由前述可知,改良型步階式演算法計算行列式值的運算時間為 324 個運算
週期,遠遠超過一筆資料的時間 n = 255。
為了改善這個情況,文獻[6]提出如何將運算週期由 324 下降到 255 運算週期內。
以計算 det(Nv66)為例,如圖 4-17 所示,若只以左上角著色區域中 55 的矩陣執行高斯
消去法,所求出的軸元 a11 ~ a55 都是相同的,此等同於事先計算好 det(N5),而從右下
角區域的部分開始,可看出計算 det(Nv)與 det(Nv66)有個很大的不同。計算 det(Nv)時,
是從 a66 開始做高斯消去運算,以便求得接下來的軸元值,也就是說 a77 與 a88 這兩個
軸元值的值須經由 a66 的值來求得;而計算 det(Nv66)時,卻因為第 6 行第 6 列已經被刪
除,使得計算 det(Nv66)須從 a77 再開始做高斯消去運算,才能求得正確的行列式值,但
此時的 a77 可經由 a55 的高斯消去所求得。

40
det N v   
det N v
66

a11 a21 a31 a41 a51 a61 a71 a81


0 a22 a32 a42 a52 a62 a72 a82 a11 a21 a31 a41 a51 a71 a81
0 0 a33 a43 a53 a63 a73 a83 0 a22 a32 a42 a52 a72 a82
0 0 0 a44 a54 a64 a74 a84 0 0 a33 a43 a53 a73 a83
0 0 0 0 a55 a65 a75 a85 0 0 0 a44 a54 a74 a84
0 0 0 0 0 a66 a76 a86 0 0 0 0 a55 a75 a85
0 0 0 0 0 a67 a77 a87 0 0 0 0 0 a77 a87
0 0 0 0 0 a68 a78 a88 0 0 0 0 0 a78 a88

Store Data

圖 4-17、兩種行列式值之計算示意圖

為了節省運算時間及不必要的重複計算,在計算初始行列式值 det(Nv)時,可先將
左上角著色區域中的位元值及累乘的軸元值,利用暫存器先儲存起來,等到必須計算
det(Nvxx)時,再將之前所儲存的數值讀回,接著讓高斯消去電路及軸元值累乘電路繼續
執行,以求得所需的行列式值。
此方式利用高斯消去運算至第 5 行第 5 列時,扣除刪除掉的第 6 行第 6 列元素,
共有 33 的矩陣資料需要儲存,故僅增加 9 個暫存器的儲存空間,便可省去計算左上
角區域的時間,考慮到計算 det(Nv+166)最大需要 v  v 的矩陣計算,此舉將節省 8 + 7 +
6 + 5 = 26 時脈週期的運算時間,但需要暫存器來儲存資料。而計算 det(Nv+1xx) (8≧x
≧6)時,共需儲存 9 + 4 + 1 = 14 個符元的位元值,卻節省 26 + (8 + 7 + 6 + 5 + 4) + (8 +
7 + 6 + 5 + 4 + 3) = 89 個時脈週期。由此方式能將原先一維的高斯消去法運算時間由
324 個時脈週期降至 324-89=235 個時脈週期,即符合在 RS(255, 239)的一筆資料的時
間內完成運算,圖 4-18 為具有儲存矩陣資料功能之行列式值計算器。

圖 4-18、有儲存矩陣資料功能之行列式值計算器[6]

41
4.4.4 二維心跳式陣列
根據上述改良後的一維心跳式行列式運算週期,仍無法達到本論文硬體設計所需
的 255/3 = 85 時脈週期。因此我們選擇文獻[7]所提出的二維心跳式陣列架構,對於每
一行的列運算,都由一個軸元模組以及數個列運算模組獨立做計算,隨著運算次數的
增加,列運算模組也會隨著遞減,因此形成一個三角形的二維式心跳式陣列架構,如
圖 4-19 所示。

圖 4-19、高斯消去之二維心跳式陣列電路(n=4)

依據上述所提之基本列運算性質,下列將對於兩個主要使用的模組作為介紹:
1. 軸元模組:如圖 4-10 中的圓形模組。首先將第一個非零元素當作軸元作輸出
並儲存起來,接著利用下一個載入的元素。若載入的元素為非零元素,則將
整列的元素做縮放後並且取代;若載入的元素為零,則不變,而此判斷結果
也在下一週期一併傳遞給下一個列運算模組。
2. 列運算模組:如圖 4-11 中的方型模組。大致上與軸元模組相同,載入的第一
個元素並且儲存起來,接著根據軸元模組所傳送過來的信號,來決定要做何
種動作,包括與第一列的元素做相加取代、交換以及不變的動作。

4.4.4.1 二維行列式值計算器
在二維運算上與一維相同,需先將第一個非零的值做為第一個軸元值,透過將每
一個輸入的值,利用軸元模組去判別是否要換位與縮放大小,當列運算模組接收到下
一筆輸入值以及軸元值模組傳送之訊號,去判別此列的值是否要換位或是縮放。
根據圖 4-19 可知,當二維行列式為 99 時,載入資料僅僅需要 9 + 8 = 17 個時脈
週期即可,因此我們配合 4.3.2 章的三平行輸入,我們需要兩組二維高斯行列式計算
42
器,第一組計算 det(Nvxx) (x=0, 1, 2, 3, 4),第二組則是計算 det(Nv+1)與 det(Nvxx) (x = 5, 6,
7, 8),透過這一組計算器,可將圖 4-16 的第二階段的計算時間,能與第一階段的三平
行徵狀值計算器,剛好達到我們所需的 85 clock,以完成所需的行列式值計算,圖 4-20
為二維高斯消去之軸元值的電路模擬圖,透過讀取、縮放、相加的三個運算時間後,
即可計算出圖中框內所標示各 det(Nvxx)的軸元值。

圖 4-20、二維高斯消去之軸元值的電路模擬圖

由上描述可得,二維心跳式架構對於速度提升方面,相較於一維心跳式架構較有
優勢,為了使行列式值的計算達到我們所需的運算速度,在此我們選擇使用二維心跳
式硬體架構來設計。但對於 RS 解碼器來說,二維的硬體架構在晶片面積以及功率消
耗上來說都是一個負擔。表 4-2 為兩種式架構的比較表。

表 4-2、高斯消去電路之心跳式架構比較表

高斯消去法架構比較(t×t)

Architecture Multipliers Inverse(divider) Adders(XOR) Clock cycle

2-D systolic (t-1)+…+1 t-1 (t-1)+(t-2)+…+1 t+(t-1)

1-D systolic t 1 t t+(t-1)+…+1

4.5 錯誤數目偵測電路
根據步階式演算法,在計算行列式 det(Nvxx) 及 det(Nv+1xx) 之前,必須先計算
det(Nv),再根據 det(Nv)是否為零來決定錯誤數目 v,此後便能根據 v 值來計算 det(Nvxx)
及 det(Nv+1xx)。由於 det(Nvxx)及 det(Nv+1xx)的計算會隨著 x 值而變化,而在此所設計的二
維行列式值計算器,將透過判斷錯誤數目 v 後,藉由控制電路去決定 det(Nvxx)及

43
det(Nv+1xx)的值,在上述計算軸元值時,可利用高斯消去的性質,即可透過軸元值是否
為零來判斷錯誤數目 v。
基於高斯消去法的性質,我們將錯誤數目計算電路與上述高斯消去法電路做結
合。例如當找到第五個軸元值為零時,代表錯誤數目為四個,並且將此錯誤數目儲存
起來,以便後續的 det(Nvxx)及 det(Nv+1xx)的值,能由控制電路決定,偵錯電路如圖 4-21,
圖 4-22 為偵測錯誤數目之電路模擬圖,讀取前一個二維高斯消去模組所求之軸元值,
並依序累乘,所求的值為行列式 det(Nv),透過此行列式便決定錯誤數目。

init Error Number Detector

2-D Systolic Array


axis Zero

MUX
Syndrome checker
for Gauss Elimination 0

圖 4-21、錯誤數目偵測電路

錯誤數目

行列式值

圖 4-22、錯誤數目 v 與行列式值 det(Nvxx)之計算電路模擬圖

4.6 累乘與加總電路
根據式(3-45)可知,當計算出 det(Nvxx)及 det(Nv+1xx)後,在變數 x 固定的情形下,
隨著 j 值的變化,將 det(Nvxx)及 det(Nv+1xx)與 α(2x-1)j 逐步做累乘,便可算出 Hv, j 及 Hv+1,
j 的值,並藉由此結果來針對每一個符元做判斷。

但從式(4-2)可看出在計算徵狀值時,須從 rn-1 時開始接收序列並做計算,因此 α(2x-1)j


中變數 j,須從 rn-j 開始倒數至 rn-1,解碼的序列才會對應到。在設計的 RS(255, 239)
解碼器中,有限場 GF(28)共有 255 個元素,因此只需將累乘的 α(2x-1)j 轉成為 α(2x-1)j 反
元素,也就是 1/α(2x-1)j,即可從第 255 個符元位置開始做解碼。圖 4-23 為有限場元素
間的關係示意圖,由箭頭方向往右的為累乘 α(2x-1)j,反之往左的為累乘 α(2x-1)j 的反元素

44
1/α(2x-1)j。因此從圖 4-23 便可知道如何運用有限場元素的循環特性,將序列重新排序,
進而設計累乘與加總電路。

圖 4-23、有限場元素間的關係

當三個平行計算時,j 從原先的 1 至 255 變成 1 至 85,在表 4-3 中,Ch1、2、3


分別表示三個輸入,而方框內的值代表式(3-45)在不同位置 j 時,所需乘上的初始常
數,透過分解後,後續只需乘上固定常數即可求出式(3-45)。
表 4-3、三平行累乘分解表

det(Nv11) det(Nv22) …

Ch1 , 4, 7, … 3, 12, 21, … …

Ch2 2, 5, 8, … 6, 15, 24, … …

Ch3 3, 6, 9, … 9, 18, 27, … …

 3  9
根據不同的 det(Nvxx)值與 j 值,所需隨著相乘的 α(2x-1)j 也不同,因此我們一開始與
框框內的值相乘,後再累乘上固定的常數值,即可得到我們所需的值,而以上相乘的
動作都可利用常數-變數乘法器達成。
圖 4-24 為本論文中所設計之累乘與加總電路,以 j = 2 為例,在 msel = 0 將 det(Nvxx)
與表 4-3 的框框內相乘後的值載入,並在 msel = 1 時進行累乘固定的常數值的動作。

圖 4-24、累乘與加總電路(j=2)
45
為了讓 Hv+1, j 能夠與 Hv, j 在同一個時脈周期內同時做計算,因此累乘與加總電路
使用一組來做實現,如圖 4-25,而此電路模擬結果,如圖 4-26 所示。

det(Nvxx)
Accumulation Hv, j
v & Summation Circuit
(for Hv, j)

Accumulation Hv+1, j
& Summation Circuit
det(Nv+1xx) (for Hv+1, j)

圖 4-25、累乘與加總電路方塊圖

det( N vxx )

 ( 2 x 1)  det( N vxx )

 ( 2 x 1) j  det( N vxx )


圖 4-26、累乘與加總電路模擬圖
46
圖 4-26 方框內依序表示,先接收到行列式值計算器計算過後的行列式值,接著乘
上表 4-3 所需的初始值,後續只需乘上固定之常數,即可求出位置 j 所對應的 α(2x-1)j,
最後將乘上常數 α(2x-1)j 的行列式值累加,即可得到式(3-45)。

4.7 錯誤更正電路與先進先出暫存器
RS 解碼最後一個步驟即為更正錯誤,主要功能是將先前計算完畢的 Hv, 、 j Hv+1, j 及

初始行列式值載入,最後依照式(3-47)求出每個位置的符元所對應之錯誤值 β,整個架
構如圖 4-27,其中除法器在本論文採用反元素計算器將 Hv, j 轉換成反元素,再經過乘
法器與 det(Nv)相乘,以達成除法的效果。
算出錯誤值 β 後,需利用與 Hv+1, j 相乘,並判斷錯誤數目是否為最大 8,為了檢測
該符元是否出現第 t+1 個錯誤,需利用 det[N v1 ( , j )] 是否為零來判別 β 是否為我們所求
的錯誤值,來做驗證的動作。儘管如此,不論錯誤數目 v 為多少,都須計算 Hv+1, j,並
在最後判斷 Error_check 訊號來決定是否用更正錯誤值 β;若接收到的 Error_check = 0,
則代表無需更正並將 β 設為零值。
det(Nt+10)
V=8?
D
D
D m Error Check
u
Hv+1, j D D x

0 m Error Value
β u
det(Nv0) D x

Hv, j ROM

圖 4-27、錯誤更正電路架構圖

在此三個平行化的 RS(255, 239)解碼中,解出一個字碼約為 85 個時脈週期,而以


管線化傳輸的要求下,需要一個移位暫存器來推動輸入資料,使得原資料延遲 170 個
時脈週期,為了節省 gate count 數量及節省功率消耗,我們三個輸入各使用兩個記憶
體編譯產生器所生成的 8  85 暫存器檔案庫(Register File),來輪流傳送接收資料,以
仿真移位暫存器的功能,如圖 4-28 所示。

47
85 Byte
Register File

Input Ch1
8 Memory
Controller
m
8
85 Byte u Output Ch1
Register File x

Input Ch1 8 8 Output Ch1


FIFO 1

Input Ch2 8 8 Output Ch2


FIFO 2

Input Ch3
8 8 Output Ch3
FIFO 3

圖 4-28、RS 解碼器所使用之先進先出記憶體模組

4.8 電路設計與模擬
完整介紹整體的硬體架構後,本論文利用 MATLAB 來模擬整個改良型步階式演算
法,以熟悉此演算法的運算,並產生出所需測試數據。為了有效驗證 RS 解碼器的解碼能
力,我們將測試數據編碼後,隨機加入錯誤雜訊,使接收到的資料具有亂數錯誤,隨後直
接將資料送給解碼器電路;另一方面,原本正確的測試數據則直接經過編碼,產生另外一
個測試數據,在實際模擬時,便可利用正確的資料與帶有錯誤的資料做為解碼後的對照,
便可以快速比對及測試電路的功能。以圖 4-29 為例,第一個錯誤值在 Ch3 被偵測出,其
錯誤值為 8,接著對應到錯誤訊息的位置,得知原先的位置加上雜訊後變成 63,因此將經
雜訊後的訊息 63 加上對應錯誤值 8,即可得到正確訊息 55,接著第二個錯誤值在 Ch2 被
偵測出,其錯誤值為 16,接著得知原先位置上經雜訊後變成 194,因此我們將錯誤訊息
194 加上錯誤值 16,即可得到正確訊息 210。以此類推,直到找出最大可更正數目的錯誤。

48
錯誤訊息 更正後的訊息

錯誤值





圖 4-29、平行化之 RS(255, 239)解碼器模擬圖

電路合成上,我們使用 Synopsys 公司所提供之 Design Compiler,並利用 90nm 製


程,測出最快操作速率為 286MHz,整體晶片功率約消耗 297mW,表 4-4 則為此平行
化之 RS(255, 239)之詳細數據。

表 4-4、平行化之 RS(255, 239)效能數據

Parallel Reed-Solomon decoder

Technology 90 nm

Supply Voltage 1.0 V

Gate Count 131 K

Clock Rate 286 MHz

Throughput 6.8 Gb/s

Power 297 mW

49
表 4-5、RS 解碼器之使用硬體資源比較表

Proposed
Design Two-mode[6] Three-parallel[20]
three-parallel
Technology 90 nm 0.18 μm 0.16 μm

Supply Voltage 1.0 V 1.8 V 1.5 V


Gate Count 131 K 32.5 K 26.5 K
Clock Rate 286 MHz 166 MHz 112 MHz
Throughput 6.8 Gb/s 1.3 Gb/s 2.6 Gb/s
Power 297 mW 57 mW 360 mW
TSNT 35 Mb/s/K gate 55 Mb/s/K gate 120 Mb/s/K gate

由表 4-5 可知,與一維心跳式陣列的步階式[6]相比,平行化步階式的設計以及在
核心速度上有著大幅的提升,使得吞吐量也有著明顯增加。在計算行列式時,我們使
用二維心跳式陣列架構而導致硬體需求較大。與同樣為三平行化的[20]相比,步階式
有著不必利用分時多工去做設計的優點,在速度上也有著優勢。最後,因製程技術的
不同,我們以正規化的方式為標準,與使用不同的製程技術的設計去做比較,利用[23]
所提出的正規化公式,如式(4-4)所示。注意此正規化公式中,已考量平行度因素,但
由於吞吐量及邏輯閘數是隨平行度倍數增加,且這兩個參數分別置於式(4-4)的分子與
分母,故最後會相互抵消。此外,在正規化前本論文所設計的吞吐量明顯較其他架構
大許多,但依據式(4-4),邏輯閘數目的多寡,大幅影響正規化吞吐量。圖 4-30 為本
論文硬體架構所需的邏輯閘分布圖,由圖觀察,邏輯閘的數目主要分布於行列式計算
器,因此後續對於降低行列式計算器的硬體使用量有著改善的空間。

(throughput rate)  (tech / 0.13m)


Technology-scaled normalized throughput (TSNT) = (4-4)
# of total gates

徵狀值計算器
10% 3% 行列式計算器
8% 累乘與加總電路
錯誤值檢測器

79%

圖 4-30、邏輯閘分布圖

50
第5章 結論與未來發展

本篇論文的目的主要是希望利用改良步階式里德所羅門解碼器上,不必用疊代的
方式去求出錯誤位置多項式,以此優勢來設計平行化架構。在一開始我們對於改良型
步階式演算法,及其他文獻中所提及之步階式演算法做過比較與討論,證明本論文所
採用之演算法,確實能降低原本步階式解碼在硬體上的複雜度。
在討論硬體架構時,我們決定使用三平行化做為設計,因此徵狀值的運算時間由
原始的 255 個 clock 降低至 85 個 clock,接著分別討論一維心跳式陣列架構與二維心
跳式陣列架構應用在高斯消去法上的優缺點,後續選擇以硬體為代價,使運算時間壓
縮在 85 個 clock 的二維心跳式陣列做為計算各軸元值的架構,最後利用計算出來的軸
元值,以累乘方式計算出所需之各行列式值,計算出行列式值後,將 Hv, j 分解成適用
於三平行的方式,接著利用累乘與加總求得,再以 Hv, j 與一開始所得之 det(N v ) 相除,
求得所需更正的錯誤值。
在硬體合成與各種解碼器硬體比較後,可以發現與一維心跳式步階式相比,平行
化步階式速度上有著明顯得提升。而在正規化的公式中,以邏輯閘為分母,使得此設
計的平行化架構在正規化時,所使用的硬體較多,以致於平行化改良型步階式的吞吐
量有所減低。因此,在後續的改良上,必須針對硬體部分進一步研究如何降低元件的
使用量及簡化控制電路,使此晶片本身更具競爭力。

51
參考文獻
[1] J. L. Massey, “Step-by-step decoding of the Bose-Chaudhuri-Hocquenghem codes,”
IEEE Transactions on Information Theory, vol. 11, no. 4, pp. 580–585, Apr. 1965.
[2] T. C. Chen, C. H. Wei, and S. W. Wei, “Step-by-step decoding algorithm for
Reed–Solomon codes,” in Proc. IEEE Communication, vol. 147, no. 1, pp. 8–12, Jun.
2000.
[3] T. C. Chen, C. H. Wei, and S. W. Wei, “A pipeline structure for high-speed step-by-step
RS decoding,” IEEE Transactions on Communication, vol. E86-B, no. 2, pp. 847–849,
Feb. 2003.
[4] 蔡坤龍,「步階式里德所羅門碼解碼器硬體實作」,國立暨南國際大學電機工程學
系碩士論文,2003。
[5] X. Liu, C. Lu, T. H. Cheng, and S. N Koh, “A simplified step-by-step decoding
algorithm for parallel decoding of Reed–Solomon codes,” IEEE Transactions on
Communication, vol. 55, no. 6, pp. 1103–1109, Jun. 2007.
[6] C. Yu and Y. S. Su, “Two-mode Reed-Solomon decoder using a simplified step-by-step
algorithm,” IEEE Transactions on Circuits and Systems, vol. 62, no. 11, pp. 1093–1097,
Nov. 2015.
[7] B. Hochet, P. Quinton, and Y. Robert, “Systolic Gaussian elimination over GF(p) with
partial pivoting,’’ IEEE Transactions on Computer, vol. 38, pp. 1321–1324, Sep. 1989.
[8] 涂佳杏, 「有限場 GF(2n)常數矩陣乘法運算之電路合成器」 ,國立中山大學資訊工
程學系碩士論文,2004。
[9] 謝瑋霖,「適用於數位電視之里德所羅門編解碼硬體實作」,國立中央大學通訊工
程研究所碩士論文,2005
[10] U. S. Ghodeswar, Pranali D. Surkar, and G. G. Sarate, “Three-parallel syndrome
computation block for RS decoder,” International Conference on Green Computing
Communication and Electrical Engineering, Mar. 2014 , pp.1–4.
[11] 林詩倩,「里德所羅門碼之運算分析」,國立交通大學電信工程研究所碩士論文,
2012。
[12] C.-S. Choi and H. Lee, “High-speed low-complexity three-parallel Reed-Solomon
decoder for 6-Gbps mm wave WPAN systems,” European Conference on Circuit
Theory and Design, Oct. 2009, pp. 515–518.
[13] J. D. Lee and M. H. Sunwoo, “Four channel three-parallel Reed-Solomon decoder
using S-DCME algorithm for optical communications,” IEEE workshop on Signal
Processing System, Nov. 2010, pp. 380–385.
[14] W. Ji, W. Zheng, X. Peng, and Z. Liang, “16-Channel two-parallel Reed-Solomon
based forward error correction architecture for optical communications,” IEEE
International Conference on Digital Signal Processing, Sep. 2015, pp. 239–243.
[15] Y. Lee, H. Yoo, and I.-C. Park, “Small-area parallel syndrome calculation for strong
52
BCH decoding,” IEEE international Conference on Acoustics, Speech and Signal
Processing, Aug. 2012, pp. 1609–1612.
[16] H. Lee, “A VLSI Design of a High-Speed Reed Solomon Decoder,” International
ASIC/ SOC Conference, Sep. 2001, pp. 316–320.
[17] S. W. Wei and C. H. Wei, “High-speed decoder of Reed-Solomon codes,” IEEE
Transactions on Communications, vol. 41, no. 11, pp.1588–1593, Nov. 1993.
[18] Y. K. Lu and M. D. Shieh, “Efficient architecture for Reed-Solomon decoder,” VLSI
Design, Automation, and Test, Apr. 2012, pp. 1–4.
[19] K. Namba and F. Lombardi, “A single and adjacent symbol error-correcting parallel
decoder for Reed-Solomon codes,” IEEE Transactions on Device and Material
Reliability, vol. 15, no. 1, pp.75–81, Dec. 2015.
[20] L. Song, M-L. Yu, and M. S. Shaffer, “10 and 40-Gb/s forward error correction devices
for optical communications,” IEEE Journal of Solid-State Circuits, vol. 37, no. 11, pp.
1565–1573, Nov. 2002.
[21] H. H. Lee, “High-speed VLSI architecture for parallel Reed-Solomon decoder,” IEEE
Transactions on Very Large Scale Integration Systems, vol. 11, no. 2, pp. 288–294, Apr.
2003.
[22] S. Lee, C-S. Choi, and Hanho Lee, “Two-parallel Reed-Solomon based FEC
architecture for optical communications,” IEICE Electronics Express, vol. 5, no. 10,
May. 2008, pp. 374–380.
[23] Z. Liang, W. Zhang, and Y. Liu, “Area-efficient Reed-Solomon decoder using recursive
Berlekamp-Massey architecture for optical communication systems,” IEEE
Transactions on circuit and system, vol. 56, no.6 , pp. 469–473, Jun. 2009.

53

You might also like