FC2カウンター FPGAの部屋 Vivado HLS 2014.4 でサイドチャネル付き AXI4-Stream をテストする3(RTLシミュレーション)
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

Vivado HLS 2014.4 でサイドチャネル付き AXI4-Stream をテストする3(RTLシミュレーション)

Vivado HLS 2014.4 でサイドチャネル付き AXI4-Stream をテストする2(C++シミュレーション、高位合成)”の続き。

前回、サイドチャネル付き1次元俺様フィルタのC++シミュレーションと高位合成を行ったので、今回は、RTLシミュレーションを行って、ハードウェアでの動作を確認する。その際に、RTLのトレースファイルを出力させて、Vivado でシミュレーション波形の表示を行う。

Vivado HLS で Run C/RTL Cosimulation ボタンをクリックして、RTL Cosimulation を行う。(または、Solution メニューから Run C/RTL Cosimulation を選択する)

Vivado HLS で Run C/RTL Cosimulation ボタンをクリックすると、Co-simulation Dialog が出てくる。
Dump Trace を all に変更する。
lap_filter_AXIS_5_150425.png

Co-simulation が終了した。
lap_filter_AXIS_24_150429.png

結果は、C Simulation と同じだった。

次に、RTLシミュレーション波形を見てみよう。

Vivado 2014.4 を立ち上げる。

Vivado の下の入力領域に、下に示すように tcl コマンドを入力した。

cd C:/Users/Masaaki/Documents/Vivado_HLS/study/fil_axis_side_ch/solution1/sim/verilog/
current_fileset
open_wave_database fil_axis_side_ch.wdb
open_wave_config fil_axis_side_ch.wcfg

シミュレーション波形が表示された。
lap_filter_AXIS_26_150429.png

シミュレーション波形全体を表示した。その際に、ap_start と ap_done、ap_idle、 ap_NS_fsm をシミュレーション波形に追加した。
lap_filter_AXIS_27_150429.png

ap_NS_fsm は、Vivado HLS 2014.4 の Analysis タブ -> Resource タブで示された Control Step で示された C0 ~ C5 のステートを表しているようだ。何故か? C6 ステートは無い。
lap_filter_AXIS_23_150429.png

190 ns 周辺で、s_axi_AXILiteS_WVALID, s_axi_AXILiteS_WREADY 信号が共に 1 になっているので、AXI4 Lite Slave バス経由で、fil_axis_side_ch に s_axi_AXILiteS_WDATA の 1 が書かれている。これは、スタート信号となる。
少し遅れて、ap_start が 1 になっているが分かる。
スタート後に ap_NS_fsm が 000001 (C0) から 000010 (C1) → 000100 (C2) を3回繰り返している。これは、sreg[3] の初期化を行っているようだ。
その後、 ap_NS_fsm は 001000 (C3) ステートに移行して、TUSER が 1 になったデータを待つ。C++ ソースコードで言うと、do { } while 文で、pix.user が 1 になるのを待っている。
それが来ると、010000 (C4) ステートに移行して、AXI4-Stream で来るストリーム入力に俺様フィルタをかけていく。実際にフィルタ後の値を Write するのは 100000 (C5) ステートだが、パイプラインされているようである。
010000 (C4) ステートに移行した1クロック後で、ins_TREADYが1クロック期間、落ちている。これは、do { } while 文から for () 文に処理が切り替わり、今度は俺様フィルタの演算をし始めるので、そのパイプライン満たすためだと思う。
lap_filter_AXIS_28_150429.png

最後の部分を見ると、実践のカーソルの部分で、ap_done が出力され、ここでフィルタ動作が終了しているのが分かる。
AXI4 Lite Slave バスでは、ポーリングで Read を繰り返し行い、Done するのを監視している。破線のカーソル部分で、0x6 をRead してフィルタ動作の完了が分かった。
ap_done の 1 クロック前に、 ap_NS_fsm は 100000 (C5) ステートに移行している。ここでは、ストリーム入力が無くなったので、 100000 (C5) ステートのフィルタ演算+ストリーム出力が見えているのだろう。その後はIDLE ステートの 000001 (C0) に戻っている。
また、最後のストリーム出力のタイミングで、outs_TLAST が 1 になっているのが見える。
lap_filter_AXIS_29_150429.png

次は、AXI4-Stream IP として、ラプラシアンフィルタを作っていこう。
  1. 2015年04月30日 04:11 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/3134-65d8881d
この記事にトラックバックする(FC2ブログユーザー)