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.
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:
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:
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:
If you receive this error please see the section below on subsystem IP.
In the output window of the Report IP Status command you will see that the IP core is under user management.
A dialog will appear asking to launch the selected run.
Pressing OK will result in another dialog appearing informing you that the run will need to be reset and all of the files will be deleted for the run.
This is not referring to the IP source files, just the run related files and output.
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.
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.
Making 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: