FC2カウンター FPGAの部屋 Vivado HLS 2014.4 でAXI4-Stream版ラプラシアンフィルタIP を作製する3(RTLシミュレーション)
FC2ブログ

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

FPGAの部屋

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

Vivado HLS 2014.4 でAXI4-Stream版ラプラシアンフィルタIP を作製する3(RTLシミュレーション)

Vivado HLS 2014.4 でAXI4-Stream版ラプラシアンフィルタIP を作製する2(C++シミュレーション、高位合成)”の続き。

2015/06/25:修正AXI4-Stream版ラプラシアンフィルタのC++ ソースコード lap_filter_axis.cpp にバグがあったので、ブログを書き換えました)

前回は、AXI4-Stream 版ラプラシアンフィルタの 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_38_150503.png

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

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

Vivado 2014.4 を立ち上げる。

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

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


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

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

ap_NS_fsm は 4 ビットになっていた。ステートを表すならば 7 ビットのはずなのだが、少なくなっていた。

200 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 が 0001 から 0010 に変化している。これは、TUSER がアサートされるのを待っている部分のようだ。TUSER がアサートされて、ラプラシアンフィルタ処理が始まると、 ap_NS_fsm が 0010 から 0100 に変化する。
入力のTVALID が 1 になった後で、0 になるのはスタートを検知した後の1クロックのみで、後は 1 のままである。つまりラプラシアンフィルタ1画素の処理に必要なクロックは 1 クロックのみということになる。
lap_filter_AXIS_41_150503.png

最後の部分を見ると、実践のカーソルの部分で、ap_done が出力され、ここでフィルタ動作が終了しているのが分かる。
AXI4 Lite Slave バスでは、ポーリングで Read を繰り返し行い、Done するのを監視している。破線のカーソル部分で、0x6 をRead してフィルタ動作の完了が分かった。
ap_done の 1 クロック前に、 ap_NS_fsm は 1000 ステートに移行している。(下の波形では隠れてしまって見えない)
また、最後のストリーム出力のタイミングで、outs_TLAST が 1 になっているのが見える。
スループットが 1 クロックなのは分かったが、レイテンシはと言うと、最後の入力ストリームの破線のカーソルと最後の出力ストリームの実線のカーソル間は60 ns つまり、100MHzで言うと 6 クロックであるので、これがレイテンシとなる。
lap_filter_AXIS_42_150503.png

これで、Vivado HLS 2014.4 で高位合成したラプラシアンフィルタIP でも 1 クロックごとに 1 処理を行えることが分かった。
なおラプラシアンフィルタ全体の処理時間を計算してみよう。TUSERが 1 にアサートされたのを認識した時から、出力ストリームの最後までのラプラシアンフィルタ全体の処理時間は

5335 ns - 275 ns = 5060 ns

となった。クロック数にすると 506 クロックとなった。但し、このラプラシアンフィルタ の現在の処理画像は、50 x 10 ピクセルだ。
  1. 2015年05月04日 03:55 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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