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

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

FPGAの部屋

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

ikwzm さんの”Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動かす”をやってみる9(ソーベル・フィルタ編2)

ikwzm さんの”Ultra96/Ultra96-V2 向け Debian GNU/Linux で XRT(Xilinx Runtime) を動かす”をやってみる8(ソーベル・フィルタ編1)”の続き。

前回は、ラプラシアン・フィルタだけでは寂しいので、フィルタばかりで何なんだが、ソーベル・フィルタの Viits アクセラレーション・アプリケーション・プロジェクトを作ってみたということで、ソースコードを貼って、Vitis 2019.2 のプロジェクトを作成し、ビルド成功した。今回は、Ultra96V2 の Ubuntu 18.04 に持って行って動作を確認する。

なお、Windows 10 の WSL を使用して Ubuntu 18.04 上で Vitis 2019.2 を使用している。

sobel_filter_aixm/Hardware/sd_card ディレクトリの sobel_filter_aixm.exe と sobel_filter_aixm.xclbin を Ultra96V2 の Ubuntu 18.04 に SFTP でアップロードした。なお、work ディレクトリの下に、ZynqMP-FPGA-XRT-sobel ディレクトリを作成して、その下に SFTP した。
U96_Ubuntu_Vitis_18_200418.png

ZynqMP-FPGA-XRT-sobel ディレクトリに sobel_filter_axim.bif と zocl_sobel.dts を作成した。
U96_Ubuntu_Vitis_19_200418.png

sobel_filter_axim.bif を示す。

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


zocl_sobel.dts を示す。

/dts-v1/; /plugin/;
/ {
    fragment@0 {
        target-path = "/fpga-full";
        __overlay__ {
            firmware-name = "sobel_filter_axim.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>;
            };
        };
    };
}

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

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

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

bin ファイルを /lib/firmware/ ディレクトリにコピーして、zocl ドライバなどをロードする。その際に、dtbcocfg.rb をコピーするのを忘れていたので、コピーする。
sudo cp sobel_filter_axim.bin /lib/firmware/
cp ../ZynqMP-FPGA-XRT-lap_dma/dtbocfg.rb .
sudo ./dtbocfg.rb --install zocl --dts zocl_sobel.dts

U96_Ubuntu_Vitis_23_200418.png

dmesg の終わりの 18 行を見た。問題なさそうだ。 fclkcfg の表示もある。
dmesg | tail -18
U96_Ubuntu_Vitis_24_200418.png

test.bmp をコピーし忘れていたので、カレントディレクトリにコピーしてから、sobel_filter_axim.exe を実行した。

cp ../ZynqMP-FPGA-XRT-Example-1-Ultra96/test.bmp .
./sobel_filter_axim.exe sobel_filter_axim.xclbin


U96_Ubuntu_Vitis_25_200418.png

実行時間は、698 us だった。

ZynqMP-FPGA-XRT-sobel ディレクトリの下に、temp_sobel.bmp が生成された。
U96_Ubuntu_Vitis_26_200418.png

temp_sobel.bmp 画像を表示してみたが、エッジ検出されている。
U96_Ubuntu_Vitis_27_200418.png

数回実行してみたが、やはり実行時間は変動する。
U96_Ubuntu_Vitis_28_200418.png

最後に、zocl などのドライバを削除した。
sudo ./dtbocfg.rb -r zocl
U96_Ubuntu_Vitis_29_200418.png
  1. 2020年04月19日 04:05 |
  2. Vitis
  3. | トラックバック:0
  4. | コメント:0