Step 4: Upgrade IP - 2022.1 English

Vivado Design Suite Tutorial: Designing with IP (UG939)

Document ID
Release Date
2022.1 English
If you attempt to run synthesis at this time, you will see this warning for the Block Memory 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..

The Block Memory Generator is locked because it is not the most recent version of the IP. It also does not have any output products and so must be upgraded before output products can be generated.

The Block Memory Generator has updated versions in the Xilinx® IP catalog. In an interactive design session, these messages can be helpful; but in a batch mode Tcl script these messages are not seen until after synthesis or implementation fails.

To anticipate and prevent this, you can use your script to:

  • Determine if an IP is locked.
  • Check for a newer version of the IP in the catalog.
  • Upgrade an IP if it is locked, and a new version is available.
  • Generate the output products for the IP.

Do this for the blk_mem_gen_v7_3_0 IP using following sequence:

  1. First, check to see if the IP is locked, and store the state in a Tcl variable. Add the following line to your Tcl script:
    set locked [get_property IS_LOCKED [get_ips blk_mem_gen_v7_3_0]]
  2. Next, you will check to see if there is an upgrade available in the IP catalog, and store that information in a Tcl variable as well. Add the following line to your Tcl script:
    set upgrade [get_property UPGRADE_VERSIONS [get_ips blk_mem_gen_v7_3_0]]

    This returns the VLNV (Vendor/Library/Name/Version) identifier of the upgrade, if there is one available.

    If there is no upgrade, the variable contains an empty string (””). In the case of the blk_mem_gen_v7_3_0 IP, there is an upgrade available.

  3. Now you can check the stored Tcl variables, $locked and $upgrade, to see if the IP is locked, and if there is an upgrade version for the IP. If so, you can upgrade the IP. Add the following lines to your Tcl script:
    if {$locked && $upgrade != ""} {
    upgrade_ip [get_ips blk_mem_gen_v7_3_0]}

    This results in an upgrade to the block memory generator IP from the current version in the design to the latest version in the IP catalog.

  4. Now that the IP is current, add the following to your script:
    generate_target all [get_ips blk_mem_gen_v7_3_0]
  5. Similarly, you can check if other IP's like Accumulator or FIFO Generator are locked. This tutorial uses Vivado 2022.1 native IP with output products therefore these IP's need not be updated.

    Since the IP's are in the current state, add following to your script.

    generate_target all [get_ips c_accum_0]
    generate_target all [get_ips char_fifo