FC2カウンター FPGAの部屋 SDSoC
FC2ブログ

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

FPGAの部屋

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

SDSoC 2018.3 WebPACK が出ています

Xilinx 社のSDSoC 開発環境のダウンロードページにSDSoC 2018.3 WebPACK が出ています。
ついにSDSoC のWebPACK が出たようです。これで、心置きなくSDSoC を使えそうですね。
SDSoC_WebPACK_181213.png

でも、おかしなことに SDSoC 2018.3 のリリース・ノートにWebPACK のことが書いていないです。なぜでしょうか?
まだダウンロードしてインストールしたことないですが、やってみたいと思います。
  1. 2018年12月13日 05:24 |
  2. SDSoC
  3. | トラックバック:0
  4. | コメント:0

@ikwzmさんの”FPGA+SoC+Linux+Device Tree Overlay+FPGA Region(SDSoC対応編)”をやってみる4

@ikwzmさんの”FPGA+SoC+Linux+Device Tree Overlay+FPGA Region(SDSoC対応編)”をやってみる3”の続き。

前回は、実行ファイルを実行した後で、一旦ドライバを取り外して異なるマスタの回路をロードして、マスタ用の実行ファイルを実行することができた。今回は、”ZYBO-Z7-20のDebianにOpenCV 3.1.0をインストール”で ZYBO-Z7-20 の Debian に OpenCV 3.1.0 をインストールすることができたので、”reVISION-Zybo-Z7-20をやってみた6(Zybo-Z7-20 で確認)”でやったバイラテラル・フィルタや、”reVISION-Zybo-Z7-20をやってみた8(Dense Non-Pyramidal Optical Flow)”でやった Dense Non-Pyramidal Optical Flow を @ikwzm さんの”FPGA+SoC+Linux+Device Tree Overlay+FPGA Region(SDSoC対応編)”でやってみることにする。

まずはバイラテラル・フィルタからやってみよう。
まずは、ZYBO-Z7-20 の Debian の ~/sdsoc_test ディレクトリに bilateral_ex と dnp_of の 2 つのディレクトリを作成した。
~/sdsoc_test/bilateral_ex ディレクトリには、_p0_.dts と xlink.dts と reVISION-Zybo-Z7-20 で生成したバイラテラル・フィルタの Debug/sd_card ディレクトリをSFTP してコピーした sd_card ディレクトリがある。なお、_p0_.dts と xlink.dts については、”@ikwzmさんの”FPGA+SoC+Linux+Device Tree Overlay+FPGA Region(SDSoC対応編)”をやってみる2”を参照のこと。

sd_card/_sds/_p0_.bin を /lib/firmware/ にコピーして、 _p0_.dts をロードした。更に xlink.dts をロードした。
./sd_card/bilateral_ex.elf を実行したところ libv4l2subdev.so.0 共有ライブラリが無いというエラーになってしまった。
sudo cp sd_card/_sds/_p0_.bin /lib/firmware/
sudo dtbocfg.rb --install _p0_ --dts _p0_.dts
sudo dtbocfg.rb --install xlnk --dts xlnk.dts
sudo ./sd_card/bilateral_ex.elf

SDSoC_ikwzm_34_180406.png

エラー内容を示す。

./sd_card/bilateral_ex.elf: error while loading shared libraries: libv4l2subdev.so.0: cannot open shared object file: No such file or directory


reVISION-Zybo-Z7-20 の Micro SD カードのROOTFS パーテションを libv4l2subdev.so.0 で検索すると /usr/lib/ ディレクトリで発見した。
SDSoC_ikwzm_35_180406.png

”FPGA+SoC+Linux+Device Tree Overlay+FPGA Region(SDSoC対応編)”の Micro SD カードの元から /usr/lib/に入ってたファイルを作成した old_lib にコピーした。
SDSoC_ikwzm_36_180406.png

