ok, this is day 3 and i still have no idea what is...
# openlane
a
ok, this is day 3 and i still have no idea what is going wrong. I have a design with two macros, one large (1x) and one small (1164x). there is no manual placement and the tools cannot lay out the design. the flow gets up to opendp and I get a bunch of "detailed placement failed on" messages and then obviously a pile of overlap errors. There is plenty of room in the design. the only nonstandard thing is that macro with 1164 instances is tiny - about the size of a single inverter. has anyone else had luck with such a thing? or know how to figur eout what's going wrong?
here is a pile of unplaced cells
image.png
t
Are those your macros ?
a
nope, those are a mix of my macros and standard cells
maybe i need to force my small cells onto unithd sites per what @tgingold just said
t
You should manually place your macros. And I fear you cannot have very small macros otherwise they won't be powered.
The macros must be placed so that the power strips are connected with the parent power strips.
a
these are transmission gates so they have no power/ground connections
✔️ 1
i want to use them as a standard cell of sorts (except there's no need synthesise them)
t
Does your macro actually fit between the power rails then ?
usually macro will cut the standard power rails. However that only works for a few large macro ... you can't have 1000's of small cuts in the power rails or they won't be rails anymore ...
a
uh, it uses only li1 and met1. there should be no obstruction to power straps
t
Rails are the
li1
and
met1
line on the top / bottom of the standard cell grids.
The straps are the large
met4
/
met5
a
oh good point
met1 is a rail
do macros cut those by default? i have specified no blockages outside of pdngen
t
(
li1
too ... at least in the hd library they doubled the rails on both layers ).
a
li1 is a power rail?! isn't it high resistance?
t
That's why they doubled it with
met1
.
but to have it easily go down to poly they have a complee line in
li1
that has periodic vias up to
met1
a
fascinating
t
if your macro fits between two rails, you might want to actually "include" it like a standard cell with rails on top/bottom and dimensions that match
unithd
a
yeah that's what i'm gonna try next
i'll just leave the power/ground disconnected
t
yeah, just "passthrough" left to right basically.
a
good point. guess it makes sense to assume they can abut. i'm surprised this caused placement to fail and not a later routing check
also the original version was actually shorter than a std cell, and the same problem occurred, but i'm not sure that it wasn't a similar blockage
ok. so what you suggest is probably a problem. but it was not the cause of this issue. i have separately hardened a macro with only the small new macro and i can get the flow up to the point of streaming GDS, but then it crashes. so something else is wrong here
t
crashes how ?
a
@aryap: maybe a good approach would be clustering smaller groups of this 1kx instances macro into other macros and so you'd end up with bigger macros and a reduced number of instances in your final design and hopefully less trouble?
a
i'm trying that yeah
will report
ok, I did the obvious thing and harden the submodules. three of four modules are now hardened macros. one is not, and for whatever reason the tools cannot place it well _at all_: they seem to just give up.
🤷
this seems like a pretty basic process? place and route some times around some macros? there are plenty of demos of openroad doing this
a
@aryap: manual_macro_placement doesn't help?
a
nope
i'm using
set ::env(MACRO_PLACEMENT_CFG) $our_root/macro_placement.cfg
and not running things interactively, but i don't know what i'd do differently if running interactively since all the commands i'd know to invoke are being invoked