Help us understand the problem. What is going on with this article?

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

はじめに

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

環境

  • Xilinx Vivado SDK 2017.1
  • Xilinx Vivado SDK 2018.3
  • Xilinx Vivado SDK 2019.1

「Vivado SDK でZynq FSBL(First Stage Boot Loader)をビルドするTclスクリプト」で紹介した Tcl スクリプトでは Xilinx Vivado SDK 2017.1 以降では動作しません。Xilinx Vivado SDK 2017.1 で同様のことを行うには、ここで紹介する hsi コマンドを使います。ちなみに hsi とは Hardware Software Interface とのこと。

ここで紹介する Tcl スクリプトは、Xilinx Vivado 2019.2 (Vitis) 以降では動作しません。Vivado (Vitis) で同様のことを行うには、「Vivado(Vitis) で Zynq FSBL(First Stage Boot Loader) をビルドするTclスクリプト」を参照してください。

手順

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

この 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.hdf"
set proc_name         "ps7_cortexa9_0"
set project_name      "project"
set project_directory [pwd]
set sdk_workspace     [file join $project_directory $project_name.sdk]
set app_dir           [file join $sdk_workspace $app_name]
set app_release_dir   [file join $sdk_workspace $app_name "Release"]

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

generate_app -hw $hw_design -os standalone -proc $proc_name -app $app_type -compile -dir $app_dir
file mkdir $app_release_dir
file copy  [file join $app_dir "executable.elf"] [file join $app_release_dir "fsbl.elf"]

exit

hsi を実行する

hsi のバッチモードで前節の Tclスクリプトを実行します。
これでワークスペース(後述)の下の fsbl/Release に fsbl.elf が出来ていれば成功です。

Vivado% hsi -mode tcl -source build_fsbl.tcl

Tclスクリプトの説明

各種定数を定義しておく

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

build_fsbl.tcl
#!/usr/bin/tclsh

set app_name          "fsbl"
set app_type          "zynq_fsbl"
set hwspec_file       "design_1_wrapper.hdf"
set proc_name         "ps7_cortexa9_0"
set project_name      "project"
set project_directory [pwd]
set sdk_workspace     [file join $project_directory $project_name.sdk]
set app_dir           [file join $sdk_workspace $app_name]
set app_release_dir   [file join $sdk_workspace $app_name "Release"]

ハードウェアスペックファイルを開く

ここでワークスペースの下に事前に用意しておいたハードウェアスペックファイルを指定します。

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

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

generate_app コマンドを使ってアプリケーションプロジェクトを作り、コンパイルします。
-hw オプションには前節で開いておいたハードウェアスペックファイルを指定します。

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

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

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

build_fsbl.tcl
file mkdir $app_release_dir
file copy  [file join $app_dir "executable.elf"] [file join $app_release_dir "fsbl.elf"]

参考

ikwzm
元へっぽこ電子回路エンジニア。現在隠居中。どちらかというとVHDL派。最近はFPGA+SoC でいろいろやってます。github でもいろいろと公開してます。 https://github.com/ikwzm
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした