Vivado Tips

はじめに

時々必要になるが、その時には多分忘れているであろう知識を書き残しておく。

(Vivado 2023.1) CUI 環境でインストール

Linux に於いて GUI を使わずに Vivado 2023.1 をインストールする方法を記す。GUI を使えない FPGA コンパイル用サーバーを SSH 越しに操作するときこの方法を使う。次の記事を参考にした:WSL に Vivado をインストールする

  1. インストール先のコンピュータに何らかの手段で用意した自己解凍ファイルを実行してインストーラを抽出する。
    ./Xilinx_Unified_2023.1_0507_1903_Lin64.bin --noexec --target ./xilinx-installer
    target オプションの値はインストーラの展開先ディレクトリである。何をインストールするか番号で訊かれるので Vivado を選ぶ。
  2. 認証トークンを生成する。
    xilinx-installer/xsetup -b AuthTokenGen
    Xilinx アカウントのメール・アドレスとパスワードを訊かれるので答える。
  3. 設定用ファイルを生成する。
    xilinx-installer/xsetup -b ConfigGen
    設定用ファイルは ~/.Xilinx/install_config.txt に生成される。デフォルトの設定が書かれているので、自分の都合に合うように編集する。Destination= の右辺では ~/ を使えないところがハマりポイントである。
  4. インストール開始。
    xilinx-installer/xsetup --agree XilinxEULA,3rdPartyEULA --batch Install --config ~/.Xilinx/install_config.txt

(Vivado 2023.1) SystemVerilog で書かれた RTL module をブロック・デザインに追加する

(2024-04-27) Vivado 2023.2 は改良されているらしく。下記手順 1 のみで十分であった。

Vivado 2023.1 の IP Integrator では SystemVerilog で書かれたモジュールを RTL module としてブロック・デザインに配置できない(コンテキスト・メニューの当該項目が無効化されている)。解決法は下記:

  1. ブロック・デザインに追加したい、SystemVerilog で書かれたモジュールのラッパー・モジュールを Verilog で作る。しかし、内部で SystemVerilog 製のモジュールをインスタンス化する記述をするとコンテキストメニューから “Add Module to Block Design” が無効化されるので 2 に示す手順を踏む。
  2. ポート宣言は残し、SystemVerilog 製モジュールとの接続をコメント・アウトする。コンテキスト・メニューの “Add Module to Block Design” が有効化されるので、ブロック・デザインに追加する。
  3. 上記 2 でコメントアウトした部分を復活させる。

(Vivado 2023.1) リソース使用量レポートをテキスト・ファイルに出力

report_utilization -hierarchical -file foo.txt
report_power -file foo.txt

(Vivado 2023.1) Xilinx 製 IP を任意のディレクトリに配置する方法

vivado-git を使って Vivado プロジェクトを Git で管理するにあたり、IP を vivado_project フォルダの外側で追跡対象のフォルダに保持したい。その場合は IP を普通に生成した後で任意のフォルダにコピーすればよい。

IP を普通に生成すると Vivado プロジェクト・フォルダの下の自動生成されたフォルダに自動生成された HDL とともに配置される。その後で “Project Manager” > “Sources” から IP を右クリックしてコンテキスト・メニューから “Copy IP” を選択し、”Destination lP Location” でコピー先を選択する。ここで指定したフォルダ内に IP と同名のフォルダが作られ、その中に xci ファイル(IP の設定値が記述されたファイル)が生成される。HDL 等はコピーされないが、Xilinx 製の IP である限り、 xci のみあれば論理合成できるので実用上はこれで十分である。

【別の Vivado プロジェクトの xci ファイルをコピーして取り込む方法】
xci ファイルには論理合成や配置配線結果の保存先フォルダが記述されているため、ある Vivado プロジェクトにて前述の方法で IP をコピーして作った xci ファイルを手動で(ファイル・エクスプローラー等で)別のプロジェクトのソース管理フォルダにコピーして用いると、あらぬ場所に生成物が現れて収拾がつかなくなる。別のVivado プロジェクトの xci ファイルをコピーして取り込むには、”Add or create design sources” から xci ファイルを選択して “Copy sources into project” にチェックを付けてコピーを実行(Vivado プロジェクトフォルダ下の自動生成されるフォルダにコピーされる)した後、再度前述の方法で所望のフォルダにコピーする必要がある。

(Vivado 2021.2) プロジェクトを確実にコピーする

vivado.runs, vivado.gen, complib, vivado.cache 以外をコピーして適当な圧縮ファイルにまとめる。これが上手く働くことを Virtex UltraScale+ HBM を用いた大規模なプロジェクトで確認済みである。

(Vivado 2024.1.1) IP のモジュール・インスタンス定義用の雛形を生成する

ブロック・デザインの画面に埋め込まれた+ボタンから IP を追加しても .veo ファイルは生成されない。必ず IP Integrator から Vivado プロジェクトに対して IP を追加すること。

トラブル・シューティング

(Vivado 2023.2) Block Design に RTL モジュールを GUI 操作で追加できないとき

おそらく Vivado のバグ。Sources タブのモジュールを Block Design に D&D しようとしても、できない旨のメッセージが出ることがある。Tcl Console で下記のコマンドを実行して対処する。

create_bd_cell -type module -reference <module name> <instance name>

(Vivado 2023.1) SystemVerilog で書いたモジュールを IP 化するときの罠

module #() 内の localparam が認識されない

Vivado が SystemVerilog の仕様に完全に対応できていないのが原因と思われる。同名のパラメータを “Customization Parameters” で非公開の固定値として定義すればよい。

“Edit Port” ウィンドウで OK ボタンを押すと “You have entered invalid information” エラーが生じる

“Driver Value” (ポートが使われなかった場合にセットされる値らしい。Xilinx Answer Record 65277 を参照。)に値を指定すれば解決する。

RTL ソース・コードの変更が反映されないときの対処

過去に Implementation が済んだプロジェクトに新しい RTL ソース・ファイルを追加し、 Block Design 中の RTL モジュールの中で先ほどのソース・ファイルで定義されているモジュールのインスタンスを作ると、Elaboration 以降でその変更が反映されず、古い RTL ソース・ファイルの頃と全く同じ成果物が出ることがある。そのときは TCL コンソールで reset_project を実行すると治る。

(Vivado 2023.2) [VRFC 10-1342] root scope declaration is not allowed in verilog 95/2K mode が生じるとき

xvlog--include の引数が空になって直後に -sv が続くと package 内の localparamstruct の定義部で上記のエラーが指摘される。Makefile 内で--include の引数を変数で定義していて、かつそれが空になるとこの状況が起こる。次のようにして変数が空のときは --include を付加しないようにするとよい。

$(shell [ ! -z "$(INCLUDE_DIR)" ] && echo "--include $(INCLUDE_DIR)")

テスト・ベンチの elaboration 時に IP が見つからないエラーが出るとき

simulator language が mixed 以外になっていないか?例えば FIFO Generator を使っているときに simulator language を Verilog に設定していると elaboration 時に IP が見つからない旨のエラーが生じる。

テスト・ベンチのコンパイルが詰まるとき

  • for begin ... end の中で const を使っていないか?
    Vivado 2023.2 にて、これで詰まることが判った(2024-05-02)。

投稿者: motchy

An embedded software and FPGA engineer for measuring instrument.

コメントを残す