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

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

FPGAの部屋

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

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

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

前回は、FSBLをリビルドさせることで、ラプラシアンフィルタIP の動作周波数の切り替えが上手く行った。ラプラシアンフィルタIP のAXI Master が接続されているAXI Interconnect (axi_mem_intercon_1) の設定は、Slave Interface タブの Enable Register Slice(タイミングの分離をする仕組みのようです) を Auto に、Enable Data FIFO を 32 deep に設定した。32 deep だと、LUT を SRAM として使用するFIFOを使うので、LUT の使用数が増える可能性があると思う。なお、Master Interace タブはすべて none に設定してある。
lap_fil_hls_14_4_87_150405.png

今回は、Register Slice と Data FIFO のラプラシアンフィルタ処理性能に寄与する割合を確かめるために、2つともデフォルトの none に設定した状態での性能を比較する。

ラプラシアンフィルタIP のAXI Master が接続されているAXI Interconnect (axi_mem_intercon_1) の Slave Interface タブの設定を下に示す。すべて none とした。
lap_fil_hls_14_4_111_150410.png

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









最初に、FCLK_CLK3 を 130 MHz に設定した。
lap_fil_hls_14_4_94_150407.png

論理合成、インプリメント、ビットストリームの生成を行った。Summary を下に示す。
lap_fil_hls_14_4_114_150411.png

タイミング制約が間に合っていない。
AXI Interconnect (axi_mem_intercon_1) の Slave Interface タブの Enable Register Slice を Auto に、Enable Data FIFO を 32 deep に設定した場合のSummary を下に示す。
lap_fil_hls_14_4_116_150411.png

タイミング制約が間に合っている他、FF、LUT、Memory LUT がそれぞれ 2 % ずつ多くなっている。

タイミング制約を満たしていないが、ZYBO 実機で、ラプラシアンフィルタ全体の処理時間を測定した結果、64.1 ms となった。ラプラシアンフィルタのみの処理時間は、48.9 ms だった。
lap_fil_hls_14_4_115_150411.png

AXI Interconnect (axi_mem_intercon_1) の Slave Interface タブの Enable Register Slice を Auto に、Enable Data FIFO を 32 deep に設定した場合のラプラシアンフィルタ全体の処理時間は 63.7 ms だった。ラプラシアンフィルタ処理のみの時間は 48.6 ms だった。

ラプラシアンフィルタ処理のみの時間の双方を比較すると、AXI Interconnect (axi_mem_intercon_1) の Slave Interface タブの Enable Register Slice を Auto に、Enable Data FIFO を 32 deep に設定した場合が 300 us ほど速い。
この 300 us / 垂直 600 本 = 500 ns (垂直1本あたりの改善時間)
これを、130 MHz の周期 7.69 ns で割ると、500 ns / 7.69 ns ≒ 65 クロッ分ク改善している。(AXI Interconnect (axi_mem_intercon_1) の Slave Interface タブの Enable Register Slice を Auto に、Enable Data FIFO を 32 deep に設定した場合の方が、していない場合よりも 65 クロック分改善している)

次に、ラプラシアンフィルタIP のAXI Master が接続されているAXI Interconnect (axi_mem_intercon_1) の Slave Interface タブの設定をすべて none とした時に、FCLK_CLK3 を 100 MHz に設定する。
lap_fil_hls_14_4_111_150410.png

lap_fil_hls_14_4_97_150408.png

論理合成、インプリメント、ビットストリームの生成を行った。Summary を下に示す。
lap_fil_hls_14_4_112_150410.png

FF、LUT、Memory LUT は 130 MHz と同様に 2 % 減少している。

ZYBO 実機で、ラプラシアンフィルタ全体の処理時間を測定した結果、78.8 ms となった。ラプラシアンフィルタのみの処理時間は、63.9 ms だった。
ラプラシアンフィルタIP のAXI Master が接続されているAXI Interconnect (axi_mem_intercon_1) の設定で Slave Interface タブの Enable Register Slice を Auto に、Enable Data FIFO を 32 deep に設定した時のラプラシアンフィルタ処理全体の経過時間は 78.4 ms だった。ラプラシアンフィルタ処理のみの経過時間は 63.0 ms だった。
lap_fil_hls_14_4_113_150410.png 
ラプラシアンフィルタ処理のみの時間の双方を比較すると、AXI Interconnect (axi_mem_intercon_1) の Slave Interface タブの Enable Register Slice を Auto に、Enable Data FIFO を 32 deep に設定した場合が 900 us ほど速い。
この 900 us / 垂直 600 本 = 1.5 us (垂直1本あたりの改善時間)
これを、100 MHz の周期 10 ns で割ると、1500 ns / 10 ns = 150 クロッ分ク改善している。(AXI Interconnect (axi_mem_intercon_1) の Slave Interface タブの Enable Register Slice を Auto に、Enable Data FIFO を 32 deep に設定した場合の方が、していない場合よりも 150 クロック分改善している)

130 MHz でラプラシアンフィルタIP を動作させた時と、100 でラプラシアンフィルタIP を動作させた時のデータが大幅に違っているが、いずれも、ラプラシアンフィルタIP のAXI Master が接続されているAXI Interconnect (axi_mem_intercon_1) の設定で、Slave Interface タブの Enable Register Slice を Auto に、Enable Data FIFO を 32 deep に設定した時の方が性能が良かった。
  1. 2015年04月11日 23:59 |
  2. Vivado HLS
  3. | トラックバック:0
  4. | コメント:0