Custom Meta Tags
2503 Hero Banner

AMD製品に関連する技術ブログ

Long Copy

VivadoでKR260のハードウェアデザインを作って動かしてみた!

2023-05-01

Long Copy - body

皆さん、こんにちは。「ノリさん」です!
今回はVivadoでKR260のハードウェアデザインを作って動作させていきます。

Step0:ハードウェア要件

 

Step1:Vivado ハードウェア デザインの作成

Vivadoを起動(<Vitis_Install_Directory> には Vitis のインストールされた場所を指定)

    source <Vitis_Install_Directory>/settings64.sh
    vivado &

Quick Startから、Create Project を選択して、Next をクリック

Project Name に kr260_custom_platform と入力し、Next をクリック

Project is an extensible Vitis platform にチェックを入れ、Next をクリック

注: 既存の Vivado プロジェクトを拡張可能なプラットフォーム プロジェクトに変更する場合、Flow Navigator の Settings に移動し、General に移動してproject is an extensible Vitis platformをチェック

Boards タブを選択

Refresh をクリックして、ボードの情報を最新のものにする

Kria KR260 Robotics Starter Kit を選択して、Next をクリック

project summary を確認し、問題なければ、Finish をクリック

画面左側の IP INTEGRATOR の下の Project Manager の下にある、Create Block Design をクリック

OK をクリック

画面中央の Diagram ビューの空白の部分を右クリックし、Add IP を選択

検索窓に zynq と打ち込み、Zynq UltraScale+ MPSoC をダブルクリックして追加

Block Automation をクリックして、次のチェックボックスにチェックが入っていることを確認し、OK をクリック

  • All Automation
  • Zynq_ultra_ps_e_0
  • Apply Board Presets

 

次の図のようになっていることを確認

Diagram ビューを右クリックし、Add IP を選択

Clocking Wizard を検索、追加

clk_wiz_0 IP ブロックをダブルクリックして、Re-Customize IP ダイアログ ボックスを開く

Output Clocks に移動し、次の図のように設定して、OKをクリック

Diagram ビューを右クリックし、Add IP を選択して、Processor System Reset を検索、追加

リセット モジュールとクロック信号の関係を理解しやすいよう、追加したProcessor System Reset の名前をproc_sys_reset_1に変更

Processor System Reset をクリックすると、Blocks Property から名前が変更できる

proc_sys_reset_1 ブロックを選択し、Ctrl-C と Ctrl-V を入力して proc_sys_reset_2 を複製

zynq_ultra_ps_e_0 の pl_resetn0 と clk_wiz_0 のresetを接続

Run Connection Automation から、All Automation を有効に

proc_sys_resetインスタンスごとに、 slowest_sync_clkを選択し、クロック ソースを次のように設定

proc_sys_reset_1と/clk_wiz_0/clk_out1
proc_sys_reset_2と/clk_wiz_0/clk_out2

各 proc_sys_reset インスタンスで ext_reset_inを選択し、Select Manual Sourceを/zynq_ultra_ps_e_0/pl_resetn0 に設定してOKをクリック

Diagram ビューを右クリックし、Regenerate Layout を選択して、デザインを整形

次の図のようになっていることを確認

Platform Setup から、Clock を選択して、次の図のようにする
(AXI Port 、Interrupt は後程設定、Platform Name は自動的に設定される)


Diagram ビューに戻り、Zynq UltraScale+ MPSoCブロックをダブルクリック

PS-PL Configuration → PS-PL interfaces → Master interfaceを選択

AXI HPM0 LPDオプションを有効にし、AXI HPM0 FPDおよびAXI HPM1 FPD を無効にする

OK をクリックして構成を終了

AXI Interrupt Controller を検索、追加

AXI Interrupt Controller ブロックをダブルクリックし、PS IRQ インターフェースに接続できるように Interrupt Output Connection を Single に変更し、OK をクリック

Connection Automation をクリック

次の図のように設定して OK をクリック

axi_intc_0.irq を zynq_ultra_ps_e_0.pl_ps_irq[0:0] に接続

Platform Setup → Interrupt から、 intr under axi_intc_0 を有効化

デザインを整形して、次の図のようになっていることを確認


Platform Setup → AXI Interface から、設定を次の図のように変更

Flow Navigatorウィンドウで Settings を選択し、Synthesis タブに移動

incremental synthesis の横にある3つのドットをクリックし、次の図のようにして OK をクリック

ポップアップ画面が出たら、Yes → OK を選択

 

Step2:ペリフェラルの追加

