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

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

FPGAの部屋

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

HLSストリーム・インターフェースのReLU1

HLSストリームの畳み込み層に続き、HLSストリームのReLU を実装して行こう。

まずは、relu プロジェクトを作成した。
hls_relu_1_180419.png

C シミュレーションを行った。結果を示す。
hls_relu_2_180419.png

C シミュレーションでの ReLU の出力結果は relu_output.h に記録された。
hls_relu_12_180419.png

C コードの合成を行った。結果を示す。
hls_relu_3_180419.png

Estmated は 8.72 ns で問題ない。
Latency は 321 クロックだった。これもほとんど 1 クロックで 1 ピクセルを処理できているので問題ないはず。。。
リソース使用量は、FF が 251 個、LUT が 791 個だった。

C/RTL 協調シミュレーションを行った。結果を示す。
hls_relu_4_180419.png

Latency は 351 クロックだった。

C/RTL 協調シミュレーションの波形を示す。
hls_relu_5_180419.png

ins_V_empty_n の前の部分が間が空いているのが分かる。これは、user 信号が 1 にアサートされたときがスタートなのだが、それを待っている do while() 文のLatency が長いことが原因のようだ。
その部分を拡大してみよう。

hls_relu_6_180419.png

1 にアサートされる間隔は、60 ns で 6 クロック分に当たる。

解決策としては、その do while() 文にPIPELINE指示子を入れてみよう。
hls_relu_7_180419.png

これで、再度 C コードの合成を行った。結果を示す。
hls_relu_8_180419.png

Estmated は 6.77 ns となった。
Latency は、317 クロックと 321 クロックから 4 クロック改善している。
リソース使用量は、FF が 165 個で、LUT が 360 個だった。FF、LUT 共に少なくなっている。

もう一度、C/RTL 協調シミュレーションを行った。結果を示す。
hls_relu_9_180419.png

Latency は 322 クロックで、前回の 351 クロックより 29 クロック少なくなっている。

C/RTL 協調シミュレーションの波形を示す。
hls_relu_10_180419.png

do while() 文と次の for() 文の間が 3 クロック間が空いているだけで、他はWait 無しに処理できているようだ。

Vivado synthesis, place and route にチェックを入れて Export RTL を行った。結果を示す。
hls_relu_11_180419.png

SLICE は 48 個使用している。
LUT は 119 個、FF は 132 個使用している。
CP achieved post-implementation は 5.008 ns で問題なさそうだ。
  1. 2018年04月19日 05:04 |
  2. DNN
  3. | トラックバック:0
  4. | コメント:0