08-21-2014 09:07 PM
After creating a Manage IP project and customized several IPs (mostly following UG939 Lab 2), I couldn't find a way to add the customized IPs to my block design. I have tried the following methods:
* Add the Manage IP project's directory to the IP repositories, but it reports that there are not IPs in the directory.
* Use "Project Manager -> Add Sources -> Add Exisiting IP" and points to Manage IP project's directory. It does add the IPs in the "Design Sources" tree, but then what? I still have no way of putting them into my block design. (Can't find them in the "Add IP" window.)
I tried Google for a long time, but didn't find any solution. Would some one give a hint? Thanks in advance.
08-21-2014 10:45 PM
Can you try following steps?
Once you customized your IP's in Manage IP project, package them using below steps.
Tools -> Create and Package IP
It will open Create and Package IP pop-up window.
Move forward and give the IP location as below.
Now in your project where you want to use this customized IP in your block design follow below steps.
Select Project Settings -> IP -> Add Repository and give the your packaged IP location.
Now in the block design -> Click on Add IP , Now you will be able to see this IP.
08-22-2014 03:34 AM
Thanks for the quick reply. but it still does not work as I would like. First let me be clear on what I have tried (in case there's steps are not actually what you have described.):
* With my Manage IP project opened in Vivado (2014.2), I used "Tools -> Create and Package IP -> Package a specified directory" (the "Package your current project" was grayed out, as expected).
* When asked for IP location, pointed to one of the subdirectory under my Manage IP project hosting the customized IP.
* Then Vivado created a "Edit in IP Packager" project and package the directory into an IP automatically.
The rest was standard adding IP repository and adding IP to my block design.
OK, so here are the problems I had with this approach:
* The Create and Package IP does not preserve my customization. For example, I have changed a few IP parameters from its default values, but the re-packaged IP shows all the old defaults when inserted to the block design.
* One of my customized IPs is AXI-DMA v7.1, but the output of Create and Package IP was a wrong one (blk_mem_gen_generic_cstr_v1_0). My guess is that it picked up the wrong top-level design because this blk_mem_gen_generic_cstr guy is in the AXI-DMA directory.
What I want to achieve is:
a) to have customized IPs ready for use without repeat the customization every time I create a new project.
b) to pre-synthesis some IPs to get out-of-context .dsp files, so that I can save some time when synthesis the big project. (I still don't know how to use the .dsp files to save time yet, but one step at a time.)
Using Manage IP flow seems to be a good way if I can figure out how it works, but I'm open to any suggestions to achieve my goals. Much appreciated.
08-24-2014 08:33 PM
OK, here's a quick update on my problem with a partial solution.
Correct me if I'm wrong, but it looks like that it's not possible to have pre-customized or OOC (out-of-context) pre-synthesis IPs under a block design, but I still be able to work out a partial solution to achieve my goals.
Once the block design is done, that is you won't change anything at this level, and all you are going to do is to hack the internal of the individual IPs without changing the interfaces, do the followings.
From now on, the synthesis will only happen to your modified IPs and top-level HDL. It reduces my synthesis time from 10 min to 2 min for a small design.
Hope this will be helpful to someone.
08-27-2014 04:31 AM
Thanks for pointing to the document, I think I had skim through it before when trying to find a solution. Although it did help me understand some concept of vivado's dealing with IPs, but did not exactly solve my problem.
I didn't find information anywhere on how to start with a block design, and then add customized IPs or make the IPs OOC. All the examples I've seen are starting with pure HDLs with no block design, and then intantiate the customize/OOC IPs by copy and paste the intantiate template.
09-24-2014 08:25 AM
The factory is aware of this request (allow adding "Manage IP" XCI files to block design) and this is in road map.
11-23-2015 04:19 AM
03-08-2016 02:13 AM
is there any update on this (for Vivado 2015.4)?
I haven't used a Manage IP project so far, but do I get it clear that IP customizations that were created through manage IP projects (and saved somewhere in a central repository for re-use in multiple projects), cannot be used as blocks in a IPI (block design) 'as is' ?
Do I get it correctly that you would need to package each IP customiziation before you can do this?
04-05-2018 03:02 PM
For Vivado 2015.4:
- You cannot use any pre-generated/customized IP core in an IP integrator Block Design (BD).
- Yes, in order to add the customized IP core to a BD you would have to package the customized core (creating a new User IP definition) and then add an instance of this user IP to the BD.
In later versions of Vivado, module reference was added. Depending on the IP, you could add an RTL file that instantiates the pre-generated/customized IP core using module reference. Note that when module reference was first added, it would not allow an instantiated IP core. With subsequent releases, more IP are being added to a white list of IP cores that can be instantiated in a module reference RTL file.
04-06-2018 03:40 AM
thanks @howardp, is this procedure to add customized IP through module referencing described somewhere in the doc and/or a tutorial?
04-06-2018 07:03 AM
See Page 20 and Chapter 12 of https://www.xilinx.com/support/documentation/sw_manuals/xilinx2017_4/ug994-vivado-ip-subsystems.pdf
Module reference was added in Vivado 2016.1. However, with that release no IP cores could be instantiated in the RTL module.