FC2カウンター FPGAの部屋 Vivado HLS 2014.4 で合成したラプラシアンフィルタIPの高速化15(性能が最大になる設定を探る8、追加1)
FC2ブログ

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

FPGAの部屋

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

Vivado HLS 2014.4 で合成したラプラシアンフィルタIPの高速化15(性能が最大になる設定を探る8、追加1)

コメント欄でラプラシアンフィルタのCソースコード例を示してくれたおるさんのコードを元に、tu1987さんがC++ソースコードを書いてくれた。C++ソースコード、laplacian_filer2.cpp はここにあります。
今回も(かな?)自分では何もしていない。とっても楽なこの環境で良いのだろうか?お二方に深く御礼申し上げます。

今回の修正は、一旦輝度に変換せずにRGB値で値を持って、使うときにRGB-Y変換をするということだ。使うときにRGB-Y変換をするので、RGB-Y変換モジュールは1つから3つに増えているはずだが、一旦、1ライン分、RGB-Y変換をするパスがなくなるので、速くなるはずだ。

Vivado HLS 2014.4 で lap_filter_axim_tu2_2014_4 フォルダを作って、高位合成を行った。
lap_fil_hls_14_4_128_150420.png

Utilization Estimates を下に示す。
lap_fil_hls_14_4_129_150420.png

修正前の tu1978さんのC++ソースコードを高位合成した後のUtilization Estimates はこれだ。


================================================================
== Utilization Estimates
================================================================
* Summary:
+-----------------+---------+-------+-------+-------+
| Name | BRAM_18K| DSP48E| FF | LUT |
+-----------------+---------+-------+-------+-------+
|Expression | -| 5| 0| 573|
|FIFO | -| -| -| -|
|Instance | 0| 4| 2244| 2804|
|Memory | 8| -| 0| 0|
|Multiplexer | -| -| -| 493|
|Register | -| -| 626| 4|
+-----------------+---------+-------+-------+-------+
|Total | 8| 9| 2870| 3874|
+-----------------+---------+-------+-------+-------+
|Available | 120| 80| 35200| 17600|
+-----------------+---------+-------+-------+-------+
|Utilization (%) | 6| 11| 8| 22|
+-----------------+---------+-------+-------+-------+

DSP48Eが 11 個から 41 個に増えている。FF や LUT も増えている。やはり演算器が増えた影響が効いているようだ。

シミュレーション用の Vivado 2014.4プロジェクトをコピーして、IP化した今回のラプラシアンフィルタ IP を使ってシミュレーションを行った。
lap_fil_hls_14_4_130_150420.png

AXI4 Master Read (M_AXI_CAM_FB) と AXI Master Write (M_AXI_LAP_FB) をよく見えるように拡大した。Write 間の間隔を測定すると、24.68 us だった。
lap_fil_hls_14_4_131_150420.png

600 ライン分のラプラシアンフィルタ処理を行った場合に、ラプラシアンフィルタ処理が完了するまでの時間を概算してみよう。

24.68 us x 600 ライン ≒ 14.8 ms

となり、60 fps の16.7 ms を上回る性能を示すという結果を得た。
  1. 2015年04月20日 04:53 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:2

コメント

実験ありがとうございます(tu1987さんにも感謝)

tu1987 さんのソースでクロック高速化が効かないのはよくわかりませんが
(予想では制約をかけすぎると物理的な要素にひっぱられて合成を阻害するからかな)
データフローを考慮して、パイプラインを途切れさせないような記述をしないと
高速化には向かないようで、そうなるとHDL言語の記述に近づいていくから
アルゴリズムの検証にはならないし難しいところですね。
キャッシュの無いRISC CPUのコーディングテクニックが有効そうだなって思ったのですが
デザイン最適化に一通り書かれていました。
キャッシュもどきを自動展開してくれれば、ストリーミングも使わずお手軽に高速化
できそうなので、マグネットコーティングではないですがコンパイラの進化の余地は
ありそうです。
http://eetimes.jp/ee/articles/1504/16/news078.html
  1. 2015/04/20(月) 10:32:08 |
  2. URL |
  3. おる #mQop/nM.
  4. [ 編集 ]

おるさん、おはようございます。

今回はいろいろとありがとうございました。

AXI4-Streamでは、明確な遅延素子も必要だし、CかC++をHDLとして書くことになりそうです。AXI-Streamはメモリ帯域を使わない使い方もできるということで、現時点では本命だと思っています。これだと、DMAが別になり、ソースコードが簡単になるので、コンパイラも楽ができるし、見通しも良くなると思っています。

これからもよろしくお願いします。
  1. 2015/04/21(火) 03:42:49 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

コメントの投稿


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

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