この時点で合成を実行しようとすると、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 に対して実行します。
- まず、IP がロックされているかどうかを確認し、Tcl 変数にそのステートを格納します。Tcl スクリプトに次の行を追加します。
set locked [get_property IS_LOCKED [get_ips blk_mem_gen_v7_3_0]]
- 次に、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 の場合は、新しいバージョンがあります。
- 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 カタログにある最新バージョンにアップグレードされます。
- IP をアップグレードできたので、次の行をスクリプトに追加します。
generate_target all [get_ips blk_mem_gen_v7_3_0]
-
同様に、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]