Core capabilities
1. TechContext
Unified process context aggregating LEF (physical), Liberty (timing/power), RC tech (extraction), and rule deck (DRC/LVS). Every tool queries via a single TechContext with lazy-load and per-layer/per-corner incremental updates.
2. Capability Query
Query supported layers, vias, and rules for a process node. E.g. available_layers() returns metal layers with pitch/width; supported_vias(from_layer, to_layer) returns via types; max_routing_capacity(net_class) returns routing capacity cap.
3. Semantic Mapping
Unified semantic mapping for layer purpose (drawing/pin/obstruction/blockage), via type (square/bar/stack), and units (microns/db_units). Resolves PDK naming ambiguity—SKY130 li1 and Nangate45 metal1 map to semantic m1.
4. Qualification
PDK qualification and data integrity checks. Verify LEF/Liberty/RC tech consistency (e.g., LEF layers have RC models), missing files, version mismatch, out-of-range parameters. Produces qualification_report.
5. PDK Adapter
Unified adapters for PDK formats: OpenPDK (SKY130/GF180), ASAP7, Nangate45, and commercial PDKs (custom parser plugins). Adapters convert native formats to internal TechContext representation.
Agent calling patterns
from ieda.agent import TechKnowledge, TechContext
tech = TechKnowledge()
# Load process and get unified context
ctx = tech.load(
pdk="sky130",
format="open_pdk",
corner="typical"
)
# Capability query
layers = ctx.available_layers()
# layers: [{name: "m1", pitch: 0.30, width: 0.15, purpose: "drawing"}, ...]
vias = ctx.supported_vias("m2", "m3")
# vias: ["via2", "via2_stack"]
# Semantic mapping—unify PDK naming
mapped = ctx.semantic_map("li1") # sky130 local interconnect
# → canonical: "m0", purpose: "drawing"
# Qualification
report = tech.qualify(ctx)
# report: {"consistency": "pass", "missing_files": [], "warnings": 3}
# PDK adapters
ctx_asap7 = tech.load("asap7", format="asap7")
ctx_nangate = tech.load("nangate45", format="nangate")
// MCP: Agent queries process capabilities
{
"method": "tools/call",
"params": {
"name": "tech.query",
"arguments": {
"pdk": "sky130",
"query_type": "layer_properties",
"layer": "m3",
"fields": ["pitch", "width", "min_spacing", "resistance_per_sq"]
}
}
}
// Returns unified semantics
{
"layer": "m3",
"canonical_name": "m3",
"properties": {
"pitch": 0.30, "width": 0.15,
"min_spacing": 0.17, "resistance_per_sq": 0.125
}
}
# Tcl: technology query
ieda::tech load -pdk sky130 -format open_pdk
ieda::tech query -type layers
# m1 (pitch:0.30 width:0.15 purpose:drawing)
# m2 (pitch:0.30 width:0.15 purpose:drawing)
# ...
ieda::tech query -type vias -from m2 -to m3
# via2 via2_stack
ieda::tech qualify
# qualification: PASS (consistency:ok, warnings:1)
Input / output contract
| Direction | Field | Type | Description |
|---|---|---|---|
| Input | pdk | str | PDK identifier (sky130/gf180/asap7/nangate45) |
| Input | format | str | PDK format (open_pdk/asap7/nangate/custom) |
| Input | corner | str | Timing corner (typical/slow/fast) |
| Input | query | TechQuery | Capability query object |
| Output | context | TechContext | Unified process context |
| Output | query_result | dict | Capability query result |
| Output | qualification_report | dict | Integrity/consistency check report |