vxkyyy commited on
Commit
8ff30b9
·
1 Parent(s): f8d709b

feat: implement contracts and enhance UI descriptions for clarity and accuracy

Browse files
src/agentic/contracts.py ADDED
@@ -0,0 +1,158 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import enum
2
+ import json
3
+ import re
4
+ from dataclasses import asdict, dataclass, field
5
+ from typing import Any, Dict, List, Optional
6
+
7
+
8
+ class FailureClass(str, enum.Enum):
9
+ EDA_TOOL_ERROR = "EDA_TOOL_ERROR"
10
+ LLM_FORMAT_ERROR = "LLM_FORMAT_ERROR"
11
+ LLM_SEMANTIC_ERROR = "LLM_SEMANTIC_ERROR"
12
+ ORCHESTRATOR_ROUTING_ERROR = "ORCHESTRATOR_ROUTING_ERROR"
13
+ RETRY_BUDGET_ERROR = "RETRY_BUDGET_ERROR"
14
+ INFRASTRUCTURE_ERROR = "INFRASTRUCTURE_ERROR"
15
+ UNKNOWN = "UNKNOWN"
16
+
17
+
18
+ class StageStatus(str, enum.Enum):
19
+ PASS = "PASS"
20
+ FAIL = "FAIL"
21
+ RETRY = "RETRY"
22
+ SKIP = "SKIP"
23
+ ERROR = "ERROR"
24
+
25
+
26
+ @dataclass
27
+ class ArtifactRef:
28
+ key: str
29
+ producer: str
30
+ consumer: str = ""
31
+ required: bool = False
32
+ blocking: bool = False
33
+ value: Any = None
34
+
35
+ def to_dict(self) -> Dict[str, Any]:
36
+ return asdict(self)
37
+
38
+
39
+ @dataclass
40
+ class FailureRecord:
41
+ failure_class: FailureClass
42
+ producer: str
43
+ message: str
44
+ diagnostics: List[str] = field(default_factory=list)
45
+ raw_excerpt: str = ""
46
+
47
+ def to_dict(self) -> Dict[str, Any]:
48
+ data = asdict(self)
49
+ data["failure_class"] = self.failure_class.value
50
+ return data
51
+
52
+
53
+ @dataclass
54
+ class AgentResult:
55
+ agent: str
56
+ ok: bool
57
+ producer: str
58
+ payload: Dict[str, Any] = field(default_factory=dict)
59
+ diagnostics: List[str] = field(default_factory=list)
60
+ failure_class: FailureClass = FailureClass.UNKNOWN
61
+ raw_output: str = ""
62
+
63
+ def to_dict(self) -> Dict[str, Any]:
64
+ data = asdict(self)
65
+ data["failure_class"] = self.failure_class.value
66
+ return data
67
+
68
+
69
+ @dataclass
70
+ class StageResult:
71
+ stage: str
72
+ status: StageStatus
73
+ producer: str
74
+ failure_class: FailureClass = FailureClass.UNKNOWN
75
+ consumable_payload: Dict[str, Any] = field(default_factory=dict)
76
+ diagnostics: List[str] = field(default_factory=list)
77
+ artifacts_written: List[str] = field(default_factory=list)
78
+ next_action: str = ""
79
+
80
+ def to_dict(self) -> Dict[str, Any]:
81
+ data = asdict(self)
82
+ data["status"] = self.status.value
83
+ data["failure_class"] = self.failure_class.value
84
+ return data
85
+
86
+
87
+ _JSON_FENCE_RE = re.compile(r"```(?:json)?\s*(\{.*?\})\s*```", re.DOTALL)
88
+
89
+
90
+ def extract_json_object(raw_text: str) -> Optional[Dict[str, Any]]:
91
+ if not raw_text:
92
+ return None
93
+ match = _JSON_FENCE_RE.search(raw_text)
94
+ candidates = [match.group(1)] if match else []
95
+ stripped = raw_text.strip()
96
+ if stripped.startswith("{") and stripped.endswith("}"):
97
+ candidates.append(stripped)
98
+ first = stripped.find("{")
99
+ last = stripped.rfind("}")
100
+ if first != -1 and last != -1 and last > first:
101
+ candidates.append(stripped[first:last + 1])
102
+ for candidate in candidates:
103
+ try:
104
+ parsed = json.loads(candidate)
105
+ except json.JSONDecodeError:
106
+ continue
107
+ if isinstance(parsed, dict):
108
+ return parsed
109
+ return None
110
+
111
+
112
+ def validate_agent_payload(payload: Dict[str, Any], required_keys: List[str]) -> List[str]:
113
+ errors: List[str] = []
114
+ if not isinstance(payload, dict):
115
+ return ["Payload is not a JSON object."]
116
+ for key in required_keys:
117
+ if key not in payload:
118
+ errors.append(f"Missing required key '{key}'.")
119
+ return errors
120
+
121
+
122
+ def infer_failure_class(
123
+ *,
124
+ producer: str,
125
+ raw_output: str = "",
126
+ diagnostics: Optional[List[str]] = None,
127
+ tool_result: Optional[Dict[str, Any]] = None,
128
+ ) -> FailureClass:
129
+ diag_text = "\n".join(diagnostics or [])
130
+ text = f"{raw_output}\n{diag_text}".lower()
131
+ if tool_result:
132
+ if tool_result.get("infra_failure"):
133
+ return FailureClass.INFRASTRUCTURE_ERROR
134
+ if tool_result.get("tool"):
135
+ return FailureClass.EDA_TOOL_ERROR
136
+ if "not valid json" in text or "missing required key" in text or "prose" in text:
137
+ return FailureClass.LLM_FORMAT_ERROR
138
+ if "timed out" in text or "tool missing" in text or "binary not found" in text:
139
+ return FailureClass.INFRASTRUCTURE_ERROR
140
+ if "cannot find" in text or "%error" in text or "warning" in text or "yosys" in text or "verilator" in text:
141
+ return FailureClass.EDA_TOOL_ERROR
142
+ if "handoff" in text or "missing artifact" in text or "routing" in text:
143
+ return FailureClass.ORCHESTRATOR_ROUTING_ERROR
144
+ if "retry" in text and "budget" in text:
145
+ return FailureClass.RETRY_BUDGET_ERROR
146
+ if producer.startswith("llm") or producer.startswith("agent"):
147
+ return FailureClass.LLM_SEMANTIC_ERROR
148
+ return FailureClass.UNKNOWN
149
+
150
+
151
+ def materially_changed(before: str, after: str) -> bool:
152
+ if before == after:
153
+ return False
154
+ if not before or not after:
155
+ return True
156
+ before_norm = "\n".join(line.rstrip() for line in before.splitlines()).strip()
157
+ after_norm = "\n".join(line.rstrip() for line in after.splitlines()).strip()
158
+ return before_norm != after_norm
web/src/App.tsx CHANGED
@@ -98,7 +98,7 @@ const App = () => {
98
  >
99
  {theme === 'light' ? '🌙 Dark' : '☀️ Light'}
100
  </button>
101
- <div className="app-version">v4.0 · Multi-Agent · 2026</div>
102
  </div>
103
  </aside>
104
 
@@ -116,8 +116,8 @@ const App = () => {
116
  <h2 className="home-hero-title">Autonomous Chip Design Studio</h2>
117
  <p className="home-hero-desc">
118
  From natural language to fabrication-ready GDSII — powered by multi-agent
119
- collaboration, structured spec decomposition, self-healing loops, and
120
- 15-stage autonomous pipeline.
121
  </p>
122
  </div>
123
 
@@ -125,7 +125,7 @@ const App = () => {
125
  <div className="home-kpi">{designs.length}<span>Designs</span></div>
126
  <div className="home-kpi">15<span>Pipeline Stages</span></div>
127
  <div className="home-kpi">5<span>Core Modules</span></div>
128
- <div className="home-kpi">12<span>AI Agents</span></div>
129
  </div>
130
 
131
  <div className="home-section">
@@ -133,33 +133,33 @@ const App = () => {
133
  <div className="home-agent-grid">
134
  <div className="agent-card">
135
  <div className="agent-icon">🏗️</div>
136
- <div className="agent-name">ArchitectModule</div>
137
- <div className="agent-desc">Spec Structured JSON (SID) contract</div>
138
  </div>
139
  <div className="agent-card">
140
  <div className="agent-icon">💻</div>
141
  <div className="agent-name">RTL Designer + Reviewer</div>
142
- <div className="agent-desc">Collaborative 2-agent Crew with tools</div>
143
  </div>
144
  <div className="agent-card">
145
  <div className="agent-icon">🧪</div>
146
  <div className="agent-name">TB Designer</div>
147
- <div className="agent-desc">Verilator-safe flat procedural TBs</div>
148
  </div>
149
  <div className="agent-card">
150
  <div className="agent-icon">🔍</div>
151
  <div className="agent-name">Error Analyst</div>
152
- <div className="agent-desc">Multi-class failure diagnosis (A–E)</div>
153
  </div>
154
  <div className="agent-card">
155
  <div className="agent-icon">🔄</div>
156
- <div className="agent-name">SelfReflectPipeline</div>
157
- <div className="agent-desc">Convergence-aware hardening retry</div>
158
  </div>
159
  <div className="agent-card">
160
  <div className="agent-icon">🧠</div>
161
- <div className="agent-name">DeepDebugger</div>
162
- <div className="agent-desc">FVDebug causal graphs + for-and-against</div>
163
  </div>
164
  </div>
165
  </div>
@@ -168,15 +168,15 @@ const App = () => {
168
  <h3 className="home-section-title">Pipeline Flow</h3>
169
  <div className="pipeline-flow">
170
  {[
171
- { icon: '📐', label: 'SPEC', sub: 'SID Decompose' },
172
- { icon: '💻', label: 'RTL_GEN', sub: '2-Agent Crew' },
173
- { icon: '🔨', label: 'RTL_FIX', sub: 'Lint + Rigor' },
174
- { icon: '🧪', label: 'VERIFY', sub: 'Sim + TB Gate' },
175
- { icon: '📊', label: 'FORMAL', sub: 'SVA + SBY' },
176
- { icon: '📈', label: 'COVERAGE', sub: 'Anti-regress' },
177
  { icon: '🗺️', label: 'FLOOR', sub: 'Floorplan' },
178
- { icon: '🏗️', label: 'HARDEN', sub: 'Self-Reflect' },
179
- { icon: '✅', label: 'SIGNOFF', sub: 'DRC/LVS/STA' },
180
  ].map((s, i) => (
181
  <div className="pipeline-stage" key={s.label}>
182
  <div className="pipeline-stage-icon">{s.icon}</div>
@@ -197,7 +197,7 @@ const App = () => {
197
  </div>
198
  <div className="quickstart-step">
199
  <div className="quickstart-num">2</div>
200
- <div>Watch 12 AI agents build it through 15 stages</div>
201
  </div>
202
  <div className="quickstart-step">
203
  <div className="quickstart-num">3</div>
 
98
  >
99
  {theme === 'light' ? '🌙 Dark' : '☀️ Light'}
100
  </button>
101
+ <div className="app-version">AgentIC · 2026</div>
102
  </div>
103
  </aside>
104
 
 
116
  <h2 className="home-hero-title">Autonomous Chip Design Studio</h2>
117
  <p className="home-hero-desc">
118
  From natural language to fabrication-ready GDSII — powered by multi-agent
119
+ collaboration, intelligent specification analysis, self-healing loops, and
120
+ a fully autonomous pipeline.
121
  </p>
122
  </div>
123
 
 
125
  <div className="home-kpi">{designs.length}<span>Designs</span></div>
126
  <div className="home-kpi">15<span>Pipeline Stages</span></div>
127
  <div className="home-kpi">5<span>Core Modules</span></div>
128
+ <div className="home-kpi">AI<span>Agents</span></div>
129
  </div>
130
 
131
  <div className="home-section">
 
133
  <div className="home-agent-grid">
134
  <div className="agent-card">
135
  <div className="agent-icon">🏗️</div>
136
+ <div className="agent-name">Architect</div>
137
+ <div className="agent-desc">Specification analysis and structured design decomposition</div>
138
  </div>
139
  <div className="agent-card">
140
  <div className="agent-icon">💻</div>
141
  <div className="agent-name">RTL Designer + Reviewer</div>
142
+ <div className="agent-desc">Multi-agent collaborative generation</div>
143
  </div>
144
  <div className="agent-card">
145
  <div className="agent-icon">🧪</div>
146
  <div className="agent-name">TB Designer</div>
147
+ <div className="agent-desc">Automated testbench generation and validation</div>
148
  </div>
149
  <div className="agent-card">
150
  <div className="agent-icon">🔍</div>
151
  <div className="agent-name">Error Analyst</div>
152
+ <div className="agent-desc">Intelligent failure classification</div>
153
  </div>
154
  <div className="agent-card">
155
  <div className="agent-icon">🔄</div>
156
+ <div className="agent-name">Self-Healing Engine</div>
157
+ <div className="agent-desc">Convergence-aware optimization and recovery</div>
158
  </div>
159
  <div className="agent-card">
160
  <div className="agent-icon">🧠</div>
161
+ <div className="agent-name">Deep Debugger</div>
162
+ <div className="agent-desc">Causal failure analysis</div>
163
  </div>
164
  </div>
165
  </div>
 
168
  <h3 className="home-section-title">Pipeline Flow</h3>
169
  <div className="pipeline-flow">
170
  {[
171
+ { icon: '📐', label: 'SPEC', sub: 'Spec Analysis' },
172
+ { icon: '💻', label: 'RTL_GEN', sub: 'RTL Generation' },
173
+ { icon: '🔨', label: 'RTL_FIX', sub: 'Code Quality' },
174
+ { icon: '🧪', label: 'VERIFY', sub: 'Functional Verify' },
175
+ { icon: '📊', label: 'FORMAL', sub: 'Formal Verify' },
176
+ { icon: '📈', label: 'COVERAGE', sub: 'Coverage' },
177
  { icon: '🗺️', label: 'FLOOR', sub: 'Floorplan' },
178
+ { icon: '🏗️', label: 'HARDEN', sub: 'Optimization' },
179
+ { icon: '✅', label: 'SIGNOFF', sub: 'Signoff' },
180
  ].map((s, i) => (
181
  <div className="pipeline-stage" key={s.label}>
182
  <div className="pipeline-stage-icon">{s.icon}</div>
 
197
  </div>
198
  <div className="quickstart-step">
199
  <div className="quickstart-num">2</div>
200
+ <div>Watch AI agents autonomously build and verify your chip</div>
201
  </div>
202
  <div className="quickstart-step">
203
  <div className="quickstart-num">3</div>
web/src/pages/Benchmarking.tsx CHANGED
@@ -28,22 +28,22 @@ export const Benchmarking: React.FC<BenchmarkingProps> = ({ selectedDesign }) =>
28
  </tr>
29
  <tr>
30
  <td>Spec Decomposition</td>
31
- <td style={{ color: 'var(--success)', fontWeight: 600 }}>ArchitectModule SID (automated)</td>
32
  <td>Manual architecture review (weeks)</td>
33
  </tr>
34
  <tr>
35
  <td>Verification Methodology</td>
36
- <td style={{ color: 'var(--success)', fontWeight: 600 }}>Multi-agent diagnosis (5-class)</td>
37
  <td>Manual waveform debugging</td>
38
  </tr>
39
  <tr>
40
  <td>Agent Collaboration</td>
41
- <td style={{ color: 'var(--success)', fontWeight: 600 }}>12 agents with tools + Crews</td>
42
  <td>Siloed engineer teams</td>
43
  </tr>
44
  <tr>
45
  <td>Self-Healing</td>
46
- <td style={{ color: 'var(--success)', fontWeight: 600 }}>SelfReflectPipeline + convergence</td>
47
  <td>Manual iteration</td>
48
  </tr>
49
  <tr>
@@ -71,35 +71,29 @@ export const Benchmarking: React.FC<BenchmarkingProps> = ({ selectedDesign }) =>
71
  <thead>
72
  <tr>
73
  <th>Module</th>
74
- <th>Based On</th>
75
- <th>Stage</th>
76
  </tr>
77
  </thead>
78
  <tbody>
79
  <tr>
80
- <td style={{ fontWeight: 600 }}>ArchitectModule</td>
81
- <td>Spec2RTL-Agent</td>
82
- <td>SPEC → SID JSON decomposition</td>
83
  </tr>
84
  <tr>
85
- <td style={{ fontWeight: 600 }}>ReActAgent</td>
86
- <td>Yao et al., 2023</td>
87
- <td>Thought→Action→Observation loops</td>
88
  </tr>
89
  <tr>
90
- <td style={{ fontWeight: 600 }}>SelfReflectPipeline</td>
91
- <td>Self-Reflection Retry</td>
92
- <td>HARDENING with convergence tracking</td>
93
  </tr>
94
  <tr>
95
- <td style={{ fontWeight: 600 }}>DeepDebuggerModule</td>
96
- <td>FVDebug</td>
97
- <td>Formal — causal graphs + For-and-Against</td>
98
  </tr>
99
  <tr>
100
- <td style={{ fontWeight: 600 }}>WaveformExpertModule</td>
101
- <td>VerilogCoder</td>
102
- <td>VCD + AST back-trace diagnosis</td>
103
  </tr>
104
  </tbody>
105
  </table>
 
28
  </tr>
29
  <tr>
30
  <td>Spec Decomposition</td>
31
+ <td style={{ color: 'var(--success)', fontWeight: 600 }}>Automated specification analysis</td>
32
  <td>Manual architecture review (weeks)</td>
33
  </tr>
34
  <tr>
35
  <td>Verification Methodology</td>
36
+ <td style={{ color: 'var(--success)', fontWeight: 600 }}>Intelligent multi-class diagnosis</td>
37
  <td>Manual waveform debugging</td>
38
  </tr>
39
  <tr>
40
  <td>Agent Collaboration</td>
41
+ <td style={{ color: 'var(--success)', fontWeight: 600 }}>Multi-agent collaborative pipeline</td>
42
  <td>Siloed engineer teams</td>
43
  </tr>
44
  <tr>
45
  <td>Self-Healing</td>
46
+ <td style={{ color: 'var(--success)', fontWeight: 600 }}>Convergence-aware automated recovery</td>
47
  <td>Manual iteration</td>
48
  </tr>
49
  <tr>
 
71
  <thead>
72
  <tr>
73
  <th>Module</th>
74
+ <th>Capability</th>
 
75
  </tr>
76
  </thead>
77
  <tbody>
78
  <tr>
79
+ <td style={{ fontWeight: 600 }}>Architect</td>
80
+ <td>Natural language specification decomposition and structured contract generation</td>
 
81
  </tr>
82
  <tr>
83
+ <td style={{ fontWeight: 600 }}>Reasoning Agent</td>
84
+ <td>Iterative reasoning with observation-driven action planning</td>
 
85
  </tr>
86
  <tr>
87
+ <td style={{ fontWeight: 600 }}>Self-Healing Pipeline</td>
88
+ <td>Convergence-aware retry with metric-driven optimization</td>
 
89
  </tr>
90
  <tr>
91
+ <td style={{ fontWeight: 600 }}>Deep Debugger</td>
92
+ <td>Causal failure analysis with multi-perspective reasoning</td>
 
93
  </tr>
94
  <tr>
95
+ <td style={{ fontWeight: 600 }}>Waveform Analyst</td>
96
+ <td>Signal-level diagnostic analysis and root cause identification</td>
 
97
  </tr>
98
  </tbody>
99
  </table>
web/src/pages/Documentation.tsx CHANGED
@@ -202,12 +202,12 @@ export const Documentation = () => {
202
  <h2>Key Capabilities</h2>
203
  <div className="adoc-cap-grid">
204
  {[
205
- { icon: '🧠', title: 'AI‑Driven RTL Generation', desc: 'SystemVerilog or Verilog‑2005 from natural language via CrewAI agent chains.' },
206
  { icon: '🔁', title: 'Self‑Healing Pipeline', desc: 'Per‑stage guards, fingerprint dedup, bounded retries, and deterministic fallbacks.' },
207
- { icon: '📊', title: 'Formal Verification', desc: 'SVA generation, Yosys SBY integration, CDC heuristic checks.' },
208
  { icon: '📈', title: 'Coverage Closure', desc: 'Profile‑based (balanced / aggressive / relaxed) with anti‑regression backup.' },
209
- { icon: '🏗️', title: 'Physical Implementation', desc: 'OpenLane integration with convergence review and ECO patch loops.' },
210
- { icon: '✅', title: 'Silicon Signoff', desc: 'DRC/LVS, STA, power/IR‑drop, LEC checks before tapeout.' },
211
  ].map((cap) => (
212
  <div className="adoc-cap-item" key={cap.title}>
213
  <span className="adoc-cap-icon">{cap.icon}</span>
@@ -229,18 +229,18 @@ export const Documentation = () => {
229
  <tr>
230
  <th>Gate</th>
231
  <th>Check</th>
232
- <th>Self‑Healing Response</th>
233
  <th>Fallback</th>
234
  </tr>
235
  </thead>
236
  <tbody>
237
  {[
238
- ['Syntax', 'Verilator --lint-only', 'LLM auto-repair loop (bounded)', 'SV→Verilog strategy pivot'],
239
- ['TB Compile', 'Icarus iverilog compile', '3-cycle recovery (repair → regen → fallback)', 'Deterministic template TB'],
240
- ['Simulation', 'Runtime: TEST PASSED', 'Re-generate testbench with error analysis', 'Fingerprint dedup + skip'],
241
- ['Formal', 'SVA via Yosys SBY', 'Bounded SVA regeneration', 'Graceful degrade to coverage'],
242
- ['Coverage', 'Profile-based thresholds', 'LLM TB improvement + anti-regression', 'Restore best TB snapshot'],
243
- ['DRC/LVS', 'OpenLane signoff reports', 'ECO patch (gate → RTL fallback)', 'Fail-closed or pivot'],
244
  ].map(([gate, check, heal, fallback]) => (
245
  <tr key={gate}>
246
  <td><strong>{gate}</strong></td>
@@ -440,20 +440,20 @@ export const Documentation = () => {
440
 
441
  /* ── Stage descriptions ──────────────────────────── */
442
  const stageDescriptions: Record<string, string> = {
443
- INIT: 'Create workspace directory structure, validate dependencies (Verilator, Icarus Verilog, OpenLane), and initialize build artifacts dictionary.',
444
- SPEC: 'LLM generates a detailed architecture specification from the natural-language prompt, including module interfaces, FSM descriptions, and clock/reset requirements.',
445
- RTL_GEN: 'Generate synthesizable RTL (SystemVerilog or Verilog-2005) from the architecture spec using a CrewAI RTL agent. Falls back to golden template library when available.',
446
- RTL_FIX: 'Run Verilator lint, pre-synthesis semantic checks, and iterative LLM-based auto-repair. Supports strategy pivot (SV → Verilog-2005) when fixes stall.',
447
- VERIFICATION: 'Generate self-checking testbenches, compile with Icarus Verilog, run simulation, and check for TEST PASSED. Includes TB static contract checking and fingerprint deduplication.',
448
- FORMAL_VERIFY: 'Generate SVA properties, convert to Yosys SBY format, run formal property checking. Includes CDC heuristic analysis.',
449
- COVERAGE_CHECK: 'Run coverage analysis with Verilator or Icarus backend. Compare against profile-based thresholds (line, branch, toggle, functional). Anti-regression guard restores best TB on coverage drop.',
450
  REGRESSION: 'Generate and run multiple directed test scenarios (corner cases, reset stress, rapid fire) to verify robustness beyond basic functional verification.',
451
- SDC_GEN: 'Generate SDC timing constraints from the RTL module interface. Auto-detects clock ports and applies post-processing to fix multi-port get_ports syntax.',
452
- FLOORPLAN: 'LLM-driven floorplan estimation based on gate count, wire routing complexity, and PDK parameters. Produces die area and utilization targets.',
453
- HARDENING: 'Generate OpenLane config.tcl and run the full RTL-to-GDSII flow inside Docker. Collects metrics.csv for convergence analysis.',
454
  CONVERGENCE_REVIEW: 'Analyze PPA metrics (WNS, TNS, area, power, congestion) across iteration history. Determines whether to accept, resize die, or pivot strategy.',
455
  ECO_PATCH: 'Apply engineering change orders — gate-level patch first, RTL micro-patch fallback. Re-enters hardening loop after successful application.',
456
- SIGNOFF: 'Multi-dimensional check: DRC/LVS compliance, STA timing closure, power/IR-drop analysis, logic equivalence checking, and coverage re-validation.',
457
  SUCCESS: 'Build completed — all quality gates passed. GDSII, metrics, and documentation artifacts are finalized.',
458
  FAIL: 'Build terminated — one or more quality gates failed after exhausting retry budgets.',
459
  };
 
202
  <h2>Key Capabilities</h2>
203
  <div className="adoc-cap-grid">
204
  {[
205
+ { icon: '🧠', title: 'AI‑Driven RTL Generation', desc: 'SystemVerilog or Verilog‑2005 from natural language via multi-agent collaboration.' },
206
  { icon: '🔁', title: 'Self‑Healing Pipeline', desc: 'Per‑stage guards, fingerprint dedup, bounded retries, and deterministic fallbacks.' },
207
+ { icon: '📊', title: 'Formal Verification', desc: 'Assertion generation, formal property checking, and clock-domain analysis.' },
208
  { icon: '📈', title: 'Coverage Closure', desc: 'Profile‑based (balanced / aggressive / relaxed) with anti‑regression backup.' },
209
+ { icon: '🏗️', title: 'Physical Implementation', desc: 'RTL-to-GDSII flow integration with convergence review and optimization loops.' },
210
+ { icon: '✅', title: 'Silicon Signoff', desc: 'DRC/LVS, STA, power/IR‑drop, equivalence checks before tapeout.' },
211
  ].map((cap) => (
212
  <div className="adoc-cap-item" key={cap.title}>
213
  <span className="adoc-cap-icon">{cap.icon}</span>
 
229
  <tr>
230
  <th>Gate</th>
231
  <th>Check</th>
232
+ <th>Recovery</th>
233
  <th>Fallback</th>
234
  </tr>
235
  </thead>
236
  <tbody>
237
  {[
238
+ ['Syntax', 'Static Analysis', 'Automated Recovery', 'Strategy pivot'],
239
+ ['TB Compile', 'Compilation Check', 'Automated Recovery', 'Deterministic template TB'],
240
+ ['Simulation', 'Simulation Check', 'Automated Recovery', 'Dedup + skip'],
241
+ ['Formal', 'Formal Property Verification', 'Automated Recovery', 'Graceful degrade to coverage'],
242
+ ['Coverage', 'Profile-based thresholds', 'Automated Recovery', 'Restore best snapshot'],
243
+ ['DRC/LVS', 'Physical signoff reports', 'Automated Recovery', 'Fail-closed or pivot'],
244
  ].map(([gate, check, heal, fallback]) => (
245
  <tr key={gate}>
246
  <td><strong>{gate}</strong></td>
 
440
 
441
  /* ── Stage descriptions ──────────────────────────── */
442
  const stageDescriptions: Record<string, string> = {
443
+ INIT: 'Create workspace directory structure, validate dependencies, and initialize build artifacts dictionary.',
444
+ SPEC: 'Generate a detailed architecture specification from the natural-language prompt, including module interfaces, FSM descriptions, and clock/reset requirements.',
445
+ RTL_GEN: 'Generate synthesizable RTL (SystemVerilog or Verilog-2005) from the architecture spec using multi-agent collaboration. Falls back to template library when available.',
446
+ RTL_FIX: 'Run static analysis, pre-synthesis semantic checks, and iterative auto-repair. Supports strategy pivot (SV → Verilog-2005) when fixes stall.',
447
+ VERIFICATION: 'Generate self-checking testbenches, compile, run simulation, and check for passing results. Includes static contract checking and fingerprint deduplication.',
448
+ FORMAL_VERIFY: 'Generate formal assertions, run formal property checking. Includes clock-domain analysis.',
449
+ COVERAGE_CHECK: 'Run coverage analysis against profile-based thresholds (line, branch, toggle, functional). Anti-regression guard restores best testbench on coverage drop.',
450
  REGRESSION: 'Generate and run multiple directed test scenarios (corner cases, reset stress, rapid fire) to verify robustness beyond basic functional verification.',
451
+ SDC_GEN: 'Generate SDC timing constraints from the RTL module interface. Auto-detects clock ports and applies constraint post-processing.',
452
+ FLOORPLAN: 'Floorplan estimation based on gate count, wire routing complexity, and PDK parameters. Produces die area and utilization targets.',
453
+ HARDENING: 'Generate physical design configuration and run the full RTL-to-GDSII flow. Collects metrics for convergence analysis.',
454
  CONVERGENCE_REVIEW: 'Analyze PPA metrics (WNS, TNS, area, power, congestion) across iteration history. Determines whether to accept, resize die, or pivot strategy.',
455
  ECO_PATCH: 'Apply engineering change orders — gate-level patch first, RTL micro-patch fallback. Re-enters hardening loop after successful application.',
456
+ SIGNOFF: 'Multi-dimensional check: DRC/LVS compliance, STA timing closure, power/IR-drop analysis, equivalence checking, and coverage re-validation.',
457
  SUCCESS: 'Build completed — all quality gates passed. GDSII, metrics, and documentation artifacts are finalized.',
458
  FAIL: 'Build terminated — one or more quality gates failed after exhausting retry budgets.',
459
  };