Skip to content

Commit 31cd812

Browse files
authored
Merge pull request #4610 from oharboe/memories-docs-fakeram-views
docs: AutoMemories views come from FakeRAM2.0's asap7 backend
2 parents 24a2d1c + 7f2c5a1 commit 31cd812

1 file changed

Lines changed: 30 additions & 28 deletions

File tree

‎docs/user/AutoMemories.md‎

Lines changed: 30 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -100,37 +100,39 @@ option and the design forces conversion.
100100

101101
## Generated views
102102

103-
The `.lib` mirrors the structural shape OpenROAD's abstract writer
104-
produces for hardened blocks: `bus()` groups **with per-bit `pin()`
105-
records** (a bus without per-bit siblings makes yosys silently drop bit
106-
connections at parent instances), per-port clock pins with
107-
`min/max_clock_tree_path` arcs, setup/hold constraints on inputs,
108-
clock-to-out arcs on outputs, and `internal_power()` records under a
109-
`power_lut_template` so SAIF-driven power reporting is non-zero.
110-
111-
The `.lef` is an abstract following the conventions of the platform's
112-
fakeram abstracts: `CLASS BLOCK`, per-bit signal pin pads stacked along
113-
the macro edge, interleaved horizontal power/ground straps the
114-
platform's PDN macro grid connects to, and a full-footprint multi-layer
115-
`OBS`.
116-
117-
Timing and area come from simple parametric models
118-
(`scripts/memories/liberty.py`, `scripts/memories/sram_area_model.py`):
119-
log2(rows) decode depth and √bits bit-line scaling for timing; an area
120-
model anchored to published 7 nm SP-SRAM figures (Suzuki et al., ISSCC
121-
2018). These are budgetary models — good enough to make floorplanning,
122-
placement, and timing behave representatively; not sign-off numbers.
103+
The views come from FakeRAM2.0's asap7 backend
104+
(`tools/FakeRAM2.0/orfs_asap7/generate.py`), which `gen_memories.py` runs
105+
as `run.py --orfs_asap7_backend`.
106+
Every converted memory becomes a FakeRAM2.0 single-port RAM of its depth
107+
and width. Its other ports and write-mask lanes are not modelled, and the
108+
views use FakeRAM2.0's pin names, not the memory's own.
109+
110+
The `.lib` has `bus()` groups `addr_in`, `wd_in` and `rd_out` and pins
111+
`clk`, `we_in` and `ce_in`. Inputs have setup/hold constraints, `rd_out`
112+
has a clock-to-out arc, and pins have `internal_power()` records under a
113+
`power_lut_template`. `<m>_pre_layout.lib` has the same content as
114+
`<m>.lib`.
115+
116+
Timing, power and leakage are FakeRAM2.0's built-in asap7 defaults,
117+
the same for every memory. Only area and bus widths depend on the
118+
memory. Each bit is 2 contacted poly pitches by 10 fin pitches, and the
119+
bit array gets 20% extra in each direction: that is the `.lib` area.
120+
The `.lef` size is at least that array, rounded up to a multiple of
121+
0.19 µm in width and 1.4 µm in height; a shallow memory is made taller
122+
to leave room for its pins.
123+
124+
The `.lef` is a `CLASS BLOCK` abstract with signal pins on M4 stacked up
125+
the left edge, alternating horizontal M4 `VDD`/`VSS` straps across the
126+
macro (which the platform's PDN macro grid connects to M5), and an `OBS`
127+
covering M1 to M4.
123128

124129
## Platform support
125130

126-
**asap7 only.** The emitters are split into general structure
127-
(`liberty.py`, `lef.py`, parameterized by a `PdkParams`) and platform
128-
constants (`pdk_asap7.py`: pins and power straps on M4 — where the
129-
platform's PDN macro grid connects — pin pad/pitch, strap geometry,
130-
OBS layers, nominal voltage). Generalizing to other PDKs means
131-
providing their `PdkParams` — the code seam exists, the calibration
132-
work does not. `AUTO_MEMORIES=1` on any other platform fails with a
133-
clear error.
131+
**asap7 only.** `gen_memories.py` rejects any other platform. The
132+
asap7 process parameters (layers, pin pitch, poly and fin pitch, snap grid)
133+
are constants in `ASAP7_PROCESS_CONFIG` in
134+
`tools/FakeRAM2.0/orfs_asap7/generate.py`, not read from the platform.
135+
Another PDK would need its own backend there.
134136

135137
## Trying it
136138

0 commit comments

Comments
 (0)