Skip to content

eyeriss: regenerate FakeRAM macros with current bsg_fakeram (fixes #234) - #235

Merged
mguthaus merged 3 commits into
mainfrom
eyeriss
Aug 13, 2026
Merged

eyeriss: regenerate FakeRAM macros with current bsg_fakeram (fixes #234)#235
mguthaus merged 3 commits into
mainfrom
eyeriss

Conversation

@mguthaus

Copy link
Copy Markdown
Contributor

Fixes #234.

Root cause

eyeriss was the only design whose FakeRAM cfgs lived at
designs/<platform>/eyeriss/sram/fakeram_<platform>.cfg instead of the standard
designs/src/<design>/dev/generated/ path that tools/regenerate_sram.sh reads.

The mass regeneration in 94296798 — the bump to bsg_fakeram c83ecb4 that fixed the
wd_in LEF pin-direction bug — therefore skipped eyeriss silently. Its committed LEFs kept
declaring the upper half of every rw*/w*_wd_in bus as DIRECTION OUTPUT while Liberty
correctly said input, which is what @bugraonal hit as floating bits in gate-level sim.

I audited every design: eyeriss was the only one with an off-path cfg, and the only one with
bad LEFs.

Changes

  • Cfgs moved to designs/src/eyeriss/dev/generated/, so future sweeps pick eyeriss up.
  • LEF/LIB regenerated on all three platforms with the pinned bsg_fakeram c83ecb4.
  • tools/check_sram_lef.sh + a grep-only PR workflow: a wd_in pin is an input by
    definition, so DIRECTION OUTPUT on one is always this bug. Verified it fails on the old
    files and passes on the regenerated set.

Beyond the direction fix the macros were stale on a second axis — they predate the asap7 area
calibration and the sky130hd analytical path:

platform Δ macro area cause
nangate45 0.0 %, byte-identical CACTI path unchanged; direction fix only
asap7 +80 % … +389 % 2.5× periphery overhead + dynamic column mux calibration
sky130hd −16 % … −55 % analytical bitcell (OpenRAM) replaces scaled CACTI

Re-validation

Built on this branch's toolchain, which is identical to master (bazel-orfs 6c1bbca /
OpenROAD b65c274c; MODULE.bazel is byte-identical to origin/main).
All three platforms reach 6_final with 0 DRC and 0 setup violations.

Baseline column is fde02b5d from results.html, which was generated back at 553c1c3 and
never refreshed for eyeriss after the ab36853f upgrade — so it carries toolchain drift as
well as the macro change. nangate45 is the clean control, since its geometry did not move.

asap7 nangate45 sky130hd
die area µm² 226 900 → 421 713 (+86 %) 8 406 380 → 8 407 450 (+0.0 %) 53 040 900 → 37 526 200 (−29 %)
util % 30.8 → 30.7 38.5 → 38.5 31.9 → 32.3
logic cells 301 728 → 307 541 (+1.9 %) 307 758 → 307 635 (−0.0 %) 222 577 → 224 313 (+0.8 %)
setup WNS +138.4 → +141.3 ps +102.8 → +247.5 ps +1348.4 → +147.2 ps
DRC 0 0 0
  • nangate45 reproduces the baseline to within 0.05 % on every area/cell figure, confirming
    the CACTI geometry is untouched. Its +145 ps setup gain is therefore pure toolchain drift.
  • asap7 trades die area for correctness as expected: calibrated macros are 2–4× larger, so
    at an unchanged util target the die nearly doubles. Timing, util and cell count are flat.
    The CORE_UTILIZATION 40→30 MPL-0040 workaround is still needed.
  • sky130hd shrinks 29 %, but setup margin falls to +147 ps against an unchanged 25 ns
    clock (period_min 24.85 ns → set/period_min ≈ 1.006 vs the 1.10 guardband). The control
    shows drift went the other way, so this is the new macro aspect ratios giving RTLMP a
    different floorplan. It closes cleanly; relaxing the clock toward 27.5 ns would restore the
    guardband at the cost of reported Fmax — left at 25 ns, as that's a PPA call.
  • Hold: asap7 clean (+23.1 ps); nangate45 −16.3 ps (3 violations), sky130hd −374.2 ps
    (52 violations). These run with SKIP_INCREMENTAL_REPAIR + SKIP_LAST_GASP, and the
    baseline never recorded hold, so they are not attributed — settling it needs an A/B
    against a pre-change build on this same toolchain pin.

Full write-up in designs/src/eyeriss/DECISIONS.md.

eyeriss was the only design whose FakeRAM cfgs lived under
designs/<platform>/eyeriss/sram/ instead of the standard
designs/src/<design>/dev/generated/.  tools/regenerate_sram.sh only looks
at the standard path, so the mass regeneration in 9429679 -- the bump to
bsg_fakeram c83ecb4 that fixed the wd_in LEF pin-direction bug -- silently
skipped eyeriss.  Its committed LEFs still declared the upper half of every
rw*/w*_wd_in bus as DIRECTION OUTPUT while Liberty said input, so gate-level
sim saw those bits floating and OpenROAD PnR shorted them into one net.

Move the three cfgs to the standard path so future sweeps pick eyeriss up,
and regenerate LEF/LIB for all three platforms.  Beyond the direction fix
the macros were stale on a second axis -- they predate the asap7 area
calibration and the sky130hd analytical path:

  nangate45  geometry byte-identical (CACTI path unchanged)
  asap7      +80% .. +389% area (2.5x periphery overhead + column mux)
  sky130hd   -16% .. -55% area (analytical bitcell replaces scaled CACTI)

asap7 and sky130hd floorplans are re-validated in follow-up commits.
The bug in #234 escaped because nothing checks the invariant: a *_wd_in pin
is an input by definition, so a DIRECTION OUTPUT on one is always the
pre-c83ecb4 side-vs-function bug and always electrically invalid.

tools/check_sram_lef.sh scans every designs/*/*/sram/lef/*.lef and fails with
the offending pin names; a grep-only PR workflow runs it on any LEF change.
…tforms

All three platforms still reach 6_final with 0 DRC and 0 setup violations on
bazel-orfs 6c1bbca after the #234 macro regeneration.

nangate45 reproduces its baseline to within 0.05% on every area/cell figure
(its geometry was byte-identical), which makes it the control for separating
toolchain drift from the macro change: its +145 ps setup gain is drift.

asap7 trades die area for correctness as expected -- calibrated macros are
2-4x larger, so the die nearly doubles at unchanged util; timing flat.

sky130hd shrinks 29% but setup margin falls +1348 -> +147 ps against an
unchanged 25 ns clock (period_min 24.85 ns, set/period_min ~1.006 vs the
1.10 guardband).  Attributable to the new macro aspect ratios changing the
RTLMP floorplan, since the control shows drift went the other way.  Closes
cleanly; whether to relax the clock is a PPA call, left at 25 ns.

Hold violations on n45 (3) and sky130hd (52) are recorded but not attributed
-- the baseline never captured hold.
mguthaus added a commit that referenced this pull request Aug 13, 2026
…tion

Rebuilt on bazel-orfs 6c1bbca after #235 regenerated the
eyeriss FakeRAM macros.  The prior rows were still fde02b5 numbers from the
553c1c3 toolchain -- eyeriss was never re-run after the ab36853 upgrade.

asap7 die area +86% (calibrated macros are 2-4x larger at unchanged util),
sky130hd -29% (analytical bitcell replaces scaled CACTI), nangate45 flat
(geometry byte-identical).  All three still close with 0 DRC.
@mguthaus
mguthaus merged commit 7653a17 into main Aug 13, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

FakeRAM LEF pin direction incorrect

1 participant