デザイン検証

ARF (任意リサンプリング フィルター) のデザイン (XAPP1373)

Document ID
XAPP1373
Release Date
2022-02-28
Revision
1.0 日本語

ヘテロジニアス ARF デザインは、VCK190 評価ボード上のザイリンクス VC1902 デバイスで検証されます。ARF の AI エンジン部と PL 部はカーネルとしてパッケージされます。テスターもカーネルとしてパッケージされ、事前に格納されたスティミュラスを使用してテスト対象デバイス (DUT) の入力ポートを駆動し、リファレンス テスト ベクターを基準として出力 AXI バスをモニターします。スループットとレイテンシは PL テスターによって測定され、プロセッサから AXI4-Lite インターフェイスを介してアクセスできる一連のレジスタに記録されます。テストが完了すると結果が要約され、COM ポートから出力されます。

図 1. ARF デザインの検証環境

すべてのカーネルは AXI インターフェイスのみを備えています。ただし、AXI バスのソースとデスティネーションの両方が PL カーネルである場合は、ユーザーが信号の定義をカスタマイズできます。ARF の PL カーネルは、AI エンジンに接続される AXI バス以外に、カスタム ロジックで AXI インターフェイスにマップされる次の信号を備えています。

表 1. ARF の PL カーネル信号から AXI インターフェイスへのマップ
AXI バスの方向 信号名 AXI 信号へのマップ
入力 (375 MHz) afsrc_in_vld T_VALID
afsrc_in_rdy T_READY
afsrc_in_soft_reset T_DATA[63]
afsrc_in_stp [29:0] T_DATA[61:32]
afsrc_in_dat [31:0] T_DATA[31:0]
出力 (500 MHz) afsrc_out_flags [1:0] T_USER[1:0]
afsrc_out_rdy T_READY
afsrc_out_vld T_VALID
afsrc_out_dat[31:0] T_DATA[31:0]

これについて次に詳しく説明します。

  • ソフト リセットは、入力データ バスの最上位ビットにマップされます。次に示す動作を実行するには、有効なデータの前にソフト リセットをアサートする必要があります。
    • PL 内の位相累算レジスタのリセット
    • PL 内の出力 FIFO のリセット
    • AI エンジン内のオーバーラップ メモリのクリア
  • AXI プロトコルでは、Ready 信号が Low に遷移した直後にデータ送信を休止する必要があります。カスタマイズされた AXI インターフェイスでは、このプロトコルが緩和され、バッファーがフルになるまですべての書き込み動作を受け入れる FIFO を使用できます。バック プレッシャーは、FIFO に書き込めるサンプルの数が 16 未満になったときにアサートされる programmable full 信号で通知されます。これにより、カスタム ロジックは、最大 15 段までのパイプライン内のデータを消去できます。
  • 出力 Ready 信号は、ARF がこの信号のアサートから正確に 500 サイクル後に出力を開始するためのタイミング リファレンスとして機能します。この動作は、慎重に制御される出力 FIFO 読み出し信号によって実現されます。
  • ARF FIFO の empty 信号は T_USER にマップされ、エラーの検出に使用されます。ARF 出力がアクティブなとき、FIFO エンプティ イベントは出力データが壊れていることを示します。

ARF テスター カーネルはテスト結果を収集し、プロセッサが次の図に示すレジスタ マップによってアクセスできるようにします。テスト プロセスを制御するフィールドもあります。テストの各反復では 8192 個の入力サンプルが 350 MSPS で処理され、最大 (232 – 1) 回の反復が 8192 x (232 – 1) x 1/350 MHz = 14 時間続きます。

図 2. ARF テスター カーネルのレジスタ マップ

アルゴリズムが必要な性能を確実に達成するよう、浮動小数点 MATLAB リファレンス モデルを構築します。次に、ビット単位の MATLAB モデルを開発し、ビット単位モデルの出力と浮動小数点モデルの出力を比較することによって量子化ノイズを測定します。次の図は、入力波形、浮動小数点リサンプラーの出力、ビット単位モデルの比較を示しています。これらは非常によく一致しており、精度の高さを示しています。このテスト ケースでは、SQNR (信号対量子化ノイズ比) の測定値は 87 dBc です。

図 3. MATLAB モデルのシミュレーション結果

MATLAB スクリプトによって生成されるテスト ベクターは、AI エンジンのシミュレーションとハードウェア テストの両方に使用されます。テスト目的で 5333/7993 の分数比を選択しています。ここで、5333 と 7993 はいずれも素数です。入力テスト ベクターは、AI エンジン シミュレーションの長さに達するまで 5333 サンプルの波形を繰り返したものです。出力は 7993 個のサンプルの反復になると想定されます (初回の反復の最初の数個のサンプルを除く)。

Makefile には、AI エンジン シミュレーションの実行と出力データの後処理用のコマンドが含まれています。次の図に示すテスト結果は、AI エンジン カーネルの出力がリファレンス テスト ベクターとビット単位で一致しており、700 MHz の目標スループットを 2% のマージンで達成していることを示しています。
$ make aie
------------------------------------
 Arbitrary Resampler AIE Sim Result 
