Vivado のプロジェクトを共有する

公開日:
最終更新日:
Vivado のプロジェクトを共有

Vivado を使ったことがある人なら、プロジェクトをシェアしようとしてうまくいかなかった経験があるのではないでしょうか。
基本的に自分の PC で使うことしか想定していないのかもしれませんが、簡単にシェアできたらすごく便利だなぁとずっと思っていました。
特にプロジェクトのフォルダ自体は大きいので、1 つのファイルだけ Git に上げておけば誰でも再現できると便利だと思うので、実際にやってみたいと思います。

1. 環境

  • Vivado 2021.2

2. なぜ Vivado のプロジェクトの共有が難しいのか

Vivado のプロジェクトファイル類には 絶対パス を使って管理されている部分があるので、他の人にそのままフォルダを zip で圧縮して送っても、相手の環境ではパスが違うため動かないということになります。

では、パスを書き換えればいいのではないかと思いますが、絶対パスで記述されているところは意外に多く、これらを全て書き直して正しく動かすのは至難の業です。

そこで、今回は手動での変更を最小限に抑えて他の人に共有する方法を紹介したいと思います。

3. tcl ファイルのエクスポート

Vivado の tcl ファイルはブロックのデザインや設定など Vivado で行った操作をまとめて記述してくれたものです。
このファイルがあれば他の人でもプロジェクトを実行できるようになるはずです。

エクスポートの方法はバージョンによって若干違うかもしれません。

まずは下の図のように File > Project > Write Tcl... とたどってエクスポート画面を開きましょう。

Tcl のエクスポート画面を開く
Tcl のエクスポート画面を開く

次に、下の図のようにエクスポートの際の設定をしていきます。

Output File は好きなパスを指定してください。

Recreate Block Designs Using Tcl はデフォルトではチェックが入っていないのですが、チェックを入れるようにしてください。
これにチェックを入れないとブロック図が再現されません。

他のオプションについてはどちらでも構いませんが、Write all properties をしておくとより確実かもしれません。
おそらくデフォルト設定なども全て明示的に記述してくれるのだと思います。

Tcl の書き出しの際の設定
Tcl の書き出しの際の設定

オプションについては以下の公式サイトに少し載っています。

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 SynthesisRun ImplementationGenerate Bitstream を順に実行してくれます。

実行には長い時間がかかるので、最後に Implementation done! と出力するようにしています。

この辺りの書き方は以下の PDF の 13 ページあたりに書いていたりします。

5. tcl ファイルの実行

配布したら次は実行してもらわないといけませんが、実行の方法はそれほど難しくありません。
tcl と wrapper を同じフォルダに入れて、そのフォルダで以下のコマンドを実行すれば OK です。

$ vivado -mode batch -source project.tcl

これで自動的にプロジェクトを作って、 bitstream まで生成してくれるようになりました 👏

実行の方法などは以下のサイトを参考にしました。

6. まとめ

今回は Vivado のプロジェクトを共有する方法について説明してみました。

便利なツールですが、非自明なところも多く使いこなすのは難しいですね… 😇

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA