In the design cycle, users can have multiple versions of projects which use the same IPs with the same configurations. Rerunning the whole project can cause regeneration of the IPs every time, and is time-consuming.
In the Vivado project settings, the user IP repositories allow users to add their own IP to the Vivado IP catalog and when used alongside a Remote IP Cache, compile times can significantly reduce. This blog entry explains how to set this up.
You can find all of the entries in the Saving Compile Time Series here.
Before reading through this design entry, make sure you are familiar with how to Package IP cores. The information can be found in UG1118 and in these Quick Take Videos .
Before starting with the steps below, it is best to create a formatted directory structure:
/<IP 1 Name>
/<IP 2 Name>
Note: there should be a top-level parent directory, for example iprepo, and then child directories; one for each IP, and one for a Remote IP Cache that can be created by Vivado.
The IP must be in a sibling directory to the Remote IP Cache. This is because Vivado stops searching the directory structure for IP Caches when it encounters a component.xml file, which is always generated with the packaged IP directory.
Step 1: Package an IP with all of the required source files
The general IP packaging steps include the following 3 steps, and the packaged IP files are managed together.
Add the RTL to a Vivado project and verify that it is complete by synthesizing it
Package the RTL by using the Tools option in Vivado:
Make sure to choose a directory based on the IP Name within the ip_repo directory
Step 2: Verify and generate all remote caching files
In this step, you need to instantiate the packaged IPs from the packaged IP folder, but with no logical connections.
After that, generate the netlist for different IP configurations in the repository.
Add the newly created user IP Repository to a Vivado project via the project settings:
Add the IP to the newly created IP Integrator Block Design. You can easily bring all of the ports of the IP out to external ports by selecting it and pressing Ctrl-T. Otherwise, you can add it to a design.
If your IP is configurable, add multiple configurations to further populate the IP Cache with common configurations.
Note: there are lots of restrictions when applying this work-around, any mismatch from the user's IP settings could cause a regeneration of the instantiated IP
Ensure that the software build matches
Ensure that the device part/speed_grade/board name matches
Ensure the IP settings matches with the IP caching file when it is generated. Checks should be performed as sometimes parameter propagation could cause some parameters on the user's IP to be overridden, for example, the clocking frequency propagated from upstream would be overridden.
Validate the design and review any Error and Critical Warnings
Before generating the design, specify the remote IP Repository within the IP Repository directory, for example, /iprepo/ipcache:
Generate the Block Design by using the default Out of context per IP option:
After generation is complete, you should see the Remote IP Cache populated. There will be new directories that have a hash code as the directory name.
Step 3: Instantiate the IP in the formal design and reuse the remote IP repository
Using the user IP repository and IP Cache in a project:
Now you only have to point to the top-level IP Repository directory to use both the User IP and the Remote IP Cache.
When you generate the design now,re-synthesis will not occur if the part/board used and IP configuration options do not change, and you will see the "Using cached IP results" for the IP run status:
Suggested Revision Management:
Either package a user IP by script or create a standalone project to package the IPs.
Create a standalone project to instantiate the user IPs with all of the different configurations, and generate the IP, along with exporting the cache.
Adopt the IP in the formal project and follow the guidance in the documentation.
This blog entry was written with contributions from: Ben Curry, Nabeel Shirazi and Yolanda Xu.