Vivadoが生成するプロジェクト生成Tclを読んでみた
VivadoでFile→Project→Write Tclという操作をすると、プロジェクトをTclで保存できるようです。
この機能は一体何なのか、出力されるTclファイルは何ができるのかを調べてみました。
上記の操作を行うと、このようなTclファイルが吐き出されます。
この構造を見てみると、以下のような構造になっています。
このtclスクリプトはスタートメニューの中にあるVivado Shell
から実行するのが本来のやり方なのかもしれませんが、複数のVivadoを入れていると探すのが大変なので、MS-DOSプロンプトから(あるいはバッチファイルを作って)実行するようにします。こうすればVivado Shellを起動しなくても動かせます。
D:\Xilinx\Vivado\2018.3\bin\vivado.bat -mode tcl -nolog -nojournal -source creat_project.tcl -tclargs [<option>] [<option2>] [<option3>] ...
Tclスクリプトを実行すると、実行したディレクトリの下にプロジェクトのフォルダを掘ってプロジェクトを作成するので、Vivadoのプロジェクトディレクトリを生成したい一つ上のディレクトリで実行するようにします。
Tclのオプションについて
この引数ですが、-mode tclを付けることでVivadoをコマンドラインモードで起動します。
-sourceで、読み込むtclファイルを指定します。
-nolog -nojournalはログファイルを作らせないものなので、無くても構いません。
-tclargsは、Tclのスクリプトに対してオプションを与えるものです。このTclスクリプトでは以下のようなオプションが用意されています。
- --origin_dir <path> ソースコードを読み込む基点となるディレクトリを変更する
- --project_name <name> プロジェクトの名前を変える
- --help 使い方を表示する
順番に見ていきます。
--project_nameオプションは、その名のとおりで、例えばproject_1という名前のプロジェクトを再生成する際にhogehogeという名前に変更したいような場合に使います。例えば、テスト用のビルドをしたいとかでしょうか。
--origin_dirオプションはわかりにくいのですが、ソースコードが格納されたディレクトリを指定します。通常は.です。つまり、現在のディレクトリの下にソースがあると仮定されます。
VivadoのGUIモードで、何も考えずにプロジェクトを生成すると下のような構造のディレクトリ構成が作られます。
root_directory
+ vivado_project + vivado_project.src
| + vivado_project.ip_user_files
| + vivado_project.sim
| + vivado_project.cashe
| ...
...
Tclではこの、vivado_projectの下のvivado_project.srcの・・・のnewの中にあるmain.vhdのようにソースファイルのパスを指定しているのですが、その基点となるディレクトリを指定するのが --origin_dir です。
create_project.tclはroot_directoryにあるので、"."のままでよく、通常は変更する必要はありません。
Tclのスクリプトは何をやっているのか?
●プロジェクトの作成
このスクリプトの最も重要なのは、
create_project ${_xil_proj_name_} ./${_xil_proj_name_} -part xc7a100tcsg324-2
です。
第一引数の_xil_proj_name_はプロジェクト名で、第二引数はプロジェクトを作るディレクトリを指定するものです。$で表現されているものはTclの変数で、デフォルト値やオプションの引数の解析などで設定されます。
ぶっちゃけ、このcreate_projectの一行があればプロジェクトは生成されます。この後ろを全部削除してしまってもプロジェクトは生成されます。
●ソースファイルの指定
次にソースファイルの指定が続きます。
# Create 'sources_1' fileset (if not found)
if {[string equal [get_filesets -quiet sources_1] ""]} {
create_fileset -srcset sources_1
}
# Set IP repository paths
set obj [get_filesets sources_1]
set_property "ip_repo_paths" "[file normalize "$origin_dir/ip_repo"]" $obj
# Rebuild user ip_repo's index before adding any source files
update_ip_catalog -rebuild
# Set 'sources_1' fileset object
set obj [get_filesets sources_1]
set files [list \
[file normalize "${origin_dir}/src/bd/design_2/design_2.bd"] \
[file normalize "${origin_dir}/src/bd/design_2/hdl/design_2_wrapper.vhd"] \
]
add_files -norecurse -fileset $obj $files
# Set 'sources_1' fileset file properties for remote files
set file "$origin_dir/src/bd/design_2/design_2.bd"
set file [file normalize $file]
set file_obj [get_files -of_objects [get_filesets sources_1] [list "*$file"]]
set_property -name "registered_with_manager" -value "1" -objects $file_obj
このスクリプトに出てくるsources_1のfilesetというのはVivadoでいう↓のことです。
このようなfilesetを、create_filesetコマンドを使って、srcset、constrset、simsetを作ります。Utility Sourcesは何かよくわかりません。
●Runの指定
その次にcreate_runコマンドを使ってrunを作ります。
# Create 'synth_1' run (if not found)
if {[string equal [get_runs -quiet synth_1] ""]} {
create_run -name synth_1 -part xc7a100tcsg324-1 -flow {Vivado Synthesis 2018} -strategy "Vivado Synthesis Defaults" -report_strategy {No Reports} -constrset constrs_1
} else {
set_property strategy "Vivado Synthesis Defaults" [get_runs synth_1]
set_property flow "Vivado Synthesis 2018" [get_runs synth_1]
}
set obj [get_runs synth_1]
set_property set_report_strategy_name 1 $obj
set_property report_strategy {Vivado Synthesis Default Reports} $obj
set_property set_report_strategy_name 0 $obj
# Create 'synth_1_synth_report_utilization_0' report (if not found)
・・・
Runというのは↓のことです。
生成手順は複雑でプロパティの設定もあり、レポートの出し方の設定などもあるのですが、全て削除してしまってもデフォルトのRunが生成されるようです。
まとめ
- VivadoでWrite Tclを行うと、そのプロジェクトを作成するためのソースファイルの指定やオプション設定が書かれたTclファイルが生成される。
- Tclにはソースファイルや制約ファイルは含まれておらず、ソースファイルの場所が書かれている。
- このTclファイルから元のxprを復元できる。
- Tclファイルの実行は、vivado.bat -mode tcl <ファイル名>.tclで行う。
このTclファイルは、VivadoのTclスクリプトの使い方サンプルの宝庫です。Vivadoのプロジェクトを生成するようなプログラムを作りたいという方はぜひ読んでみてください。
最近のコメント