FC2カウンター FPGAの部屋 Vivado HLS 2013.4でラプラシアン・フィルタ関数をaxi masterモジュールにする8(Directive)
FC2ブログ

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

FPGAの部屋

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

Vivado HLS 2013.4でラプラシアン・フィルタ関数をaxi masterモジュールにする8(Directive)

Vivado HLS 2013.4でラプラシアン・フィルタ関数をaxi masterモジュールにする7(ソース公開)”の続き。

Vivado HLS 2013.4 でラプラシアンフィルタのCソースコードをVerilog HDLで書かれたIPとして高位合成をして、できたIPを実機でテストしてみたところ、結果はちょっとおかしいが、無事に動作した。今回は、実行時間が約 100msec 程度と遅いので、もう少し早くしてみようと思う。そのためには、Directiveを追加する必要がある。

さてDirectiveを追加していこう。とりあえず、forループを展開するDirective の UNROLL を RGBピクセルを白黒ビクセルに変換する conv_rgb2y() に入れていこう。

・Vivado HLS 2013.4 で右のウインドウのDirective をクリックする。

・最初の conv_rgb2y() の for Statement をクリックする。
Vivado_HLS_2013_4_30_140211.png

・当該 for Statement を右クリックし、右クリックメニューから Insert Diective... を選択する。
Vivado_HLS_2013_4_31_140211.png

・Vivado HLS Directive Editor ダイアログが表示された。Directive で UNROLL を選択し、factor を 4 に設定した。OKボタンをクリックした。
Vivado_HLS_2013_4_32_140211.png

・Insert Statement Label ダイアログが表示された。Label Name に conv_rgb2y_loop1 と入力した。
Vivado_HLS_2013_4_33_140211.png

・Vivado HLS に UNROLL Dierctive が追加された。ループ本体のコピーを4つ生成したことになると思う。
Vivado_HLS_2013_4_34_140211.png

・もう1つの、conv_rgb2y() のループにも、UNROLL Directive を追加した。
Vivado_HLS_2013_4_35_140211.png

・ファイルをセーブして、C Synthesis を行った。

・Analysis モードで結果を観察した。

まずはリソースについて比較する

・BRAMは10で変化なし
・DSPは以前の16から34に増えた
・FFは、1961から2243に増えた
・LUTは、2146から2298に増えた
・Latencyは、1450201~69427730201 から 1450201~2910730201になった。
・Intervalは、1450201~69427730201 から 1450201~2910730201になった。


UNROLL Directive -factor=4 を追加した時の高位合成結果を下に示す。
Vivado_HLS_2013_4_36_140211.png

Directive を追加していない状態での高位合成結果を下に示す。
Vivado_HLS_2013_4_29_140210.png

・この高位合成結果を EDK の pcore とした。

さて、これをシミュレーション環境に持って行ってシミュレーションしてみよう。

シミュレーション結果を下に示す。
Vivado_HLS_2013_4_37_140211.png

memcopy() の間隔は 111.67usec だった。

以前のシミュレーションを下に示す。
Vivado_HLS_2013_4_22_140208.png

memcopy() の間隔は 145.67usec だった。

111.64 / 145.67 ≒ 0.77 なので、総実行時間を予想すると100msec / 0.77 = 77msec くらいか?でも、ラプラシアンフィルタの実行時間の割合を考えるともう少し長くかかると思う。

次に、UNROLL Directive -factor=8 にしてみた。高位合成結果を下に示す。
Vivado_HLS_2013_4_38_140211.png

シミュレーションを行った時のmemcopy() のインターバルは 118.64usec で UNROLL Directive -factor=4 の時よりも増えてしまった。結構難しい。
Vivado_HLS_2013_4_39_140211.png

UNROLL Directive -factor=4 を追加して作ったラプラシアンフィルタIPをXPSプロジェクトにIPと交換して、ISEで論理合成、インプリメント、ビットストリームの生成を行い、SDKからテストした所、104msec となり 3msecほど実行時間が増えてしまった。のmemcopy() のインターバルは少なくなっていたのだが、他の所で時間が掛かるようになってしまったのかもしれない。
というわけで、今のところ Directive の効果は見えていない。

Vivado HLS 2013.4でラプラシアン・フィルタ関数をaxi masterモジュールにする9(Directive2)”に続く。
  1. 2014年02月11日 07:01 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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