Hey all! We recently ported our caravel user proje...
# caravel
a
Hey all! We recently ported our caravel user project from tag mpw-5b to mpw-5c, hoping to solve a clear-area li1 density DRC. However, openlane seems to have updated the PDN generation flow. Our design is hierarchical and contains hard macros. The macros route up to met2. With mpw-5b, we created a custom PDN within the macro using met2 and met3, and let the met4 PDN in our top user module run over the macros and connect to the met3 PDN of the macro. After upgrading to mpw-5c, top-level PDN generation won't run over the macros anymore. I've tried: •
set ::env(MACRO_BLOCKAGES_LAYER) {li1 met1 met2}
• in our custom pdn script, we use the following spec for `pdngen::specify_grid`:
Copy code
set macro {
   orient {R0 R180 MX MY R90 R270 MXR90 MYR90}
   power_pins $::env(VDD_NET)
   ground_pins $::env(GND_NET)
   blockages {"li1" "met1" "met2" "met3"}
   straps {}
   connect {
       {met3_PIN_hor $::env(FP_PDN_LOWER_LAYER)}
   }
}
Is there anything else that I'm missing? Please advice! Thanks in advance!
@User
m
can you post a pic of what happens?
a
@User sure! one sec
this is what we get after porting to mpw-5c. met4 PDN is cut around the macro (tile_clb)
This is with mpw-5b, met4 PDN run over the macro and are connected to the met3_hor PDN inside the macros
m
hm
I always want met4 cut over the macro to avoid problems with my macros
met5 should run horizontally, and thats what drops the vias to your design
if things were working with mpw-5a , maybe it's best to stick with that
😭 2
a
yeah I can understand that. in our case our macro routes only up to met2, and if we don't use met3 we get LVS errors at user top level
m
also @User could maybe help with that
a
it worked with mpw-5b until it doesn't.. at the end we get li1 density DRCs
m
I always try to find the easiest way. Maybe allow your macro to get hardened up to met4 and then the powering would work?
@User had li1 density issues, which he resolved by making the design smaller and limiting the number of filler cells
a
my teammate @User is still working with mpw-5b to try to get rid of that DRC. I'm exploring mpw-5c in parallel
we started with macro using met4, but when running LVS at user top, we get LVS errors because those PDN are not connected together
at the end they might be connected all to met5 PDN, but we cannot pass LVS at user top level
yes we followed suggestions and tried to reduce design size and limit the number of decap12 cells.. it didn't work out
also tried to use the efabless decap cells.. didn't work very well either..
( I actaully thought PDN is the easiest way out 😂 )
m
sorry I can't help it looks like you are doing quite advanced work here
good luck
a
alright. great thanks anyways!
h
The intended operation of the PDN is M5 straps everywhere (incl. running over macros), and M4 cutout where macros are. There have been issues in some of the release where the M4 straps erroneously ran through the hardmacros.
There is a possibility to swap out the standard decap_12 cells by efabless versions with less li1. It tried it, but did not work since extraction was failing. There is however a script from @User that manipulates the gds and swaps the cells.
a
hi @User thanks for the reply. if say we use m4 PDN in the smaller macros and cut out in the user top module, how can we make it pass LVS in the user top module?
m
Do your macros have an OBS on met4?
a
Hi @User there is a tiny OBS ( I have no idea why ) of size 0.34 x 16. macro size is 165 x 244
h
The pdn script connects the M5 straps to your local M4 straps if everything is setup correctly. However, the M4 straps must be large enough. In my case it worked for one macro, and the other I did by hand (means I placed the vias at the correct place inside my macro, which is a bit annoying).
a
hi @User so you mean we skip LVS at user top level, and entrust LVS at caravel top?
h
In my case LVS passed on every level, not sure why there should be an lvs fails on macro level in your case.
😭 1
a
ok..
h
Be careful with LVS on top, as it works with black boxing, and esssentially just checks the top level interconnect, not the inside of your macros.
a
yeah that's why I really want LVS to pass on every level..
m
what is FP_PDN_LOWER_LAYER in your setup?
a
met4 (not changed)
for the smaller macro I used a customized pdn_cfg.tcl
m
Its not obvious what is wrong but if you want to package a test case you can open an issue
a
ok we finally made it work. we ended up making the lower-level macro route up to met2 and only use met2 PDN. then at the user top we specify macro grid with met3 straps, then connect met2_PIN_ver to met3, met3 to met4 (stdcell_grid FP_PDN_LOWER_LAYER)
👍 2