Repository navigation
AUTO_MEMORIES_REGFILES: register files as macros of placed standard cells - #1207
Merged
Merged
Conversation
…ells AUTO_MEMORIES_REGFILES lists register-file specs; OpenROAD's generate_regfile builds each as placed standard cells during canonicalization. In mode netlist a file is a macro through synthesis and macro placement and then dissolves into its cells. AUTO_MEMORIES_MACRO_PLACE names the files placed as macros; the others are inlined in synthesis. Carried: - OpenROAD 0010: The-OpenROAD-Project/OpenROAD#11669, its net diff at its head, as one patch. - ORFS 0089, 0091, 0099: the three commits of The-OpenROAD-Project/OpenROAD-flow-scripts#4651 as rebuilt on #4650 (blackboxes.txt lines carry each register file's area), without its example designs (asap7/regfile, asap7/riscv32i-regfile, src/regfile). They apply after 0090 (#4650, #1205). 0090 loses the hunks it carried for the retired 0071 (its register files' DEF die area); the rest of it is unchanged. STRUCTURED_MEMORIES and STRUCTURED_PLACEMENT (ORFS patches 0071, 0078, 0082, 0084) are retired. A flow that still sets either one fails and the error names the replacement: at load time in arguments or sources, and at analysis in user_arguments or on a stage rule. test/structured_netlist, test/planned_parent, the XiangShan flows, tools/structured_gen/test and tools/macro_select move to the new variables. test/regfile is the flow's own fixture: the dissolve, every register clocked (macro and inlined), global route, simulation against the RTL, and synthesis with SYNTH_MINIMUM_KEEP_SIZE=1. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
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.
What a user sees
AUTO_MEMORIES_REGFILESlists register-file spec files, one per RTL module. During canonicalization OpenROAD'sgenerate_regfilebuilds each file from placed standard cells: a netlist, an abstract LEF and a timing model, which sit beside the FakeRAM views. Inmode netlistthe file is a macro through synthesis and macro placement, and then dissolves into its cells: the core stays FIRM where the macro was placed, and the address decode is left to placement.AUTO_MEMORIES_MACRO_PLACElists the register files that are placed as macros. Any other listed file is inlined: synthesis reads its generated netlist in place of the module.generate_regfile, in therammodule.blackboxes.txtcarries the area its.libstates, soSYNTH_MINIMUM_KEEP_SIZEcan cost it (the format AUTO_MEMORIES: a macro's blackbox costs its view's area #1205 introduced).STRUCTURED_MEMORIESandSTRUCTURED_PLACEMENT, which were bazel-orfs's own carried ORFS patches 0071/0078/0082/0084, are retired. A flow that still sets either one fails, and the error names the replacement. Inarguments/sourcesit fails at load time; inuser_arguments, or on a stage rule directly, it fails at analysis. ORFS ignores variables it does not know, so a silent removal would have built without the register files the flow asked for.Carried patches
AUTO_MEMORIES_REGFILESAUTO_MEMORIES_MACRO_PLACEThe ORFS patches are #4651's commits as rebuilt on #4650, with the example designs left out (
flow/designs/asap7/regfile,flow/designs/asap7/riscv32i-regfileandflow/designs/src/regfile). Here the flow is tested on a fixture of our own,test/regfile, which is the 16×8 2R2W example as a bazel-orfsorfs_flow. They apply after 0090, #4650, which #1205 merged. With 0071 retired, 0090 loses the hunks it carried for 0071 only (the DEF-die area of STRUCTURED_MEMORIES files); the rest of it is unchanged. Each patch retires at a bump onto an upstream that carries it.OpenROAD's own
src/ram/testtargets: bazel-orfs does not build or test them: CI runsbazelisk test ..., this repository's own targets. Run here anyway, the sevengenerate_regfile_*_asap7tests fail to build, because a patch applied byarchive_overridecannot create thesrc/ram/test/asap7symlink that #11669 adds, so their LEF and Liberty inputs are missing. Theopenroadbinary is unaffected, and the four oldermake_*ram tests pass. The generate_regfile tests run in OpenROAD's own CI on #11669.Migrated
test/structured_netlist,test/planned_parent, the XiangShan flows andtools/structured_gen/testmove to the new variables.tools/macro_select/plan_floorplan.pynow places the plan's register files by instance inplace_macros.tcl, so it no longer writesnetlists.txt. The FIRM stand-aside dance aroundrtl_macro_placeris gone.Tests
bazelisk testover//test/regfile/...,//tools/structured_gen/...,//tools/macro_select/...,//test/planned_parent/...,//test/structured_netlist/...,//test/auto_memories/..., the XiangShan package and//test:all, plus@openroad//src/ram/test/...: 172 pass. The 7 failures are the OpenROADgenerate_regfiletests described above.//test/regfile: the dissolve, every register clocked (macro and inlined), global route on both, simulation of both write styles againstriscv32i/regfile.v, and synthesis withSYNTH_MINIMUM_KEEP_SIZE=1, including aRegFile <area>line inblackboxes.txt.//test:retired_structured_*_refused_test: the two refusals.//:fix_lint,//:public_surfaceand//:host_toolspass.//test/planned_parent:mini_top_grtstops on DRT-0073 (no access point foru_block*/din[0]). It stops the same way onmainat 7519e7c, so this PR doesn't cause it.This is split out of #1187, which stays the integration and scaffolding branch: the register-file campaign, the ladder designs and the study variants.
🤖 Generated with Claude Code