Zynq UltraScale+ MPSoC ブロックをダブルクリックし、I/O Configuration → Low Speed → I/O Peripherals → I2C から、I2C1を有効化し、I/O を MIO 24 .. 25 とする
同様に、I/O Peripherals → UART から、UART1 を有効化し、I/O を MIO 36 .. 37 とする

Processing Unit → TTC → TTC0 から、Waveout を有効化し、I/O を EMIO にする

High Speed → GEM から、GEM 0 、GEM 1 、MDIO 1 を有効化し、それぞれ I/O をGT Lane 0 、MIO 38 .. 49 、MIO 50 .. 51 とする

同様に、High Speed → USB から、次の図のように設定

Display Port から、Lane Selection を Single Lower にする

PS-PL Configuration → General → Fabric Reset Enable から、 Number of Fabric Resets を 4 に変更

OKをクリックして、設定を反映させる

デザインに Slice IP を加え、それをダブルクリックして、次の図のように設定して、OK をクリック

xslice_0 のDin を Zynq MPSoC IP の emio_ttc0_wave_o に接続

xslice_0 のDout を右クリックして、Make External を選択

デザインを整形して、次の図のようになっていることを確認


Step3:ビットストリームとXSAの生成

Sources →Design Sources から、design1.bd を右クリックして、Create HDL Wrapper を選択し、OKをクリックして、次の図のようになっていることを確認

PROJECT MANAGER の下の Add Sources を開き、Add or create constraints を選択して、Next をクリック

Create File をクリックし、ファイル名を入力してFinish をクリック

Sources → Constraints → constrs_1 から、先程作成した xdc ファイルを開き、次を書き込む

set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]
set_property PACKAGE_PIN A12 [get_ports {Dout_0}]
set_property IOSTANDARD LVCMOS33 [get_ports {Dout_0}]
set_property SLEW SLOW [get_ports {Dout_0}]
set_property DRIVE 4 [get_ports {Dout_0}]

左側のIP INTEGRATOR の下の Generate Block Designをクリックして、Synthesis Options を Global に変更して、Generate をクリックする

左下のGenerate Bitstream をクリックし、OKをクリックして、ビットストリームを生成する

終了後、OKを押して、Implemented Design を見る

File → Export → Export Platform を選択して、Next をクリックする

Next → Include Bitstramにチェックを入れて Next → Next とクリックする

XSA のファイル名を kr260_custom_platform として、Next をクリックする

設定を確認してから、Finish をクリックすると、kr260_custom_platformの下に XSA が生成される

 

Step4:PetaLinux を使用したソフトウェア コンポーネントの作成

https://www.xilinx.com/member/forms/download/xef.html?filename=xilinx-kr260-starterkit-v2022.1-05140151.bsp から BSP をダウンロード

(<petaLinux_tool_install_dir> には PetaLinux のインストールされた場所を指定する)

    $ source <petaLinux_tool_install_dir>/settings.sh

https://japan.xilinx.com/content/dam/xilinx/support/download/plnx/Petalinux_Tool_Upgrade_2022.1_update3.txtを参考に、PetaLinux をアップグレード

        $ petalinux-upgrade -u http://petalinux.xilinx.com/sswreleases/rel-v2022/sdkupdate/2022.1_update3/ -p "aarch64" --wget-args "--wait 1 -nH --cut-dirs=4"

PetaLinux プロジェクト を作成
(<target directory> は Vivado で作成した kr260_custom_platform と同じ階層を指定する)

        $ petalinux-create --type project -n kv260_custom_plnx -p <target directory> -s xilinx-kr260-starterkit-v2022.1-05140151.bsp

次の階層構造になっていることを確認

  • - kr260_custom_platform # Vivado Project Directory
  • - kr260_custom_plnx     # PetaLinux Project Directory

ハードウェア情報を PetaLinux に組み込む
<target directory>  は Vivado で作成した kr260_custom_platform と同じ階層を指定

    $ cd <target directory>/kr260_custom_plnx
    $ petalinux-config --get-hw-description=<target directory>/kr260_custom_platform

Config画面が表示されたら、次のように設定する(スペースキーでチェックを入れたり外したりできる)

FPGA Manager → Fpga Manager[*] (チェックを入れる)

Image Packaging Configuration →  Copy final images to tftpboot[] (チェックを外す)

設定終了後は Exit で抜ける、抜けた後に保存するかどうか問われるので、Save を選択して保存

Please input "y" to proceed the installing SDK into project, "n" to exit:

というメッセージが表示されたら、y を入力して、Enter を押す

XRT を有効化

    $ petalinux-config -c rootfs

Filesystem packages → libs → xrt から、xrt と xrt-dev を有効化

Filesystem packages → libs → zocl から、zocl を有効化

