手順 4: IP のアップデート - 2023.2 日本語

Vivado Design Suite チュートリアル: IP を使用した設計 (UG939)

Document ID
UG939
Release Date
2023-11-13
Version
2023.2 日本語
この時点で合成を実行しようとすると、Block Memroy Generator IP に対し、次のような警告メッセージが表示されます。
WARNING: [IP_Flow 19-2162] IP 'blk_mem_gen_v7_3_0' is locked:
* IP definition 'Block Memory Generator (7.3)' for IP 'blk_mem_gen_v7_3_0'
has a newer major version in the IP Catalog.
Please select 'Report IP Status' from the 'Tools/Report' menu or run Tcl
command 'report_ip_status' for more information..

Block Memory Gnerator は最新版ではないのでロックされています。また、出力ファイルもないので、この IP をアップグレードしないと出力ファイルは生成できません。

Block Memory Generator は、AMD IP カタログにさらに新しいバージョンがあります。インタラクティブなデザイン セッションであれば、こうしたメッセージは役立つのですが、バッチ モードの Tcl スクリプトでは、これらのメッセージは合成またはインプリメンテーション エラーが出るまで表示されません。

これを未然に防ぐには、スクリプトを次の目的で使用できます。

  • IP がロックされているかどうかの判断。
  • IP カタログにさらに新しいバージョンがないかどうかをチェック。
  • IP がロックされていて、新しいバージョンがある場合は、IP をアップグレード。
  • IP の出力ファイルを生成。

この作業を次の手順に従いながら、blk_mem_gen_v7_3_0 IP に対して実行します。

  1. まず、IP がロックされているかどうかを確認し、Tcl 変数にそのステートを格納します。Tcl スクリプトに次の行を追加します。
    set locked [get_property IS_LOCKED [get_ips blk_mem_gen_v7_3_0]]
  2. 次に、IP カタログにさらに新しいバージョンがあるかどうかを確認し、その情報を Tcl 変数に格納できます。Tcl スクリプトに次の行を追加します。
    set upgrade [get_property UPGRADE_VERSIONS [get_ips blk_mem_gen_v7_3_0]]

    これで、さらに新しいバージョンがある場合は、そのアップグレード版の VLNV (Vender/Library/Name/Version) ID が返されます。

    アップグレード版がなければ、この変数には空の文字列 (””) が含まれます。blk_mem_gen_v7_3_0 IP の場合は、新しいバージョンがあります。

  3. IP がロックされているかどうか、その IP のアップグレード版があるかとうかを確認するには、格納された Tcl 変数 $locked および $upgrade をチェックします。IP の新しいバージョンがある場合は、それをアップグレードします。Tcl スクリプトに次の行を追加します。
    if {$locked && $upgrade != ""} {
    upgrade_ip [get_ips blk_mem_gen_v7_3_0]}

    これで、Block Memory Generator IP がデザインで使用されている現在のバージョンから、IP カタログにある最新バージョンにアップグレードされます。

  4. IP をアップグレードできたので、次の行をスクリプトに追加します。
    generate_target all [get_ips blk_mem_gen_v7_3_0]
  5. 同様に、Accumulator や FIFO Generator のようなほかの IP がロックされているかどうかを確認できます。このチュートリアルでは、Vivado 2023.2 のネイティブ IP と出力ファイルを使用するため、これらの IP を更新する必要はありません。

    IP は現在のステートなので、スクリプトに次を追加します。

    generate_target all [get_ips c_accum_0]
    generate_target all [get_ips char_fifo]