reVISION-Zybo-Z7-20 の Micro SD カードのROOTFS パーテションの libv4l2subdev.so.0 を”FPGA+SoC+Linux+Device Tree Overlay+FPGA Region(SDSoC対応編)”の Micro SD カードの /usr/lib/ にコピーした。(異なるターミナルでコピーを行った)
その後もう一度、バイラテラル・フィルタの実行ファイルを実行した。
sudo ./sd_card/bilateral_ex.elf
すると、libmediactl.so.0 が足りないと言われた。エラー内容を示す。

./sd_card/bilateral_ex.elf: error while loading shared libraries: libmediactl.so.0: cannot open shared object file: No such file or directory


同様に、reVISION-Zybo-Z7-20 の Micro SD カードのROOTFS パーテションの libmediactl.so.0 を”FPGA+SoC+Linux+Device Tree Overlay+FPGA Region(SDSoC対応編)”の Micro SD カードの /usr/lib/ にコピーした。(異なるターミナルでコピーを行った)
そして、
sudo ./sd_card/bilateral_ex.elf
今度は動作したが、im0.jpg を指定するのを忘れていた。
sudo ./sd_card/bilateral_ex.elf ./sd_card/im0.jpg
今度は成功した。実行時のレポートを示す。

sigma_color: 7.72211 sigma_space: 0.901059
elapsed time 14358244
Minimum error in intensity = 0
Maximum error in intensity = 1
Percentage of pixels above error threshold = 0.00236304 Count: 4


SDSoC_ikwzm_37_180406.png

SDSoC_ikwzm_38_180406.png

ZYBO-Z7-20 の Debian の ~/sdsoc_test/bilateral/ex/ ディレクトリを nautilus で見たところだ、error.png, hls_out.jpg, output_ocv.png が生成されている。
SDSoC_ikwzm_40_180406.png

error.png を示す。
SDSoC_ikwzm_41_180406.jpg

hls_out.jpg を示す。
SDSoC_ikwzm_42_180406.jpg

output_ocv.png を示す。
SDSoC_ikwzm_43_180406.jpg

次に、ドライバを削除して Dense Non-Pyramidal Optical Flow をやってみよう。
cd ~/sdsoc_test/dnp_of
sudo dtbocfg.rb --remove _p0_
sudo dtbocfg.rb --remove xlnk
sudo cp sd_card/_sds/_p0_.bin /lib/firmware/
sudo dtbocfg.rb --install _p0_ --dts _p0_.dts
sudo dtbocfg.rb --install xlnk --dts xlnk.dts

SDSoC_ikwzm_44_180406.png

cd sd_card/
sudo ./dnp_of.elf im0.jpg im1.jpg

dnp_of.elf を実行するとエラーになってしまった。
SDSoC_ikwzm_45_180406.png

エラー内容を示す。

Failed to allocate memory

Failed to allocate memory

