cancel
Showing results for 
Search instead for 
Did you mean: 
Highlighted
Observer
Observer
666 Views
Registered: ‎10-21-2016

Goup_path Command to Make Path Groups for Every Register

Jump to solution

Hi!

I would want to report the worst slack for every register. This requires me to divide all paths into many path groups, which within each group, all paths end to a specific register.

In Synopsys DC, what I do is:

foreach_in_collection endpt [all_registers] {
[group_path -name [get_object_name $endpt] -to [get_object_name $endpt]]
}
foreach_in_collection path [get_timing_paths] {
echo "$path [get_attribute [get_attribute $path startpoint] full_name] [get_attribute [get_attribute $path endpoint] full_name] [get_attribute $path slack]"
}


I tried similar things in Vivado. I know the interface of group_path is quite similar, but I couldn't use the get_object_name command in Vivado. I have tried get_pins/get_objects, doesn't seem to work... It always reports "No pins matched xxx(the register name)".

Could you help me with using group_path command in Vivado?

 

Thank you so much!

0 Kudos
1 Solution

Accepted Solutions
Highlighted
Guide
Guide
613 Views
Registered: ‎01-23-2009

Re: Goup_path Command to Make Path Groups for Every Register

Jump to solution

You absolutely do not need to create a group for every path in order to get a report on it. The report timing command is perhaps the most complex command in the entire Vivado suite with tons of options - you can use the command directly to generate any report you want.

The easiest way of doing this is simply

report_timing -max_paths 1000000

By default (without changing the nworst) the tools will only report one path per endpoint (the nworst, which defaults to 1, specifies how many paths per endpoint to report). So if you use -max_paths with a number larger than the total number of registers in your design, you will end up with one one report for every endpoint. You can add all the other options of the report_timing command to determine what kind of report you get - whether you just want a summary for each path, or the complete path report (in a number of different formats) or a graphical report...

If you wanted to generate a separate report for each path (via its own command) you can do

foreach cell [all_registers] { report_timing -to $cell <rest_of_options> }

If you want to do just list the register and the slack then you would use

 

foreach cell [all_registers] {  
  if {[llength [get_timing_paths -to $cell]] > 0} {puts "$cell [get_property SLACK [get_timing_paths -to $cell]]"}
}

 

 

Vivado does not use the concept of collections - this was a mechanism that Synopsys used to deal with the fact that Tcl (the language underlying these commands) is not object oriented, but SDC (and the associated commands) are based on the concepts of objects; Tcl lists are all strings (untyped), whereas collections are collections of objects. In Vivado, they (masterfully!) modified the concept of Tcl lists (within the Vivado Tcl interpeter) so that it can "self type" between lists of strings  (used for regular Tcl commands) and lists of objects (used for SDC and associated commands).

Avrum

View solution in original post

0 Kudos
4 Replies
Xilinx Employee
Xilinx Employee
624 Views
Registered: ‎01-04-2013

Re: Goup_path Command to Make Path Groups for Every Register

Jump to solution

The $endpt has the name you are looking for, and use the get_property command instead of get_attribute. Try this:

foreach endpt [all_registers] { group_path -name $endpt -to $endpt }
foreach path [get_timing_paths] { puts "$path [get_property STARTPOINT_PIN $path] [get_property ENDPOINT_PIN $path] [get_property SLACK $path]"}

You should refer to the Vivado Design Suite: Using Tcl Scripting (UG894), and the Vivado Tcl Command Reference Guide (UG835) for additional resources. 

Regards,
Randy

0 Kudos
Highlighted
Guide
Guide
614 Views
Registered: ‎01-23-2009

Re: Goup_path Command to Make Path Groups for Every Register

Jump to solution

You absolutely do not need to create a group for every path in order to get a report on it. The report timing command is perhaps the most complex command in the entire Vivado suite with tons of options - you can use the command directly to generate any report you want.

The easiest way of doing this is simply

report_timing -max_paths 1000000

By default (without changing the nworst) the tools will only report one path per endpoint (the nworst, which defaults to 1, specifies how many paths per endpoint to report). So if you use -max_paths with a number larger than the total number of registers in your design, you will end up with one one report for every endpoint. You can add all the other options of the report_timing command to determine what kind of report you get - whether you just want a summary for each path, or the complete path report (in a number of different formats) or a graphical report...

If you wanted to generate a separate report for each path (via its own command) you can do

foreach cell [all_registers] { report_timing -to $cell <rest_of_options> }

If you want to do just list the register and the slack then you would use

 

foreach cell [all_registers] {  
  if {[llength [get_timing_paths -to $cell]] > 0} {puts "$cell [get_property SLACK [get_timing_paths -to $cell]]"}
}

 

 

Vivado does not use the concept of collections - this was a mechanism that Synopsys used to deal with the fact that Tcl (the language underlying these commands) is not object oriented, but SDC (and the associated commands) are based on the concepts of objects; Tcl lists are all strings (untyped), whereas collections are collections of objects. In Vivado, they (masterfully!) modified the concept of Tcl lists (within the Vivado Tcl interpeter) so that it can "self type" between lists of strings  (used for regular Tcl commands) and lists of objects (used for SDC and associated commands).

Avrum

View solution in original post

0 Kudos
Highlighted
Observer
Observer
497 Views
Registered: ‎10-21-2016

Re: Goup_path Command to Make Path Groups for Every Register

Jump to solution

Thanks! Very helpful!

0 Kudos
Highlighted
Observer
Observer
493 Views
Registered: ‎10-21-2016

Re: Goup_path Command to Make Path Groups for Every Register

Jump to solution

Thanks for your answer! I actually used the other solution, but this also works!

0 Kudos