FC2カウンター FPGAの部屋 finn-hlslib をやってみる2(hls-syn-conv プロジェクト)
FC2ブログ

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

FPGAの部屋

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

finn-hlslib をやってみる2(hls-syn-conv プロジェクト)

finn-hlslib をやってみる1(インストールと hls-syn-add プロジェクト)”の続き。

前回は、Xilinx の FINN を利用した量子化ニューラルネットワーク(QNN)のハードウェア・アクセラレーション用のHLSライブラリの finn-hlslib をやってみようということで、インストールというか git clone と Vivado HLS プロジェクトの hls-syn-add をやってみた。今回は、畳み込み層の hls-syn-conv プロジェクトをやってみた。

まずは、test_conv3.tcl を編集して C/RTL 協調シミュレーションのときに波形が観察できるように cosim_design に -trace_level all を追加した。
finn-hlslib_13_200521.png

これで
vivado_hls test_conv3.tcl
を実行した。
finn-hlslib_14_200521.png
finn-hlslib_15_200521.png

Vivado HLS の hls-syn-conv プロジェクトが作成された。
finn-hlslib_21_200522.png

ハードウェア化される conv_top.cpp を示す。
finn-hlslib_18_200522.png

ここで使用されている ConvLayer_Batch() のマニュアルはここにある。

ConvLayer_Batch() のテンプレート・パラメータを紹介する。
ConvKernelDim (畳み込みカーネルの次元数): 3 (3 x 3 のカーネル)
IFMChannels (入力特徴マップの数): 2
IFMDim (入力特徴マップの幅と高さ(正方形と仮定)): 8
OFMChannels (出力特徴マップの数) : 1
OFMDim (出力特徴マップの幅と高さ(正方形と仮定)): 6
SIMD (並列に計算される入力列の数): 2
PE (並列に計算される出力行の数): 1
TSrcI (入力アクティベーションのDataType(MACで使用される)): Slice > (INPUT_PRECISION = 8)
TDstI (出力アクティベーションのDataType(アクティベーションによって生成されたもの)): Slice >
TWeightI (重みのDataType(MACで使用される)): Identity

入力パラメータのアクティベーション・クラスは PassThroughActivation>()
重みは前回生成した memdata.h の static BinaryWeights<2,1,9> weights を使用している。 9 要素あるので 3 x 3 のカーネルのパラメータなのだと思う。

畳み込みは 8 x 8 の要素に 3 x 3 のカーネルを畳み込んで出力は 6 x 6 になったということだろう。つまり、パッディングはなしということだ。

C/RTL 協調シミュレーションの結果を示す。
Latency は 354 クロックだった。
finn-hlslib_19_200522.png

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

出力は 36 個ある。つまり、6 x 6 ということだろう?

Export RTL をやってみた。結果を示す。
finn-hlslib_22_200522.png
  1. 2020年05月22日 05:08 |
  2. finn-hlslib
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/4891-3a8357be
この記事にトラックバックする(FC2ブログユーザー)