kr260_custom_plnx にて、PetaLinux をビルドして SDK を生成する

        $ petalinux-build
        $ petalinux-build --sdk

DTG をインストール(場所は任意)

        $ git clone -b xlnx_rel_v2022.1 https://github.com/Xilinx/device-tree-xlnx

XSCT を起動し、XSA から DTS を生成
<design_name.xsa> は kr260_custom_platform の下の XSA ファイル、<path to device-tree-xlnx> は DTG のインストール場所を指定

    $ xsct
    xsct% hsi open_hw_design <design_name.xsa>
    xsct% hsi set_repo_path <path to device-tree-xlnx>
    xsct% hsi create_sw_design device-tree -os device_tree -proc psu_cortexa53_0
    xsct% hsi set_property CONFIG.dt_overlay true [hsi::get_os]
    xsct% hsi set_property CONFIG.dt_zocl true [hsi::get_os]
    xsct% hsi generate_target -dir dts
    xsct% hsi close_hw_design design_1_wrapper
    xsct% exit

カスタム イメージのブート バイナリをパッケージ化

    $ petalinux-package --boot --u-boot --force

SD カードの WIC イメージをパッケージ化

    $ petalinux-package --wic --images-dir images/linux/ --bootfiles "ramdisk.cpio.gz.u-boot,boot.scr,\
    Image,system.dtb,system-zynqmp-sck-kr-g-revB.dtb" --disk-name "sda"

WIC イメージを圧縮する

$ gzip petalinux-sdimage.wic

balenaEtcher をダウンロードして、展開

SDカードを差し込む

balenaEtcher を展開した場所でターミナルを開き、以下のコマンドを実行して balenaEtcher を起動
<ver>はバージョンを表す

    $ chmod u+x balenaEtcher-<ver>-x64AppImage
    $ ./balenaEtcher-<ver>-x64AppImage

balenaEtcher でSDカードに書き込む

petalinux-sdimage.wic.gz を選択 → 差し込んだSDカードを選択 → Flash! をクリック

 

Step5:Vitis プラットフォームの作成

kv260_custom_platformと同じ階層に kv260_custom_pkg 、その下に pfm を作成

    $ cd <target directory>
    $ mkdir -p kr260_custom_pkg/pfm

次のディレクトリ構成になっていることを確認

- kr260_custom_platform  # Vivado Project Directory
- kr260_custom_plnx         # PetaLinux Project Directory
- kr260_custom_pkg          # Platform Packaging Directory 
        - pfm                               # Platform Packaging Sources

<kr260_custom_plnx>(kr260_custom_plnx までのパス)の下の image/linux に移動し、<kr260_custom_pkg> (kr260_custom_pkg の下、pfm と同じ階層)に sysroot を作成
3つ目のコマンド実行時に <kr260_custom_pkg> にsysroot を作成するかどうかを問うてくるので、その場合は y を入力

    $ cd <kr260_custom_plnx>/images/linux/
    $ unset LD_LIBRARY_PATH
    $ ./sdk.sh -d <kr260_custom_pkg>

Vivado で作成した kr260_custom_platform と同じ階層に移動し、pfm の下に、boot と sd_dir を作成

    $ cd <target directory>
    $ mkdir kr260_custom_pkg/pfm/boot
    $ mkdir kr260_custom_pkg/pfm/sd_dir

次のディレクトリ構成になっていることを確認

- kr260_custom_platform  # Vivado Project Directory
- kr260_custom_plnx         # PetaLinux Project Directory
- kr260_custom_pkg          # Platform Packaging Directory
        - sysroots                        # Extracted Sysroot Directory
        - pfm                               # Platform Packaging Sources
                - boot                           # Platform boot components
                - sd_dir                        # Files to be put in FAT32 partition of SD card

images/linux/ から、必要なファイルを pfm/boot、/pfm/sd_dir にコピー

    $ cd <kr260_custom_plnx>/images/linux/
    $ cp u-boot-dtb.elf u-boot.elf
    $ cp zynqmp_fsbl.elf pmufw.elf bl31.elf u-boot.elf system.dtb  <kr260_custom_pkg>/pfm/boot
    $ cp boot.scr system.dtb <kr260_custom_pkg>/pfm/sd_dir

<kr260_custom_pkg> にて、Vitis を立ち上げる

    $ cd <kr260_custom_pkg>
    $ vitis &

<kr260_custom_pkg> をワークスペースとする

クイックスタートから、Create Platform Project を選択

XSA ファイルは初めにVivado で作成したものを使用し、OSなどの設定は次の図のようにする
Generate boot conponetnts のチェックを外し、Finish をクリック

