GF180MCU: power-pin + wired-filler shortcuts for real post-P&R netlists#64
Merged
Conversation
Phase 6 brought GF180MCU up to "synthesized-core-only" support; Phase 7 (real wafer.space chip_top netlists) surfaced two remaining gaps that the synthetic timing_test fixtures didn't exercise: 1. Antenna / endcap / fillcap / etc. cell models declare power as `inout VDD, VSS;`. `build.rs::generate_gf180mcu_pin_table` only parses `input` / `output`, so the generated `GF180MCU_PIN_TABLE` was missing power entries. The first wired `.VDD(...)` on an antenna instance in `chip_top.pnl.v` panics NetlistDB parse. 2. `cor` / `fill*` / `dvdd` / `dvss` were assumed to instantiate with empty port lists. The `gf180mcu-project-template` LibreLane flow wires all four power pins on every filler — the corner pad `gf180mcu_fd_io__cor` ships with `.DVDD .DVSS .VDD .VSS`. With no pin-table entry these also panicked. Fix is a two-step shortcut ahead of the per-cell pin lookup: - Any pin named `VDD` / `VSS` / `VNW` / `VPW` / `VPB` / `VNB` / `VPWR` / `VGND` / `DVDD` / `DVSS` / `AVDD` / `AVSS` resolves to `Direction::I` (the enum has no `Inout` variant; power-pin semantics — driven from supply, never driven by the cell — match "constant external driver"). - Any pin on a known filler cell (via `is_filler_cell`) falls through to `Direction::I`. Fillers carry no logic, so power, ground, and signal pins are all sim-irrelevant. Three new tests in `gf180mcu::tests`: - `pin_provider_returns_directions_for_power_and_ground_pins` — spot-checks all 12 power-pin names on an antenna cell. - `pin_provider_handles_wired_filler_and_corner_cells` — covers cor / fill10 / filltie / endcap / dvdd / dvss with realistic pin lists. - `netlist_db_parses_wired_chip_top_pad_ring` — integration fixture mirroring a real `gf180mcu-project-template` post-P&R chip_top. This advances the GF180MCU enablement plan's Phase 7 from "synthetic fixtures only" to "real wafer.space post-P&R netlists parse end-to- end". Note: Phase 7 still has a separate blocker on third-party SRAM IP (`gf180mcu_fd_ip_sram` / `gf180mcu_ocd_ip_sram` cell tables); that's a richer modelling problem and is out of scope for this PR. Co-developed-by: Claude Code v2.1.143 (claude-opus-4-7)
7a8d516 to
c01b67b
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Phase 6 brought GF180MCU support up to "synthesized-core-only". Trying
jacquard simagainst a realgf180mcu-project-templatepost-P&R chip_top netlist surfaces two gaps that the synthetictiming_testfixtures didn't exercise:Power pins are
inoutin Verilog models, missing from the pin table. Cells likegf180mcu_fd_sc_mcu7t5v0__antennadeclareinout VDD, VSS, VNW, VPW;.build.rs::generate_gf180mcu_pin_tableonly parsesinput/outputdeclarations, so the generatedGF180MCU_PIN_TABLEhas no entries for power pins. Real post-P&R netlists wire them (e.g..VDD(VDD), .VNW(VDD), .VPW(VSS), .VSS(VSS)), and NetlistDB panics on the first lookup.Filler / corner cells get wired power pins. Upstream's
is_filler_cellwhitelist already classifiescor/fill*/dvdd/dvssetc., but the assumption was these instantiate with empty port lists(). Thegf180mcu-project-templateLibreLane flow wires all four power pins on every filler —gf180mcu_fd_io__corships with.DVDD .DVSS .VDD .VSS. With no pin-table entry these also panicked.Fix
Two short-circuits ahead of the per-cell pin-table lookup in
GF180MCULeafPins::direction_of:Power-pin shortcut: any pin named
VDD/VSS/VNW/VPW/VPB/VNB/VPWR/VGND/DVDD/DVSS/AVDD/AVSSresolves toDirection::I. TheDirectionenum has noInoutvariant — power semantics (driven from supply, never driven by the cell) match "constant external driver" / input.Wired-filler shortcut: any pin on a cell classified by
is_filler_cellfalls through toDirection::I. Fillers carry no logic, so power, ground, and any wired signal pin are all sim-irrelevant from the AIG's perspective.DVDD/DVSS/AVDD/AVSS are wafer.space-PDK power-pad naming.
Tests
Three new unit tests in
gf180mcu::tests(all passing —cargo test --lib gf180mcuis 59/59 with this change, up from 56):pin_provider_returns_directions_for_power_and_ground_pins— exercises all 12 power-pin names against an antenna cell.pin_provider_handles_wired_filler_and_corner_cells— coverscor/fill10/filltie/endcap/dvdd/dvsswith realistic pin lists.netlist_db_parses_wired_chip_top_pad_ring— integration fixture mirroring a realgf180mcu-project-templatepost-P&R chip_top with wired antenna, corner, filler, endcap, and ws_io power pads.Existing
netlist_db_parses_chip_top_pad_ring(empty-port-list version) continues to pass — both shapes are now covered.What this doesn't fix
gf180mcu_ocd_ip_sram__sram1024x8m8wm1(third-party RTimothyEdwards SRAM IP, vendored separately). It's not in any upstream pin table and needs richer modelling than fillers (real ports A/D/Q/WE/CE/CLK). That's a Phase 7 follow-on item, not the same shape of fix.Context
This is the next bite of Phase 7 ("wafer.space test-run-1 design integration") in
docs/plans/gf180mcu-enablement.md.Test plan
cargo test --lib gf180mcu— 59 passing locallymain-based branch