Viterbi Decoder 9.1 - 2022.1 日本語

Vitis Model Composer ユーザー ガイド (UG1483)

Document ID
UG1483
Release Date
2022-05-26
Version
2022.1 日本語

注記: このブロックはライセンス付きのコアで、FPGA ファブリックにインプリメントされます。適切なコア ライセンスを購入するには、ザイリンクス ウェブサイトにアクセスしてください。

たたみ込みエンコーダーでエンコードされたデータは、ザイリンクス Viterbi Decoder ブロックを使用してデコードできます。このブロックは、 AXI4-Stream 規格に準拠しています。

デコード プロセスには 2 つの段階があります。まず、入力データのコストを可能なすべてのデータ入力の組み合わせと比較します。コストは、ハミングまたはユークリッド メトリックのいずれかを使用できます。次にトレリスをトレースして、最適なパスを決定します。トレリスを介したトレースの長さは、トレースバック長パラメーターで制御できます。

最適なたたみ込みコードを使用すると、デコーダーで最小のエラー レートを達成できます。次の表に、さまざまな最適コードを示します。正しく動作させるため、エンコード用のたたみ込みコードはデコード用のものと一致している必要があります。

表 1. たたみ込みコード
制約の長さ 1/2 レート (8 進数) の最適なたたみ込みコード 1/3 レート (8 進数) の最適なたたみ込みコード
3 [7 5] [7 7 5]
4 [17 13] [17 13 15]
5 [37 33] [37 33 25]
6 57 65] [57 65 71]
7 [117 127] [117 127 155]
8 [357 233] [357 233 251]
9 [755 633] [755 633 447]

ブロックのインターフェイス

ザイリンクス Viterbi Decoder 9.1 ブロックは AXI4 に準拠しています。インターフェイスの標準 AXI チャネルは次のとおりです。

S_AXIS_DATA チャネル
s_axis_data_tvalid
S_AXIS_DATA チャネルの TVALID。入力ピンで、常に使用可能です。このポートは、入力データ ポートの値が有効であることを示します。
s_axis_data_tready
S_AXIS_DATA の TREADY。出力ピンで、常に使用可能です。このポートは、コアがデータを受信できる状態であることを示します。
s_axis_data_tdata
入力 TDATA。Block Parameters ダイアログ ボックスの Page1 タブで選択されている [Viterbi Type] によって、異なる入力データ ポートを使用できます。

[Trellis Mode] を選択すると、s_axis_data_tdata_tcm00s_axis_data_tdata_tcm01s_axis_data_tdata_tcm10s_axis_data_tdata_tcm11s_axis_data_tdata_sector の 5 つの入力ピンが使用可能になります。

[Trellis Mode] の入力幅 (s_axis_data_tdata_tcm**) は、データ幅 (Page2 タブの [Soft_Width] の値) 3 ~ 5 に対応し、4 ~ 6 の範囲です。s_axis_data_tdata_sector は常に 4 ビット幅です。[Trellis Mode] を選択すると、デコーダーは 1/2 レートで動作します。

[Viterbi Type] にほかのオプション ([Standard]、[Multi-Channel]、[Dual Decoder]) を選択すると、1/2 ~ 1/7 のレートがサポートされます。そのため、ブロックには、s_axis_data_tdata_data_in0s_axis_data_tdata_data_in6 というラベルが付いた 2 ~ 7 本の入力データ ポートを設定できます。ハード コード記述では、各 tdata_data_in<n> ポートが 1 ビット幅である必要があります。ソフト コード記述では、幅は 3 ~ 5 ビットになります。

