Repository navigation
Write sky130 LEF with 1000 database units per micron - #322
Conversation
DATABASE MICRONS was hard-coded to 2000. sky130 tech LEFs use 1000. Each technology now sets lef_units, sky130 to 1000 and the rest to 2000 so their output does not change.
|
Merged. Thanks — and the reasoning about why this has to be per-technology rather than a single global value is exactly right. I confirmed
All in-tree technologies are covered — there are only the two sky130 Two notes, neither blocking:
Full regression on freepdk45 + scn4m_subm (30 tests): identical pass/fail to |
Fixes #278.
lef.pyhard-codesDATABASE MICRONS 2000. sky130 tech LEFs use 1000, and #278 reports OpenROAD failing to import the generated macro. The coordinates are written in microns and are already correct, so only the header is wrong. The released sky130 macros were fixed by hand in VLSIDA/sky130_sram_macros@c2333394, and #239 does the same.This moves the value into the technology files as
lef_unitsandlef.pyreads it. sky130 (both tech configs) is 1000. freepdk45, scn4m_subm, scn3me_subm and gf180mcu stay at 2000, so their output does not change.A single global 1000 would break freepdk45. Its manufacturing grid is 0.0025 um, which is not a whole number of 1/1000 um units. That is the open question in #278. I left gf180mcu at 2000 because I have not checked its flows.
Tests on
dev(3608704)24_lef_sram_testis skipped upstream, so I ran its body locally with the golden comparison replaced by a print of the header. sky130 needsword_size=4with one spare row and column to build.04_pinv_1x(freepdk45) and20_sram_1bank_nomux_1rw_1r(sky130, scn4m_subm) pass with the change. The golden LEFs for scn4m_subm and freepdk45 still say 2000 and are not affected.We use 1000-unit sky130 LEFs from OpenRAM in an OpenROAD flow, with the same geometry and only the header changed. Macro power and signal routing connect there.