Vivado を使ったことがある人なら、プロジェクトをシェアしようとしてうまくいかなかった経験があるのではないでしょうか。
基本的に自分の PC で使うことしか想定していないのかもしれませんが、簡単にシェアできたらすごく便利だなぁとずっと思っていました。
特にプロジェクトのフォルダ自体は大きいので、1 つのファイルだけ Git に上げておけば誰でも再現できると便利だと思うので、実際にやってみたいと思います。
1. 環境
- Vivado 2021.2
2. なぜ Vivado のプロジェクトの共有が難しいのか
Vivado のプロジェクトファイル類には 絶対パス を使って管理されている部分があるので、他の人にそのままフォルダを zip で圧縮して送っても、相手の環境ではパスが違うため動かないということになります。
では、パスを書き換えればいいのではないかと思いますが、絶対パスで記述されているところは意外に多く、これらを全て書き直して正しく動かすのは至難の業です。
そこで、今回は手動での変更を最小限に抑えて他の人に共有する方法を紹介したいと思います。
3. tcl
ファイルのエクスポート
Vivado の tcl
ファイルはブロックのデザインや設定など Vivado で行った操作をまとめて記述してくれたものです。
このファイルがあれば他の人でもプロジェクトを実行できるようになるはずです。
エクスポートの方法はバージョンによって若干違うかもしれません。
まずは下の図のように File > Project > Write Tcl...
とたどってエクスポート画面を開きましょう。
次に、下の図のようにエクスポートの際の設定をしていきます。
Output File
は好きなパスを指定してください。
Recreate Block Designs Using Tcl
はデフォルトではチェックが入っていないのですが、チェックを入れるようにしてください。
これにチェックを入れないとブロック図が再現されません。
他のオプションについてはどちらでも構いませんが、Write all properties
をしておくとより確実かもしれません。
おそらくデフォルト設定なども全て明示的に記述してくれるのだと思います。
オプションについては以下の公式サイトに少し載っています。
4. tcl
ファイルの整形
先程出力した tcl
ファイルを何点か書き換える必要があります。
4.1. wrapper を使用している場合
design_1_wrapper.v
のような wrapper ファイルがある場合はそれを tcl
と同時に配布しなければなりません。
wrapper ファイルはプロジェクトフォルダの中の project_1.gen/sources_1/bd/design_1/hdl/design_1_wrapper.v
にあります。
(Vivado のバージョンによりますが、project_1.gen
がない場合は project_1.srcs
にあるはずです。)
このファイルをコピーしておきましょう。
また、tcl
ファイル内で wrapper ファイルの場所を書き換えましょう。
私の場合はこのようになっていたものを
import_files -fileset sources_1 [file normalize "${origin_dir}/../project.gen/sources_1/bd/design_1/hdl/design_1_wrapper.v" ]
このように変更しました。
import_files -fileset sources_1 [file normalize "${origin_dir}/design_1_wrapper.v" ]
この場合は tcl
と wrapper は同じフォルダの同じ階層に入れましょう。
4.2. 他で生成した IP を使用している場合
IP の入っているフォルダ名を tct
ファイル内で検索して、そのパスが正しいか確認してください。
私の場合はフォルダ名が hoge
だとすると以下のような二行がヒットしました。
"[file normalize "$origin_dir/[file normalize "$origin_dir/hoge"]"]"\
set_property "ip_repo_paths" "[file normalize "$origin_dir/hoge"]" $obj
$origin_dir
は "."
になっていましたが、この相対パスが正しいことを確認し、間違って入れば修正しておきましょう。
4.3. プロジェクト名を変えたい場合
プロジェクト名を変える場合はファイル内をプロジェクト名で検索して、一致したものを置き換えてあげれば OK です。
私の場合はコメントアウトされている部分を除けば以下の 2 行が見つかりました。
set _xil_proj_name_ "project"
set script_file "project.tcl"
これを好きな名前に書き換えましょう。
4.4. bitstream の生成まで自動で実行したい場合
tcl
ファイルの最後に以下のコードを記述すれば OK です。
launch_runs impl_1 -to_step write_bitstream -jobs 64
wait_on_run impl_1
puts "Implementation done!"
これで、Run Synthesis
、 Run Implementation
、 Generate Bitstream
を順に実行してくれます。
実行には長い時間がかかるので、最後に Implementation done!
と出力するようにしています。
5. tcl
ファイルの実行
配布したら次は実行してもらわないといけませんが、実行の方法はそれほど難しくありません。tcl
と wrapper を同じフォルダに入れて、そのフォルダで以下のコマンドを実行すれば OK です。
$ vivado -mode batch -source project.tcl
これで自動的にプロジェクトを作って、 bitstream まで生成してくれるようになりました
実行の方法などは以下のサイトを参考にしました。
6. まとめ
今回は Vivado のプロジェクトを共有する方法について説明してみました。
便利なツールですが、非自明なところも多く使いこなすのは難しいですね…