s_axis_data_tuser
S_AXIS_DATA の TUSER。これらのポートは、[External Puncturing] を選択している場合、コアで Dual Decoder または Block Valid 信号が使用されている場合のみ表示されます。
s_axis_data_tuser_erase
Page2 タブで [External Puncturing] を選択すると、このポートが有効になります。この入力バスは、対応する data_in バスにヌル シンボルがあることを示します。たとえば、tuser_erase(0)data_in0 に、tuser_erase(1)data_in1 に対応しています。消去ビットが High の場合、対応する data_in バスのデータは、ヌル シンボルとしてデコーダー内で処理されます。消去バスの幅は、最大値が 7 のデコーダーの出力レートに等しくなります。
s_axis_data_tuser_sel
[Dual Decoder] を選択すると、このポートが有効になります。デュアル デコーダーの場合に、入力データ シンボルをデコードするための正しいたたみ込みコード セットを選択します。SEL が Low の場合は、たたみ込みコードの最初のセットを使用して入力データがデコードされます。SEL が High の場合は、たたみ込みコードの 2 番目のセットが適用されます。
s_axis_data_tuser_block_in
Page 5 タブで Block Valid を選択すると、このポートが有効になります。
M_AXIS_DATA チャネル
m_axis_data_tvalid
M_AXIS_DATA チャネルの TVALID。出力ピンで、常に使用可能です。出力データが有効かどうかを示します。
m_axis_data_tready
M_AXIS_DATA チャネルの TREADY。ダウンストリームのスレーブが常にデータを受信できる場合は、イネーブルまたは High にしないでください。Page 5 タブで TREADY を選択すると、このポートが有効になります。
m_axis_data_tdata
出力データ チャネル用にデコードされた TDATA。
m_axis_data_tdata_data
デコードされた出力データを示します。常に 1 ビット幅です。
m_axis_data_tdata_sector
[Trellis Mode] を選択すると、このポートが有効になります。このポートは常に 4 ビット幅です。出力 SECTOR は入力 SECTOR の遅延バージョンです。バス幅はどちらも 4 ビットに固定されています。この遅延は、[Trellis Mode] デコーダーを介した遅延と等しくなります。
m_axis_data_tuser
M_AXIS_DATA チャネルの TUSER。これらのポートは、[Dual Decoder] を選択している場合、正規化信号がある場合、または [Block Balid] オプションがオンの場合にのみ表示されます。
m_axis_data_tuser_sel
[Dual Decoder] を選択すると、このポートが有効になります。この信号は入力 s_axis_data_tuser_sel 信号の遅延バージョンです。この遅延は、[Dual Decoder] デコーダーを介した遅延と等しくなります。
m_axis_data_tuser_norm
Page 5 タブで [NORM] オプションを選択すると、このポートが有効になります。このポートは、コア内で正規化がいつ実行されたかを示します。チャネルのエラー レートを即座に表示します。
m_axis_data_tuser_block_out
Page 5 タブで Block Valid を選択すると、このポートが有効になります。この信号は入力 s_axis_data_tuser_block_in 信号の遅延バージョンです。BLOCK_OUT 信号は、元の BLOCK_IN のデータ ポイント セットに対応するデコードされたデータを示します。この遅延は、デコーダーを介した遅延と等しくなります。
S_AXIS_DSTAT チャネル
注記: Page 5 タブで Use BER Symbol Count を選択すると、このポートが有効になります。
s_axis_dstat_tvalid
S_AXIS_DSTAT チャネルの TVALID。
s_axis_dstat_tready
S_AXIS_DSTAT チャネルの TREADY。コアがデータを受信できる状態になったことを示します。出力に TREADY がない場合のリセットの後を除き、常に High になります。
s_axis_dstat_tdata_ber_range
S_AXIS_DSTAT チャネルの TDATA。BER ブロックでエラーがカウントされたシンボルの数を示します。
M_AXIS_DSTAT チャネル
注記: Page 5 タブで Use BER Symbol Count を選択すると、このポートが有効になります。
m_axis_dstat_tvalid
M_AXIS_DSTAT チャネルの TVALID。
m_axis_dstat_tready
M_AXIS_DSTAT チャネルの TREADY。ダウンストリームのスレーブが常にデータを受信できる場合は、イネーブルまたは High にしないでください。Page 5 タブで TREADY を選択すると、このポートが有効になります。
m_axis_dstat_tdata_ber
M_AXIS_DSTAT チャネルの TDATA。ビット エラー レート (BER) バス出力 (固定幅 16) は、再エンコードされた DATA_OUT とデコーダーへの遅延 DATA_IN との差をカウントすることにより、チャネル ビット エラー レートを計測します。
その他のオプション ピン
aresetn
同期リセット (aresetn) 入力は、aclken 信号のステートに関係なく、コアを再初期化するためにいつでも使用できます。回路を初期化するため、aresetn は 2 クロック サイクル以上 Low にアサートする必要があります。Page 5 タブで ARESETN を選択すると、このピンが有効になります。ブール型である必要があります。このピンが選択されていない場合、Model Composer によりコアの非アクティブ (High) に接続されます。
aclken
デコーダーのクロック イネーブル信号を送信します。aclken を駆動する信号は、ブール型である必要があります。Page 5 タブで ACLKEN を選択すると、このピンが有効になります。

ブロック パラメーター

