Skip to main content

Module pdk_target

Module pdk_target 

Source
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§

HarnessTiming
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_rc takes it.
MemoryPlan
How a MemoryRequest maps onto real macros.
MemoryRequest
A memory the design needs, expressed the way RTL expresses it.
PdkTarget
One process, as data.
SramMacro
A standard-cell SRAM macro the PDK actually ships, with the facts that decide whether a design can use it.
UserArea
The fixed geometry of a shuttle vehicle. None for a standalone die, where the user chooses.

Enums§

HarnessClock
The clocks the vehicle’s harness gives a user macro.
Implementation
How a MemoryRequest is 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.