Step 4: Upgrade IP - 2021.2 English

Vivado Design Suite Tutorial: Designing with IP

Document ID
Release Date
2021.2 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.

Similar messages would be seen for the Accumulator. Both the Block Memory Generator and Accumulator have 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]

    The Accumulator core is legacy IP created with CORE Generator, rather than native IP created in the Vivado® Design Suite. If the IP had the necessary output products, for instantiating the HDL module into a design, for implementation, and for simulation it could be used in its current form.

    However, you should upgrade legacy IP to native Vivado® IP whenever possible. This will ensure you have the latest updates and fixes for an IP, and any XDC constraints delivered with it.

  5. Following the steps in 1-4, add a sequence of commands to your Tcl script to check if the Accumulator IP is locked, has an available upgrade, upgrade the IP if so, and generate output products for it.