Repository navigation
Conversation
global_connect skips a dont_touch instance (ODB-0383), and the platform's global connections were made only in the PDN step, so an instance a step marked dont_touch before PDN kept its supply pins on no net through final. floorplan.tcl now sources PDN_TCL at its end, before the POST FLOORPLAN hook. Every instance's supply pins are connected there, and the rules stay in the database: a later step that creates instances connects them with global_connect before it marks them dont_touch. The grids PDN_TCL defines are not kept in the database; the PDN step defines them again, as before. On asap7/gcd the 2_4_floorplan_pdn.odb is byte-identical to master's; 2_1 to 2_3 differ only in the VDD and VSS nets being there earlier. Suggested by @gadfort in The-OpenROAD-Project#4782, which this replaces. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
There was a problem hiding this comment.
Code Review
This pull request updates the floorplan script to source the platform's global connections before any instances are marked as 'dont_touch', and introduces a new Python test suite to verify this behavior. The review feedback suggests enhancing the subprocess failure error message with more context, and refactoring the test cleanup logic to use 'addClassCleanup' for robust temporary directory management, which renders the 'tearDownClass' method redundant.
…ean up after a failed setUpClass Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
|
@oharboe I think to make this work, the PDN and global connect should be separated into two files. I realize that is more invasive, but cleaner long term IMO |
Each platform's add_global_connection rules move out of its PDN script into global_connect.tcl, named by GLOBAL_CONNECT_TCL, which floorplan sources right after it loads the netlist, before the PRE_FLOORPLAN_TCL hook. The PDN scripts define the grids only. The PDN step runs global_connect from the stored rules, for the tap and endcap cells made after floorplan, and for any rules a PDN_TCL of its own still adds. The design-level PDN scripts of nangate45/gcd and gf180/uart-blocks had the platform's rules and drop them; ihp-sg13g2/i2c-gpio-expander adds macro rules and gets a global_connect.tcl of its own. A platform with no GLOBAL_CONNECT_TCL keeps making its connections in PDN_TCL. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
Done in fe9cdce: each platform's Floorplan through PDN against master, on gcd for asap7, nangate45, gf180, sky130hd, sky130hs and ihp-sg13g2, and on gf180/uart-blocks and ihp-sg13g2/i2c-gpio-expander: supply pins and nets at |
🔍 QoR checkMetrics reflect the PR merge build — i.e. what will land on the target branch. Commit 62 design(s) checked — 4 with regression(s), 0 without a comparable baseline. ❌ asap7/ibex base — 2 failing metric(s)
❌ sky130hd/ibex base — 1 failing metric(s)
❌ sky130hd/microwatt base — 2 failing metric(s)
❌ sky130hs/jpeg base — 3 failing metric(s)
|
|
@gadfort I dont know what to make of the QoR feedback. Thoughts? |
|
@oharboe not sure, this shouldn't have changed anything (it's just changing when the power connections are made, not sure why that would change any metrics here). |
@maliberty Any ideas? |
Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
Before, the platform's global connections were made only in the PDN step, inside each platform's PDN script, and
global_connectskips a dont_touch instance (ODB-0383), so an instance marked dont_touch before PDN kept its VDD and VSS pins on no net through final.Now the connections are a file of their own,
GLOBAL_CONNECT_TCL, which floorplan sources right after it loads the netlist, before the PRE_FLOORPLAN_TCL hook; the PDN scripts define the grids only.This follows @gadfort's suggestions in #4782, which it replaces, and here: make the connections after the netlist is loaded, mark dont_touch after that, and keep the global connections and the PDN in separate files.
global_connect.tclholding theadd_global_connectionlines their PDN scripts had;GLOBAL_CONNECT_TCLdefaults to it in the platform'sconfig.mk. asap7's BLOCK and BLOCKS strategies had the VDD/VSS subset of the default strategy's five rules; the other three match no asap7 pin.global_connectfrom the stored rules, for the tap and endcap cells made after floorplan, and for any rules aPDN_TCLof its own still adds. A platform with noGLOBAL_CONNECT_TCLkeeps making its connections inPDN_TCL, as before.global_connect.tclof its own.global_connectbefore it marks them dont_touch: the rules are in the database from floorplan on.Floorplan through PDN, against master (bazel-orfs synthesis, ORFS's floorplan scripts from each side):
2_4_floorplan_pdn.odb( * VPWR ) ( * VPB )in the VDD and VSS SPECIALNETSNo ODB-0383 or PDN-0189 warning on either side. gt2n has no flow in bazel-orfs and was not run; its two rules moved as they were.
Tests:
flow/test/test_global_connections.py(skipped withoutopenroad) runsfloorplan.tclon a two-inverter nangate45 design with a PRE_FLOORPLAN_TCL hook that marks one dont_touch, then a later step that creates an instance. It checks both inverters' supply pins are connected at floorplan, and that the created instance is connected byglobal_connectfrom the stored rules. With thesourceline removed, all three tests fail; with the connections moved after the PRE_FLOORPLAN_TCL hook, the hooked instance's test fails.🤖 Generated with Claude Code