Showing results for 
Search instead for 
Did you mean: 
Honored Contributor I

Traverse netlist with TimeQuest

I am trying to disable a particular timing arc (set_disable_timing) on a LUT, but the input pin whose timing arc needs to be disabled is determined by the driver. In other words I need to disable only the arc on this LUT (LUT1) from the pin driven by the output of another known LUT (LUT2). While both LUTs exist for each synthesis run, the input pin on LUT1 that is driven from LUT2 is not consistent. I need a script that can traverse the netlist, determine which pin of LUT1 should be disabled, and then add the exception. 


Unfortunately get_fanouts seems to only return timing endpoints (ports and sequential cells). I can use get_pin_info -nets to get the net driven from LUT2, but get_net_info -pin seems to only return the driver of the net. 


Any suggestions for finding the pin on LUT1 that is driven from LUT2? 


By comparison this is rather straightforward in PrimeTime: 

get_pins -of [get_nets -of [get_pins LUT2/outpin] -filter "direction == IN"] 

Unfortunately there is no -of argument in TimeQuest's API for get_*.
0 Kudos
1 Reply
Honored Contributor I

It does not appear possible to traverse the netlist as I proposed. However I did come up with a workable solution for this problem (and Rysc independently came up with the same solution). 


Add another LUT (LUT3) between LUT2 and LUT1 (only on the net driving LUT1, as the same output of LUT2 has other destinations where we do not want to disable timing). Then set_disable_timing on LUT3 without specifying input or output pins. This does add some delay on the total timing path, but since we're disabling timing anyway we don't care about the additional delay. 


This solution has been tested and was sufficient for my application.