cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Highlighted
Teacher
Teacher
13,261 Views
Registered: ‎03-31-2012

wonders of post route phys_opt_design -directive AggressiveExplore in Vivado

I have been working on a kintex design and I find this command extremely useful for post route optimization. It knows how to add clock skew to paths and it's great for timing optimization. Just as a helpful tip.

Also try route_design -tns_cleanup. Iterations of these two commands in sequence with some manual cell placement is very helpful.

 

- 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.
5 Replies
Highlighted
Scholar
Scholar
13,215 Views
Registered: ‎11-21-2013

Yes, we found the same advantage for our designs, but just selecting the strategy of re-timing with post-route phy_opt_design does exactly this, according to VIVADO messages. We don't like manual cell placement because the incremental compile does not handle this YET very well.
Vladislav Muravin
0 Kudos
Highlighted
Scholar
Scholar
12,610 Views
Registered: ‎09-16-2009

Thanks again Muzaffer for pointing this strategy out.

 

I'd saved it when you originally posted, but didn't need it.

 

When a recent design wouldn't close timing, I remembered this thread.

For me, the first step (running phys_opt_design -directive AggressiveExplore) didn't help at all.

However, the route_design -tns_cleanup did the trick!

 

I'll need to rethink our current build strategy.  We use non-project flows, where the build is just a linear progression of synthesis->opt_design->place_design->phy_opt->route

 

I'd not really thought much about going back to phy_opt, then route again.   We'd not needed it, so really didn't consider. 

 

I'll need to think through how this fits in our automated builds (only iterating back perhaps in TNS != 0?).  Hmmm..

 

Thanks again.

 

Mark

0 Kudos
Highlighted
Contributor
Contributor
12,556 Views
Registered: ‎08-26-2014


@markcurry wrote:

I'll need to rethink our current build strategy.  We use non-project flows, where the build is just a linear progression of synthesis->opt_design->place_design->phy_opt->route

 [...]

 

I'll need to think through how this fits in our automated builds (only iterating back perhaps in TNS != 0?).  Hmmm..

 



Check page 63 of UG 904. It has some interesting tcl commands for this.

 

For example you could use a script that looks something like this:

 

...
place_design 
phys_opt_design 
route_design 

for {set i 0} {$i < 3} {incr i} {
  if {[get_property SLACK [get_timing_paths ]] >= 0} {break}; #stop if timing is met

  place_design -post_place_opt
  phys_opt_design -directive Explore
  route_design -directive Explore -tns_cleanup
  phys_opt_design -directive AggressiveExplore
}

If the design meets timing the for-loop isn´t executed. It just does the normal place, opt and route above. If it fails timing, then it will iterate up to three times through the loop doing these additional place&route runs with higher effort and optimizations in between.

This is a possibility if you want to keep it automated. But I think muzaffer is right, that some manual cell placement in between the loop iterations would even lead to better results.  

Highlighted
Scholar
Scholar
12,547 Views
Registered: ‎09-16-2009

Thanks Antonio!  I've been back and forth through that section of UG904 a dozen times, and didn't see that snippet of code. That one line is just what I needed:

 

if {[get_property SLACK [get_timing_paths ]] >= 0} {break}; #stop if timing is met

 

With that, I should be able to script up whatver's neccesary.  You've saved me a bit of work. 

 

(My TCL skills are mediocre at best.  To me it's a Read-only language.  I can read the above and know it's exactly what I need.  But for me to have written it?  I'd have taken an hour at least messing around with the proper square bracket, parenthesis, and curly bracket combinations.  Plus I didn't know what the property name was.)

 

--Mark

 

0 Kudos
Highlighted
Observer
Observer
8,343 Views
Registered: ‎07-07-2014

Hi @antonio_hy,

 

that is really a nice and helpful script.

 

In my design, it helps me to meet the timing, according to the output in the tcl shell.

However, for some reason the implemented design itself seems to not be updated (it reports the old timing).

 

How do I save the state/update the implemented design after I have used your script?

 

Best regards,

Apo

0 Kudos