設計仕様書 99/10/1版

琉球大学工学部情報工学科 和田 知久


[0] はじめに

今回、RAID (Redundant Array of Inexpensive Disks)で用いられる、データのエンコーダーおよびデコーダを設計する。このエンコーダ/デコーダではリードソロモンという聞きなれない符号化を用いて、データよりチエックサムという冗長データを生成し、これによりデータおよびチエックサムの一部のデータが失われても元のデータをデコーダにて復元することができる。

リードソロモン符号はコンパクトディスクやデジタル通信でのエラー訂正に用いられている符号であり、数学的には、カロア体演算を取り扱うが、そのような符号理論や数学の知識なしに設計できるように以下の仕様書は工夫されている。聞きなれない言葉も多いが、設計すべき内容は比較的単純であるので、自信をもって課題に取り組んでいただきたい。


[1] RS-RAIDシステムオーバービュー

今回は、Prof. James S. Plank氏の"A Tutorial on Reed-Solomon Coding for Fault-Tolerance in RAID-like System" に述べられているRAID (Redundant Array of Inexpensive Disks)で用いられるReed Solomon CODECのエンジンであるガロア体での行列乗算器をHDLを用いて設計する。RAIDとは文字どうり低価格なハードディスクを冗長に装備し、データを分散して記憶することで、一部のハードディスクに故障が生じてもシステムの正常動作を保証するものである。

RAIDシステムの概要を図1に示す。D1, D2, D3はデータであり、それぞれデータデバイスに記憶される。ENCODERはチェックサムC1, C2, C3を生成し、チェックサムデバイスに記憶される。図1ではD2, D3, C3を記憶するディスクが故障した場合であり、D1, C1, C2より元データであるD1, D2, D3を再生成する。

図1.RAIDシステム


[2] ENCODERとDECODER

ENCODERとDECODRはどちらも、下記(1), (2)式の行列演算を行う。したがって、同一のハードウエアで構成できる。式(1)の行列は規則的に自然数の指数乗の要素からなる行列であり、Vandermonde行列と呼ばれるものである。また、ここでの数学はカロア体での計算を行う必要がある。例として右下の行列要素3の2乗が9ではなく5になっていることに注目してほしい。

式(2)の行列は[d1, c1, c2]から[d1, d2, d3]の再生行列であり、この求め方は上記英語論文(PDF, 2MB)、およびその和訳に別途示す。

図2.基本式


[3] ガロア体演算

ガロア体は有限な数の要素からなる集合であり、各要素間の四則演算の結果も要素の一つとなる。2のw乗要素ガロア体はと示され、1から(2のw乗-1)までの整数要素から構成される。

3*7 = gfilog[gflog[3]+gflog[7]]=gfilog[4+10]=gfilog[14]= 9
13*10 = gfilog[gflog[13]+gflog[10]]=gfilog[13+9]=gfilog[7]= 11
13/10 = gfilog[gflog[13]-gflog[10]]=gfilog[13-9]=gfilog[4]= 3
3/7 = gfilog[gflog[3]-gflog[7]]=gfilog[4-10]=gfilog[9]= 14

i 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
gflog[i] - 0 1 4 2 8 5 10 3 14 9 7 6 13 11 12
gfilog[i] 1 2 4 8 3 6 12 11 5 10 7 14 15 13 9 -

テーブル1.Logarithm テーブル (w=4)

 

上記英語論文のFigure3、Figure4にCコードでの実現方法が示されており、参考になる。特に0の取り扱いは例外であり注意を要する。


[4] 外部仕様

W=4に対応するガロア体の行列乗算器を設計する。図3にシンボルを示す。この乗算器をENCODERにもDECODERにも共用するために、各行列要素はアドレス信号(ADD)に指定された要素に係数(ELE)を書き込む。この書き込みはクロック信号(CLK)の立ち上がりエッジで書き込みコントロール信号(WE)をアサートすることで行われる。各要素とアドレスの関係は図4に示す。

その後、3入力(それぞれ4ビット)IN1, IN2, IN3を与え、GETのアサートされたクロック信号の立ち上がりで3入力がガロア行列乗算器に取り込まれで演算が開始される。

演算は任意のサイクル数で行う(設計者の設計の自由とする)。一般的には、1サイクルで実行する場合素子数が増加し、複数サイクルで実行すれば素子数を減らせるトレードオフがある。但し、出力信号OUT1, OUT2, OUT3を外部デバイスに取り込ませるために、1サイクル期間アサートされるDONE信号を出力信号確定時にアサートする。

図3.ガロア行列乗算器のシンボル

 

図4.ガロア行列乗算


[5] ピンアサイン

各ピンのビット幅/機能等をテーブル2に示す。

信号名 入出力 ビット幅 説明   信号名 入出力 ビット幅 説明
GET IN 1 Hで入力データを取込み計算開始   CLK IN 1 クロック信号
IN1 IN 4 入力データ1   RESET IN 1 Hでリセット
IN2 IN 4 入力データ2   DONE OUT 1 Hで出力データ確定
IN3 IN 4 入力データ3   OUT1 OUT 4 出力データ1
ADD IN 4 行列要素の位置を指定   OUT2 OUT 4 出力データ2
ELE IN 4 行列要素入力   OUT3 OUT 4 出力データ3
WE IN 1 Hで行列要素書き込み          

テーブル2.Logarithm テーブル (w=4)


[6] システム動作検証

図1に示すRS-RAIDシステムの動作検証のために以下図5のシステムモデルを用いて、検証を行う。

図5.システムモデル

図6.セットアップシーケンス

図7.動作シーケンス


[7] スピードの測定単位

琉球大学以外からの参加の場合、同一のシノプシスデザインコンパイラの論理合成用ライブラリを使用することが困難であるので、以下のような多段EXOR回路を例に従って合成し最適化して頂き、その1段あたりの遅延時間を単位時間としてスピードの単位とする。

多段EXOR回路のVHDLソース例:50入力のEXOR回路

合成語の回路図 PDF, PS

この例では6段のEXOR段が合成され、クリティカルパス遅延はreport_timingコマンドにより7.17であったので、7.17/6=1.195を単位(UNIT)とする。

ちなみに面積はreport_timingコマンドのtotal cell areaにある。


[8] レポート

レポートには以下の内容を含めること。また、ページ数を少なめにコンパクトにまとめること。

表紙 代表者の氏名、チーム名、大学院修士/大学学部生/高専生の区別
共同設計者(最高3名まで)全員の名前、学籍番号、学年、学校名、住所、電話、email等連絡先
全員のTシャツの希望サイズ
内容 設計した回路ブロックの構成説明(ブロック図と説明、特にガロア体乗算器の回路図や構成
設計した回路ブロックの動作説明(何サイクルで出力がでるか?など)
工夫した点、オリジナリティを出した点(アピールが重要!)
クリティカルパスのスピード、論理合成後の回路規模
VHDLもしくはVerilogのコード
正常動作しているVHDL/Verilogシミュレーション波形
その他自由意見など

紙でのコピー3部を下記へ送付のこと: 

和田 知久 (わだ ともひさ)
903-0213 沖縄県西原町字千原1番地 琉球大学 工学部 情報工学科
PHONE: 098-895-8713

締め切りは2000年2月18日(金)必着です。


[9] 審査のポイント

仕様書に従ってまじめに作るのも良いが、オモロイアイデアを歓迎します。他人と違ったことをしよう!

仕様の部分変更など、柔軟に受け付けます。

ENJOY HDL! 沖縄で会おう!