Page1 タブ
Page1 タブには、次のパラメーターがあります。
Viterbi Type
Number of Channels
[Multi-Channel] を選択した場合に、デコードするチャネルの数 (2 ~ 32) を指定します。
Standard
基本的な Viterbi デコーダーです。
Multi-Channel
複数のインターレースされたチャネルのデータを 1 つの Viterbi デコーダーを使用してデコードします。
Trellis Mode
TCM および SECTOR_IN 入力を使用したトレリス モードのデコーダーです。
Dual Decoder
ブロックが 2 セットのたたみ込みコードを使用したデュアル デコーダーとして動作するよう設定します。sel ポートが有効になります。
Decoder Options
Use Reduced Latency
ブロックのレイテンシは、トレースの長さと制約の長さによって異なります。このオプションを選択すると、ブロックのレイテンシが約 1/2 になり、トレースの長さの 2 倍にしかなりません。
Constraint length
n+1 に等しい値になります (n はエンコーダー内の制約レジスタの長さ)。
Traceback length
Viterbi トレリスを介したトレースバックの長さ。最適な長さは制約の長さの 5 ~ 7 倍です。
Page2 タブ
Architecture
Parallel
大型ですが高速な Viterbi デコーダーになります。
Serial
小型ですが、入力データをシリアルに処理します。入力シンボルの各セットの処理に必要なクロック サイクル数は、出力レートおよびデータのソフト幅によって異なります。
Best State
Use Best State
詳細にパンクチャされたデータ用に改善された BER パフォーマンスにします。
Best State Width
最適なステートを決定するため使用されるコストを節約する際に、無視する最下位ビット数を示します。
Puncturing
None
入力データはパンクチャされていません。
External (Erased Symbols)
ブロックに消去ポートを追加します。消去入力を使用して、ヌル シンボル (チャネル上で伝送される前に消去されたシンボル) があることを示します。
Coding
Soft Width
ソフト コードされたデータの入力幅を指定します。有効な値は 3 ~ 5 です。幅を広くする場合はさらにロジックが必要です。ブロックがシリアル モードでインプリメントされている場合は、ソフト幅を広くすると、シリアル処理時間も長くなります。
Soft Coding
ユークリッド メトリックを使用し、入力データのコストを Viterbi トレリスの分岐と比較します。
Hard Coding
ハミング メトリックを使用し、入力データ ビットと Viterbi トレリスの分岐との差を比較します。ハード コーディングは標準の並列ブロックに対してのみ使用可能です。
Data Format
Signed Magnitude
Offset Binary (available for soft coding only)

ソフト幅 3 の符号絶対値とオフセットバイナリのデータ フォーマットについては、関連の LogiCORE™ 製品仕様の表 1 を参照してください。

Page3 タブ
Convolution 0
Output Rate 0
有効な値は 2 ~ 7 です。
Convolution Code 0 Radix
たたみ込みコードは、2 進数、8 進数、または 10 進数で入力および確認できます。
Convolution Code Array (0-6)
たたみ込みコードの最初の配列です。出力レートは配列の長さから派生します。2 ~ 7 のコードを入力できます。デュアル デコーディングを使用する場合は、sel ポートの値 0 (Low) がこの配列に対応します。
Page4 タブ

このタブのオプションは、Page1 タブの [Viterbi Type] に Dual Decoder を選択すると有効になります。

Convolution 1
Output Rate 1
有効な値は 2 ~ 7 です。[Dual Decoder] を選択している場合、これが使用される 2 番目の出力レートです。SEL 入力が High の場合、入力データはこのレートでデコードされます。[Dual Decoder] 以外を選択している場合、この出力レートは使用されません。
Convolution Code 1 Radix
たたみ込みコードは、2 進数、8 進数、または 10 進数で入力および確認できます。
Page5 タブ
BER Options
Use BER Symbol Count
伝送チャネルのエラー レートをモニターします。
Optional Pins
NORM
Add Compare Select モジュール内で正規化が実行されたときを示します。
Block Valid
BLOCK_IN および BLOCK_OUT 信号が必要な場合に、このチェック ボックスをオンにします。これらの信号は、デコーダーを通過するデータ ブロックの流れを追跡します。BLOCK_OUT はデコーダー レイテンシ分遅延された BLOCK_IN に対応します。
TREADY
m_axis_data_tready および m_axis_dstat_tready ピンがブロックで使用可能になります。
ACLKEN
ブロックのクロック イネーブル信号を送信します。aclken を駆動する信号は、ブール型である必要があります。
ARESETN
ブロックに aresetn を追加します。この信号はブロックをリセットし、ブール型である必要があります。デコーダーでコード シンボルのデコードを開始するには、aresetn を 2 クロック周期以上、1 サンプル周期以上 Low にアサートする必要があります。

Display shortened port names など、このブロックで使用される共通のパラメーターについては、[Block Parameters] ダイアログ ボックスの共通オプションを参照してください。

LogiCORE 資料

『Viterbi Decoder LogiCORE IP 製品ガイド』 (PG027)