4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Vivado(Vitis) で Zynq FSBL(First Stage Boot Loader) をビルドするTclスクリプト

Last updated at Posted at 2020-02-04

はじめに

Xilinx 社のFPGA開発環境の Vivado(Vitis)、いちいち GUI でマウスボタンをポチポチするのは面倒です。
Vivado(Vitis) は Tcl スクリプトでバッチ処理が出来るので、決まり切った仕事なら Tcl スクリプトを書いて処理させたほうが楽です。
この記事では、Vivado(Vitis) で Zynq の FSBL(First Stage Boot Loader)を自動的に生成するスクリプトを紹介します。

環境

  • Xilinx Vivado 2019.2 (Vitis)

「Vivado SDK でZynq FSBL(First Stage Boot Loader)をビルドするTclスクリプト」 および 「Vivado SDK でZynq FSBL(First Stage Boot Loader)をビルドするTclスクリプト(hsi編)」 で紹介した Tcl スクリプトでは Vivado 2019.2 (Vitis) 以降では動作しません。Vivado(Vitis) で同様のことを行うには、ここで紹介する xsct コマンドを使います。(ちなみに xsct とは Xilinx Software Command line Tool だそうです。)

手順

ハードウェアスペックファイルを用意しておく

この Tcl スクリプトではワークスペース(後述)の下にハードウェアスペックファイルを用意しておく必要があります。通常は Vivado でインプリメンテーションした後、Export > Export Hardware... でハードウェアスペックファイルを作ります。また、こちらの記事(「Vivadoでハードウェア情報をエクスポートするTclスクリプト」)も参考にしてください。

Tclスクリプトを用意する

まずはスクリプト全体を示します。

build_fsbl.tcl
#!/usr/bin/tclsh

set app_name            "fsbl"
set app_type            "zynq_fsbl"
set hwspec_file         "design_1_wrapper.xsa"
set proc_name           "ps7_cortexa9_0"
set project_name        "project"
set project_directory   [file dirname [info script]]
set sdk_workspace       [file join $project_directory $project_name.sdk]
set app_dir             [file join $sdk_workspace $app_name]
set app_release_elf     $app_name.elf
set app_release_dir     $project_directory

setws $sdk_workspace

set hw_design           [hsi::open_hw_design [file join $sdk_workspace $hwspec_file]]

hsi::generate_app -hw $hw_design -os standalone -proc $proc_name -app $app_type -compile -dir $app_dir

file copy -force [file join $app_dir "executable.elf"] [file join $app_release_dir $app_release_elf]

exit

xsct を実行する

Vivado(Vitis) の xsct で前節の Tclスクリプトを実行します。これで fsbl.elf が出来ていれば成功です。

Vivado% xsct build_fsbl.tcl

Tclスクリプトの説明

各種定数を定義しておく

まずは様々な定数を定義しておきます。
この例ではハードウェアスペックファイルの名前を design_1_wrapper.xsa としていますが、実際には Vivado で Export した時のファイル名を設定します。

build_fsbl.tcl
set app_name            "fsbl"
set app_type            "zynq_fsbl"
set hwspec_file         "design_1_wrapper.xsa"
set proc_name           "ps7_cortexa9_0"
set project_name        "project"
set project_directory   [file dirname [info script]]
set sdk_workspace       [file join $project_directory $project_name.sdk]
set app_dir             [file join $sdk_workspace $app_name]
set app_release_elf     $app_name.elf
set app_release_dir     $project_directory

ワークスペースを設定する

Vivado(Vitis) はワークスペースを設定する必要があります。
ここでは Tclスクリプトのあるディレクトリの下の project.sdk という名前のディレクトリをワークスペースとして設定します。

build_fsbl.tcl
setws $sdk_workspace

プラットフォームプロジェクトを作る

ここでワークスペースの下に事前に用意しておいたハードウェアスペックファイルを指定します。hsi::open_hw_design コマンドを使ってプラットフォームプロジェクトを作り hw_design 変数にセットしておきます。

build_fsbl.tcl
set hw_design           [hsi::open_hw_design [file join $sdk_workspace $hwspec_file]]

アプリケーションプロジェクトをビルドする

hsi::generate_app コマンドを使ってアプリケーション(zynq_fsbl)を作ります。-compile オプションを指定することで、プロジェクトを作るだけでなくビルドもやってくれます。

build_fsbl.tcl
hsi::generate_app -hw $hw_design -os standalone -proc $proc_name -app $app_type -compile -dir $app_dir

生成した executable.elf を fsbl.elf にコピーする

hsi::generate_app コマンドが成功すると、app_dir で指定したディレクトリに executable.elf というファイルが出来ます。これが目的の fslb.elf です。このファイルを app_release_dir で指定したディレクトリに fsbl.elf としてコピーします。

build_fsbl.tcl
file copy -force [file join $app_dir "executable.elf"] [file join $app_release_dir $app_release_elf]

参考

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?