Expand description
PdkTarget — the PROCESS a design is built out of, as data.
super::fabric_target::FabricTarget describes an ARCHITECTURE (the grid you place onto).
This describes an IMPLEMENTATION (what the grid is made of): the standard-cell library, the
metal stack, the shuttle vehicle’s fixed geometry, the SRAM macros actually available, and the
golden DRC deck. They are deliberately separate types — the same fabric is placeable on several
processes, and the same process carries many fabrics.
WHY THIS EXISTS. Every PDK fact in this project used to be a literal in a shell script:
sky130A_mr.drc in one, "0 0 2920 3520" in another, "0.99,$X,0,0,0,0" (a six-column
li1,met1..met5 vector) in a third, and contains("sky130") inside four Rust locks that would
have actively REJECTED a GF180 ledger. Bringing up a second process meant editing eight files
and hoping. The acceptance test for this module is blunt: adding a PDK must be adding one
value here, and nothing else. If a script or a lock has to change, the abstraction leaked.
The shape follows crate::codegen_ana::target::AnalogTarget: every quantity carries its
provenance, and asking for something the process cannot do returns a typed refusal rather
than a silently-wrong number.
Structs§
- Harness
Timing - The vehicle’s timing as efabless characterizes it: what a user macro’s ports see from the harness, and the clock model the whole chip is signed off with.
- LayerRc
- One routing layer’s wire RC per unit length, as
set_layer_rctakes it. - Memory
Plan - How a
MemoryRequestmaps onto real macros. - Memory
Request - A memory the design needs, expressed the way RTL expresses it.
- PdkTarget
- One process, as data.
- Sram
Macro - A standard-cell SRAM macro the PDK actually ships, with the facts that decide whether a design can use it.
- User
Area - The fixed geometry of a shuttle vehicle.
Nonefor a standalone die, where the user chooses.
Enums§
- Harness
Clock - The clocks the vehicle’s harness gives a user macro.
- Implementation
- How a
MemoryRequestis best built. NOT always a macro — and getting this wrong is expensive in both directions. - PdkUnsupported
- Why a process cannot build what was asked for. Typed, so a caller cannot mistake a refusal for a plan — the mistake that produces a design nobody can fabricate.
Constants§
- FLOP_
BIT_ UM2 - Silicon area per stored bit when an array is built from FLIP-FLOPS, in um^2.
- GF180MCUC
- GlobalFoundries 180 nm MCU. The variant this project’s vendored OpenLane supports is C.
- MEASURED_
CELLS_ PER_ MM2 - Measured standard-cell density on this flow: 173,895 cells/mm^2, the median across the twelve
sky130 blocks in
benchmarks/silicon/sky130_signoff*.json(range 121k-224k). - SKY130A
- SkyWater 130 nm, the process every block in this repo has been hardened on.
- SKY130A_
LAYER_ RC - sky130A signal-layer RC for the pre-route estimate.