Monday, October 30, 2017

get_timing_path slack, startpt, endpt

set f [open output.txt w]

set pa1 [get_timing_paths \
-from START_POINT \
-to END_POINT \
-start_end_pair]
#set pa1 [get_timing_paths -from START_POINT -to END_POINT -start_end_pair -group CLK_NAME]

foreach_in_collection p1 $pa1 {

#Get slack
set slack1 [get_attribute $p1 slack]


##Get startpoint
set sp_m [get_attribute [get_attribute $p1 startpoint] full_name]
set sp [string trimright $sp_m "\/clk"]

##Get Endpoint
set ep_m [get_attribute $p1 endpoint]
set ep [get_cell -of_object $ep_m]

##Getting the prev stage margin: slack, cell
set sp_pa1 [get_timing_path -to $sp/d]
set sp_pa1_slack [get_attribute $sp_pa1 slack]

set ep_sp_pa1 [get_attribute $sp_pa1 endpoint]
set ep_sp_pa1_cell [get_cell -of_objects [get_pin $ep_sp_pa1]]
set ep_sp_pa1_cell_slack [get_attribute [get_timing_path -to $ep_sp_pa1_cell] slack]

##Getting the next stage margin: slack, cell
set ep_pa1 [get_timing_path -from [get_attribute $ep full_name]/clk]
set ep_pa1_slack [get_attribute $ep_pa1 slack]

set sp_ep_pa1 [get_attribute $ep_pa1 startpoint]
set sp_ep_pa1_cell [get_cell -of_objects [get_pin $sp_ep_pa1]]

set sp_ep_pa1_cell_slack [get_attribute [get_timing_path -to $sp_ep_pa1_cell] slack]


puts $f "$sp [get_attribute $ep full_name] $slack1 $sp_pa1_slack $ep_pa1_slack"

}
close $f

No comments:

Post a Comment