------------------------------------
Throughput = 715.718 Msps
Mismatch   = 0
RTL デザインは、純粋な RTL シミュレーション環境内でセルフチェック モニターを使用して検証されます。シミュレーションが完了すると、次のようなテスト結果が出力されます。この結果は RTL が想定どおりに動作していることを示しています。
$ make rtlsim

SIN Mismatch =    0
AIN Mismatch =    0
DIN Mismatch =    0
 
Test 0: Mismatch =    0, IdleCycle =   0, Latency = 500 cycles, ErrFlag = 0
Test 1: Mismatch =    0, IdleCycle =   0, Latency = 500 cycles, ErrFlag = 0
 
*************** TEST PASSED  ****************
これで、AI エンジン カーネルと PL カーネルは統合可能な状態になりました。3 つのクロック ドメイン内に 2 つの PL カーネルを含むこのデザインでは、次の図に示すように、システム全体の統合がわずか 14 行のコードで完了します。数百の AXI バスが含まれるようは大規模なデザインの場合、RTL で数千の信号を手動で接続するとミスが起きやすいため、この手法はさらに大きなメリットをもたらします。
[connectivity]
# Declare Kernels
nk=tst_arf:1:tst_arf_1
nk=plk_arf:1:plk_arf_1

# TESTER -> PL Kernel
sc=tst_arf_1.arf_in:plk_arf_1.arf_in

# PL Kernel -> AIE
sc=plk_arf_1.aie_sin:ai_engine_0.sin
sc=plk_arf_1.aie_ain:ai_engine_0.ain
sc=plk_arf_1.aie_din:ai_engine_0.din

# AIE -> PL Kernel
sc=ai_engine_0.dout:plk_arf_1.aie_out

# PL Kernel -> TESTER
sc=plk_arf_1.arf_out:tst_arf_1.arf_out

[clock]
# ID=0: 100MHz for Registers
id=0:tst_arf_1.reg_clk

# ID=4: 375MHz for AIE Interface
id=4:plk_arf_1.aie_clk
id=4:tst_arf_1.aie_clk

# ID=3: 500MHz for DAC Interface
id=3:plk_arf_1.dac_clk
id=3:tst_arf_1.dac_clk

ソフトウェア シミュレーション環境内の波形ビューを使用したデバッグは、可視性が限られるハードウェア上で直接デバッグするよりもはるかに容易です。Vitis コンパイラは、PS+PL+AI エンジン協調シミュレーションをサポートしており、 Vivado® シミュレータを GUI に使用して波形を表示し、画面上でさまざまな信号のレイテンシを測定できます。500 MHz クロック ドメイン内の ARF 出力信号 (次の図の dut_out_axi_trdy および dut_out_axi_tvld) は、これらの信号間の固定レイテンシが 1 μs になるように微調整されます。複数のクロック ドメインにまたがる信号と AXI インターフェイスには、タイミングに多少ばらつきがありますが、これは出力 FIFO によって完全に吸収されるため、カスタム ロジックからは透過的です。

図 4. ARF の入力および出力タイミング図

デザインのソフトウェア検証に成功した後、VCK190 評価ボード上で、より包括的で長時間にわたるハードウェア テストを実行します。デフォルトでは VCK190 ボードには VC1902-2MP デバイスが付属していますが、テスト プラットフォーム内で製品番号を VC1902-1LLP に変更できます。電力消費効率を重視する場合は、この構成を推奨します。 Arm® プロセッサ上で動作するソフトウェアが、テストの開始と停止を 10 回繰り返します。初回のテストではプログラムが 100 万回反復され (80 億の入力サンプル)、それに続く各テストでは 120 万回反復されます (100 億のサンプル)。最後に、短いサマリが COM ポートから出力されます。
---------------------------------------------------------------
--       ARBITRARY RESAMPLING FILTER TEST SUMMARY            --
---------------------------------------------------------------
 TestID Latency(us)  Outputs    Idle    Mismatch  Flag Result
--------------------------------------------------------------- 
   0      1.000     12279095842    0           0  0x00  PASS
   1      1.000     27437128450    0           0  0x00  PASS
   2      1.000     42595161058    0           0  0x00  PASS
   3      1.000     57753242780    0           0  0x00  PASS
   4      1.000     72911275388    0           0  0x00  PASS
   5      1.000     88069307996    0           0  0x00  PASS
   6      1.000    103227340606    0           0  0x00  PASS
   7      1.000    118385373214    0           0  0x00  PASS
   8      1.000    133543442656    0           0  0x00  PASS
   9      1.000    148701475266    0           0  0x00  PASS
-------------------------------------------------------------

PASS!

テスト結果から、次に示す設計目標をすべて満たしていることが確認できます。

  • すべての出力サンプルが、ROM に格納されたリファレンス テスト ベクターと一致している。
  • すべてのテストで、1 μs の確定的なレイテンシが測定されている。
  • 出力データ バス内でアイドル サイクルが観察されていない。つまり、テストの実行中、Valid 信号は solid High のままになっている。
  • エラー フラグがアサートされていない。つまり、FIFO のアンダーフローは発生していない。