@@ -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