Hi !
In this post I will try to provide an overview of VIVADO's resources to handle IPs.
So what is an IP ?
An IP is a piece of HDL code providing a defined function, it is intended to be reusable and customizable. It can also be provided with associated resources like a data sheet, a driver, a test bench, ......
Reusable, because you might need to use this function in several designs, and you don't want to do the design again and again ! Clearly it will help reduce design duration and complexity.
Customizable, because some aspect of the implemented function can change from one use context to another. For example you may need the function in a 16 bits context and another time in a 32 bits context. So the customization section of the IP will provide you the capability to set the data bus size (if the IP was designed to support it).
Helping reduce design duration is why VIVADO provides a hugh IP catalog, where you get many IPs sorted by categories to help you find the right one. IPs are provided by Xilinx or by third party partners.
And one major point to this, is that you can add to the IP catalog your own IPs, and create your own category !! This is very powerfull and convenient when you share IPs within a team or between sites.
So, yes, you can create your custom IP and you can use it in your designs. You can make stand alone IPs or you can make IPs for SOCs with AXI interfaces. You can use in your IP almost any resource that Xilinx provides in its devices.
Ok, let's try to present how VIVADO can help us with IPs !
Stage 1
The central resource for IP handling is the IP Catalog.
It can be launched from VIVADO's PROJECT MANAGER for example.
So, as its name says, the IP catalogue provides a list of all the IPs referenced by VIVADO.
The default list of IPs included in VIVADO is the VIVADO's repository. It contains IPs developped by Xilinx and by Xilinx's partners.
They can be found here in the VIVADO's installation path.
There you have :
- xilinx : Contains all IPs developped by Xilinx
- partners : Contains all IP developped by third party Xilinx's partners
- interfaces : Contains the definition of the standard interfaces used by the IPs to optimize the graphical view of IPs with many IOs (For example an AXI4 MM interface is only one wire)
As there are many IPs in the VIVADO's repository, they are displayed by default by categories. This is more convenient when you need to walk around in the catalog. But anyway, the best solution to find the IP you need is to use the search tool !
Then, when you select one you get complementary information about the IP.
The catalog being the central place for IPs, this is the place where you will see the custom IPs you will create. Once an IP is created and available in the library, you can edit the IP from here by calling the IP packager on the selected IP.
Stage 2
So, ok, how do I use these IPs ?
There are two ways :
- Either your design is full HDL, using only HDL source files, then you can add IPs from the catalog that you will instanciate in your HDL source files. If you double click on the selected IP in the catalog it will launch its configuration GUI. This is where you will provide the name of your IP and where you can customize the IP. Then it will be added by VIVADO in the Sources section of your project. You can come back anytime to its configuration, but you will have to launch the whole generation process again.
- Either your design includes BDs (Block Designs). Where a BD is a graphical edition of your source files, by integrating IPs connected to each others. BD are the objects handled by the IP INTEGRATOR of VIVADO.
The IP Integrator tool is very very powerfull, here are some of its capabilities:
- It allows you to interconnect all kind of IPs,
- You can create hierachical levels to keep complex designs readable,
- An automation function can connect, configure and add missing IPs for you, (Limited to resets, clocks or SOC structure completion),
- It can be oriented for SOC designs, where you can easilly add processor cores, AXI busses, memories, ....
- Recently, you can even add one of your HDL source as a module box, which lets you assembly your design graphically !!!
Here is an example of IP insertion:
Here is an example for a module insertion:
Notice that the tool can recognize known interfaces in your entity's IOs, thus reducing the module's box size and complexity !!
Stage 3
Ok fine, but now how can I create my own custom IPs and add them to the library ?
We've seen that VIVADO has a dedicated folder where it stores all its IPs.
Well, you can do the same !
You can create a folder and store your IP inside. You can even create several folders. This will be your library.
Then to include your folders / library in the VIVADO's IP catalog you have to configure VIVADO's IP settings.
For that, just go to Project Settings, then expand the IP section.
To add your IP folders then select Repository section, and add paths to your folders.
The tool will browse the repository and extract the IPs and Interfaces found. They will be added to the IP Catalog.
The Packager section is also very interresting !
This is where you can customize your IP definition with the parameters Vendor, Library, Category.
OK, that was for referencing your IPs.
Stage 4
The IP edition is done under the IP PACKAGER tool.
This tool can be launched with a right click when you select an IP, either in the IP catalog or in the BD editor.
By the way, one very cool thing : When you are in the BD editor, it can detect IP modification and ask you if you want to apply them on the IP you have already used in your design.
The IP Packager will create in the IP manager tool some kind of a VIVADO project for the IP.
You will get a section with the sources used in the IP, and a list of Packaging Steps that you have to fill in order to define your IP.
Once you have filled the whole process, you will Review and Package your IP.
This will update the IP's folder (at the path you provided) with all necessary sub folders and files.
This structure is predefined and must follow formats and rules !!!!
But still, if you follow those rules and if you know what you're doing, you can edit the IP manually.
Stage 5
Fine, but I still don't know how to create an IP !
Method 1:
This the one I often use, but this is because I already have IPs and I know what I'm doing. You should not use it at first !!
- Just copy the definition folder of an IP that is similar to the one you want to create.
- Paste the folder in the library's folder you want to upgrade.
- Rename the IP's folder properly.
- Open the component.xml file and change the IP's name toward the folder's name.
- Update all other files (file's name and content) in the sub folders with the IP's new name.
There you go, the new IP will appear in the IP Catalog and you can finalize the IP's edition in the IP Packager.
Method 2:
Use the Create and Package New IP wizzard provided by VIVADO in the tools menu.
The first option proposed is Package a new IP for the VIVADO IP Catalog.
This is based on what you have designed, this is why it is called packaging. In some kind, you will package in a box a piece of your design.
The second option proposed is Create a new AXI4 Peripheral.
This is more oriented for SOC IP design, as it is based on AXI4 interfaces.
Good to know :
The important thing to know is that it will provide you a template with examples.
You still need to design the IP, but yes, when you begin with IP design, it is very convenient to have an example for the AXI interfaces !!!
The important thing to know is that it will provide you a template with examples.
You still need to design the IP, but yes, when you begin with IP design, it is very convenient to have an example for the AXI interfaces !!!
Stage 6
Handling your IPs can be a full time job that can be seen as external to FPGA design projects.
This is why Xilinx lets you access your IPs handling when you start VIVADO and without opening a project !
Just select the task Manage IP and then point to your library folder, or to one of your IPs folders.
The IP manager will create a project that will let you:
- Customize your IP management,
- It means that you can change the device reference and generate your library for another board,
- You can modify the IP settings, to include only the repository you need for a specific projet,
- You will then have a reduced IP catalog that you can manage for a specific design projet.
Post Conclusion
So as conclusion here is a summary of the provided resources for IP handling in VIVADO:
- IP handling is very powerfull and is very efficient for design optimization
- You can create your own custom IPs
- You can create your own interfaces
- You can control your own IP libraries
- SOC assembly is very easy within the IP integrator
- IP integrator provides powerfull graphical Block Design edition
- IP integrator allows graphical mix between IPs and HDL modules
- and VIVADO can do much more....
- IP handling is very powerfull and is very efficient for design optimization
- You can create your own custom IPs
- You can create your own interfaces
- You can control your own IP libraries
- SOC assembly is very easy within the IP integrator
- IP integrator provides powerfull graphical Block Design edition
- IP integrator allows graphical mix between IPs and HDL modules
- and VIVADO can do much more....
























































