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

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

FPGAの部屋

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

ikwzm さんの”Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動かす”をやってみる7(device tree overlay 編)

ikwzm さんの”Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動かす”をやってみる6(fclkcfg, udmabufインストール編)”の続き。

前回は、fclkcfg や udmabuf がインストールされていないということなので、インストールして、もう一度、XRT を使用して、streaming_lap_fitler5 を動作させてみたところ正常に動作した。今回は、同じラプラシアン・フィルタのアプリで残念だが、lap_filter_axis_dma を試してみたいと思う。そして、リブートすることなしに各ドライバを一旦外して、もう一度 streaming_lap_fitler5 用の zcol を含んだドライバをロードして streaming_lap_fitler5 を動作させてみよう。

まずは、WSL 上の Ubuntu 18.04 の Vitis GUI で lap_filter_axis_dma を使って ikwzm さんの Ultra96-V2 上の Ubuntu 18.04 で zocl ドライバを含むドライバをロードして動作を確かめてみよう。
WSL 上の Ubuntu 18.04 の Vitis GUI で lap_filter_axis_dma については、以下のブログで書いてある。
Windows10 の WSL で Vitis アクセラレーション・アプリケーション・プロジェクトを作成しビルドする1
Windows10 の WSL で Vitis アクセラレーション・アプリケーション・プロジェクトを作成しビルドする2

WSL の Ubuntu 18.04 上で Vitis の Workspace の lap_filter_axis_dma/Hardware/sd_card ディレクトリの lap_filter_axis_dma.exe, lap_filter_axis_dma.xclbin を Ultra96-V2 の Ubuntu 18.04 上に SFTP する。
U96_Ubuntu_Vitis_1_200416.png

Ultra96-V2 の Ubuntu 18.04 でホームディレクトリの下の work の下に ZynqMP-FPGA-XRT-lap_dma ディレクトリを新規作成する。
cd work
mkdir ZynqMP-FPGA-XRT-lap_dma
cd ZynqMP-FPGA-XRT-lap_dma/

U96_Ubuntu_Vitis_2_200416.png

WSL の Ubuntu 18.04 上で Vitis の Workspace の lap_filter_axis_dma/Hardware/sd_card ディレクトリの lap_filter_axis_dma.exe, lap_filter_axis_dma.xclbin を Ultra96-V2 の Ubuntu 18.04 上の ~/work/ZynqMP-FPGA-XRT-lap_dma ディレクトリ上に SFTP した。
U96_Ubuntu_Vitis_3_200416.png

../ZynqMP-FPGA-Example -1-Ultra96 ディレクトリから dtbocfg.rb をコピーした。
新たに lap_filter_axis_dma.bif と zocl_lap_dma.dts を作成した。
lap_filter_axis_dma.bif を示す。

all:
{
    [destination_device = pl] lap_filter_axis_dma.bit
}


zocl_lap_dma.dts を示す。

/dts-v1/; /plugin/;
/ {
    fragment@0 {
        target-path = "/fpga-full";
        __overlay__ {
            firmware-name = "lap_filter_axis_dma.bin";
        };
        };
    fragment@1 {
        target-path = "/amba_pl@0";
        __overlay__ {
            #address-cells = <2>;
            #size-cells = <1>;
            zyxclmm_drm {
                compatible = "xlnx,zocl";
                status = "okay";
                reg = <0x0 0xA0000000 0x10000>;
            };
            fclk0 {
                compatible    = "ikwzm,fclkcfg-0.10.a";
                clocks        = <&zynqmp_clk 0x47>;
                insert-rate   = "100000000";
                insert-enable = <1>;
                remove-rate   = "1000000";
                remove-enable = <0>;
            };
        };
    };
};


lap_filter_axis_dma.bin に変更しただけで、ほとんど、ikwzm の書いたファイルと同一だ。

XRT へのリンクを準備する。
source /opt/xilinx/xrt/setup.sh
U96_Ubuntu_Vitis_5_200416.png

xclbin ファイルから bit ファイルを抜き出す。
xclbinutil --input lap_filter_axis_dma.xclbin --dump-section BITSTREAM:RAW:lap_filter_axis_dma.bit
U96_Ubuntu_Vitis_6_200416.png

bit ファイルから bin ファイルを生成する。
bootgen -arch zynqmp -image lap_filter_axis_dma.bif -o lap_filter_axis_dma.bin
U96_Ubuntu_Vitis_7_200416.png

bin ファイルを /lib/firmware/ ディレクトリにコピーして、zocl ドライバなどをロードする。
sudo cp lap_filter_axis_dma.bin /lib/firmware/
sudo ./dtbocfg.rb --install zocl --dts zocl_lap_dma.dts

U96_Ubuntu_Vitis_8_200416.png

dmesg の終わりの 18 行を見た。問題なさそうだ。
dmesg | tail -18
U96_Ubuntu_Vitis_9_200416.png

test.bmp をコピーし忘れていたので、カレントディレクトリにコピーしてから、lap_filter_axis_dma.exe を実行する。
cp ../ZynqMP-FPGA-XRT-Example-1-Ultra96/test.bmp .
./lap_filter_axis_dma.exe lap_filter_axis_dma.xclbin

U96_Ubuntu_Vitis_10_200416.png

1.65 ms と遅い。なぜだろうか?

あと2回実行したが、1.31 ms と 1.45 ms だった。前実行したときよりも遅い。
U96_Ubuntu_Vitis_11_200416.png

temp_lap.bmp も生成されているのが分かる。
U96_Ubuntu_Vitis_12_200416.png

さて、次にドライバを外して、再度 zocl などのドライバをロードして streaming_lap_fitler5 を実行させてみよう。
sudo ./dtbocfg.rb -r zocl
cd ../ZynqMP-FPGA-XRT-Example-1-Ultra96/
sudo ./dtbocfg.rb --install zocl --dts zocl.dts

U96_Ubuntu_Vitis_13_200416.png

streaming_lap_fitler5 を実行する。
./streaming_lap_filter5.exe streaming_lap_filter5.xclbin
U96_Ubuntu_Vitis_14_200416.png

実行時間は2.01 ms だった。

おまけで、もう一度、ドライバを外して、ドライバを付けて、 lap_filter_axis_dma を動作させてみたところ、0.603 ms, 0.646 ms, 0.619 ms だった。大体、通常はこのくらいの実行時間だったので、前の実験ではなぜ遅かったのか分からない?
U96_Ubuntu_Vitis_15_200416.png

リブートなしで、ドライバを付けたり外したりして、異なるアプリケーションを動作させることができた。しかし、実行時間は不安定なのかもしれない?
  1. 2020年04月17日 05:02 |
  2. Vitis
  3. | トラックバック:0
  4. | コメント:0