前述のように、デザインで使用されている Block Memory Generator IP には、IP カタログにさらに新しいバージョンがあります。従って、IP カタログにある最新バージョンにアップグレードしないと、この IP はカスタマイズできないので、現在のバージョンの IP はロックされています。プロジェクトに XCI を追加すると、次のような警告メッセージが表示されます。
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.
インタラクティブなセッションであれば、このメッセージは役立つのですが、バッチ モードのスクリプトでは、このメッセージは合成またはインプリメンテーション エラーが出るまで表示されません。これを未然に防ぐには、スクリプトを次の目的で使用できます。
- IP がロックされているかどうかの判断。
- IP カタログにさらに新しいバージョンがないかどうかをチェック。
- IP がロックされていて、新しいバージョンがある場合は、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 {$upgrade != "" && $locked} { upgrade_ip [get_ips blk_mem_gen_v7_3_0]}
これで、Block Memory Generator IP がデザインで使用されている現在のバージョンから、IP カタログにある最新バージョンにアップグレードされます。