See <https://github.com/The-OpenROAD-Project/OpenR...
# openroad
t
Yes, that create a via object and I use that already, but other than creating a 'VIA' line, this won't do anything else. I still need to manually lookup a generate rules between the two layers I want, then inside that rule check the cut and spacing size, copy them to ViaParams, compute the number of cut rows/columns, enclosure, ... That's an aweful lot of code that already exist in OpenRoad (basically exactly what pdngen does when it connects two orthogonal straps) and I was hoping such a helper was available from the python API.
m
I don't think there is one currently as I haven't heard of many people wanting to make custom vias. What is your use model? Mostly pdn generates vias internally
t
The OpenFrame template from efabless has some power pins defined on the side of the die area and they need to somehow been wired to the rings generated by
pdngen
, this is what provides power to the design. So ATM I have a small custom odb script that will generate straps from those pins to the rings generated by
pdngen
. See on https://open-source-silicon.slack.com/files/U016HU5HK8V/F06PDPE2K0U/czwuk0m_d.webp You have the rings generated by
pdngen
and then on the right side in cyan the pins from the template on
met3
and I generated a small strap from that pin to the rings on
met4
and generated the
via4
array to connect it.
m
pdngen can connect the rings to the power pins
๐Ÿค” 1
-connect_to_pads
t
Let me try that ๐Ÿ˜…
Mmm, it's not working "out of the box" at least (just adding
-connect_to_pads
to
add_pdn_ring
.
So I'm guessing there is something it doesn't like in that setup.
Copy code
[INFO PSM-0076] Setting metal node density to be standard cell height times 5.
[ERROR PSM-0045] Layer met3 contains no grid nodes.
[WARNING] Grid check for vccd1 failed: PSM-0045
[INFO PSM-0076] Setting metal node density to be standard cell height times 5.
[ERROR PSM-0045] Layer met3 contains no grid nodes.
[WARNING] Grid check for vssd1 failed: PSM-0045
The pads are just small rectangular zone on the side, outside the ring and on
met3
while the ring are on
met4
and
met5
(and the pdn stripe are on
met5
).
m
Are they pad instances?
t
Not sure what you mean by pad instances ? They are
PINS
in the template def with some geometry associated to them.
Copy code
- vccd1 + NET vccd1 + SPECIAL + USE POWER
     + PORT
        + LAYER met3 ( -1150 -11655 ) ( 1150 11655 )        + PLACED ( 3167480 2125705 ) N
     + PORT
        + LAYER met3 ( -1150 -12000 ) ( 1150 12000 )        + PLACED ( 3167480 4389810 ) N
     + PORT
        + LAYER met3 ( -1150 -11975 ) ( 1150 11975 )        + PLACED ( 3167480 4339585 ) N ;
m
Ok I meant instances of pad cells. This is just a pin not a pad
t
Ah yes.
m
Is the pin on a different layer than the stripe?
t
Yes, the pin is on
met3
the vertical ring segment next to it is on
met4
m
I don't think we automate such connections as usually people connect to the grid from above
What is the external context of this block?
t
It's the efabless OpenFrame / Chipignite program.
m
I don't know it well - it has pad connections on m3?
t
Well the power is passed from the padring to the user area on
met3
yes.
The padring is not under user control, you never see it, you just give a GDS and they drop it in and you need to have your connections at specific points.
Because the user area uses
met4
/
met5
for internal PDN (ring and straps), the power is passed from the pad ring to the user area using a short
met3
strap going under the ring.
m
So why haven't other users had this issue?
t
Well (1) there isn't that many user of OpenFrame yet. Most people use Caravel (which includes a riscv core and some other helpers and a different way to wire power). OpenFrame offers more area/more control but is also harder to use. (2) The current caravel example use a custom hand drawn macro placed at the right spot to connect the ring to the pin, but I wanted something a bit more automated/flexible.
m
Generating vias is a pain but should be doable through the odb api. There is no nice veneer for it though. Feel free to make one ๐Ÿ™‚
t
I mean, I made one in the mean time in python, but it's just good enough to deal with my use case and for sky130 PDK, I certainly wouldn't guarantee it works for all possible via rule generators constrains and such.
m
I guess we'll see if more people need one in the future.
t
Yeah. Extracting the one from pdngen into some "utility" file that then gets exposed would probably be the way to go if that's the case.
m
You might chat with @Peter Gadfort about this as he is the pdn author
๐Ÿ‘ 1