You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This workspace is organized under crates/* and currently contains
33 crates. The composition hierarchy and dependency layering are
covered in architecture.md; this document is
the per-crate inventory.
Core libraries
Crate
Purpose
eda-hir
User-facing high-level IR traits for blocks, schematics, and layouts.
eda-mna
Modified Nodal Analysis assembly from behavioral devices into solvable circuit residuals.
eda-spice-emit
SPICE netlist emission for cross-validation in external simulators.
eda-waveform
Common waveform IR plus Nutmeg/CSV/VCD read-write and plotting utilities.
eda-viz
SVG/PNG rendering for layout and symbolic schematic views.
Circuits are organized along the standard semiconductor stack —
Device → Cell → Macro → Tile → Core → Die → Reticle → Wafer → Lot.
All rungs sit on top of eda-hir's Block base trait (Hash + Eq + name()); each rung adds only the obligation specific to that level.
The hierarchy traits live in
../crates/eda-hir/src/hierarchy.rs;
Tile keeps its richer abutment contract in
../crates/eda-tile/src/tile.rs.
rung
trait
obligations beyond Block
concrete consumers today
1
Device: Block
terminal_names()
every MnaDevice impl (Mosfet, Diode, Resistor, Capacitor, …)
2
Cell<P>: Block + Layout<P>
pins()
eda-stdcells::StdCell (foundry sky130 cells)
3
Macro<P>: Block + Layout<P>
pins(), boundary()
spike-divider-block, spike-sar-adc, spike-waveguide-block (de facto macros)
Macro is the standard EDA term for what the literature also calls a
"block" or "hard macro"; we use Macro because Block is already the
crate-wide identity-and-equality contract every composable thing
satisfies. Per eda-hir's philosophy ("traits earn their place"), the
speculative rungs carry only the minimal contract a future consumer
would need; richer obligations are added when a real use case lands.
External simulator adapters
Crate
Purpose
eda-extern-ngspice
ngspice invocation and result parsing for .op, transient, and AC-style validation flows.
eda-extern-ltspice
LTspice adapter with a shape aligned to the ngspice invoker and shared waveform parsing.
PDK pipeline
Crate
Purpose
eda-pdk-ingest
Parses foundry layer property files (for example .lyp) into Rust structures.
eda-pdks
Build-time generated PDK definitions, feature-gated per foundry.
Design automation
Crate
Purpose
eda-pnr
Differentiable place-and-route. Positions exposed as rlx_ir::Param[B, N]; HPWL + density are one differentiable loss.
eda-tile
Tile abutment contract: pitch, rails, edge ports. Consumed by spike-tinyconv-tile.