UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

cancel
Showing results for 
Search instead for 
Did you mean: 
Scholar ronnywebers
Scholar
11,895 Views
Registered: ‎10-10-2014

generate output products - difference between 'Global' and 'Out of context per IP'

I'm confused by the exact difference between 'global' and 'out of context per IP' in the following situation :

 

  • in my custom IP I sometimes use Xilinx IP, i.e. an axis4 stream data fifo.
  • for the location of the fifo, I create a folder 'xil_ip' under my 'ip package folder'
  • When I configure the fifo using IP Catalog, at the end I get the 'generate output product dialog :

generate output products.png

 

  • now I always leave this option as 'out of context per IP' (see questoin below)
    • when the run completes I use the instantiation template to use the fifo in my custom IP
    • also I checkin all the files related to the fifo (under my 'xil_ip' folder') into git, because I use the custom IP later in a larger design

Now question : in what case would I select 'global' ? What is the exact difference between 'global' and 'out of context' here?

 

 

 

 

** kudo if the answer was helpful. Accept as solution if your question is answered **
0 Kudos
13 Replies
Highlighted
Xilinx Employee
Xilinx Employee
11,892 Views
Registered: ‎09-20-2012

Re: generate output products - difference between 'Global' and 'Out of context per IP'

Hi @ronnywebers

 

When you use "out of contest per IP" the IP synthesis is run in out of context mode during IP generation itself. You will find synthesis DCP in IP location.

 

When you select "global" IP synthesis will not be run during IP generation. The IP will be synthesized during top level synthesis along with other RTL files.

Thanks,
Deepika.
--------------------------------------------------------------------------------------------
Google your question before posting. If someone's post answers your question, mark the post as answer with "Accept as solution". If you see a particularly good and informative post, consider giving it Kudos (the star on the left)
Moderator
Moderator
11,890 Views
Registered: ‎01-16-2013

Re: generate output products - difference between 'Global' and 'Out of context per IP'

@ronnywebers,

 

Page number 37 in below user guide has answers to your query 

http://www.xilinx.com/support/documentation/sw_manuals/xilinx2016_2/ug896-vivado-ip.pdf

 

--Syed

---------------------------------------------------------------------------------------------
Kindly note- Please mark the Answer as "Accept as solution" if information provided is helpful.
Give Kudos to a post which you think is helpful and reply oriented.

Did you check our new quick reference timing closure guide (UG1292)?
---------------------------------------------------------------------------------------------
Scholar ronnywebers
Scholar
11,884 Views
Registered: ‎10-10-2014

Re: generate output products - difference between 'Global' and 'Out of context per IP'

thanks @vemulad

 

 

Q: what is the (dis)advantage of using 'ooc per ip' vs 'global' in the context of my custom IP?

 

I think to understand that - in case I use my custom IP (which contains a xilinx axis4 stream data fifo) in a future version of Vivado, it makes a difference whether I selected 'ooc per ip' vs 'global'? 

 

  • in case of 'ooc per ip' the output products are all included in my custom IP, and I can continue using it in future versions of Vivado without updating.
  • in case of 'global', my ip would first need an update to the new Vivado versoin?

 

or am I missing the point here?

 

 

 

 

** kudo if the answer was helpful. Accept as solution if your question is answered **
0 Kudos
Xilinx Employee
Xilinx Employee
11,865 Views
Registered: ‎09-20-2012

Re: generate output products - difference between 'Global' and 'Out of context per IP'

Hi @ronnywebers

 

As per my understanding irrespective of the option you select, when you package the design using IP packager the tool considers the setting as "global".

 

When you migrate to newer version of vivado with "global" setting, you will still be able to use the IP output products (RTL) generated in older version of vivado.

Thanks,
Deepika.
--------------------------------------------------------------------------------------------
Google your question before posting. If someone's post answers your question, mark the post as answer with "Accept as solution". If you see a particularly good and informative post, consider giving it Kudos (the star on the left)
0 Kudos
Scholar u4223374
Scholar
11,856 Views
Registered: ‎04-26-2015

Re: generate output products - difference between 'Global' and 'Out of context per IP'

For what it's worth, I'm pretty sure that out-of-context takes significantly longer on the first run - probably because it has to start and stop a task for each IP individually, rather than just starting and stopping a single task.

 

If your design is one where you'll be re-using almost all of the blocks frequently (eg. a production design, where you normally only update a single block before doing a new build) then out-of-context will help a lot (slow the first time, but much faster for all subsequent runs). If your design changes significantly every time (eg. just testing IP cores on a development board, so the only things you keep between runs are a couple of I/O modules and maybe a Zynq PS7 or Microblaze core) then you're probably better-off using the global option.

Scholar ronnywebers
Scholar
11,852 Views
Registered: ‎10-10-2014

Re: generate output products - difference between 'Global' and 'Out of context per IP'

thanks @u4223374, that's a very clear explanation - could you tell me where/how I can change my design to generate a bitstream in either OOC or global modes? It's a kind of basic question, but I cannot find it. So far I'm using the 'default' Vivado mode, which I guess is 'global'?

** kudo if the answer was helpful. Accept as solution if your question is answered **
0 Kudos
Adventurer
Adventurer
4,089 Views
Registered: ‎01-09-2014

Re: generate output products - difference between 'Global' and 'Out of context per IP'

@u4223374:
For what it's worth, I'm pretty sure that out-of-context takes significantly longer on the first run - probably because it has to start and stop a task for each IP individually, rather than just starting and stopping a single task.

 

Depends mostly on the machine. My Project has around 20 IP blocks (range from small to as big as MIG and Micorblaze) but I have 12 physical cores and 16GB of ram. So full OOC-based synthesis takes 12 Minutes. Then if I need to open it to see utilization that is +1Minute

 

Global Synthesis (with -rebuilt flag) takes around 22 Minutes, and uses only 1 Core and 8GB of ram. Other than that yes, OOC-based re-synthesis (without re-generating IPs that is) takes 55 seconds

Scholar ronnywebers
Scholar
4,062 Views
Registered: ‎10-10-2014

Re: generate output products - difference between 'Global' and 'Out of context per IP'

@tomasz.janicki.tj, that's interesting info - so it seems that a synthesis process can only use 1 core, to take advantage of multi-core CPU's you must use OOC synthesis. 

 

Do you happen to use a new Macbook Pro with 6-core processor (12 cores by hyperthreading)?

 

One thing I'm still wondering of is if FPGA optimisation is less good when using OOC synthesis, vs a global synthesis approach...

** kudo if the answer was helpful. Accept as solution if your question is answered **
0 Kudos
Adventurer
Adventurer
4,052 Views
Registered: ‎01-09-2014

Re: generate output products - difference between 'Global' and 'Out of context per IP'

@ronnywebers
HP workstation

 

I had fun with running many synthesis and implementation options. And it is hard to tell with the level of complexity of the project I'm doing. OOC vs global (I hope jpeg is readable) - OOC is the faster one (one has to add the total OOC generation time that is not shown in the image, but it is around 12Minutes). 1h implementation is due to Vivado trying too hard to achieve constraints (its work in progress). All the runs are Vivado defaults. It is Vivado 2016.4. Vivado 2018.x yet to be benchmarked

 

ooc_vs_global_defaults.jpg

Explorer
Explorer
1,564 Views
Registered: ‎01-13-2018

Re: generate output products - difference between 'Global' and 'Out of context per IP'

@ronnywebers @vemulad @u4223374 

Although this is an old post but very useful. I have some questions to ask.

"The OOC flow speeds up run time for the complete project, and lets you avoid re-synthesizing when doing project runs." page 37 ug896.  

"It improves synthesis run times because you only synthesize the IP when changes to the
IP customization or version require it, rather than re-synthesizing it as part of the
top-level design." page 37 ug896.  

Q1: The output files/outcome of “generate output products” are the same regardless of “global and out-of-context” ?

Q2: If yes then it means that both global and out-of-context both generate output products which are identical and don’t effect the bitstream generation process, right ?

Q3 : Global runs everything again to generate output products and don’t take advantage of previous version of IPs and that’s why it takes more time everytime, right ?

Q4: Out-of-context take more time only in the first run but on the second run when there are few changes in the IPs it take less time to generate output product files because it consider the previously save settings or previous version of IPs. Is that true ?

Therefore, OOC is recommended because it works only when there is a change in the IP and in this way it saves synthesis time, making the synthesis flow faster.   

0 Kudos
1,535 Views
Registered: ‎01-22-2015

Re: generate output products - difference between 'Global' and 'Out of context per IP'

@joniengr081 

Q1: The output files/outcome of “generate output products” are the same regardless of “global and out-of-context” ?
Since Vivado synthesis is timing aware then results of synthesis will depend on the period of each clock used in the IP.  During Global synthesis, clock information is obtained from your project and from your constraints file.  During Out-Of-Context (OOC) synthesis, information about the clocks in your project is generally not known.  However, some IP wizards allow you to specify a Target Clock Period (TCP) – see “Setting the Target Clock Period” on about page 41 of UG896.  So, the answer to your question depends on whether the Wizard for your IP has allowed you to specify the TCP.  If you are not allowed to specify the TCP, then OOC synthesis guesses a value for the TCP, which can cause differences between Global and OOC.

Q2: If yes then it means that both global and out-of-context both generate output products which are identical and don’t effect the bitstream generation process, right
Since being able to specify the TCP matters, then the general answer is NO.  However, even if you can specify the TCP (and you specify the TCP correctly) then we should expect the bitstreams to depend upon whether OOC and Global synthesis are used.  -because, Global gives synthesis full view of all the RTL and clocks which could result in code optimizations that extend into the IP modules that were not possible with OOC.

Q3 : Global runs everything again to generate output products and don’t take advantage of previous version of IPs and that’s why it takes more time everytime, right ?
You are correct.

Q4: Out-of-context take more time only in the first run but on the second run when there are few changes in the IPs it take less time to generate output product files because it consider the previously save settings or previous version of IPs. Is that true ?
If you change your first sentence to say “..when there are NO changes in the IP..” then what you say will be true.

I believe that OOC synthesis was created to help speed up synthesis during project development.  That is how I use it.  However, after project development is done, I sometimes switch to using Global synthesis.  Switching from OOC synthesis to Global synthesis can sometimes solve timing analysis problems with your project.  This is because Global synthesis can take full advantage of the accurate information it has about clocks in your project.  However, if your project is passing timing analysis and you are using OOC synthesis then there is no need to switch to Global synthesis.

Cheers,
Mark

0 Kudos
Scholar ronnywebers
Scholar
1,497 Views
Registered: ‎10-10-2014

Re: generate output products - difference between 'Global' and 'Out of context per IP'

thanks markg@prosensing.com  for this clear explanation, very helpfull!

UG896 talks about setting the target frequency/period in the customization GUI of IP -> do you know of any example/tutorial on how to add such GUI feature to a custom developed IP?

** kudo if the answer was helpful. Accept as solution if your question is answered **
0 Kudos
1,475 Views
Registered: ‎01-22-2015

Re: generate output products - difference between 'Global' and 'Out of context per IP'

Hi Ronny,

     ...do you know of any example/tutorial on how to add such GUI feature to a custom developed IP?
I have not done this for custom IP.  However, you might find something helpful in my discussion with vemulad <here>.

Mark

 

0 Kudos