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

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

FPGAの部屋

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

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

Vivado HLS 2014.4 で合成したラプラシアンフィルタIPの高速化7(動作周波数のチューンナップを実機で検証)”の続き。

以下のバグは、FSBLが正しい Hardware Platform Specification を参照していないのが原因でした。詳しくは、”Vivado HLS 2014.4 で合成したラプラシアンフィルタIPの高速化11(性能が最大になる設定を探る4)”を参照下さい。

2015/04/14:このブログは正しいデータに書きなおしました。

前回は、クロック周期が 4 ns つまり、動作周波数 250MHz の制約でVivado HLS 2014.4 を使用して高位合成したラプラシアンフィルタIP をインプリメントしてみたら、166.66667 MHz でしか動作しなかった。しかも、パイプライン段数が増えて、パイプライン化されていないところもあるため大幅に処理時間が増えてしまった。(71.4 ms から 119.8 ms 78.4 ms に増えた)

今回は、Vivado HLS 2014.4 のクロック周期制約を変えてみて、一番性能の出る辺りはどこか?を調査してみよう。

まずは、クロック周期が 10 ns でもう一度テストしてみる。以前にテストした時とは、ラプラシアンフィルタIP をそれを担当するAXI Interconnect のクロック供給源がPS の FCLK_CLK3 に変更されているので、それが影響しているか?を探ってみた。
その結果、ラプラシアンフィルタ処理コマンド全体の処理時間は、71.2 ms で変化が無かった。周波数変換をしてもロスが少ないのだろうか? 但し、ラプラシアンフィルタのみの処理時間は 55.9 ms で、FCLK_CLK3を使用しなかった場合の 60.0 ms に比べて、なぜか速くなっている。
lap_fil_hls_14_4_124_150414.png

次に、Vivado HLS 2014.4 のタイミング・リポートで、FCLK_FCLK3 がどのくらいの余裕があるかを調べた。
lap_fil_hls_14_4_82_150405.png

その結果、1.691 ns の余裕があることが分かった。現在のクロック周期は 10 ns なので、計算してみると、

1 / (10 ns - 1.691 ns) x 1000 ≒ 120.4 MHz

よって、120 MHz にFCLK_CLK3 を設定してみよう。

ブロック・デザインで PS をダブルクリックして、設定ダイアログを開く。
lap_fil_hls_14_4_84_150405.png

FCLK_FCLK3 に 120 MHz を設定すると IO PLL では、実際の周波数は125 MHz になってしまった。Clock Source を ARM PLL に変更すると、118.2 MHz 程度になったので、これでやってみよう
lap_fil_hls_14_4_83_150405.png

これでブロック・デザインをセーブして、論理合成、インプリメント、ビットストリームの生成を行った。
lap_fil_hls_14_4_85_150405.png

ハードウェアをエクスポートし、SDKを立ちあげてブートイメージ (BOOT.bin) を作製した。
ブートイメージをMicro SDカードに書いて、ZYBOに挿入して、電源をONした。
カメラ画像を表示して、ラプラシアンフィルタ処理を行った。
FCLK_CLK3 を 118.2 MHz とした時のラプラシアンフィルタ処理全体の時間は 62.8 ms 、ラプラシアンフィルタのみの処理時間は 47.4 ms だった。やはり速くなっている。
lap_fil_hls_14_4_123_150414.png 

PIPELINEディレクティブを使って 100 MHz でラプラシアンフィルタIP を駆動した時のラプラシアンフィルタ全体の処理時間を計測したところ、約 71.4 ms で、ラプラシアンフィルタ処理時間のみを計測してみたところ、約 60.0 ms だった。
ラプラシアンフィルタ処理時間のみを比較してみよう。
60.0 ms / 47.4 ms ≒ 1.266 倍
1.18倍だと思っていただが、性能向上がクロック周波数の倍率よりも多い。なぜだ?

100 MHz でもラプラシアンフィルタのみの処理時間は、4.1 ms だけ、FCLK_CLK3を使用しない場合よりも速いということがわかったので、その分を足してみる。
60.0 ms / (47.4 + 4.1) ≒ 1.165 倍
このくらいだと、それらしいかもしれない。

FCLK_CLK3 を 118.2 MHz としてもラプラシアンフィルタ処理全体の時間は、71.3 ms で以前と変化が無かった。

どうもおかしいので、ラプラシアンフィルタIP のAXI4 Masterポートが入力されているAXI Interconnect の axi_mem_intercon_1 の設定を変えてみた。
lap_fil_hls_14_4_88_150405.png

lap_fil_hls_14_4_87_150405.png

これで、論理合成、インプリメント、ビットストリームの生成を行い、手順を踏んで実機でテストしてみた。が、ラプラシアンフィルタ処理全体の時間は、71.1 ms であまり変わっていない?

ラプラシアンフィルタ処理全体の時間は 62.7 ms 、ラプラシアンフィルタのみの処理時間は 47.4 ms だった。ラプラシアンフィルタIP のAXI Master が接続されているAXI Interconnect (axi_mem_intercon_1) の Slave Interface タブの設定をすべて none とした時とほとんど変化がなかった。
lap_fil_hls_14_4_125_150414.png

ちなみに、ラプラシアンフィルタIP のAXI4 Master 出力ポートのデータバスの幅は 32 ビットで、PS へ行くAXI Interconnect のAXI4 バスのデータバス幅は 64 ビットです。よって、PSへ行くデータバス帯域は動作周波数がラプラシアンフィルタIP と同一周波数の時は2倍あるはずです。
  1. 2015年04月05日 21:12 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:0