The-OpenROAD-Project / OpenLane

OpenLane is an automated RTL to GDSII flow based on several components including OpenROAD, Yosys, Magic, Netgen and custom methodology scripts for design exploration and optimization.
https://openlane.readthedocs.io/
Apache License 2.0
1.36k stars 374 forks source link

Padframe generation #1314

Closed Syndace closed 2 months ago

Syndace commented 2 years ago

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:

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

donn commented 2 years ago

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.

maliberty commented 2 years ago

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)

Syndace commented 2 years ago

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.

maliberty commented 2 years ago

@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.

donn commented 2 years ago

No, I would appreciate a contribution in this area.

Syndace commented 2 years ago

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

Syndace commented 11 months ago

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.

donn commented 2 months ago

You can track our progress adding this to OpenLane 2. (The problem is as a company literally selling a padframe there's not much of a drive for us to add one 😅)

https://github.com/efabless/openlane2/issues/508