ucb-bar/hammer

Don't touch / don't route options

Closed this issue · 1 comments

self.verbose_append("assign_io_pins -move_fixed_pin -pins [get_db [get_db pins -if {{.name == {p} }}] .net.name]".format(p=ppin))

For preplaced pins in macros, this line currently lets Innovus still route the signal to the edge. This is not desired, e.g. if the macro pin is in the middle on a high layer and we want to leave it there.

The fix should be some combination of set_dont_touch and set_db <nets> .skip_routing true

Note to self: after additional investigation, also doing this is incorrect:

self.verbose_append("set_promoted_macro_pin -pins {{ {p} }}".format(p=pin.pins))

Without -insts, it gets any pins on all BLOCK, PAD, and AREAIO macros that have pins matching that name wildcard. Similarly, if the top-level pin that the user defined as preplaced doesn't match exactly the pin name of the macro's pin, the promotion will not work.

Possible solution: query the hpins that are connected to the desired top-level pin, and input that to set_promoted_macro_pin. Then, investigate if we still need set_dont_touch and .skip_routing true.