( ESNUG 454 Item 14 ) ------------------------------------------- [04/28/06]
Subject: ( ESNUG 451 #6 ) Global net worst delays in PrimeTime & Incentia
> I'm trying to figure out the best way to get the worst delay from one pin
> to another in PrimeTime. This is to determine the delay of a global net,
> before floorplan blocks are even synthesized. The path is simple; non-
> inverting, fanouts of one, with zero or more repeater buffers (or pairs
> of inverters):
> zero or more repeaters
> __________________
> / \
> |\ |\ |\ |\
> ...-----| >*-------| >----...----| >--------*| >---...
> |/pin1 |/ |/ pin2|/
>
> How can I get the delay from pin1 to pin2? I can't simply get a timing
> arc, because there are an unknown number of optional repeater buffers
> between the two pins, and a timing arc only goes across one net or cell.
> (Also, I need to traverse the hierarchy of soft macros.)
>
> - Tom Arneberg
> SGI Chippewa Falls, WI
---- ---- ---- ---- ---- ---- ----
> [ Big complicated Tcl script here -- see ESNUG 451 #6 for the details. ]
>
> Tom can use the compare_collection command to see if two objects are the
> same object. Note that if you are walking through the points list of a
> timing_path, you will need to compare the *object* of the point, not the
> points themselves.
>
> - Chris Papademetrious
> Synopsys PrimeTime CAE Allentown, PA
From: Doug Regehr <dregehr=user domain=rim spot gone>
Hi John,
Here's a simpler (but not as elegant as Chris P's) solution to Tom's problem.
You can use this approach to report min/max delays between any two arbitrary
pins in your design:
# Find longest path
set_max_delay 0 -from $start_pin -to $end_pin
set max_path [get_timing_paths -delay_type max
-from $start_pin -to $end_pin]
set max_latency [expr [get_attribute $max_path slack] * -1]
# Find shortest path
set_min_delay 0 -from $start_pin -to $end_pin
set min_path [get_timing_paths -delay_type min
-from $start_pin -to $end_pin]
set min_latency [get_attribute $min_path slack]
# Print results
echo "Max latency: $max_latency"
echo "Min latency: $min_latency"
I used this approach to report clock tree latencies in one of our designs.
It's quick and dirty, but it works.
- Doug Regehr
Research In Motion, Ltd. Waterloo, ON, Canada
---- ---- ---- ---- ---- ---- ----
> (3) IS THERE A BETTER WAY TO DO THIS?! This seems really complex to do
> all that simply to get the arrival time of each pin, and then subtract
> them. What I really need is a command to get a timing arc that spans
> multiple cells. I'm sure others have needed to measure the delay of a
> snippet of a simple path -- how have they done it?
From: Niamh Scott <niamh.scott=user domain=s3group spot gone>
Hi John,
If Tom uses the arrival_window pin attribute with the
timing_save_pin_arrival_and_slack = true
I think he'll get closer to what he wants.
The arrival_window attribute should return a tcl list of rise/fall delays
through that pin with respect to each clock path through that pin and then
that list can be parsed.
Pin attributes also available which may be useful are: max_fall_arrival,
max_rise_arrival, min_fall_arrival, min_rise_arrival which may save having
to figure out the max/min values over all the clock domains. I prefer using
the arrival_window so I know what clock domain values are coming from.
> (2) Why is there only one "arrival" time, and not one for rise and one for
> fall? I want to get the worst delay from pin1 to pin2, so I thought
> I'd have to do one rise and one fall and take the max delay. (I
> thought there'd be two timing paths -- one for rise, one for fall.)
I think the reason why fall and rise arrival attributes don't exist for a
point in a path is because that in any one timing path there is only a rise
or a fall arrival value to a point, i.e. you would need 2 different timing
paths to see the rising and falling path though a pin.
So,
get_timing_paths -through $pinarg_obj
returns the worst of the rise or fall paths through the pin. You can check
if the point is a rise or fall arrival by using the rise_fall attribute.
You could force your analysis to get both the rise and fall paths by doing
get_timing_paths -fall_through $pinarg_obj
and also
get_timing_paths -rise_through $pinarg_obj
You can check if the point is a rise or fall arrival by using the rise_fall
attribute.
Hope this helps, regards,
- Niamh Scott
Silicon & Software Systems (S3) Dublin, Ireland
---- ---- ---- ---- ---- ---- ----
> (3) IS THERE A BETTER WAY TO DO THIS?! This seems really complex to do
> all that simply to get the arrival time of each pin, and then subtract
> them. What I really need is a command to get a timing arc that spans
> multiple cells. I'm sure others have needed to measure the delay of a
> snippet of a simple path -- how have they done it?
From: William Natter <wnatter=user domain=nortel spot gone>
Hi, John,
Tom has got it right: there is no easier way to obtain delays between two
points than either getting subtracting the arrival times of a timing path
object's timing points, or getting all timing arcs and adding all arc
delays (this should answer question 3).
> (1) Is there a better way to compare two objects, other than to get the
> full_name of each and compare those strings?
I believe it is possible to compare two pin objects directly without
referring to their name: I would suggest Tom to try it out (that's for
question 1).
> (2) Why is there only one "arrival" time, and not one for rise and one for
> fall? I want to get the worst delay from pin1 to pin2, so I thought
> I'd have to do one rise and one fall and take the max delay. (I
> thought there'd be two timing paths -- one for rise, one for fall.)
To obtain both rise and fall times, Tom needs to get the rise path
through one of the desired pins, and then do the same for the fall path
(question 2). I also wish, like him, that PrimeTime would give both
rise and fall arrival times at the same time, especially in
report_timing results.
- William Natter
Nortel Networks Nepean, ON, Canada
---- ---- ---- ---- ---- ---- ----
From: Fei Yan <fyan=user domain=via-telecom spot gone>
Hi John,
I was just reading about the problems users of PrimeTime have been having
with: ( ESNUG 450 #7 ) Find those Global Net Worst Delays in PrimeTime.
We have been using Incentia's TimeCraft for timing sign-off for a few years.
It provides rich features and good performance. It has a simple command to
do what you want here.
report_timing -internal -from instA/pin1 -to instB/pin2
- Fei Yan
Via Telecom San Diego, CA
Index
Next->Item
|
|