リード ソロモン (RS) 符号は、デジタル通信およびストレージの広範なアプリケーションにおけるブロック ベースのエラー訂正符号です。このブロックは、 AMBA® AXI4-Stream 規格に準拠しています。
デジタル ストレージ デバイス、ワイヤレスまたはモバイル通信、デジタル ビデオ放送など、多くのシステムでエラー訂正に使用されます。
Reed-Solomon Encoder は、データ ブロックに冗長シンボルを追加し、伝送中に発生したエラーを訂正できるようにします。エラーはさまざまな理由で発生します (ノイズ、干渉、CD の傷など)。Reed-Solomon Decoder は、エラーの訂正と元のデータの復元を試みます。訂正可能なエラーの数およびタイプは、符号の特性によって異なります。
次に、典型的なシステムを示します。
リード ソロモン符号は BCH (Bose-Chaudhuri-Hocquenghem) 符号であるため、線形ブロック符号でもあります。(n, k) 線形ブロック符号は、有限体上の n 次元ベクター空間の k 次元サブ空間です。フィールドの要素はシンボルと呼ばれます。リード ソロモン符号ドでは、n は通常 2S -1 です (s は各シンボルのビット幅)。符号を短縮すると、n は小さくなります。エンコーダーは、全長符号と短縮符号の両方を処理します。
エンコーダーは体系的であり、長さ n の符号ブロックは、長さ k の情報ブロックから n-k 個のパリティ シンボルを追加して構築されます。
リード ソロモン符号は、そのフィールドと生成多項式によって特徴付けられます。フィールド多項式はシンボル フィールドの構築に使用され、生成多項式はパリティ シンボルの算出に使用されます。エンコーダーでは、どちらの多項式にも設定できます。生成多項式の形式は次のとおりです。
g(x)=(x-αj)(x-αj+1...(x-αi+n-k-1)ここで、α
は n + 1 個の要素を持つ有限体の原始元です。
ブロック インターフェイスのチャネルおよびピン
ザイリンクス Reed-Solomon Decoder 8.0 ブロックは、AXI4 に準拠しています。インターフェイスの標準 AXI チャネルは次のとおりです。
- input チャネル
-
-
input_tvalid
- input チャネルの TVALID。
-
input_tdata_data_in
- デコードする
n
シンボルのブロックを入力します。この信号はUFIX_s_0
型である必要があります (s
は各シンボルのビット幅)。 -
input_tlast
- 入力ブロックの最後のシンボルを示します。event 出力の生成にのみ使用されます。event 出力を使用しない場合は、Low または High に接続できます。
-
input_tready
- input チャネルの TREADY。
-
input_tuser_marker
-
input_tdata_data_in
のデータにタグ付けするためのマーカー ビット。Detailed Implementation タブで Marker Bits を選択すると、チャンネルに追加されます。
-
- output チャネル
-
-
output_tready
- output チャネルの TREADY。Optional Pins タブで Output TREADY を選択すると、チャンネルに追加されます。
-
output_tvalid
- output チャネルの TVALID。
-
output_tdata_data_out
- デコード結果の情報およびパリティ シンボルを生成します。
data_out
のデータ型は、data_in
のデータ型と同じです。 -
output_tlast
-
tdata_data_out
に最後のブロックの最後のシンボルが現れると High になります。output_tlast
は、UFIX_1_0
型の信号を生成します。 -
output_tuser_maker
- Detailed Implementation タブから Marker Bits を選択すると使用できるようになります。
-
- event チャネル
-
-
event_s_input_tlast_missing
-
input_tlast
がアサートされるべきときにアサートされなかったことを示します。このピンが不要な場合は、未接続のままにしてください。 -
event_s_input_tlast_unexpected
-
input_tlast
がアサートされるべきでないときにアサートされたことを示します。このピンが不要な場合は、未接続のままにしてください。 -
event_s_ctrl_tdata_invalid
-
ctrl_tdata
の値が無効であることを示します。このピンは、GUI で Variable Block Length または Variable Number of Check Symbols を選択すると使用できるようになります。
-
- ctrl チャネル
- このチャネルは、ブロック パラメーターとして可変ブロック長またはチェック シンボル数を選択した場合のみ存在します。
-
ctrl_tvalid
- ctrl チャネルの TVALID。
-
ctrl_tdata_n_in
- この信号は、GUI で Variable Block
Length を選択した場合にのみ存在します。これにより、ブロック長をブロックごとに変更できます。
ctrl_tdata_n_in
信号は UFIX_s_0 型である必要があります (s は各シンボルのビット幅)。R_IN フィールドがなければ、チェック シンボルの数は固定されるので、n を変化させると k も自動的に変化します。 -
ctrl_tdata_r_in
- このフィールドは、GUI で Variable Number of Check
Symbols を選択した場合にのみ存在します。これにより、チェック シンボルの数をブロックごとに変更できます。新しいブロックの長さ r_block は、サンプリングされた
ctrl_tdata_r_in
に設定されます。ctrl_tdata_r_in
信号は UFIX_p_0 型にする必要があります (p はデフォルト符号ワードのパリティ ビットを表すのに必要なビット数 (n-k)、n は Symbols Per Block、k は Data Symbols)。この入力を選択すると、符号のサイズが大幅に増加します。
-
その他のオプション ピン
-
aresetn
- エンコーダーをリセットします。このピンは、Detailed Implementation タブで ARESETn を指定するとブロックに追加されます。
ARESETn
を駆動する信号は、Bool
型である必要があります。
デコーダーでコード シンボルのデコードを開始するには、aresetn
を 2 クロック周期以上、1 サンプル周期以上 Low にアサートする必要があります。
-
aclken
- エンコーダーのクロック イネーブル信号。
aclken
を駆動する信号は、Bool
型である必要があります。ACLKEN オプション ピンを選択するとブロックに追加されます。
ブロック パラメーター
Simulink® モデルでブロックのアイコンをダブルクリックすると、Block Parameters ダイアログ ボックスが開きます。
- Attributes
-
Attributes タブには、次のパラメーターがあります。
- Code Block Specification
-
- Code specification
- エンコーダーのタイプを指定します。選択肢は次のとおりです。
- Custom
- すべてのブロック パラメーターを設定できるようにします。
- DVB
- DVB (デジタル ビデオ放送) 規格 (204、188) 短縮 RS 符号をインプリメントします。
- ATSC
- ATSC (Advanced Television Systems Committee) 規格 (207、187) 短縮 RS 符号をインプリメントします。
- G_709
- G.709 光伝送ネットワーク (OTN) 規格をインプリメントします。
- ETSI_BRAN
- BRAN (Broadband Radio Access Networks) の ETSI プロジェクト規格をインプリメントします。
- CCSDS
- CCSDS (Consultative Committee for Space Data Systems) 規格 (255、223) 全長 RS 符号をインプリメントします。
- ITU_J_83_Annex_B
- 国際電気通信連合 (ITU)-J.83 Annex B 仕様 (128、122) 拡張 RS 符号をインプリメントします。
- IESS-308 (126)
- IESS (INTELSAT Earth Station Standard) 仕様 (126、112) 短縮 RS 符号をインプリメントします。
- IESS-308 (194)
- IESS-308 規格 (194、178) 短縮 RS 符号をインプリメントします。
- IESS-308 (208)
- IESS-308 規格 (208、192) 短縮 RS 符号をインプリメントします。
- IESS-308 (219)
- IESS-308 規格 (219、201) 短縮 RS 符号をインプリメントします。
- IESS-308 (225)
- IESS-308 規格 (225、205) 短縮 RS 符号をインプリメントします。
- Variable Number of Check Symbols (r)
- False、True。オンにすると、ctrl_tdata_r_in および ctrl_tdata_n_in ピンがブロックで使用できるようになります。
- Variable Block Length
- False、True。オンにすると、ctrl_tdata_n_in ピンがブロックで使用できるようになります。
- Symbol width
- 符号のシンボルのビット幅を指定します。サポートされる幅は 3 ~ 12 で、デフォルト値は 8 です。
- Field polynomial
- シンボル フィールドの元となる多項式を指定します。10 進数値として指定する必要があります。この多項式は、原始多項式である必要があります。値 0 はデフォルトの多項式を使用する必要があることを示します。次の表に、デフォルトの多項式を示します。
表 1. フィールド多項式 シンボル幅 デフォルト多項式 配列表現 3 x3 + x + 1 11 4 x4 + x + 1 19 5 x5 + x2 + 1 37 6 x6 + x + 1 67 7 x7 + x3 + 1 137 8 x8 + x4 + x3 + x2 + 1 285 9 x9 + x4+ 1 529 10 x10 + x3 + 1 1033 11 x11 + x2 + 1 2053 12 x12 + x6 + x4 + x + 1 4179 - Scaling Factor (h)
- (前の式の h) は、符号のスケーリング係数を指定します。通常 h は 1 ですが、2S - 1 (s はシンボル幅) までの値を指定できます。
α
h が原始となる値を指定する必要があります。つまり、h は 2S - 1 と互いに素である必要があります。 - Generator Start
- 生成多項式の最初の根 r を指定します。生成多項式 g(x) は次のとおりです。
α
はシンボル体の原始元で、スケーリング係数は次のように説明されます。 - Symbols Per Block(n)
- エンコーダーが生成するブロックのシンボル数を指定します。有効な値は 3 ~ 2S -1 (s はシンボル幅) です。
- Data Symbols(k)
- 各ブロックに含まれる情報シンボルの数を指定します。有効な値は max(n - 256, 1) ~ n - 2. です。
- Detailed Implementation タブ
-
- Implementation
-
- Check Symbol Generator Optimization
- このオプションは、GUI で [Variable Number of Check Symbols] を選択すると使用できるようになります。
- Fixed Architecture
- チェック シンボル ジェネレーターは、効率の高い固定アーキテクチャを使用してインプリメントされます。
- Area
- チェック シンボル ジェネレーターのインプリメンテーションは、エリアと速度を効率的にするよう最適化されます。入力の範囲
ctrl_tdata_n_in
は削減されます。 - Flexibility
- チェック シンボル ジェネレーターのインプリメンテーションは、ctrl_tdata_n_in の入力の範囲を最大にするよう最適化されます。
- Memory Style
- メモリ スタイルを Distributed、Block、Automatic から選択します。このオプションは、CCSDS 符号でのみ設定可能です。
- Number Of Channels
- エンコーダーで処理される時分割多重化チャネルの数を指定します。エンコーダーでは、128 本までのチャネルがサポートされます。
- Optional Pins
-
- ACLKEN
- ブロックに aclken ピンを追加します。この信号はクロック イネーブルとなるので、
Bool
型である必要があります。 - Output TREADY
- output チャンネルで TREADY を有効にし、固有のバック プレッシャーのある AXI4 ハンドシェイク プロトコルをサポートします。
- ARESETn
- ブロックに aresetn ピンを追加します。この信号はブロックをリセットし、
Bool
型である必要があります。デコーダーでコード シンボルのデコードを開始するには、aresetn
を 2 クロック周期以上、1 サンプル周期以上 Low にアサートする必要があります。 - Info bit
-
output_tdata_info ピンを追加します。
tdata_data_out
上のブロックの最終情報シンボルをマークします。 - Marker Bits
- ブロックに次のピンを追加します。
- input_tuser_user
-
input_tdata_ data_in
のデータにタグ付けするためのマーカー ビットを示します。 - output_tuser_user
- LogiCORE のレイテンシにより遅延された
mark_in
タグ付けビット。
- Number of Marker Bits
- マーカー ビット数を選択します。
このブロックで使用されるその他のパラメーターについては、[Block Parameters] ダイアログ ボックスの共通オプション を参照してください。
LogiCORE 資料
『Reed-Solomon Encoder LogiCORE IP 製品ガイド』 (PG025)