ザイリンクス Interleaver Deinterleaver ブロックは、AXI4 準拠のブロック インターフェイスを使用して、インターリーバーまたはデインターリーバーをインプリメントします。インターリーバーは、入力シンボルのシーケンスの順序を並べ替えるデバイスです。「シンボル」という用語は、ビットのコレクションを表します。アプリケーションによっては、シンボルは 1 ビットです。シンボルがバスの場合もあります。
インターリーブの典型的な使用方法は、信号伝送で発生するエラーの場所をランダム化することです。インターリーブは、エラー訂正回路でデータができるだけ訂正されるようにするため、エラーのバーストを分散させます。
チャネルの送信側で特定のインターリーバーを使用する場合、元のデータを復元するため、受信側でそのインターリーバーを反転させたものを使用する必要があります。反転インターリーバーは、デインターリーバーと呼ばれます。
この LogiCORE™ を使用すると、フォーニィ コンボリューショナルと矩形ブロックの 2 種類のインターリーバー/デインターリーバーを生成できます。どちらもシンボルを並べ替える一般的なインターリーブ機能を実行しますが、シンボルの並べ替え方法と動作方法はまったく異なります。非常に大型のインターリーバーでは、データ シンボルを外部メモリに格納するのが望ましい場合があります。コアには、データ シンボルを内部 FPGA RAM または外部 RAM に格納するオプションがあります。
フォーニィ コンボリューショナルの動作
次の図に、フォーニィ コンボリューショナル インターリーバーの動作を示します。コアは、遅延ライン シフト レジスタとして動作します。入力シンボルは、DIN の入力整流子アームに示されます。出力シンボルは、DOUT の出力整流子アームから抽出されます。DIN および DOUT は、それぞれ AXI データ入力およびデータ出力チャネルのフィールドです。出力シンボルは、DOUT の出力整流子アームから抽出されます。どちらの整流子のアームも分岐 0 から始まり、次の立ち上がりクロック エッジの後に次の分岐に進みます。最後の分岐 (B-1) に達した後、整流子アームは両方とも回転して 0 分岐に戻り、このプロセスが繰り返されます。
上の図では、分岐の長さは一定量 L ずつ長くなります。コアでは、インターリーバーをこのように指定するか、分岐の長さをファイルを使用してを渡し、各分岐の長さをそれぞれ指定することも可能です。
分岐 0 は遅延が 0 であるように見えますが、コアの基本的なレイテンシのため、DIN と DOUT の間に数クロック サイクルの遅延が発生します。わかりやすくするため、これは図には示されていません。
インターリーバーとデインターリーバーの唯一の違いは、デインターリーバーでは分岐 0 が最長であり、分岐の長さが増加するのではなく、L ずつ減少することです。分岐 (B-1) の長さは 0 です。これを次の図に示します。
次の図に示すようにファイルを使用して分岐の長さを指定した場合、生成されたコアがインターリーバーと呼ばれるか、デインターリーバーと呼ばれるかは任意です。重要なのは、一方がもう一方の反転である必要があるということです。ファイルを使用する場合、各分岐の長さは個別に制御できます。これを次の図に示します。ファイルの構文は、LogiCORE の製品仕様を参照してください。
リセット ピン (aresetn) は、整流子アームを分岐 0 に設定しますが、データの分岐はクリアしません。
コンフィギュレーション スワップ
このコアでは、定義済みのコンフィギュレーションを複数保存しておくことが可能です。各コンフィギュレーションで、分岐数と分岐の長さ定数を異なるものにできます。また、各コンフィギュレーションの各分岐で、個々の分岐の長さをファイルで定義することも可能です。
コンフィギュレーションは、AXI 制御チャネルに新しい CONFIG_SEL 値を送信することにより、いつでも変更できます。この値は、次のブロックの開始で有効になります。コアでは、GUI での選択に応じて、すべてのコンフィギュレーションはインターリーバーまたはデインターリーバーのいずれかであると想定されます。各コンフィギュレーションの各分岐の長さを個別に定義することにより、インターリーブとデインターリーブを切り替えることができます。各コンフィギュレーションの詳細は、COE ファイルで指定します。
詳細は、 『Interleaver/De-Interleaver LogiCORE IP 製品ガイド』 (PG049) の「Configuration Swapping」セクションを参照してください。
矩形ブロックの動作
矩形ブロック インターリーバーは、入力データ シンボルを特定の順序で矩形メモリ アレイに書き込み、別の混合順序で読み出すことにより機能します。入力シンボルは、ブロックにグループ化する必要があります。連続的にシンボルを入力できるコンボリューショナル インターリーバーとは異なり、矩形ブロック インターリーバーは 1 ブロックのシンボルを入力し、同じブロックをシンボルを再配置して出力します。前のブロックからインターリーブされたシンボルが出力されている間は、新しい入力は受信できません。
矩形メモリ アレイは、次に示すように、複数の行と列から構成されています。
行\列 | 0 | 1 | ... | (C-2) | (C-1) |
---|---|---|---|---|---|
0 | |||||
1 | |||||
.. | |||||
(R-2) | |||||
(R-1) |
矩形ブロック インターリーバーは、次のように動作します。
- ブロック全体のすべての入力シンボルは、一番上の行から順に行ごとに、左から右に書き込まれます。
- 必要に応じて行が並べ替えられます。
- 必要に応じて列が並べ替えられます。
- ブロック全体は、一番左の列から順に列ごとに、上から下に読み出されます。
矩形ブロック デインターリーバーは、次のように動作します。
- ブロック全体のすべての入力シンボルは、一番左の列から順に列ごとに、上から下に書き込まれます。
- 必要に応じて行が並べ替えられます。
- 必要に応じて列が並べ替えられます。
- ブロック全体は、一番上の行から順に行ごとに、左から右に読み出されます。
矩形ブロック インターリーバーの例と詳細情報は、 『Interleaver/De-Interleaver LogiCORE IP 製品ガイド』 (PG049) を参照してください。
AXI インターフェイス
AXI SID v7.1 には、次のインターフェイスがあります。
- ACLK、ACLKEN、ARESETn 用の非 AXI チャネル インタフェース
- 外部メモリ (イネーブルの場合) 用の非 AXI チャネル インターフェイス
- その他のイベント用の非 AXI チャネル インターフェイス
- event_tlast_unexpected
- event_tlast_missing (矩形モードでのみ使用可能)
- event_halted (オプション、マスター チャネルの TREADY がイネーブルの場合にのみ使用可能)
- event_col_valid (オプション)
- event_col_sel_valid (オプション)
- event_row_valid (オプション)
- event_row_sel_valid (オプション)
- event_block_size_valid (オプション)
- 次の信号で構成されるコンフィギュレーション情報 (s_axis_ctrl) を受信する AXI スレーブ チャネル:
- s_axis_ctrl_tvalid
- s_axis_ctrl_tready
- s_axis_ctrl_tdata
制御チャンネルは、コアの設定で制御チャネルが必要な場合にのみ有効になります。
- 次の信号で構成されるインターリーブするデータ (s_axis_ctrl) を受信する AXI スレーブ チャネル。
- s_axis_data_tvalid (SID v6.0 ブロックの ND 端子と同等、オプションではない)
- s_axis_data_tready
- s_axis_data_tdata
- s_axis_data_tlast
- 次の信号で構成されるインターリーブされたデータ (m_axis_data) を送信する AXI マスター チャネル:
- m_axis_data_tvalid
- m_axis_data_tready
- m_axis_data_tdata
- m_axis_data_tuser
- m_axis_data_tlast
このブロック特有の AXI ポート
この HDL ブロックは、AXI 制御およびデータ チャネルを、次のサブフィールド名に基づく個別のポートのグループとして使用できるようにします。
- Control Channel Input Signals
-
- s_axis_ctrl_tdata_config_sel
-
制御チャネル ベクターの CONFIG_SEL フィールドを表すサブフィールド ポート。フォーニィ モードでコンフィギュレーションの数が 1 より大きい場合に有効になります。
- s_axis_ctrl_tdata_row
-
制御チャネル ベクターの ROW フィールドを表すサブフィールド ポート。矩形モードで [Row Type] が [Variable] に設定されている場合に有効になります。
- s_axis_ctrl_tdata_row_sel
-
制御チャネル ベクターの ROW_SEL フィールドを表すサブフィールド ポート。矩形モードで [Row Type] が [Selectable] に設定されている場合に有効になります。
- s_axis_ctrl_tdata_col
- 制御チャネル ベクターの COL フィールドを表すサブフィールド ポート。矩形モードで [Column Type] が [Variable] に設定されている場合に有効になります。
- s_axis_ctrl_tdata_col_sel
-
制御チャネル ベクターの COL_SEL フィールドを表すサブフィールド ポート。矩形モードで [Column Type] が [Selectable] に設定されている場合に有効になります。
- s_axis_ctrl_tdata_block_size
- 制御チャネル ベクターの COL フィールドを表すサブフィールド ポート。矩形モードで [Block Size Type] が [Variable] に設定されている場合に有効になります。
- DATA チャネルの入力信号
-
- s_axis_data_tdata_din
-
入力データ チャネルの DIN フィールドを表します。
- DATA Channel Output Signals
-
- m_axis_data_tdata_dout
-
出力データ チャネルの DOUT フィールドを表します。
- TUSER チャネルの出力信号
-
- m_axis_data_tuser_fdo
- 出力 TUSER チャネルの FDO フィールドを表します。フォーニィ モードで、GUI でオプションの FDO ピンが選択されている場合に有効になります。
- m_axis_data_tuser_rdy
- 出力 TUSER チャネルの RDY フィールドを表します。フォーニィ モードで、GUI でオプションの RDY ピンが選択されている場合に有効になります。
- m_axis_data_tuser_block_start
- 出力 TUSER チャネルの BLOCK_START フィールドを表します。矩形モードで、GUI でオプションの BLOCK_START ピンが選択されている場合に有効になります。
- m_axis_data_tuser_block_end
- 出力 TUSER チャネルの BLOCK_END フィールドを表します。矩形モードで、GUI でオプションの BLOCK_END ピンが選択されている場合に有効になります。
ブロック パラメーター
Simulink モデルでブロックのアイコンをダブルクリックすると、[Block Parameters] ダイアログ ボックスが開きます。
- [Basic] タブ
- [Basic] タブには、次のパラメーターがあります。
- [Memory Style]
- すべてのブロック メモリがデザインのほかの場所で必要な場合は、Distributed を選択します。可能な限り Block を選択して、ブロック メモリを使用することをお勧めします。Automatic を選択すると、必要なメモリのワード数に基づいて、各状況に最も適したメモリ スタイルが Model Composer で使用されます。
- [Symbol Width]
- 処理するシンボルに含まれるビット数を指定します。
- [Type]
- Forney Convolutional または Rectangular Block をクリックします。
- Mode
- Interleaver または Deinterleaver を選択します。
- [Symbol memory]
- データ シンボルを内部 FPGA RAM に格納するか、外部 RAM に格納するかを指定します。
- [Forney] タブ
- [Forney] タブには、次のパラメーターがあります。
- [Dimensions]
-
- Number of branches
- 1 ~ 256 の値を指定します。
- Architecture
-
- [ROM-based]
- ブロックの内部結果のいくつかを計算するのにルックアップ テーブル ROM を使用します。
- [Logic-based]
- ブロックの内部結果のいくつかを計算するのにロジック回路を使用します。
どちらのオプションが最適化は、ほかのコア パラメーターによります。最適な結果を得るには、両方のオプションを試してください。このパラメーターは、ブロックの動作には影響しません。
- [Configurations]
-
- Number of configurations
- 1 より大きい場合、ブロックは CONFIG_SEL および NEW_CONFIG 入力付きで生成されます。各コンフィギュレーションのパラメーターは、COE ファイルで定義します。定義するパラメーターの数は、指定したコンフィギュレーション数と同じである必要があります。
- [Length of Branches]
- フォーニィ SID の分岐長さの説明。
- constant_difference_between_consecutive_branches
- [Value] パラメーターで指定されます。
- use_coe_file_to_define_branch_lengths
- [COE File] パラメーターで指定したファイルの場所。
- coe_file_defines_individual_branch_lengths_for_every_branch_in_each_configuration
- [COE File] パラメーターで指定したファイルの場所。
- coe_file_defines_branch_length_constant_for_each_configuration
- [COE File] パラメーターで指定したファイルの場所。
- [Value]
- 1 ~ MAX の値を指定します。MAX は、分岐の数とブロック入力のサイズによって異なります。分岐の長さは、長さ 1 または分岐の数のいずれかの配列にする必要があります。アレイ サイズが 1 の場合、値は連続する分岐間の定数差として使用されます。それ以外の場合は、各分岐は固有の長さになります。
- [COE File]
- 分岐の長さをファイルで指定します。
- [Rectangular Parameters #1] タブ
- [Rectangular Parameters #1] タブには、次のパラメーターがあります。
- [Number of Rows]
-
- [Value]
- このパラメーターは、[Row Type] に [Constant] を選択した場合にのみ設定可能です。行数はこの値に固定されます。
- [Row Port Width]
- このパラメーターは、[Row Type] に [Variable] を選択した場合にのみ設定可能です。ROW 入力バスの幅を設定します。可能な限り小さな値を使用して、基になる LogiCORE ができるだけ小さくなるようにする必要があります。
- [Minimum Number of Rows]
- このパラメーターは、[Row Type] に [Variable] を選択した場合にのみ設定可能です。この場合、行数の値の範囲が広くなり、コアでそれに対処することが必要となる可能性があります。実際の最小値がわかっている場合、LogiCORE のロジック量を削減できることがあります。コアをできるだけ小さくするため、このパラメーターにはできるだけ大きな値を使用する必要があります。
- [Number of Values]
- このパラメーターは、[Row Type] に Selectable を選択した場合にのみ設定可能です。COE ファイルに定義されている有効な選択値の数を定義します。必要な選択値の数のみを追加する必要があります。
- [Row Type]
-
- Constant
- 行数は、[Row Constant Value] パラメーターで指定した値になります。
- [Variable]
- 各ブロック開始時に Row 入力から行数がサンプリングされます。行の並べ替えはサポートされません。
- [Selectable]
- 各ブロックの開始時に ROW_SEL がサンプリングされます。この値は、COE ファイルで指定されている行数に可能な値のいずれかを選択するのに使用されます。
- [Number of Columns]
-
- [Value]
- このパラメーターは、[Column Type] に Constant を選択した場合にのみ設定可能です。列数はこの値に固定されます。
- [COL Port Width]
- このパラメーターは、[Column Type] に [Variable] を選択した場合にのみ設定可能です。COL 入力バスの幅を設定します。可能な限り小さな値を使用して、基になる LogiCORE™ ができるだけ小さくなるようにする必要があります。
- [Minimum Number of Columns]
- このパラメーターは、[Column Type] に Variable を選択した場合にのみ設定可能です。この場合、列数の値の範囲が広くなり、コアでそれに対処することが必要となる可能性があります。実際の最小値がわかっている場合、LogiCORE のロジック量を削減できることがあります。コアをできるだけ小さくするため、このパラメーターにはできるだけ大きな値を使用する必要があります。
- [Number of Values]
- このパラメーターは、[Column Type] に Selectable を選択した場合にのみ設定可能です。COE ファイルに定義されている有効な選択値の数を定義します。必要な選択値の数のみを追加する必要があります。
- [Column Type]
-
- [Constant]
- 列数は、[Column Constant Value] パラメーターで指定した値になります。
- [Variable]
- 各ブロック開始時に
COL
入力から列数がサンプリングされます。列の並べ替えはサポートされません。 - [Selectable]
- 各ブロックの開始時に COL_SEL がサンプリングされます。この値は、COE ファイルで指定されている列数に可能な値のいずれかを選択するのに使用されます。
- [Rectangular Parameters #2] タブ
- [Rectangular Parameters #2] タブには、次のパラメーターがあります。
- [Permutations Configuration]
-
- [Row permutations]
-
- None
- 行の並べ替えは実行されません。
- Use COE file
- COE ファイルに行の並べ替えベクターが含まれ、行の並べ替えが実行されることを示します。これは、プルーニングされていないインターリーバー/デインターリーバーでのみ可能です。
- [Column permutations]
-
- [None]
- 列の並べ替えは実行されません
- [Use COE file]
-
COE
ファイルに列の並べ替えベクターが含まれ、列の並べ替えが実行されることを示します。これは、プルーニングされていないインターリーバー/デインターリーバーでのみ可能です。
- [COE File]
-
COE
ファイルのパス名を指定します。
- [Block Size]
-
- Value
- このパラメーターは、[Block Size Type] に Constant を選択した場合にのみ設定可能です。ブロック サイズはこの値に固定されます。
- [BLOCK_SIZE Port Width]
- このパラメーターは、[Block Size Type] に [Variable] を選択した場合にのみ設定可能です。BLOCK_SIZE 入力バスの幅を設定します。可能な限り小さな値を使用して、コアができるだけ小さくなるようにする必要があります。
- Block Size Type
-
- Constant
- ブロック サイズは固定されます。ブロックはプルーニング可能です (ブロック サイズ < row * col)。ブロック サイズは、最後のシンボルが最後の行になるよう選択する必要があります。プルーニングされていないインターリーバーは、プルーニングされたインターリーバーよりも使用する FPGA リソースが少なくなるので、プルーニングは必要な場合にのみ使用してください。
- [Rows*Columns]
-
行数と列数が一定の場合にこのオプションを選択すると、[Block Size Type] を [Constant] に設定し、[Block Size] に行数 * 列数の値を入力したのと同じ効果が得られます。
行数または列数が一定でない場合にこのオプションを選択すると、新しい行または列の値がサンプリングされるたびに、コアで自動的にブロック サイズが計算されます。このオプションを選択した場合、プルーニングは不可能です。
- [Variable]
-
各ブロックの開始時に、BLOCK_SIZE 入力からブロック サイズがサンプリングされます。前述のとおり、BLOCK_SIZE でサンプリングされた値は、最後のシンボルが最後の行になる値である必要があります。
ブロック サイズがコアの外部で既に使用可能な場合、このオプションを選択する方が [Block Size Type] に [Rows*Columns] を選択するよりも効率的です。[Block Size Type] に [Variable] を選択した場合、行および列の並べ替えはサポートされません。
- [Port Parameters #1] タブ
- [Port Parameters] タブには、次のパラメーターがあります。
- [Control Signals]
-
- [ACLKEN]
- ACLKEN をディアサート (Low) すると、すべての同期入力が無視され、ブロックは現在のステートを保ちます。
- [ARESETn (Active-Low).]
- アクティブ Low の同期クリア入力。ACLKEN よりも優先されます。
- Status Signals
-
- [COL_VALID]
- このオプションの出力は、[Column Type] に [Variable] が選択されている場合に有効になります。
s_axis_ctrl_tdata_col
入力で無効な値サンプリングされた場合、event_col_valid
はあらかじめ定義されたクロック サイクル数後に Low になります。 - [COL_SEL_VALID]
- このオプションの出力 (
event_col_sel_valid
) は、[Column Type] に [Selectable] が選択されている場合に有効になります。イベント ピンは、event_col_valid
、event_col_sel_valid
、event_row_valid
、event_row_sel_valid
、event_block_size_valid
です (GUI のオプションと同じ順序)。 - [ROW_VALID]
- このオプションの出力は、[Row Type] に [Selectable] が選択されている場合に有効になります。
- [ROW_SEL_VALID]
- このオプションの出力は、[Row Type] に [Selectable] が選択されている場合に有効になります。
- [BLOCK_SIZE_VALID]
- このオプション出力は、[Block Size Type] に [Variable] または [Rows*Columns] が選択されている場合に有効になります。
- [Port Parameters #2] タブ
- [Port Parameters #2] タブには、次のパラメーターがあります。
- [Data Output Channel Options]
-
- [TREADY]
- データ入力チャネルの TREADY。シンボル インターリーバー/デインターリーバーがデータを受信できることを示します。
- [FDO]
- data_tuser_fdo (First Data Out) 出力ポートを追加します。
- [RDY]
- data_tuser_rdy 出力ポートを追加します。
- [BLOCK_START]
- data_tuser_block_start 出力ポートを追加します。
- [BLOCK_END]
- data_tuser_block_end 出力ポートを追加します。
- Pipelining
-
- Pipelining
- 基になる LogiCORE のパイプライン処理のレベルを [Minimum]、[Medium]、または [Maximum] パフォーマンスに設定します。
このブロックで使用されるその他のパラメーターについては、[Block Parameters] ダイアログ ボックスの共通オプション を参照してください。
LogiCORE 資料
『LogiCORE IP Interleaver/De-interleaver v8.0 製品ガイド』 (PG049)