Files
cah ebec884751
Some checks failed
CI / rtl-lint (push) Has been cancelled
fix(submission): archive v6-v11 wrapper experiments, add LVS waiver
The May 7-11 series of wrapper-hardening attempts (cf_wrapper_v6
through v11) all failed to eliminate the 208 cosmetic LVS pin-match
errors. The root cause is a Magic SPICE-extraction limitation: it
collapses constant-tied output nets into shared global power/ground
nets, losing per-pin labels. Per-pin conb_1 cells (v8) and placement
tweaks don't change this behavior; v9/v10 regressed to 1300-1800
routing DRC errors; v11 was interrupted.

This commit:
- Restores the working tree to the May 7 PDN-fix wrapper (HEAD before
  experiments started).
- Archives the v6-v11 experiment files under experiments/ with a
  per-file README explaining what was tried and why it failed. Large
  binary debris (mag, multicorner spef, uncompressed wrapper GDS) is
  preserved locally but excluded from git via a local .gitignore.
- Adds docs/LVS_WAIVER.md formally requesting the 208 cosmetic LVS
  errors be accepted as Magic-extraction artifacts. Cites netgen's own
  "Device classes equivalent" / "Cell pin lists altered to match"
  lines, the v8 disproof that per-pin tieoffs cannot fix this, and
  the 17/19 mpw_precheck PASS at cf_wrapper_v5 (May 1, 2026).
- README.md now links the waiver from the Precheck Results section.
- .gitignore adds /precheck_logs/ for local snoke run logs.

The submission ships with the May 7 cf_wrapper_v5 + PDN-fix wrapper
(commit 8cc8414). All 5 GLS cocotb tests pass (GPIO=0xAB). Magic DRC
clean. 17/19 mpw_precheck. The cosmetic LVS pin-match issue is
documented in the waiver and not fixable by wrapper-only hardening.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 23:16:18 -06:00
..

Archived: v6v11 Wrapper LVS-Fix Experiments (May 711, 2026)

These files are from a failed series of attempts to eliminate the 208 cosmetic LVS pin-match errors on user_project_wrapper. None succeeded. They are archived here for reference; do not re-introduce them into the build.

Why this is archived (not deleted)

Future sessions may be tempted to re-try this approach. These files document exactly what was tried and exactly what failed, so we don't repeat the exercise. See also:

  • ../../../docs/hardening-results.md — "Wrapper Hardening Attempts (May 7-11, 2026)" section
  • ~/.claude/projects/-home-cah-r2d2-code-fpga-claude-project-ldpc-optical/memory/wrapper-lvs-cosmetic.md

Contents

verilog_rtl/manual_tieoffs.vh

206 explicit sky130_fd_sc_hd__conb_1 instantiations, one per wrapper output pin (io_out[37:0], io_oeb[37:0], la_data_out[127:0], user_irq[2:1]). Was \include-ed from verilog/rtl/user_project_wrapper.v` during the v8 attempt.

Why it failed: Magic's SPICE-extraction step resolves each conb_1 output back to the global VPWR / VGND net, collapsing all 206 distinct logical nets into 2 shared power nets at the extracted layout level. The wrapper's output ports lose their individual labels in extraction, producing the same 208 pin-match errors as the bulk assign la_data_out = 128'b0 tieoff it was meant to replace.

openlane_wrapper/manual_placements.json

Hand-coded MANUAL_GLOBAL_PLACEMENTS for the 206 tieoff cells, distributing them along the wrapper's edges adjacent to their target pins. Used by the v8 attempt with the wrapper config's mprj location shifted from [60, 15][60, 200] to make room.

Why it didn't help: Placement doesn't change Magic's extraction behavior. The cells were placed where requested but their outputs still merged into the global power/ground nets.

mag/user_project_wrapper.mag

121 MB uncompressed Magic layout from the v8 run (May 8 03:17). Replaces mag/user_project_wrapper.mag.gz which contains the v5-era wrapper layout.

spef/multicorner/user_project_wrapper.{max,min,nom}.spef

Wrapper-level SPEFs from the v8 run (May 8 03:17), ~15 MB each. The v5-era wrapper SPEFs that should ship with the submission have different blob hashes and would need to be restored from gitea commit 32b469d if needed for cf verify.

user_project_wrapper.gds

Uncompressed wrapper GDS from the v8 run (May 8 03:17), 436 MB. Originally written to gds/user_project_wrapper.gds, which conflicted with HEAD's gds/user_project_wrapper.gds.gz and broke cf precheck with Both compressed and uncompressed GDS exist. Keep only one. The committed .gz (commit 8cc8414, May 7 PDN swap) is the canonical wrapper GDS for the submission. This uncompressed v8 copy is preserved here for reference only and not tracked in git.

Per-run summary

Run Date Strategy Outcome
v6 May 7 First post-PDN-swap retry; same wrapper RTL as v5 Flow completed; KLayout crashed in final manufacturability step; same 208 LVS errors
v7 May 7 Retry of v6 Aborted mid-routing on [DRT-0349] LEF58_ENCLOSURE warnings
v8 May 8 manual_tieoffs.vh + manual_placements.json + mprj at [60, 200] Flow completed; STA failed on min_ss_100C_1v60 + nom_tt_025C_1v80; same 208 LVS errors
v9 May 9 Same as v8 + ERROR_ON_TR_DRC=false to push through routing 1780 routing DRC errors (deferred)
v10 May 11 Variant placement tweaks 1362 routing DRC errors (deferred)
v11 May 11 One more attempt Interrupted at step 01 (yosys-jsonheader)

What to do instead

The May 12, 2026 pivot: stop trying to fix LVS through wrapper hardening. Document the 208 errors as cosmetic in chip_ignite/docs/LVS_WAIVER.md, verify HEAD's signoff with cf precheck + cf verify, then cf push to ChipFoundry SFTP before the May 13 deadline.

If a future shuttle requires clean LVS, the only viable approach is to drive the 206 unused wrapper outputs from inside ldpc_decoder_top as dummy zero ports — this forces distinct extracted macro pins. Cost: full macro re-harden with the risk of Yosys non-determinism breaking Run 6's golden timing. Don't attempt this under deadline pressure.