feat: implement contracts and enhance UI descriptions for clarity and accuracy
Browse files- src/agentic/contracts.py +158 -0
- web/src/App.tsx +22 -22
- web/src/pages/Benchmarking.tsx +15 -21
- web/src/pages/Documentation.tsx +22 -22
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">
|
| 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,
|
| 120 |
-
|
| 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">
|
| 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">
|
| 137 |
-
<div className="agent-desc">
|
| 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">
|
| 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">
|
| 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">
|
| 153 |
</div>
|
| 154 |
<div className="agent-card">
|
| 155 |
<div className="agent-icon">🔄</div>
|
| 156 |
-
<div className="agent-name">
|
| 157 |
-
<div className="agent-desc">Convergence-aware
|
| 158 |
</div>
|
| 159 |
<div className="agent-card">
|
| 160 |
<div className="agent-icon">🧠</div>
|
| 161 |
-
<div className="agent-name">
|
| 162 |
-
<div className="agent-desc">
|
| 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: '
|
| 172 |
-
{ icon: '💻', label: 'RTL_GEN', sub: '
|
| 173 |
-
{ icon: '🔨', label: 'RTL_FIX', sub: '
|
| 174 |
-
{ icon: '🧪', label: 'VERIFY', sub: '
|
| 175 |
-
{ icon: '📊', label: 'FORMAL', sub: '
|
| 176 |
-
{ icon: '📈', label: 'COVERAGE', sub: '
|
| 177 |
{ icon: '🗺️', label: 'FLOOR', sub: 'Floorplan' },
|
| 178 |
-
{ icon: '🏗️', label: 'HARDEN', sub: '
|
| 179 |
-
{ icon: '✅', label: 'SIGNOFF', sub: '
|
| 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
|
| 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 }}>
|
| 32 |
<td>Manual architecture review (weeks)</td>
|
| 33 |
</tr>
|
| 34 |
<tr>
|
| 35 |
<td>Verification Methodology</td>
|
| 36 |
-
<td style={{ color: 'var(--success)', fontWeight: 600 }}>
|
| 37 |
<td>Manual waveform debugging</td>
|
| 38 |
</tr>
|
| 39 |
<tr>
|
| 40 |
<td>Agent Collaboration</td>
|
| 41 |
-
<td style={{ color: 'var(--success)', fontWeight: 600 }}>
|
| 42 |
<td>Siloed engineer teams</td>
|
| 43 |
</tr>
|
| 44 |
<tr>
|
| 45 |
<td>Self-Healing</td>
|
| 46 |
-
<td style={{ color: 'var(--success)', fontWeight: 600 }}>
|
| 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>
|
| 75 |
-
<th>Stage</th>
|
| 76 |
</tr>
|
| 77 |
</thead>
|
| 78 |
<tbody>
|
| 79 |
<tr>
|
| 80 |
-
<td style={{ fontWeight: 600 }}>
|
| 81 |
-
<td>
|
| 82 |
-
<td>SPEC → SID JSON decomposition</td>
|
| 83 |
</tr>
|
| 84 |
<tr>
|
| 85 |
-
<td style={{ fontWeight: 600 }}>
|
| 86 |
-
<td>
|
| 87 |
-
<td>Thought→Action→Observation loops</td>
|
| 88 |
</tr>
|
| 89 |
<tr>
|
| 90 |
-
<td style={{ fontWeight: 600 }}>
|
| 91 |
-
<td>
|
| 92 |
-
<td>HARDENING with convergence tracking</td>
|
| 93 |
</tr>
|
| 94 |
<tr>
|
| 95 |
-
<td style={{ fontWeight: 600 }}>
|
| 96 |
-
<td>
|
| 97 |
-
<td>Formal — causal graphs + For-and-Against</td>
|
| 98 |
</tr>
|
| 99 |
<tr>
|
| 100 |
-
<td style={{ fontWeight: 600 }}>
|
| 101 |
-
<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
|
| 206 |
{ icon: '🔁', title: 'Self‑Healing Pipeline', desc: 'Per‑stage guards, fingerprint dedup, bounded retries, and deterministic fallbacks.' },
|
| 207 |
-
{ icon: '📊', title: 'Formal Verification', desc: '
|
| 208 |
{ icon: '📈', title: 'Coverage Closure', desc: 'Profile‑based (balanced / aggressive / relaxed) with anti‑regression backup.' },
|
| 209 |
-
{ icon: '🏗️', title: 'Physical Implementation', desc: '
|
| 210 |
-
{ icon: '✅', title: 'Silicon Signoff', desc: 'DRC/LVS, STA, power/IR‑drop,
|
| 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>
|
| 233 |
<th>Fallback</th>
|
| 234 |
</tr>
|
| 235 |
</thead>
|
| 236 |
<tbody>
|
| 237 |
{[
|
| 238 |
-
['Syntax', '
|
| 239 |
-
['TB Compile', '
|
| 240 |
-
['Simulation', '
|
| 241 |
-
['Formal', '
|
| 242 |
-
['Coverage', 'Profile-based thresholds', '
|
| 243 |
-
['DRC/LVS', '
|
| 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
|
| 444 |
-
SPEC: '
|
| 445 |
-
RTL_GEN: 'Generate synthesizable RTL (SystemVerilog or Verilog-2005) from the architecture spec using
|
| 446 |
-
RTL_FIX: 'Run
|
| 447 |
-
VERIFICATION: 'Generate self-checking testbenches, compile
|
| 448 |
-
FORMAL_VERIFY: 'Generate
|
| 449 |
-
COVERAGE_CHECK: 'Run coverage analysis
|
| 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
|
| 452 |
-
FLOORPLAN: '
|
| 453 |
-
HARDENING: 'Generate
|
| 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,
|
| 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 |
};
|