Core capabilities
1. Validator Registry
Register all validators and capability declarations: each declares domain (connectivity/legality/formal/DRC/LVS/STA), stage (post-synth/post-place/post-route/signoff), coverage (full/partial/sampled), and cost.
2. Bundle Orchestration
Orchestrate verification bundles by risk. Low-risk changes (e.g., hold buffer fix) trigger light bundle (local DRC + STA); high-risk (e.g., re-place) trigger full (DRC+LVS+STA+Formal). Validators in a bundle run in parallel.
3. Certificate
Machine-readable verification certificates (JSON): checks passed, conditions (corner/mode), input design hash, validator version, issue time. Digitally signed; downstream flows (e.g., tape-out gate) accept valid certificates only.
4. Invalidation
Upstream changes auto-invalidate certificates via iDB design_hash: any netlist/layout/timing change yields a new hash; certificates bound to the old hash mark invalidated. Selective re-verify supported.
5. Gate Integration
Links with Evaluation (Gate 12): Gate defines required certificates (e.g., tape-out needs DRC+LVS+STA); Verification Hub reports current status. Missing or invalid certificates block the gate.
Agent calling patterns
from ieda.agent import VerificationHub, VerifyBundle
hub = VerificationHub()
# Register validator
hub.register(
name="iSTA-verify",
domain="STA",
stage="post-route",
coverage="full",
cost_estimate="medium"
)
# Orchestrate verification bundle
bundle = hub.bundle(
stage="post-route",
risk="high",
design_hash=current_idb.design_hash
)
# bundle.validators: [DRC, LVS, STA, Formal]
# Run verification
result = hub.verify(bundle)
# result.certificate: {
# "id": "cert-post-route-v3",
# "design_hash": "abc123",
# "checks_passed": ["DRC", "LVS", "STA", "Formal"],
# "conditions": {"corner": "wc_cmax"},
# "signed_by": "verification-hub/v2.1"
# }
# Auto-invalidate on upstream change
hub.invalidate(design_hash="abc123") # mark cert expired
// MCP: Agent requests verification orchestration & certificate
{
"method": "tools/call",
"params": {
"name": "verify.bundle",
"arguments": {
"stage": "post-route",
"risk": "high",
"design_hash": "abc123def456",
"required_checks": ["DRC", "LVS", "STA"],
"callback": "agent.on_verify_complete"
}
}
}
// Return certificate
{
"certificate": {
"id": "cert-post-route-v3",
"status": "signed",
"checks": {"DRC": "pass", "LVS": "pass", "STA": "pass"},
"design_hash": "abc123def456"
}
}
# Tcl: verification orchestration
ieda::verify register -name iDRC -domain DRC -stage signoff
ieda::verify bundle -stage post-route -risk high
# → bundle: DRC + LVS + STA + Formal
ieda::verify run -bundle post-route
# cert-post-route-v3: DRC(pass) LVS(pass) STA(pass) Formal(pass) → SIGNED
ieda::verify status
# post-route: cert-v3 (valid)
# post-place: cert-v2 (invalidated — layout changed)
Input / output contract
| Direction | Field | Type | Description |
|---|---|---|---|
| Input | stage | str | Flow stage (post-synth/post-place/post-route/signoff) |
| Input | risk | str | Risk level determining bundle scope (low/medium/high) |
| Input | design_hash | str | Current design state hash |
| Input | required_checks | list[str] | Required checks (optional, override bundle defaults) |
| Output | bundle | VerifyBundle | Orchestrated validator list and execution order |
| Output | certificate | Certificate | Signed verification certificate (JSON + digital signature) |
| Output | status_map | dict | Latest certificate status per stage |