Message from syslogd@debian-fpga at Apr 6 05:03:36 ...
kernel:[ 4499.414190] Internal error: Oops: 17 [#1] PREEMPT SMP ARM

Message from syslogd@debian-fpga at Apr 6 05:03:36 ...
kernel:[ 4499.505378] Process dnp_of.elf (pid: 4117, stack limit = 0xe25b4218)

Message from syslogd@debian-fpga at Apr 6 05:03:36 ...
kernel:[ 4499.511714] Stack: (0xe25b5e00 to 0xe25b6000)

Message from syslogd@debian-fpga at Apr 6 05:03:36 ...
kernel:[ 4499.516061] 5e00: 00000000 c0113bc4 00000000 ee477600 000007e8 00000000 00000002 00000000

Message from syslogd@debian-fpga at Apr 6 05:03:36 ...
kernel:[ 4499.524220] 5e20: 001fa400 00000001 00000005 e32b007c 600f0013 00000000 00000014 ee7ed840

Message from syslogd@debian-fpga at Apr 6 05:03:36 ...
kernel:[ 4499.532378] 5e40: 83c00743 00000000 bebdf230 00000000 c0045808 bebdf230 e25b4000 00000000

Message from syslogd@debian-fpga at Apr 6 05:03:36 ...
kernel:[ 4499.540538] 5e60: 00000000 bf0376d0 00000000 e25b5ed0 00000000 00000001 e25b5ea4 00000000

Message from syslogd@debian-fpga at Apr 6 05:03:36 ...
kernel:[ 4499.548697] 5e80: e297adb8 83c00703 00000000 00000000 00000000 ffefe70c ef29a734 00000000

Message from syslogd@debian-fpga at Apr 6 05:03:36 ...
kernel:[ 4499.556856] 5ea0: efaac420 ee477300 d5480010 00000000 00000000 00000000 007e9000 00000000

Message from syslogd@debian-fpga at Apr 6 05:03:36 ...
kernel:[ 4499.565015] 5ec0: 00000000 00000000 00000002 00000000 00000000 b659a000 00032030 0000002c

Message from syslogd@debian-fpga at Apr 6 05:03:36 ...
kernel:[ 4499.573175] 5ee0: bebdf2b4 00000000 00000001 001fa400 00000000 0002f258 00032030 0000002c

Message from syslogd@debian-fpga at Apr 6 05:03:36 ...
kernel:[ 4499.581334] 5f00: 0016b790 bebdf230 ee6cc508 ee4f7780 c0045808 bebdf230 e25b4000 00000000

Message from syslogd@debian-fpga at Apr 6 05:03:36 ...
kernel:[ 4499.589492] 5f20: 00000000 c01f89fc bebdf230 c01f9288 00000000 00000000 ef29a700 00000000

Message from syslogd@debian-fpga at Apr 6 05:03:36 ...
kernel:[ 4499.597653] 5f40: ef085de0 ae43e000 e3324300 ef085de8 ef29a704 c01d0804 00000009 c02033ac

Message from syslogd@debian-fpga at Apr 6 05:03:36 ...
kernel:[ 4499.605811] 5f60: 00000009 0002f258 007e9000 c0045808 00000009 ee4f7781 ee4f7780 c0045808

Message from syslogd@debian-fpga at Apr 6 05:03:36 ...
kernel:[ 4499.613971] 5f80: bebdf230 e25b4000 00000000 c01f93cc 00000001 0002f258 007e9000 00000036

Message from syslogd@debian-fpga at Apr 6 05:03:36 ...
kernel:[ 4499.622130] 5fa0: c0107ac4 c01078e0 00000001 0002f258 00000009 c0045808 bebdf230 0002ff48

Message from syslogd@debian-fpga at Apr 6 05:03:36 ...
kernel:[ 4499.630288] 5fc0: 00000001 0002f258 007e9000 00000036 00000002 00000000 00000000 00000000

Message from syslogd@debian-fpga at Apr 6 05:03:36 ...
kernel:[ 4499.638448] 5fe0: 0002f2e4 bebdf22c 0001b66c b653f716 000f0030 00000009 04050607 00020103

Message from syslogd@debian-fpga at Apr 6 05:03:36 ...
kernel:[ 4499.686451] Code: eb44a1dc e15b0006 0a000011 e7990106 (e5903014)

^CApplication Terminated by User


”Failed to allocate memory”が 2 回出ているが malloc() はソース上で 3 回実行されている。1 回めは通っても 2 回め、3 回めは通らなかったのだろうか?

reVISION-Zybo-Z7-20 のバイラテラル・フィルタは実行できたが、Dense Non-Pyramidal Optical Flow は”Failed to allocate memory”で実行できなかった。
  1. 2018年04月07日 04:19 |
  2. SDSoC
  3. | トラックバック:0
  4. | コメント:0

@ikwzmさんの”FPGA+SoC+Linux+Device Tree Overlay+FPGA Region(SDSoC対応編)”をやってみる3

@ikwzmさんの”FPGA+SoC+Linux+Device Tree Overlay+FPGA Region(SDSoC対応編)”をやってみる2”の続き。

この記事は、”FPGA+SoC+Linux+Device Tree Overlay+FPGA Region(SDSoC対応編)”を全面的に参照しています。

前回は、Xilinx APF Accelerator driver を使用してSDSoC で作成した実行ファイルを実行することができた。今回は、前回の実行ファイルを実行した後で、一旦ドライバを取り外して異なるマスタの回路をロードして、マスタ用の実行ファイルを実行してみよう。

まずは、前回の multi_apuint をもう一度やってみよう。
ZYBO-Z7-20 の debian 上で
cd sdsoc_test/multi_apuint/
sudo dtbocfg.rb --install _p0_ --dts _p0_.dts
sudo dtbocfg.rb --install xlnk --dts xlnk.dts
sudo ./sd_card/multi_apuint.elf

すでに、sudo cp sd_card/_sds/_p0_.bin /lib/firmware/ は昨日やってあるので省略。
SDSoC_ikwzm_22_180403.png

”multi_out = 100”が表示された。問題ない。
その時のシリアル接続のターミナルの表示を示す。
SDSoC_ikwzm_23_180403.png

そのまま、ドライバを削除する。
sudo dtbocfg.rb --remove _p0_
sudo dtbocfg.rb --remove xlnk


dma_pow をZYBO-Z7-20 の debian 上で動作させるのだが、最初にSDSoCの画面を示す。
SDSoC_ikwzm_25_180403.png

Vivado HLS の合成結果を示す。
SDSoC_ikwzm_26_180403.png

次にソースコードを示そう。
まずは、DMA_pow.cpp から。

#pragma SDS data zero_copy(in[0:10])
#pragma SDS data zero_copy(out[0:10])

int DMA_pow2(int *in, int *out){

    int i;

    for (i=0; i<10; i++){
     int temp = *in++;
        *out++ =temp * temp;
    }

    return(0);
}


Vivado HLS で使用した”FPGA+SoC+Linux実践勉強会での課題をやってみた1(Vivado HLS編)”に示すコードではエラーになってしまったので変更した。

DMA_pow_tb.cpp を示す。

#include <stdio.h>
#include <stdlib.h>
#include "sds_lib.h"

int DMA_pow2(int *in, int *out);

int main(){
    int *data;
    int *result;
    int i;

    if((data=(int *)sds_alloc(sizeof(int)*10)) == NULL){
     fprintf(stderr, "Can't allocate data[10]\n");
     exit(1);
    }

    if((result=(int *)sds_alloc(sizeof(int)*10)) == NULL){
     fprintf(stderr, "Can't allocate result[10]\n");
     exit(1);
    }

    for(int i=0; i<10; i++){
     data[i] = i;
    }

    DMA_pow2(data, result);

    for(i=0; i<10; i++){
        printf("data[%d] = %d, result[%d] = %d\n", i, data[i], i, result[i]);
    }
}


テストベンチは、sds_alloc() を使用して、連続領域にメモリをアサインしていて、DMA_pow.cpp の方がゼロコピーでDMA するようにしてある。最も、このメモリ量だと 4k バイトの1ページに届かないので、連続領域にメモリをアサインしなくも問題ないかもしれない?

ZYBO-Z7-20 の debian 上で dma_pow ディレクトリを作成した。
cd ~/sdsoc_test
mkdir dma_pow
cd dma_pow

SDSoC_ikwzm_27_180403.png

SFTP アプリケーションソフトを PC 上で立ち上げて、PC 上の sdx_workspaces/revisio_zybo_z7_20_ws/DMA_pow/Debug/sd_card ディレクトリを ZYBO-Z7-20 の debian 上の /home/fpga/sdsoc_test/dma_pow/ ディレクトリ上にコピーした。
SDSoC_ikwzm_28_180403.png

tree コマンドで確かめた。そして、multi_apuint で作成した _p0_.dts と xlnk.dts はそのまま使用できるので、コピーした。
tree sd_card
cp ../multi_apuint/*.dts

SDSoC_ikwzm_29_180403.png

sudo cp sd_card/_sds/_p0_.bin /lib/firmware/
sudo dtbocfg.rb --install _p0_ --dts _p0_.dts
sudo dtbocfg.rb --install xlnk --dts xlnk.dts

SDSoC_ikwzm_30_180403.png

sudo ./sd_card/DMA_pow.elf
SDSoC_ikwzm_31_180403.png

結果が問題なく表示された。成功だ。。。

その時のシリアル接続のターミナルの表示を示す。
SDSoC_ikwzm_32_180403.png

これで、SDSoC で作ったビットファイルとアプリケーションソフトを自分の環境で実行することができた。しかも、ZYBO-Z7-20 の debian を起動しながら入れ替えることができた。今までは、出来上がった sd_card ディレクトリの内容を SD カードに書いて、ボードに入れ、電源ON だったのだが、今回は、起動中のボードのLinux に SFTP してファイルを渡せば、ボードのLinux が動作したまま、いくらでも SDSoC の結果を試せるということになる。作って頂いた @ikwzm さん、ありがとうございました。
  1. 2018年04月04日 04:59 |
  2. SDSoC
  3. | トラックバック:0
  4. | コメント:0

@ikwzmさんの”FPGA+SoC+Linux+Device Tree Overlay+FPGA Region(SDSoC対応編)”をやってみる2

@ikwzmさんの”FPGA+SoC+Linux+Device Tree Overlay+FPGA Region(SDSoC対応編)”をやってみる1”の続き。

この記事は、”FPGA+SoC+Linux+Device Tree Overlay+FPGA Region(SDSoC対応編)”を全面的に参照しています。

前回は、Xilinx APF Accelerator driver のインストールを行った。今回は、Xilinx APF Accelerator driver を使用してSDSoC で作成した実行ファイルを実行してみよう。

reVISION-Zybo-Z7-20 プラットフォームでmulti_apuint プロジェクトを作成した。
ソースコードは”Vivado HLS 勉強会1(基礎編)を公開しました”にあるので参照のこと。
SDSoC_ikwzm_8_180402.png

SDSoC の Vivado HLS のレポートを示す。
SDSoC_ikwzm_13_180403.png

sdx_workspaces/revisio_zybo_z7_20_ws/multi_apuint/Debug/sd_card ディレクトリを示す。
SDSoC_ikwzm_9_180402.png

ZYBO-Z7-20 の Debian にログインして sdsoc_test ディレクトリを作成し、その下に multi_apuint ディレクトリを作成した。
mkdir sdsoc_test
cd sdsoc_test
mkdir multi_apuint
cd multi_apuint

SDSoC_ikwzm_10_180402.png

sdx_workspaces/revisio_zybo_z7_20_ws/multi_apuint/Debug/sd_card ディレクトリをSFTP で ZYBO-Z7-20 の Debian の /home/fpga/sdsoc_test/multi_apuint ディレクトリの下にコピーした。
SDSoC_ikwzm_11_180402.png

/home/fpga/sdsoc_test/multi_apuint ディレクトリの下のディレクトリ構造を示す。
SDSoC_ikwzm_12_180402.png

/home/fpga/sdsoc_test/multi_apuint ディレクトリに _p0_.dts を作成した。
SDSoC_ikwzm_14_180403.png

_p0_.bin を /lib/firmware/ ディレクトリにコピーして、_sds/_p0.bin をFPGA にダウンロードする。
sudo cp sd_card/_sds/_p0_.bin /lib/firmware/
sudo dtbocfg.rb --install _p0_ --dts _p0_.dts

SDSoC_ikwzm_15_180403.png

ZYBO-Z7-20 の DONE LED が点灯してコンフィギュレーションできたことが分かった。
このターミナルは ssh ログインしてるターミナルなので、シリアル接続のターミナルにメッセージが出いている。
SDSoC_ikwzm_16_180403.png

Xilinx APF Accelerator driver を有功にする。
ZYBO-Z7-20 の Debian の /home/fpga/sdsoc_test/multi_apuint ディレクトリに xlnk.dts を作成した。
SDSoC_ikwzm_17_180403.png

sudo dtbocfg.rb --install xlnk --dts xlnk.dts
sudo ./sd_card/multi_apuint.elf

xlnk が開けないというエラーだった。
SDSoC_ikwzm_18_180403.png

@ikwzmさんの”FPGA+SoC+Linux+Device Tree Overlay+FPGA Region(SDSoC対応編)”をやってみる1”にも追記で書いたが、コマンドが足りなかったようだ。最初それがわからなかったので、dpkg でインストールすることにした。
cd ~/xlnk-kernel-module/
dpkg -i xlnk-kernel-module-4.14.21-armv7-fpga_0.0.1-1_arm.deb

SDSoC_ikwzm_19_180403.png

もう一度、
sudo dtbocfg.rb --install xlnk --dts xlnk.dts
sudo ./sd_card/multi_apuint.elf

今度はうまく行って、”multi_out = 100”が表示された。
SDSoC_ikwzm_20_180403.png

その時のシリアル接続のターミナルの表示を示す。
SDSoC_ikwzm_21_180403.png
  1. 2018年04月03日 20:31 |
  2. SDSoC
  3. | トラックバック:0
  4. | コメント:0

@ikwzmさんの”FPGA+SoC+Linux+Device Tree Overlay+FPGA Region(SDSoC対応編)”をやってみる1

@ikwzmさんの作ってくれた”FPGA+SoC+Linux+Device Tree Overlay+FPGA Region(SDSoC対応編)”をやってみることにした。
SDSoC は、プロジェクトをビルドしてSD カードに書いて、基板を起動しても RAM イメージのLinux が立ち上がってアプリケーションソフトを起動して機能を実現する方式だ。しかしそれに不満があった。SDSoC は、Root File System も指定できるようだが、それでも SDSoC 用に1つMicro SD カードを用意することには代わり無い。
私の希望は、今まで使っている育て上げてきたLinux 上で SDSoC から出力された実行ファイルが実行できるということだ。それを @ikwzmさんが”FPGA+SoC+Linux+Device Tree Overlay+FPGA Region(SDSoC対応編)”で実現してくれたので、使ってみない手は無い。。。
しかも、FPGA+SoC+Linux+Device Tree Overlay+FPGA Region を使用すれば、Linux をリブートすること無しに、FPGA のコンフィギュレーション、デバイス・ツリーのロード、PS のクロック設定ができてしまう。つまり、Linux のリブート無しに SDSoC の実行ファイルを実行できるのだ。これは使わない手は無い。。。 @ikwzm さん、ありがとうございました。

さて早速、やってみよう。
本当は、@ikwzm さんの”FPGA+SoC+Linux+Device Tree Overlay+FPGA Region(ブートイメージの提供)”の通りに Debian の Micro SD カードを作る必要があるのだが、”FPGA+SoC+Linux実践勉強会での課題をやってみた1(Vivado HLS編)”からのブログにあるように、2017年の12月にその Micro SD カードを作成してあるので、それを使うことにした。

FPGA+SoC+Linux+Device Tree Overlay+FPGA Region(SDSoC対応編)”の https://github.com/ikwzm/xlnk-kernel-module の @ikwzm が用意してくれたパッケージを使用することにした。
git clone git://github.com/ikwzm/xlnk-kernel-module
cd xlnk-kernel-module
git checkout 4.14.21-armv7-fpga
make

SDSoC_ikwzm_2_180331.png

make をしたがエラーになってしまった。 /lib/modules/4.14.21-armv7-fpga/build が無いとの事だった。

/lib/modules/ ディレクトリにあるのは、4.14.14-armv7-fpga だった。
SDSoC_ikwzm_3_180331.png

これはまずい。Makefile を 4.12.14-armv7-fpga に書き換えてみたのだが、ダメなので、もう一度、一から”FPGA+SoC+Linux+Device Tree Overlay+FPGA Region(ブートイメージの提供)”の通りに Micro SD カードを作りなおした。
ただし、ヘッダファイルもインストールした。
sudo dpkg -i linux-headers-4.14.21-armv7-fpga_4.14.21-armv7-fpga-2_armhf.deb

これで、Micro SD カードの Debian はまっさらになったので、 apt update から設定を行った。
sudo apt update
sudo apt upgrade


そして、ファイル・マネージャーの nautilus をインストール。
sudo apt install nautilus
でも、ディスプレイが設定されていないということで起動できなかった。

そこで、ikwzm さんに教えて頂いた xbase-clients と xterm をインストールした。
sudo apt-get install xbase-clients xterm
これで、”ZYBO-Z7-20のDebian上のXクライアントをパソコンのUbuntu上に表示する”の様に nautilus のウインドウを表示することができた。でもまだ文字がトーフ状態だった。(なお、リブートする必要があった)

検索してみるとロケールを日本語にしているのに、日本語フォントが入っていないのが問題ということだった。
対処方法として、梅フォントをインストールした。
sudo apt-get install fonts-vlgothic
sudo apt-get install fonts-horai-umefont
sudo apt-get install fonts-umeplus


これで、ZYBO-Z7-20 に日本語フォントが入った。
nautilus &
で起動するときちんと日本語が見えた。
SDSoC_ikwzm_7_180402.png

これで設定はOK だろう。
さて、さっきの続きだ。
git clone git://github.com/ikwzm/xlnk-kernel-module
cd xlnk-kernel-module
git checkout 4.14.21-armv7-fpga
make

SDSoC_ikwzm_4_180401.png
SDSoC_ikwzm_5_180401.png

make は成功した。良かった。。。

sudo make install
SDSoC_ikwzm_6_180401.png

これも成功した。

(2018/04/03 :追記)
sudo make install の後の
sudo depmod
sudo systemctl start xilinx-apf-driver.service
sudo systemctl enable xilinx-apf-driver.service

を忘れてしまって、うまくインストールできていなかったようだ。
  1. 2018年04月02日 05:32 |
  2. SDSoC
  3. | トラックバック:0
  4. | コメント:0

SDx 2016.3 のプラグマによるハードウェアと性能の違い5

SDx 2016.3 のプラグマによるハードウェアと性能の違い4”の続き。

SDSoC 勉強会SDSoC勉強会_170128_スライド「SDx 2016.3のプラグマによるハードウェアと性能」の18ページの性能比較表で「プラグマ無し」と「SEQUENTIAL」のハードウェア実行時間がばらつくのは、メモリ領域を malloc() で取っているからではないか?という指摘を頂いた。malloc() でとるとページ(4kバイト)ごとに不連続なメモリを使用している可能性がある。ページごとに、スワップアウトしているかどうか?を確かめてスワップアウトされていたらスワップインする必要がある。つまり、ページごとに余計な処理をする必要がある。それで、遅くもなっているし、時間の変動も起こるのではないか?という指摘だった。
それならば、sds_alloc() でCMA 領域に連続メモリ領域を確保すれば大丈夫なはずだ。なお、ソフトウェアはMMU を通っているので、MMUで論理アドレスー物理アドレス変換が自動的に行われるので、CPUから論理アドレスに書けばページが違っていても問題ない。(論点が微妙に違うのはご容赦ください)

さて、前回のSDSoC の lap_filter2 プロジェクトは memcpy() を使った実装を上書きしてしまったので、新たに lap_filter1 プロジェクトを作成した。
SDx_2016_3_2_1_170130.png

今回は、最初から hw_rd_bmp と hw_lapd にメモリ領域を確保する際に、sds_alloc() を使用した。
SDx_2016_3_2_2_170130.png

これで、プラグマ無しにしてRelesase でビルドを行った。
SDx_2016_3_2_3_170130.png

MicroSD カードに sd_card フォルダの内容を書いて、ZYBO の電源ONした。
Linux が立ち上がった。cd /mnt し、 ./lap_filter1.elf を起動した。結果を示す。
SDx_2016_3_2_4_170130.png

ソフトウェア実行時間がたま~にばらつくときがあるのだが、ハードウェア実行時間は安定した。やはり、malloc() で取るとハードウェア実行時間は安定しないようだ。
明らかにソフトウェア実行時間がおかしい値を除いたハードウェア実行時間の5回の平均は、1047 us だった。明らかにおかしい値を除いたソフトウェア実行時間の5回の平均は、854 us だった。

次に、

#pragma SDS data access_pattern(cam_fb:SEQUENTIAL, lap_fb:SEQUENTIAL)

プラグマを使用した場合について、やってみよう。今回もハードウェアに関するメモリ領域は引き続き、sds_alloc() を使用している。
SDx_2016_3_2_5_170130.png

Relesase でビルドを行った。
MicroSD カードに sd_card フォルダの内容を書いて、ZYBO の電源ONした。
Linux が立ち上がった。cd /mnt し、 ./lap_filter1.elf を起動した。結果を示す。
SDx_2016_3_2_6_170130.png

こちらも、ソフトウェア実行時間がたま~にばらつくときがあるのだが、ハードウェア実行時間は安定した。やはり、malloc() で取るとハードウェア実行時間は安定しないようだ。
明らかにソフトウェア実行時間がおかしい値を除いたハードウェア実行時間の5回の平均は、969 us だった。プラグマ無しよりもこちらのほうがハードウェア実行時間が短い。明らかにおかしい値を除いたソフトウェア実行時間の5回の平均は、843 us だった。

ソフトウェアのメモリ領域の確保も sds_alloc() にしてみよう。これでどうなるだろうか?
SDx_2016_3_2_7_170130.png

Relesase でビルドを行った。
MicroSD カードに sd_card フォルダの内容を書いて、ZYBO の電源ONした。
Linux が立ち上がった。cd /mnt し、 ./lap_filter1.elf を起動した。結果を示す。
SDx_2016_3_2_8_170130.png

ソフトウェア実行時間もばらつく頻度が多くなった気がする。ハードウェア実行時間もたまにばらついている。

プラグマ無しで、ソフトウェアのメモリ領域の確保も sds_alloc() にしてみた。
SDx_2016_3_2_9_170130.png

Relesase でビルドを行った。
MicroSD カードに sd_card フォルダの内容を書いて、ZYBO の電源ONした。
Linux が立ち上がった。cd /mnt し、 ./lap_filter1.elf を起動した。結果を示す。
SDx_2016_3_2_10_170130.png

やはり、ソフトウェア実行時間もばらつく頻度が多くなった気がする。
  1. 2017年01月31日 05:00 |
  2. SDSoC
  3. | トラックバック:0
  4. | コメント:0

SDSoC 勉強会

今日は、SDSoC 勉強会に行ってきました。
猛者ばかりなので、プレゼンするのに戦々恐々としていましたが、割とうまくできたかな?
資料はSlideShareにアップしました。タイトルは、「SDx 2016.3のプラグマによるハードウェアと性能」です。
疑問の点も指摘して頂いて、納得しました。後で検証してみたいと思います。

他の方のプレゼンも、とっても濃い話ばかりで、楽しめました。
懇親会でも楽しく過ごすことができました。
幹事さん、参加された皆さん、楽しかったです。ありがとうございました。
  1. 2017年01月28日 22:58 |
  2. SDSoC
  3. | トラックバック:0
  4. | コメント:0
»