« Vivadoのプロジェクトをgitで管理する最小限は何か | トップページ | Visual StudioでC#のお勉強 »

2019.05.07

Vivadoプロジェクト生成するTclの完成

必要な少数のファイルだけをGITで管理するため、VivadoのプロジェクトをTcl化する件ですが、Block Designを別ファイルにすることができるようになりました。

そのスクリプトをgithubで公開します。

https://github.com/tokuden/NahiViva

NahiVivaは、ビルドや、IP Upgrade、プロジェクトの保存/復元などをトータルにサポートするVivadoの便利なTclスクリプトです。

このうち、本日はNahiSaveという関数を強化し、Block DesignのTcl化と復元をサポートしました。

原理は次のような感じです。

  • Write Tclで出力したTcl化プロジェクトは、プロジェクト再生成時にbdファイルをインポートするのがデフォルトの動作である
  • しかし、MIGを含んだブロックデザインでは、bdファイル以外にも、MIG用のいろいろなファイルが必要になる
  • 一方、Export Block Designの操作を行うと、BD生成Tclが作成され、このTclから元のBlock Designが完全に復元できる。このBD生成Tclには、Block Designのモジュールの配置や、MIGの設定、配線、IPの設定などが書かれている
  • ところが、Tcl化プロジェクトにはBD生成Tclを呼び出す機能がない
  • そこで、Tcl化プロジェクトの適当な場所にsource文を埋め込んで、自動的にBD生成Tclを実行すればよい

こういった操作を自動的に行うのがNahiSaveというコマンドです。

NahiSaveが行っている内容

NahiSaveを行うと、create_project.tclというファイルと、src/<プロジェクト名>_bd.tclが生成されます。

srcというフォルダにTcl化されたBDファイルが作られます。

Viva_bd_gen8

Tcl化プロジェクトはBDファイルが存在することを前提としていますが、この時点ではBDファイルはありません。BDは、Tcl化BDを実行すると生成されるからです。

そこで、Tcl化プロジェクトの中からBD化Tclを出すようにNahiSaveは、生成されたgenerate_project.tclを書き換えます。

# Generate block design and wrapper. (by nahitafu)
source ./src/artsys_bd.tcl
make_wrapper -import -files [get_files ${origin_dir}/${_xil_proj_name_}/${_xil_proj_name_}.srcs/sources_1/bd/${design_name}/${design_name}.bd] -top
# Import local files from the original project
#set files [list \
#[file normalize "${origin_dir}/fx3-axi-ddr/fx3-axi-ddr.srcs/sources_1/bd/artsys/artsys.bd" ]\
#[file normalize "${origin_dir}/fx3-axi-ddr/fx3-axi-ddr.srcs/sources_1/imports/hdl/artsys_wrapper.vhd"]\
#[file normalize "${origin_dir}/fx3-axi-ddr/fx3-axi-ddr.srcs/sources_1/bd/artsys/ip/artsys_mig_7series_0_0/mig_a.prj" ]\
#]
#set imported_files [import_files -fileset sources_1 $files]
#
# Set 'sources_1' fileset file properties for remote files
set file "$origin_dir/src/ledchika.vhd"
set file [file normalize $file]

赤い部分がNahiSaveによって追加された行で、緑の部分がコメントアウトされた行です。

プロジェクトを復元してみた様子

では、実際に試してみます。

Vivadoのプロジェクトフォルダをすべて消した状態で、Artix-7の「USB3.0-DDR3メモリ」デザイン
に必要なソースを用意してopen_project_gui.cmdを実行した様子をお見せします。

(1) まず、DOSプロンプトが立ち上がってVivadoがCUIモードで起動します。

Viva_bd_gen1

(2) VivadoのGUIが起動します

Viva_bd_gen2

(3) プロジェクトの設定を読み込んでいきます

Viva_bd_gen3

(4) 真っ白なBlock Designにモジュールが配置されていきます

Viva_bd_gen4

(5) 真っ白なBlock Designにモジュールが配置されていきます

Viva_bd_gen5

(6) どんどん配置が進みます

Viva_bd_gen6

(7) 配置が終わり、配線が行われます

Viva_bd_gen7

と、このようにエラーなくプロジェクトが再現されました。

ここで、ブロックデザインの中の2つのモジュールを書き換えてみましょう。

まず、元のデザイン。

Viva_bd_gen9

この中のfx3_axi_0_bramを少し下に移動し、axi_traffing_gen_0のパラメータを変えてみます。

Viva_bd_gen11

Viva_bd_gen10_1

そして、NahiSaveを行ったあと、gitでartsys_bd.tclを比較してみると・・・

Viva_bd_gen13

IPのパラメータの変更は反映されていることがわかります。ただ、モジュールの座標は含まれていないようでした。

どうやって使うのか

最低限必要なのは、この中にあるnahiviva.tclです。

Vivadoのtclコンソールから

source nahiviva.tcl

で読み込むか、バッチファイルのopen_project_gui.cmdを実行すると、NahiVivaの各種関数が使用できるようになります。

VivadoのTclコンソールで

NahiSave

というコマンドを打ち込むと、create_project.tclというファイルと、src/<プロジェクト名>_bd.tclが生成されます。

生成されたプロジェクトを読み込むには、open_project_gui.cmdを実行します。

最終的なまとめ

Vivadoのプロジェクトをgitで管理する最小限のファイルはこうなりました。

  • プロジェクトを生成するためのtclファイル (NahiSaveで作成)
  • ブロックデザインを生成するtcl(NahiSaveで作成)
  • 自分のIP(ip_remoフォルダに置く)
    • RTLソース
    • component.xml
    • [<中のXILINX IP名>/<中のXILINX IP名>.xci]
    • xgui/<IP名>_<バージョン>.tcl
  • インタフェース(ip_repoフォルダに置く)
    • <インタフェース名>.xml
    • <インタフェース名>_rtl.xml
  • 制約ファイル

やり方は以下のような感じです。

  1. まずIPのレポジトリと、XDC制約ファイル、RTLソースファイルをVivadoプロジェクトフォルダの外に配置します。
    これらのファイルはgit管理下に置きます。
  2. これらのファイルをプロジェクトに追加する際に、importやcopyするのではなく追加します。
  3. .xprの代わりにWrite Tclで生成したTclを、.bdの代わりにExport Block Designで生成したTclをgit addします。
    生成する際のオプションには気を使う必要があります。
  4. xprやbd、それからsources_1/bd/main/・・・のフォルダはgitで管理する必要はありません

nahiviva.tclを使えば、これらの操作を全自動でやってくれます。

ぜひ、NahiVivaを試してみてください!

|

« Vivadoのプロジェクトをgitで管理する最小限は何か | トップページ | Visual StudioでC#のお勉強 »

コメント

コメントを書く



(ウェブ上には掲載しません)




« Vivadoのプロジェクトをgitで管理する最小限は何か | トップページ | Visual StudioでC#のお勉強 »