FC2カウンター FPGAの部屋 2015年04月10日
FC2ブログ

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

FPGAの部屋

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

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

Vivado HLS 2014.4 で合成したラプラシアンフィルタIPの高速化10(性能が最大になる設定を探る3)”の続き。

前回は、本当に FCLK_CLK3 の周波数を変更しても変化がないかどうかを調べてみることにした。方法としては、Vivado HLS 2014.4 でクロック周期を 8 ns に変更し、回路を変更してテストした。その結果として、クロック周波数を変えてもラプラシアンフィルタ処理時間に変化が無かった。

昨日、tu1978 さんからFSBL がリビルドされていないのではないか?というアドバスを頂いた。
確かに、PSのクロックを変更したが、これはFPGA が変更されたのではなくて、PS、つまりARM SoC 部分のPL に出力するクロック周波数を変更した訳だ。つまり、ビットストリームが PS のクロック周波数に関係するのではなく、FSBL(First Stage Boot Loader) が関係する訳だ。今回は、FSBL がきちんと変更されているのかを調べてみることにした。
(注: PS から来るクロックの周波数が変化したことにより、PL(FPGA)部分もそのクロック周波数に合わせて、論理合成、インプリメント、ビットストリームの生成を行っています)

今回の設定を下の表にまとめておく。
項目
Vivado HLS 2014.4 のクロック周期制約8 ns
Vivado HLS 2014.4 のTiming Summary Estimated7 ns
AXI Interconnect (axi_mem_intercon_1) の設定のSlave Interface タブの Enable Register SliceAuto
AXI Interconnect (axi_mem_intercon_1) の設定のSlave Interface タブのEnable Data FIFO32 deep
ラプラシアンフィルタIPやaxi_mem_intercon_1へ供給するFCLK_FCLK3の周波数130MHz, 100MHz










SDKを立ちあげて、FSBLプロジェクトを右クリックし、右クリックメニューから Properties を選択する。
lap_fil_hls_14_4_101_150409.png

Properties for FSBL ダイアログのLined Resources をクリックし、Linked Resources タブをクリックする。
すると、ps7_init.c のLocation がV_ZYBO_CAMDfL_wrapper_hw_platform_1 にあるのが見えた。
lap_fil_hls_14_4_102_150409.png

現在のHardware Platform Specification は3つあって、現在は、V_ZYBO_CAMDfL_wrapper_hw_platform_2 を使用している。よって、FSBLの参照している Hardware Platform Specification が違っている。
lap_fil_hls_14_4_103_150409.png

ちなみに、”Vivado HLS 2014.4 で合成したラプラシアンフィルタIPの高速化5(tu1978さんのCソースコードを実機で検証)”の時点では、Hardware Platform Specification は2つだったので、高速化を検証しようとして、V_ZYBO_CAMDfL144_org をコピーして作製した時に、ハードウェアをエクスポートしたら 、V_ZYBO_CAMDfL_wrapper_hw_platform_2 ができたようだ。
Hardware Platform Specification が新しくできた場合は、プロジェクトをBSP ごと作り直す必要がある。

今回は、SDK のFSBL , FSBL_bsp , V_ZYBO_CAMDfL_wrapper_hw_platform_0 , V_ZYBO_CAMDfL_wrapper_hw_platform_1 を消去して、新たにFSBL プロジェクトを新規作成した。その様子を下図に示す。Hardware Platform も V_ZYBO_CAMDfL_wrapper_hw_platform_2 と表示されている。
lap_fil_hls_14_4_104_150409.png

SDKのプロジェクトは下図の様な構成になった。
lap_fil_hls_14_4_105_150409.png

この状態で、BOOT.bin を生成した。
lap_fil_hls_14_4_106_150409.png

ZYBO実機でテストしたところ、ラプラシアンフィルタ全体の処理時間は 63.7 ms となった。ラプラシアンフィルタ処理のみの時間は 48.6 ms となった。なお、FCLK_CLK3 は 130 MHz だ。
lap_fil_hls_14_4_107_150409.png

前回の結果と違う結果が出て良かった。

次に、Vivado でPL を変更して、ハードウェアをエクスポートしたら、きちんとFSBL もリビルドされるかどうかをテストする。

もう一度、FCLK_CLK3 を 100 MHz に設定した。
lap_fil_hls_14_4_97_150408.png

これで、Vivado で論理合成、インプリメント、ビットストリームの生成を行った。
ハードウェアをエクスポートして、SDK を起動した。
SDKを起動すると、かなり長い時間リビルドしていた。これが正常だと思う。以前のはリビルド時間が短すぎた。それに気づけなかったのが残念。。。
lap_fil_hls_14_4_108_150410.png

FSBL もリビルドされたようだ。
lap_fil_hls_14_4_109_150410.png

BOOT.bin を生成して、ZYBO実機でテストした。

ラプラシアンフィルタ全体の処理時間は 78.4 ms となった。ラプラシアンフィルタ処理のみの時間は 62.9 ms となった。
lap_fil_hls_14_4_110_150410.png

これは前回と同様の値だ。これで、ハードウェアをエクスポートして、SDKを起動するときにFSBL もリビルドされているのが確認できた。

ラプラシアンフィルタ処理のみの時間で高速化を検証してみよう。
100 MHz の動作周波数を 130 MHz にしたので、クロック周波数は 1.3 倍になった。
ラプラシアンフィルタ処理のみの時間は、62.9 ms が 48.6 ms になったので、処理時間は0.773 倍になった。
62.9/48.9 ≒ 1.294 倍なので、ほぼクロック周波数の比率が反映されている。

PIPELINEディレクティブを入れただけのクロック周期制約 10 ns のVivado HLS 2014.4で、ラプラシアンフィルタIP を 100 MHz で駆動した時のラプラシアンフィルタ全体の処理時間は 71.4 ms だった。ラプラシアンフィルタ処理のみの時間は 60.0 ms だった。
今回のラプラシアンフィルタIP の高位合成時のクロック周期の制約は、8 ns だった。その分、レイテンシが増えて、同じ 100 MHz でのラプラシアンフィルタ処理のみの実行時間は 62. 9 ms となった。
性能は、 60 / 62.9 ≒ 0.954 倍になった。
しかし、ラプラシアンフィルタIP を 130 MHz で動作させると、性能は 60 / 48.6 ≒ 1.235 倍になった。

検算をしてみよう。 1.235 / 0.954 ≒ 1.295 で、概ね正しいようだ。

つまり、以前よりも高位合成結果が 5 % 位、レイテンシが増加したが、クロック周波数が 1.3 倍になったので、総合的な性能は 1.235 倍になった。つまり、性能が向上した。

但し、比較対象に比べて今回は、ラプラシアンフィルタIP のAXI Master が接続されているAXI Interconnect の設定を変更していることを忘れてはならない。
lap_fil_hls_14_4_87_150405.png
  1. 2015年04月10日 05:15 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:0