”
Vivado HLS 2017.4 で片方が定数の場合の乗算の検討8(畳み込み演算5)”の続き。
前回は、2 つの畳み込み演算を並列に行うようにC ソースコードを書き換えたのだが、積和演算はLUT だけを使用した演算だった。さて、なぜLUT を使った演算にしてみたかというと、畳み込みニューラルネットワークを1クロックで演算できるようにするためにはDSP48E を使用すると足りなくなるという推測に基づいていた。もう 1 クロック動作はあきらめているので、DSP48E を使用しても問題は無さそうだ。ということで、DSP48E を使用する通常の積和演算をやってみた。
multi_test4.cpp で
#pragma HLS RESOURCE variable=out_temp core=AddSub
をコメントアウトした。

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

Estimated は 10.68 ns で Target の 10 ns を超えてしまっているが、Latency は 2 クロックで、これは短い。
リソース使用量は、DSP48E を使用され、14 個、FF は 350 個、LUT は 1,304 個使用している。
Latency が 2 クロックは短いな。。。
C/RTL 協調シミュレーションを行った。結果を示す。

やはり Latency は 2 クロックだった。
C/RTL 協調シミュレーションの波形を示す。

2 つの畳み込み演算器がデータを受け取ってから、演算を行い、出力の値をその先の回路が受け取るまでに 2 クロックだった。
Export RTL を行った。結果を示す。
なお、Vivado synthesis, place and route にチェックを入れてある。

LUT は 392 個、FF が 179 個、何故か?DSP が 23 個だった?
インプリメント後の遅延時間は 9.404 ns でギリギリだが、Vivado で合成してもうまく行くかもしれない?
さて、Estimated は 10.68 ns なので、10 ns 以下にしようとして、Uncertainty を 3 ns にした。
その合成結果を示す。

Latency は 3 クロックに増加した。
リソース使用量は、DSP48E が 14 個で変わらなかった。FF は 600 個で 350 個から増えている。LUT は1,304 個で変わらなかった。
Export RTL を行った。結果を示す。
なお、Vivado synthesis, place and route にチェックを入れてある。

LUT は 578 個で、392 個から増えていた。FF は 256 個で、これも179 個から増えた。DSP48E は 14 個でこれは合成の時と同じ数だ。DSP48E は本来合成の時と同じ数のはずだ。なぜ、前は増えたのだろうか?
- 2018年02月06日 05:03 |
- Vivado HLS
-
| トラックバック:0
-
| コメント:0