Skip to content

FakeRAM asap7: a macro at least one power-strap pitch wide - #4662

Open
oharboe wants to merge 2 commits into
The-OpenROAD-Project:masterfrom
oharboe:fakeram-asap7-min-width
Open

oharboe wants to merge 2 commits into
The-OpenROAD-Project:masterfrom
oharboe:fakeram-asap7-min-width

Conversation

@oharboe

@oharboe oharboe commented Oct 9, 2026

Copy link
Copy Markdown
Collaborator

Draft: waits for #4659. Without its column mux, asap7/tage_update stops at macro placement before it gets to PDN, so this has nothing to show until #4659 is in. It does not depend on #4659's code and merges cleanly with it.

A generated macro's power pins are horizontal M4 rails; the platform's macro grid connects them to the core's vertical M5 straps, one per net every 5.4 um (grid_strategy-M1-M2-M5-M6.tcl). The backend sizes a macro from its bit cells alone, with a floor on height and none on width, so a small memory can come out narrower than the strap pitch, land between two straps of a net, and fail pdngen for the whole design. In tage_update (#4595), with #4659, the 64x16 SRAM is 4.18 um wide and floorplan stops with PDN-0179, "Unable to repair all channels".

The process gets a min_width_um floor beside the existing height floor, and the asap7 backend sets it to one pitch plus one strap plus the rails' inset at both edges, 5.616 um: a strap of each net then crosses the rails wherever the macro is placed. Wider macros are unchanged. The 64x16 SRAM becomes 5.70 um wide and tage_update gets through PDN.

🤖 Generated with Claude Code

A generated macro's power pins are horizontal M4 rails; the platform's
macro grid connects them to the core's vertical M5 straps, one per net
every 5.4 um (grid_strategy-M1-M2-M5-M6.tcl). The backend sizes a macro
from its bit cells alone, with a floor on height and none on width, so
a small memory can come out narrower than the strap pitch, land between
two straps of a net, and fail pdngen for the whole design. In
asap7/tage_update, with the column mux of The-OpenROAD-Project#4659, the 64x16 SRAM is
4.18 um wide and floorplan stops with PDN-0179, "Unable to repair all
channels".

The process gets a min_width_um floor beside the existing height floor,
and the asap7 backend sets it to one pitch plus one strap plus the
rails' inset at both edges, 5.616 um: a strap of each net then crosses
the rails wherever the macro is placed. Wider macros are unchanged. The
64x16 SRAM becomes 5.70 um wide and tage_update gets through PDN.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a minimum width constraint (min_width_um) for macros in the FakeRAM2.0 tool to prevent pdngen failures on narrow macros. This includes updating the ASAP7 configuration, enforcing the minimum width in get_macro_dimensions, and adding a unit test to verify the behavior. Feedback suggests handling cases where min_width_um might be explicitly set to None in the JSON configuration to avoid a potential TypeError during the max comparison.

Comment thread tools/FakeRAM2.0/utils/class_process.py
Review: an explicit null would reach max() as None. Rather than read
null as no floor, the process config is refused, as the file already
refuses a pin pitch that is off the track grid: min_width_um must be a
non-negative number. The comment on the asap7 floor names PDN-0179 as
well as PDN-0233, the error asap7/tage_update met.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
@openroad-ci

openroad-ci commented Oct 9, 2026 •

Copy link
Copy Markdown
Member

🔍 QoR check

Metrics reflect the PR merge build — i.e. what will land on the target branch.

Commit 1c93e0e · Jenkins build #4 · Baseline: build · View build on dashboard

62 design(s) checked — 0 with regression(s), 0 without a comparable baseline.

@oharboe
oharboe marked this pull request as ready for review October 14, 2026 18:23
@maliberty
maliberty requested a review from gadfort October 20, 2026 18:41
@maliberty

Copy link
Copy Markdown
Member

@gadfort does pdn add repair straps for macros?

@gadfort

gadfort commented Oct 20, 2026

Copy link
Copy Markdown
Contributor

@maliberty no it doesn't

@oharboe

oharboe commented Oct 21, 2026

Copy link
Copy Markdown
Collaborator Author

@gadfort You are reviewer, what should I do here? I'm out of my depth.

@gadfort

gadfort commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

I doubt a real memory would be this small. I have no objections to making sure the macros don't get too tiny.

@oharboe

oharboe commented Oct 21, 2026

Copy link
Copy Markdown
Collaborator Author

I doubt a real memory would be this small. I have no objections to making sure the macros don't get too tiny.

Thanks! Yes, too small memories is mostly about getting some signal in design space exploration so that the search can crawl out rather than getting no signal and fumbling in the dark without a gradient...

@gadfort gadfort left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems reasonable

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.

4 participants