

現在、私はインタフェース2019年1月号を元にultra96でハードウェアアクセラレーションを試しています。ultra96にvivadohlsで作成した行列演算IPを組み込みYOLOv3を実行しました。すると、bus
errorが起こりました。書いてある通りの手順でやっていたので出来ずに困っています。また、行列乗算をPLで実行するテストプログラムは動きました。

[code]

    ./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
    layer     filters    size              input                output
        0 conv     32  3 x 3 / 1   608 x 608 x   3   ->   608 x 608 x  32  0.639 BFLOPs
        1 conv     64  3 x 3 / 2   608 x 608 x  32   ->   304 x 304 x  64  3.407 BFLOPs
        2 conv     32  1 x 1 / 1   304 x 304 x  64   ->   304 x 304 x  32  0.379 BFLOPs
        3 conv     64  3 x 3 / 1   304 x 304 x  32   ->   304 x 304 x  64  3.407 BFLOPs
    　　　　　　　　　　　　　　　　　　　　中略
      104 conv    256  3 x 3 / 1    76 x  76 x 128   ->    76 x  76 x 256  3.407 BFLOPs
      105 conv    255  1 x 1 / 1    76 x  76 x 256   ->    76 x  76 x 255  0.754 BFLOPs
      106 yolo
    Loading weights from yolov3.weights...Done!
    Bus error
    
[/code]

フロー  
１.xilinxアプリケーションノートXAPP1170にあるソースコード（行列演算）をultra96用に編集しVivadoHLSでロジック回路を生成。

２.作成したロジック回路をvivadoでArm FPGA(Zynq UltraScale+MPSoC)に組み込み、GenerateBitstream →
ExportHardware  
[![画像の説明をここに入力](https://i.stack.imgur.com/95LCa.png)](https://i.stack.imgur.com/95LCa.png)  
3.Vivadoから出たファイルをpetalinuxツールでビルド。その際にultra96上から作成した回路にUIOでアクセスするためにデバイスツリー定義ファイルにgeneric-
uioを記述。また、AXIDMAはシンプルDMAモードにしているおり、LinuxからDMA転送するためにDMAバッファのデバイスドライバudmabufを利用した。petalinuxツールでc記述テンプレートを作成し、githubからダウンロードしたudmabuf.cと差し替えた。

4.ultra96を起動すると/dev/uio1とuio2が生成されている。uio1が行列乗算IP,uio2がAXIDMAが割り当てられている。insmod
udmabuf.ko udmabuf0=1048576 udmabuf1=1048576でバッファサイズの指定をする。

5.darknetのソースコードとyolov3学習済みデータをダウンロードし、コンパイル。画像認識の実行をすると成功しました。

6.シンプルDMAプログラムのヘッダファイル(dma_simple.h),シンプルDMAプログラム本体(dma_simple.c)、行列乗算IPの動作プログラム(matrix.c)をgccでコンパイルして実行するとソフトウェアで実行した結果と行列乗算IPで処理した結果は一致した。

7.yolov3で行列乗算IPを使用するため、src/convolutional_layer.c ,
example/detector.c,include/darknet.hを変更した。またMakeFileを変更してdma_simple.h,dma_simple.cを追加してコンパイルする。  
8.yolov3を実行すると上記のbus errorが出る。

といった流れになります。


CC BY-SA 4.0
2019-12-12T09:29:30.067
61377
2019-12-13T04:47:55.737
2019-12-13T04:47:55.737
31304
31304
question
fpga vivado
YOLOv3でのbus error