OpenLane icon indicating copy to clipboard operation
OpenLane copied to clipboard

Padframe generation

Open Syndace opened this issue 2 years ago • 7 comments

I could use some help wrapping my head around the padframe generation procedure. As you are already aware (#1082), the documentation is outdated. Even after tracking down the 404s in the docs to https://github.com/efabless/caravel/tree/main/openlane/chip_io, I'm met with 10 months old scripts that don't work any more.

I found three potentially relevant scripts/commands:

  • scripts/odbpy/padringer.py
  • scripts/padframe_generator.py
  • The padframe_gen interactive command, which uses scripts/padframe_generator.py under the hood (most promising to me but can't get it to work)

I'm a bit lost. None of the example designs shipped with OpenLane generate their own padframe either. How do I approach padframe generation?

Syndace avatar Sep 05 '22 12:09 Syndace

It's been in this state from the day I started maintaining this codebase- I can't wrap my head around it, personally. I would be surprised if it still works.

Let me take a look.

donn avatar Sep 05 '22 12:09 donn

OR provides pad frame generation as well if that is helpful (https://github.com/The-OpenROAD-Project/OpenROAD/blob/master/src/pad/doc/README.md)

maliberty avatar Sep 06 '22 03:09 maliberty

Thanks @maliberty, that was a great hint. I managed to add OR padframe generation to OpenLane's floorplanning script and it works quite well. The only thing I'm struggling with is connecting the padframe to the core power net, but that's out-of-scope for this issue I believe.

Feel free to close this issue if you don't want to keep it open for feature tracking purposes.

Syndace avatar Sep 08 '22 13:09 Syndace

@donn do you want a contribution in this area or should I close this?

Feel free to open another issue for the pdn if needed.

maliberty avatar Sep 08 '22 13:09 maliberty

No, I would appreciate a contribution in this area.

donn avatar Sep 08 '22 14:09 donn

I'd be happy to contribute this once we've made it through the tapeout :)

Syndace avatar Sep 08 '22 19:09 Syndace

Sorry for taking so long to get back to this. The way I did it is by simply adding a flow variable called PADS_TCL, which is sourced at the end of floorplanning and allows designs to add a padring or bumps to the floorplan by calling ICeWall commands.

This is my git diff for that change:

--- a/scripts/openroad/floorplan.tcl
+++ b/scripts/openroad/floorplan.tcl
@@ -106,4 +106,8 @@ puts -nonewline $core_area_file $::env(CORE_AREA)
 close $core_area_file
 close $die_area_file
 
+if { [info exists ::env(PADS_TCL)] } {
+    source $::env(PADS_TCL)
+}
+
 write

This isn't a very sophisticated solution, but it got us a beautifully working chip and I personally don't think it makes much sense to add a lot of automation/abstraction around pad generation.

Syndace avatar Nov 29 '23 10:11 Syndace