Closed lp6m closed 2 years ago
クロックは100/150/200/300/400の5つに設定した。
※id=0
のクロックがないとVitisでエラーになるので注意
set_property platform.design_intent.embedded true [current_project]
set_property platform.design_intent.server_managed false [current_project]
set_property platform.design_intent.external_host false [current_project]
set_property platform.design_intent.datacenter false [current_project]
set_property platform.default_output_type "sd_card" [current_project]
Generate Bitstream
実行cd /home/lp6m/Desktop/ultra96_vai1_4/ai-edge-contest-5/ultra96v2_min2_201/
write_hw_platform -include_bit ultra96v2_min2_201.xsa
validate_hw_platform ./ultra96v2_min2_201.xsa
Petalinux2020.2を使用
petalinux-create --type project --template zynqMP --name ultra96v2_min2_201
petalinux-config --get-hw-description=../../ultra96v2_min2_201
FPGAの部屋の通りに全て設定してpetalinux-build
実行 , sysroot作成
Ultra96-V2 の Vitis 2020.1 アクセラレーション・プラットフォームを作る3(Vitis 2020.1 でアクセラレーション・プラットフォーム作成)
ビルド完了後、プラットフォームをplatformをVitisから参照できるようにVitisのインストールディレクトリにコピーしておく
sudo cp -r wksp1/ultra96v2_min2_201/export/ultra96v2_min2_201/ /tools/Xilinx/Vitis/2020.2/platforms/
xclbin
のoptionに--target
がないとエラーになった。Vitis上で実行されているxclbinutil
とsource /tools/Xilinx/Vitis/2020.2/settings.sh
をしてターミナル上で実行できるxclbinutil
が違うものを参照している?
とりあえず以下の記事を参考にXRT 2020.2
をインストールする。
Ubutnu 20.04インストールとVitis 2020.2とVitis AI 1.3関連の開発環境構築のメモ
git clone https://github.com/Xilinx/XRT
cd XRT
git checkout origin/2020.2
sudo ./src/runtime_src/tools/scripts/xrtdeps.sh
cd build
./build.sh
cd Release
make package
sudo dpkg -i xrt_202020.2.8.0_20.04-amd64-xrt.deb
これで/opt/xilinx/xrt/
にXRT 2.8.0がインストールされた。
Vitisの環境を有効化したあとにXRTを有効化すればよいのかな?
そうするとうまくいった。
とりあえずdpu_trd_kernels/src
にkernl_vadd.cpp
を追加して、dpu_trd_kernels.prj
の設定を開いてkrnl_vadd
をHardware Functions
として追加した。
Explorer
ウインドウのdpu_trd_kernels
を右クリックしてBuild Project
を実行、ビルドは成功し、カーネルオブジェクトとしてkrnl_vadd.xo
が生成された。
次に、dpu_trd_system_hw_link.prj
を開くと、どのカーネルをいくつ搭載するかを設定するHardware Functions
にkrnl_vadd
が追加されていた。デフォルトのまま1ですすめる
よさそうなのでこれでBuild Project
を実行した。
ビルドは成功した。自動的に作られたVivadoプロジェクトを開くといい感じに繋がってた。
現状まとめ
petalinux-config --get-hw-description=../../ultra96v2_min2_201
だけを実行したのが悪かったのか?もう一度petalinux-config -c kernelとかも全部やり直す必要あり?Wifiが繋がらない問題、g++, gccがない問題は普通にウザいので解決する必要がある ikwzmさんのdebianイメージでなんとかする方法もあるけど、それはそれで色々めんどくさそう・・オーバレイ周り
petalinux-create --type project --template zynqMP --name ultra96v2_min2_201
cd ultra96v2_min2_201
cd project-spec
git clone -b 2020.2 https://github.com/Avnet/meta-avnet
cd ..
~/petalinux_2020.2/tools/common/petalinux/utils/petalinux-kconfig-edit -c ./project-spec/configs/config -o CONFIG_USER_LAYER_0 -v "\"\${PROOT}/project-spec/meta-avnet\""
petalinux-config --get-hw-description=../../ultra96v2_min2_201
petalinux-config
で以下を設定
後でAvnetのmeta-avnetを使用できるように、YOCTO_MACHINE_NAME
を変更しておく
ここでAvnetのpetalinuxプロジェクトを参考に、meta-avnet
のパッチを当てる
https://github.com/Avnet/petalinux/blob/2020p2_u96v2_sbc_base_20210426_105325/configs/project/config.board.u96v2_sbc.sh#L20
ちなみに前ステップでYOCTO_MACHINE_NAME
を変更しておかないと以下のようにエラーになる(MACHINE_NAMEで参照するユーザレイヤを判断しているらしい)
これにより、project-spec/configs/config
の末尾のUser Layersに以下が追加されている
CONFIG_USER_LAYER_0="/home/lp6m/Desktop/ultra96_vai1_4/ai-edge-contest-5/petalinux3/meta-avnet"
petalinux-config -c kernel
でFPGAの部屋の通りに設定しようとしたが、全部設定済みになっていたので特に変更せずExit
petalinux-config -c rootfs
FPGAの部屋ではuser packageを追加したりwifi, zocl用のdtsファイルを追加しているが、上記Avnetパッチを当てているので問題ない気がするのでとりあえず何も設定せずに閉じた
petalinux-build -c avnet-image-minimal
petalinux-package --boot --fsbl ./images/linux/zynqmp_fsbl.elf --fpga ./images/linux/system.bit --uboot --force
cd images/linux
petalinux-build --sdk
mkdir pkg
mkdir pkg/pfm
mkdir pkg/pfm/boot
cp bl31.elf pkg/pfm/boot
cp image.ub pkg/pfm/boot
cp pmufw.elf pkg/pfm/boot/
cp u-boot.elf pkg/pfm/boot/
cp zynqmp_fsbl.elf pkg/pfm/boot/
mv pkg/pfm/boot/zynqmp_fsbl.elf pkg/pfm/boot/fsbl.elf
cp system.dtb pkg/pfm/boot/
ここでビルドしたpetalinuxのシステムではwifiがつながるのかを確認
BOOT.BIN boot.scr image.ub system.dtb
をBOOTにコピー、rootfs.tar.gz
をrootfsに解凍
./sdk.sh
PetaLinux SDK installer version 2020.2
======================================
Enter target directory for SDK (default: /opt/petalinux/2020.2): ~/Desktop/ultra96_vai1_4/ai-edge-contest-5/petalinux3/ultra96v2_min2_201/images/linux/pkg/pfm
pkg/linux.bif
を作成
/* linux */
the_ROM_image:
{
[pmufw_image] <pmufw.elf>
[bootloader, destination_cpu=a53-0] <fsbl.elf>
[destination_device=pl] <bitstream>
[destination_cpu=a53-0, exception_level=el-3, trustzone] <bl31.elf>
[destination_cpu=a53-0, exception_level=el-2] <u-boot.elf>
}
上記でAvnetを参考にしたSWプラットフォームを使ってVitis アクセラレーションプラットフォームを作成し直した。問題なく作成できた。
作成しなおしたプラットフォーム上でもう一度GUIフローを試してみたいと思う。
cp -r ~/Desktop/ultra96_vai1_4/Vitis-AI/dsa/DPU-TRD/ ./
1からつくるのでそもそもコピーする必要ないかも
vitis -workspace ./
Window->Preferences->Library RepositoriesにDPU-TRDを設定しておく。
File->New->Application Projectを選択、先程作ったプラットフォームを選択、プロジェクト名はdpu_trdとした。設定等はそのまま。
Explorerウインドウのdpu_trd_kernels
からsrc->prj->Vitis->dpu_conf.vh
を開いてDPUのコンフィグレーションを変更する
26c26
< `define B4096
---
> `define B1600
81c81
< `define RAM_USAGE_LOW
---
> `define RAM_USAGE_HIGH
114c114
< `define POOL_AVG_ENABLE
---
> `define POOL_AVG_DISABLE
次に、独自カーネルのテストとしてvadd(vector_add)を追加するための作業を行う。
まず、File->New->Application Projectでアプリケーションプロジェクトを作成。名前はvadd_appとした。(名前はvaddだけのほうが適切だった気がする。)テンプレートを選択する画面でvector add
を選択する。このときsystem projectにdpu_trd_system
を選択することでDPUプロジェクトにvaddのカーネルとアプリケーションを追加できる。つまり、dpu_trd_system
というsystem projectの中にdpu_trd, vadd_appという2つのカーネル・2つのアプリケーションが存在する状態になった。
次にdpu_trd->src->config_gui.cfgを編集する。DPUに接続するクロックとポートの設定を変更する。今回ベースにしているプラットフォームプロジェクトのクロックは以下の通りで、150MHz/300MHzを利用したいので以下のように設定した。また今回はDPUを1つだけ搭載するので元のポート情報の後半を削除した。
最後にdpu_trd_system_hw_link.prj
を開く。カーネルをいくつ搭載するかの画面がある。
Active build configurationをHardware
に変更。
今回はsoftmaxコアは不要なのでsfm_xrt_top
は削除、DPUCZDX8G
の個数を2個から1個に変更、さらに右上のイナズマアイコンのAdd Hardware Functionsからkrnl_vadd
を追加した。
最後に、左上のトンカチアイコン横の三角ボタンを押してビルド対象がHardwareになっていることを確認したら、トンカチアイコンを押してビルド開始
成功しろ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
なんか落ちてた
Section: 'SYSTEM_METADATA'(22) was successfully written.
Format: RAW
File : '/home/lp6m/Desktop/ultra96_vai1_4/ai-edge-contest-5/DPU-TRD/dpu_trd_system/Hardware/package.build/package/extractedSystemDiagram.json'
ERROR: [v++ 60-2254] File specified by package.sd_file option is not valid: /home/lp6m/Desktop/ultra96_vai1_4/ai-edge-contest-5/DPU-TRD/dpu_trd_system/Hardware/../../dpu_trd/Hardware/dpu_trd
ERROR: [v++ 60-702] Failed to finish packaging
INFO: [v++ 60-1653] Closing dispatch client.
makefile:37: recipe for target 'package' failed
make: *** [package] Error 1
ディレクトリがないだけだったらしいので、とりあえずディレクトリを作成して再ビルド。 OK.ビルドは完了した。
Wifiが使えない問題をさっさと解決させたい。 Petalinux 2020.2 BSP for Ultra96v2 with Wifi & VNC Server この記事を参考にしてみる。やはりmeta-avnetから一部のファイルをコピーしてきてプロジェクトを作成するらしい。とりあえずBSPが公開されているのでDLしてそれを元にプロジェクトを作ればできそう。
petalinux-create -t project -s ~/Downloads/ultra96v2_2020_2_with_VNC.bsp --name ultra96v2_min2_201
cd ultra96v2_min2_201
petalinux-config --get-hw-description ../../ultra96v2_min2_201/ultra96v2_min2_201.xsa
petalinux-config #initramfs->sdなどの変更は既に適用されていたので特に何も変更せず
petalinux-config -c rootfs #vitis-ai関連のpetalinux package有効化。代わりにproject-spec/config/rootfs_configを編集しても可
petalinux-config -c kernel #特に変更するところなし
petalinux-build
IP Integrator -> Create Block DesignでBD作成 AddIPで以下を追加
Clocking WizardをダブルクリックReset Type を Active Low に変更、周波数を変更する
ConcatをダブルクリックNumber of portsを1に変更
Processor System Resetをコピペしてクロックの数だけ生成
後は頑張ってつなぐ。Run Connection Automationを信用していないので頑張って手で全部つなぐ
Validate Designを実行して問題がないか確認
Project is an extensible Vitis Platformにチェック。
Window->Platform SetupからAXI PortとClockを設定
以下のtclをTcl Consoleウインドウから実行
set_property platform.design_intent.embedded true [current_project]
set_property platform.design_intent.server_managed false [current_project]
set_property platform.design_intent.external_host false [current_project]
set_property platform.design_intent.datacenter false [current_project]
set_property platform.default_output_type "sd_card" [current_project]
Generate Bitstream実行、10分以内に終わる
cd /home/lp6m/Desktop/ultra96_vai1_4/ai-edge-contest-5/ultra96v2_min2_201/
write_hw_platform -include_bit ultra96v2_min2_201.xsa
petalinux-create -t project -s ../u96v2_sbc_base_2020_2.bsp --name ultra96v2_min2_201
cd ultra96v2_min2_201
petalinux-config --get-hw-description ../../ultra96v2_min2_201/ultra96v2_min2_201.xsa
petalinux-build -c avnet-image-full
petalinux-package --boot --fsbl ./images/linux/zynqmp_fsbl.elf --fpga ./images/linux/system.bit --uboot --force
cd images/linux
mkdir pkg
mkdir pkg/pfm
mkdir pkg/pfm/boot
cp bl31.elf pkg/pfm/boot/
cp image.ub pkg/pfm/boot/
cp pmufw.elf pkg/pfm/boot/
cp u-boot.elf pkg/pfm/boot/
cp system.dtb pkg/pfm/boot/
cp zynqmp_fsbl.elf pkg/pfm/boot/fsbl.elf
petalinux-build -c avnet-image-full --sdk
./sdk.sh
PetaLinux SDK installer version 2020.2
======================================
Enter target directory for SDK (default: /opt/petalinux/2020.2): /home/lp6m/Desktop/ultra96_vai1_4/ai-edge-contest-5/yarinaoshi/ultra96v2_min2_201/images/linux/pkg/pfm
touch pkg/linux.bif
/include/ "system-conf.dtsi"
/ {
chosen {
bootargs = "earlycon console=ttyPS0,115200 clk_ignore_unused root=/dev/mmcblk0p2 rw rootwait cma=512M";
};
sdio_pwrseq: sdio_pwrseq { /* This needs to be able to manipulate the chip_en and the resetn properly */
compatible = "mmc-pwrseq-simple";
/* post-power-on-delay-ms = <10>; */
reset-gpios = <&gpio 7 1>; // MIO[7] for WILC3000 RESETN, Active low
/* reset-gpios = <&gpio 78 1>; // Some prototype boards only! device pin A3 for RESETN, Active low */
chip_en-gpios = <&gpio 8 1>;
};
// Remove V1 Power ON/OFF controller from U96 V1 DT
/delete-node/ ltc2954;
aliases {
i2c0 = &i2c1;
};
xlnk {
compatible = "xlnx,xlnk-1.0";
};
};
&amba {
zyxclmm_drm {
compatible = "xlnx,zocl";
status = "okay";
};
};
&sdhci1 {
bus-width= <0x4>;
/* non-removeable; */
/* mmc-pwrseq = <&sdio_pwrseq>; */
max-frequency = <50000000>;
/delete-property/cap-power-off-card; // This is not compatible with the WILC3000 and means the WILC will always be powered on
status = "okay";
#address-cells = <1>;
#size-cells = <0>;
wilc_sdio@1 {
compatible = "microchip,wilc3000", "microchip,wilc3000";
reg = <0>;
// interrupt-parent = <&gpio>; // Microchip driver DOES NOT use gpio irq any more!
// interrupts = <76 2>; /* MIO76 WILC IRQ 1V8 */ // Microchip driver DOES NOT use gpio irq any more!
// irq-gpios = <&gpio 76 0>; // Microchip driver DOES NOT use gpio irq any more!
bus-width= <0x4>;
status = "okay";
};
// Remove TI child node from U96 V1 DT
/delete-node/wifi@2;
};
&sdhci0 {
disable-wp;
};
/* linux */
the_ROM_image:
{
[pmufw_image] <pmufw.elf>
[bootloader, destination_cpu=a53-0] <fsbl.elf>
[destination_device=pl] <bitstream>
[destination_cpu=a53-0, exception_level=el-3, trustzone] <bl31.elf>
[destination_cpu=a53-0, exception_level=el-2] <u-boot.elf>
}
rootfsは追加しておく必要がある。本来ならpetalinux-build -c avnet-image-full --sdkを実行すべきだがエラーになってしまったのでとりあえずpetalinux-build --sdkのsysrootを今後は使うことにする。まあサボり
CONFIG_xrt
CONFIG_xrt-dev
CONFIG_zocl
CONFIG_opencl-clhpp-dev
CONFIG_opencl-headers-dev
CONFIG_packagegroup-petalinux-opencv
lp6m@lp6m-ryzen:~/Desktop/ultra96_vai1_4/ai-edge-contest-5/yarinaoshi/ultra96v2_min2_201/images/linux/pkg/pfm/workspace/ultra96v2_min2_201/export$ sudo cp -r ultra96v2_min2_201/ /tools/Xilinx/Vitis/2020.2/platforms/
vitis -workspace ./