AR# 57546


Vivado IP Flows - How to modify/edit IP core source files in Vivado?


It might be necessary at times to edit unencrypted source files that an IP delivers, including XDC files, HDL parameters or ports of an IP core.

  • This should only be done if absolutely necessary.
  • It is recommended that if you decide you must modify any of the IP core sources, that you follow the guidelines provided in this Answer Record and do not directly modify the sources on disk.

Directly making modifications outside of Vivado can result in your changes being removed, as the IP core might get reset or regenerated during the flow. It is important that you mark the IP core as being under user management or lock it before making edits.
Making the IP core user managed also indicates that the IP core was locked by a user, and that changes to the IP core have been made.

The changes should be revisited before upgrading the IP core at a future time as the changes will be lost when putting the IP core back under tool control.
It is important that you correctly set up the IP core and generate the output products prior to marking it for editing.
Once the IP core is under user management, you can no longer customize the IP or generate output products.


Standard IP Core in a Vivado Project

The steps outlined here are for a "Manage IP" project but are also applicable for an RTL project with IP cores present, either stored within the project directory structure or saved to an external location.

In terms of being able to edit, there are two types of IP delivered in the IP Catalog:

  • IP that have the IS_MANAGED property as user changeable.
  • IP that have the IS_MANAGED property as read only and cannot be change by the user.

The IP that have the IS_MANAGED property as read only are subsystems and are more complex IP.
An example of this is the UltraScale Ten Gigabit Ethernet PCS/PMA IP which has dynamic Transceiver Wizard IP references.
See the section below for more information on editing subsystem IP.

Follow these steps to prepare an IP for editing:

  1. If the IP has not been customized yet, do so now and generate all output products, including the DCP.
    If you do not want to use the default OOC flow for the IP then disable the DCP creation by going to the out-of-context settings.
    It is recommended that you use the default flow.
  2. Once all of the output products and the DCP have been generated, set the IS_MANAGED property to false on the XCI file for the IP:
    set_property IS_MANAGED false [get_files <IP_NAME>.xci]

    Note: If the IP is a complex subsystem IP you will receive the following error message:

    ERROR: [IP_Flow 19-3666] The is_managed property cannot be directly modified for hierarchical IP.

    If you receive this error please see the section below on subsystem IP.

  3. Setting the IS_MANAGED to false will cause the property IS_LOCKED to become true. You will see that the IP icon in the IP Sources window has changed to

    This shows that the IP core is not managed by Vivado.
    If you do a get_property IS_LOCKED [get_files <IP_NAME>.xci] you will see that this has become 1, which is true, meaning the IP is locked.

    In the output window of the Report IP Status command you will see that the IP core is under user management.

  4. At this point the IP core is now under the user management and all non-encrypted files can be modified such as XDC and HDL source files.
    complete the required edits.
  5. Re-create the IP output products, including the DCP, as follows:
    a) Reset the IP OOC run. This has to be performed using the Tcl Console.
    Open the Design Runs tab in the Out-of-Context Module Runs folder, and find the IP where you set the IS_MANAGED property to FALSE, with the name <IP_name>_synth_1.
    Execute the following command in the Tcl Console to reset the run:
    reset_run <ip_name>_synth_1

    b) Re-launch the run using the following command:
    launch_run <ip_name>_synth_1

    This uses any of the HDL or constraints of the IP that you modified.
    After the run completes, you can use the IP as before.
  6. Once the run is complete the IP can be used as before. By referencing the XCI file (recommended) you will have access to the IP core source files for simulation and the DCP for synthesis of the top level as well as for implementation.

Subsystem IP

Some complex subsystem IP will not allow changes to the IS_MANAGED property.

This includes IP in all 7 Series and UltraScale FPGA families.

Whether the subsystem IP allows the IS_MANAGED to be changed depends on the particular customization options of the specific IP.

There are risks associated with editing the RTL files of these IP. You could make a change that invalidates the connectivity to the sub-cores.

Changes to these IP core HDL files should be carefully considered.

If edits are required for these IP then it is recommended that you manually lock the IP core before making edits.

 set_property IS_LOCKED true [get_files ten_gig_eth_pcs_pma_0.xci] 

Once the IP is locked you will see in the IP Source tab that the icon now has a lock over the IP symbol.



Having the IP core locked in this way prevents Vivado from modifying the IP output products or resetting the IP core.

It also provides a visual cue that the IP core has been modified by the user.

Unlike with IP core marked as being user managed (via the IS_MANAGED property), locking the IP core does not enabling editing of the IP core when using the built in text editor of Vivado.

You will need to either change to another editor (Tools -> Options -> General in the text editor section) or edit the files directly on disk using your text editor of choice.

Once the files have been modified the steps to recreate the DCP continue with step #4 as with the non-subsystem IP.


IP instance in an IP Integrator (IPI) Block Design (BD)

In order to edit the content of an IP under an IPI block design is to re-package the generated source as a custom IP and edit the HDL as necessary.

If you have an IP core in a BD and need to make an edit to the generated HDL that is not available through re-customizing the IP core, the Generated files need to be re-packaged in order to use them in a BD. 

The attached script (make_static.tcl) is provided to help with this process. Although the script is not officially supported, you can use it to repackaged the generated IP core as an IP Definition and use that IP to create a new instance in IPI. 

Once this is done, you can edit the IP Definition like you would any custom IP (If you change the top level interface, use the edit in IP Packager flow to merge in the changes).

Note that the IP Definition created is no longer parameterizable.

The script is intended to create an IP Definition from an IP Instance. It will create an IP with a similar name, but prefixed with "Static".

It is important that the .xci file being used is in the currently open project and the .xci file is fully generated.

To run the script:

  1. Open the project with the .xci file you want to "harden"
  2. Source this script
  3. Run the process to create the definition:
    makeXciDefinition [get_files my_core_name.xci ]



Associated Attachments

Name File Size File Type
make_static.tcl 5 KB TCL

Linked Answer Records

Associated Answer Records

Answer Number Answer Title Version Found Version Resolved
54677 Vivado IP Flows - Generated IP target files delivered in Vivado are always READ ONLY in the Vivado Text Editor N/A N/A
AR# 57546
Date 04/28/2021
Status Active
Type General Article
People Also Viewed