Summary
For the OpenRAM-generated sky130 SRAM sky130_sram_2kbyte_1rw1r_32x512_8, the
output Liberty declares max_transition : 0.04 (40 ps) on the input pins
(address and write-mask buses), while the same library's default_max_transition
is 0.5 (500 ps).
40 ps is tighter than sky130 standard cells can physically drive, so any
timing-driven P&R/STA flow that enforces slew limits treats the design as having
an infeasible constraint and stops.
Details
-
Macro / config: sky130_sram_2kbyte_1rw1r_32x512_8
(macros/sram_configs/sky130_sram_2kbyte_1rw1r_32x512_8.py), corner
TT_1p8V_25C.
-
The timing LUTs use the input-transition axis index_1("0.00125, 0.005, 0.04")
— i.e. inputs are characterized only up to 0.04 ns.
-
The input buses then carry that maximum as their max_transition:
library (sky130_sram_2kbyte_1rw1r_32x512_8_TT_1p8V_25C_lib) {
time_unit : "1ns" ;
default_max_transition : 0.5 ;
...
bus (addr0) { direction : input; max_transition : 0.04; ... }
bus (wmask0) { direction : input; max_transition : 0.04; ... }
...
}
(three input buses in total) — 12.5x tighter than the file's own
default_max_transition.
Downstream effect
A timing-driven flow rejects it. With OpenROAD (global_placement -timing_driven
→ resizer slew pre-check):
[ERROR RSZ-0090] Max transition time from SDC is 0.040ns.
Best achievable transition time is 0.098ns with a load of 0.00pF
OpenROAD's check is correct — the smallest sky130 buffer cannot produce a
transition below ~0.098 ns even at zero load — so the 0.04 ns input constraint is
physically unmeetable. The value originates in the Liberty, not the tool
(reproduced with OpenROAD @ 51c9638, but independent of tool version).
Question / suggestion
- Is the input-transition characterization range (max 0.04 ns here) the intended
default? For a macro whose inputs are driven by ordinary standard-cell logic,
the characterized input slew should span realistic drive (hundreds of ps), or
at minimum should not be tighter than the target PDK's achievable transition.
- Would it make sense to (a) widen the default input-slew list used for
characterization, and/or (b) avoid emitting a per-pin max_transition that is
tighter than the library's own default_max_transition?
Happy to attach the full .lib or the config if useful.
Environment
- sky130 PDK, ngspice Liberty characterization.
- The same views are also redistributed via
efabless/sky130_sram_macros.
Summary
For the OpenRAM-generated sky130 SRAM
sky130_sram_2kbyte_1rw1r_32x512_8, theoutput Liberty declares
max_transition : 0.04(40 ps) on the input pins(address and write-mask buses), while the same library's
default_max_transitionis
0.5(500 ps).40 ps is tighter than sky130 standard cells can physically drive, so any
timing-driven P&R/STA flow that enforces slew limits treats the design as having
an infeasible constraint and stops.
Details
Macro / config:
sky130_sram_2kbyte_1rw1r_32x512_8(
macros/sram_configs/sky130_sram_2kbyte_1rw1r_32x512_8.py), cornerTT_1p8V_25C.The timing LUTs use the input-transition axis
index_1("0.00125, 0.005, 0.04")— i.e. inputs are characterized only up to 0.04 ns.
The input buses then carry that maximum as their
max_transition:(three input buses in total) — 12.5x tighter than the file's own
default_max_transition.Downstream effect
A timing-driven flow rejects it. With OpenROAD (
global_placement -timing_driven→ resizer slew pre-check):
OpenROAD's check is correct — the smallest sky130 buffer cannot produce a
transition below ~0.098 ns even at zero load — so the 0.04 ns input constraint is
physically unmeetable. The value originates in the Liberty, not the tool
(reproduced with OpenROAD @ 51c9638, but independent of tool version).
Question / suggestion
default? For a macro whose inputs are driven by ordinary standard-cell logic,
the characterized input slew should span realistic drive (hundreds of ps), or
at minimum should not be tighter than the target PDK's achievable transition.
characterization, and/or (b) avoid emitting a per-pin
max_transitionthat istighter than the library's own
default_max_transition?Happy to attach the full
.libor the config if useful.Environment
efabless/sky130_sram_macros.