From 68afbcb75f2fa3e57ae32f4174e09cd4569cc6a6 Mon Sep 17 00:00:00 2001 From: dgaddy Date: Fri, 3 Jul 2026 00:41:05 -0700 Subject: [PATCH] floonoc sky130hd: fix PSM-0069 by reducing io.tcl edge_margin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bottom-edge IO pins on met2 at edge_margin=5.0μm had their spacing-expanded obstruction (obs_yMax=5381nm) overlapping the row-0 VSS via area (y_min=5200nm). pdngen's Grid::makeVias silently dropped all row-0 met1×met4 via candidates as kObstructed — no PDN-0110 fires for obstruction removal — so the VSS stripe terminated short of row 0, leaving every cell in that row with VGND disconnected (PSM-0069). Fix: reduce edge_margin from 5.0→4.37μm (nearest valid met2 y-track below the 4.82μm threshold); obs_yMax drops to 4751nm, clearing the via area. _final passes with [INFO PSM-0040] All shapes on net VSS are connected. Documents root cause in CLAUDE.md known-bugs table and DECISIONS.md; updates debug-design skill with a PSM-0069 recognizer. --- .claude/skills/debug-design/SKILL.md | 4 ++++ CLAUDE.md | 5 +++-- designs/sky130hd/floonoc/io.tcl | 8 ++++++-- designs/src/floonoc/DECISIONS.md | 10 +++++----- 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/.claude/skills/debug-design/SKILL.md b/.claude/skills/debug-design/SKILL.md index ab4a2203..584c9a93 100644 --- a/.claude/skills/debug-design/SKILL.md +++ b/.claude/skills/debug-design/SKILL.md @@ -131,6 +131,7 @@ tail -200 logs///base/2_*.log 2. **PDN failures**: Power grid cannot be constructed. - Check if `pdn.tcl` exists and metal layer names match the platform (M1-M7 for asap7, met1-met5 for sky130hd) + - If `2_4_floorplan_pdn.log` is clean but PSM-0069 fires at Stage 6, see **G (PSM errors)** — via obstruction leaves no trace in the PDN log 3. **IO placement failures**: Too many pins for the die perimeter — increase die area or create a manual `io.tcl`. @@ -229,6 +230,9 @@ head -50 reports///base/6_finish_drc.rpt 2>/dev/null # Or manually parse 6_report.json ``` +**PSM errors** (power connectivity, `6_*.log`): +- **PSM-0069** — check if all PSM-0039 warnings cluster in a single boundary row. If so, vias to that row were likely silently dropped by pin obstruction (no PDN-0110 fires for obstruction removal). See CLAUDE.md bugs table for root cause and fix. + --- ## Step 4: Generate Layout Images diff --git a/CLAUDE.md b/CLAUDE.md index 23fac27b..111a8cb3 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -82,11 +82,11 @@ Per-design close history, knobs, QoR, and known issues live in **`designs/src/ pin width / 2) +set edge_margin 4.37 ;# distance from die edge; must keep met2 obstruction top + ;# below row-0 VSS via area (y=5200 nm). At 5.0 um the + ;# met2 spacing-expanded obstruction reaches y=5381 nm, + ;# blocking every met1-met4 via at row 0. At 4.37 um it + ;# reaches y=4751 nm, clearing the via area. set end_margin 5.0 ;# distance from corner along the edge proc bus_pins {name high {low 0}} { diff --git a/designs/src/floonoc/DECISIONS.md b/designs/src/floonoc/DECISIONS.md index 8dc3ff10..bdb59505 100644 --- a/designs/src/floonoc/DECISIONS.md +++ b/designs/src/floonoc/DECISIONS.md @@ -44,18 +44,18 @@ Network-on-chip with std-cell-only logic; the only physical-design knobs are clo ## sky130hd -**Status**: reaches `_final` on bazel-orfs 553c1c3 (was "not finishing" on the old tools) -**Last updated**: 2026-06-04 (toolchain upgrade) +**Status**: finishing +**Last updated**: 2026-06-26 (commit `bbc7fd0`) ### Configuration - `TNS_END_PERCENT = 100` -- `io.tcl` present +- `io.tcl` present — `edge_margin = 4.37 µm` (see Decisions for why) - Clock: `20.0 ns` (Fmax target ~50 MHz) ### Decisions - **2026-04-29 `ec7be591`**: gave the same treatment as the working platforms (io.tcl + 20 ns clock) but synthesis still doesn't reach `_final` on sky130hd. Stops at `1_synth` per `tools/summary.sh` "Incomplete builds" output. - **2026-06-04 toolchain upgrade (bazel-orfs 553c1c3 / OpenROAD 299f3015 / yosys 0.64)**: big step forward — the old-tools synth stall is gone and the flow runs all the way to `6_final.odb`. **But the final report fails PSM-0069**: `Check connectivity failed on VSS` — many TAP/FILLER/stdcell `VGND` pins are left unconnected by the default sky130hd PDN under the new tools (PSM-0039 warnings precede it). So it produces a routed DB but not a clean signoff. **Flagged** — needs a PDN fix (followpin/strap coverage of VSS, likely a `pdn.tcl`) to close PSM; out of scope for the flow-knob upgrade. asap7 + nangate45 floonoc pass clean. +- **2026-06-26 `bbc7fd0`**: PSM-0069 root cause found and fixed. The 1598 bottom-edge IO pins on met2 at `edge_margin=5.0 µm` had their spacing-expanded obstruction (obs_yMax=5381 nm) overlapping the row-0 VSS via area (y_min=5200 nm); `pdngen` silently dropped all row-0 met1×met4 via candidates with no PDN-0110 warning. Fix: reduced `edge_margin` to **4.37 µm** (nearest valid met2 y-track below the 4.82 µm threshold); obs_yMax drops to 4751 nm, clearing the via area. `_final` passes with `[INFO PSM-0040] All shapes on net VSS are connected.` See CLAUDE.md bugs table for the threshold formula. ### Known issues / open questions -- Synthesis itself is failing on sky130hd; need to inspect the yosys log to determine whether it's a memory-inference issue, a slang-frontend incompatibility, or something else. -- Worth checking the yosys-slang log against the gallery of known failures before deeper debug. +- None.