linux on psu_cortex53 を次のように設定

Bif file: Generate BIF
Boot Components Directory: Browse から <kv260_custom_pkg>/pfm/boot を選択
FAT32 Partition Directory:  Browse から <kv260_custom_pkg>/pfm/sd_dir を選択


 
kr260_custom を選択し、ハンマーのアイコンをクリックして、Vitis Platform をビルド

ビルド終了後、次の図のようになっていることを確認

 

Step6:プラットフォームのテスト

ここでは、サンプルアプリケーションである Simple Vector Additon を例として用いる

以前使用していた Vitis ワークスペースを引き続き使用

File → New → Application Project を選択して、Next をクリック

kr260_custom が選択されていることを確認して、Next をクリック

プロジェクト名を vadd として、Next をクリック

各パスを次のように設定して、Next をクリック

Root FS : <kr260_custom_pkg>/sysroots/cortexa72-cortexa53-xilinx-linux
Kernel Image : <kr260_custom_plnx>/images/linux/rootfs.ext4
Kernel Image : kr260_custom_plnx/images/linux/images

Acceleration templates with PL and AIE accelerators から、Simple Vector Addition を選択して、Finishをクリック

Active Build configuration を Hardware に変更

vadd_system を選択し、ハンマーのアイコンからビルド

必要なファイルを入れるディレクトリを作成

        $ mkdir <target directory>/vadd

fpgamanager がロードできるように、.bit ファイルを .bin ファイルに変換

    $ cd <kr260_custom_pkg>/vadd_system/Hardware/package.build/package 
    $ echo 'all:{system.bit}'>bootgen.bif
    $ bootgen -w -arch zynqmp -process_bitstream bin -image bootgen.bif
    $ mv system.bit.bin <target directory>/vadd/vadd.bit.bin

DTBO作成時のディレクトリに移動し、pl.dtsi を開く

    $ cd <kr260_custom_plnx>/dts/
    $ vi pl.dtsi

pl.dtsiを次のように編集

firmware-name = "bin"; → firmware-name = "vadd.bit.bin";

dtsi を dtbo にコンパイル

    $ dtc -@ -O dtb -o <kria-vitis-platforms>/vadd/vadd.dtbo <kr260_custom_plnx>/dts/pl.dtsi

vadd アプリケーションと binary_container_1.xclbin を vadd ディレクトリにコピー

    $ cp <kr260_custom_pkg>/vadd/Hardware/vadd <target directory>/vadd
    $ cp <kr260_custom_pkg>/vadd_system/Hardware/binary_container_1.xclbin <target directory>/vadd

shell.json を作成

    $ cd <target directory>/vadd
    $ vi shell.json 

shell.json に次を書き込む

{
  "shell_type" : "XRT_FLAT",
  "num_slots": "1"
}

あらかじめ PetaLinux イメージを起動しておく(ユーザー名はpetalinux、パスワードはユーザーが設定する)

scp コマンドでファイルをKR260にコピー(<SOM Starter Kit IP> は KR260 の IP を指す)

    $ cd <target directory>/vadd
    $ scp vadd.dtbo vadd.bit.bin shell.json vadd binary_container_1.xclbin petalinux@<SOM Starter Kit IP>:/home/petalinux

ファームウェアを入れるディレクトリを作成し、ファームウェアをそこにコピー
(以下はKR260で実行)

$ cd /home/petalinux
$ sudo mkdir /lib/firmware/xilinx/vadd
$ cp pl.dtbo binary_container_1.bin shell.json /lib/firmware/xilinx/vadd

vadd アプリケーションを実行

$ sudo xmutil unloadapp
$ sudo xmutil loadapp vadd
$ chmod u+x vadd
$ ./vadd binary_container_1.xclbin

次のように出力される

INFO: Reading binary_container_1.xclbin
Loading: 'binary_container_1.xclbin'
TEST PASSED


 
感想

今回は、回路のデザインをVivadoで作成し、PetaLinuxでSDイメージを作成後、Vitisでアプリケーションを作成してKR260実機で動作させるまでの過程を実行しました。今回はKR260でしたが、他のボードでも同じようなプロセスになるので、初学者向けとしては丁度良いテーマであったように感じられます。

それでは、また次回お会いしましょう!See you next time! 

2503 Grid Box Light - Blog

ブログ

AMDによる設計およびデバッグ手法のブログ、およびアヴネット社員によるAMD製品を用いた開発チャレンジのブログです。

2503 Grid Box Light - Kria

Kria

Kria SOMはアダプティブSoCデバイスを搭載しており、スマートカメラやエンベデッドビジョンなどに最適です。