Files
chip_ignite/experiments/2026-05-12-archive-v6-v11/README.md
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

48 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.