fix: ensure litellm is installed for LLM backend, .env never overrides HuggingFace secrets, add /ping endpoint
Browse files- benchmark/README.md +66 -0
- benchmark/results/benchmark_2026-03-06.json +889 -0
- benchmark/results/benchmark_2026-03-06.md +53 -0
- benchmark/results/interim_2026-03-06.json +884 -0
- benchmark/run_benchmark.py +549 -0
- docs/IP_SAFETY_AND_EXPANSION.md +146 -0
- metircs/apb_timer/apb_timer_industry_benchmark_20260306_020245.json +80 -0
- metircs/apb_timer/apb_timer_industry_benchmark_20260306_020245.md +39 -0
- metircs/apb_timer/latest.json +80 -0
- metircs/apb_timer/latest.md +39 -0
- metircs/counter8/counter8_industry_benchmark_20260306_013138.json +100 -0
- metircs/counter8/counter8_industry_benchmark_20260306_013138.md +39 -0
- metircs/counter8/latest.json +100 -0
- metircs/counter8/latest.md +39 -0
- metircs/the_dhruva_chip_is/latest.json +90 -0
- metircs/the_dhruva_chip_is/latest.md +39 -0
- metircs/the_dhruva_chip_is/the_dhruva_chip_is_industry_benchmark_20260309_125527.json +90 -0
- metircs/the_dhruva_chip_is/the_dhruva_chip_is_industry_benchmark_20260309_125527.md +39 -0
- requirements.txt +2 -0
- server/api.py +6 -0
- src/__init__.py +0 -0
- src/agentic/config.py +6 -2
- tests/test_reliability_contracts.py +123 -0
- tests/test_vlsi_tools_temp_paths.py +83 -0
benchmark/README.md
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# AgentIC Benchmark Suite
|
| 2 |
+
|
| 3 |
+
Drop this entire `benchmark/` folder into your AgentIC root directory and run.
|
| 4 |
+
|
| 5 |
+
## Quick Start
|
| 6 |
+
|
| 7 |
+
```bash
|
| 8 |
+
# From AgentIC root directory:
|
| 9 |
+
|
| 10 |
+
# Run all 10 designs (full pipeline including OpenLane)
|
| 11 |
+
python3 benchmark/run_benchmark.py
|
| 12 |
+
|
| 13 |
+
# Run RTL-only (faster, skips physical flow — good for first pass)
|
| 14 |
+
python3 benchmark/run_benchmark.py --skip-openlane
|
| 15 |
+
|
| 16 |
+
# Run a single design to test
|
| 17 |
+
python3 benchmark/run_benchmark.py --design uart_tx
|
| 18 |
+
|
| 19 |
+
# Use GF180 instead of Sky130
|
| 20 |
+
python3 benchmark/run_benchmark.py --pdk gf180
|
| 21 |
+
|
| 22 |
+
# Run each design 3 times (for statistical reliability)
|
| 23 |
+
python3 benchmark/run_benchmark.py --attempts 3
|
| 24 |
+
```
|
| 25 |
+
|
| 26 |
+
## What It Produces
|
| 27 |
+
|
| 28 |
+
After running you get two files in `benchmark/results/`:
|
| 29 |
+
|
| 30 |
+
- `benchmark_YYYY-MM-DD.md` — human readable report with tables, analysis, bottleneck identification
|
| 31 |
+
- `benchmark_YYYY-MM-DD.json` — raw data for programmatic use
|
| 32 |
+
|
| 33 |
+
Results are also saved after every single build as `interim_YYYY-MM-DD.json`
|
| 34 |
+
so you never lose data if a build crashes halfway through.
|
| 35 |
+
|
| 36 |
+
## The 10 Test Designs
|
| 37 |
+
|
| 38 |
+
| # | Design | Complexity | Tests |
|
| 39 |
+
|---|--------|-----------|-------|
|
| 40 |
+
| 1 | counter_8bit | Simple | Basic sequential logic |
|
| 41 |
+
| 2 | uart_tx | Simple | Serial communication |
|
| 42 |
+
| 3 | pwm_generator | Simple | Configurable output + registers |
|
| 43 |
+
| 4 | spi_master | Simple | SPI protocol state machine |
|
| 44 |
+
| 5 | fifo_sync | Simple | Memory + pointer logic |
|
| 45 |
+
| 6 | alu_8bit | Medium | Combinational logic, flags |
|
| 46 |
+
| 7 | i2c_master | Medium | Complex protocol, open-drain |
|
| 47 |
+
| 8 | apb_timer | Medium | APB bus interface + interrupt |
|
| 48 |
+
| 9 | vga_controller | Medium | Timing generation, counters |
|
| 49 |
+
| 10 | wishbone_uart | Complex | Full bus interface + FIFOs |
|
| 50 |
+
|
| 51 |
+
## Which Steps Matter in Industry
|
| 52 |
+
|
| 53 |
+
| Stage | Matters For | Skip OK? |
|
| 54 |
+
|-------|------------|----------|
|
| 55 |
+
| RTL_GEN + RTL_FIX | Everything — this is the chip | Never |
|
| 56 |
+
| VERIFICATION | Proving functionality | Never |
|
| 57 |
+
| HARDENING | Physical layout | Never |
|
| 58 |
+
| SIGNOFF | Fab acceptance | Never |
|
| 59 |
+
| FORMAL_VERIFY | Safety-critical designs | Simple designs: yes |
|
| 60 |
+
| COVERAGE_CHECK | Test completeness | If sim passes: yes |
|
| 61 |
+
| REGRESSION | Robustness | Yes |
|
| 62 |
+
| ECO_PATCH | Post-signoff fixes | First attempt: yes |
|
| 63 |
+
| CONVERGENCE | Timing closure | Simple designs: yes |
|
| 64 |
+
|
| 65 |
+
**The 4 things a fab actually cares about:**
|
| 66 |
+
RTL correctness → Functional simulation → Place & Route → DRC/LVS/STA Signoff
|
benchmark/results/benchmark_2026-03-06.json
ADDED
|
@@ -0,0 +1,889 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"meta": {
|
| 3 |
+
"date": "2026-03-06",
|
| 4 |
+
"pdk": "sky130",
|
| 5 |
+
"pass_rate_pct": 20.0
|
| 6 |
+
},
|
| 7 |
+
"results": [
|
| 8 |
+
{
|
| 9 |
+
"design_id": "counter8",
|
| 10 |
+
"complexity": "Simple",
|
| 11 |
+
"attempt": 1,
|
| 12 |
+
"passed": true,
|
| 13 |
+
"timed_out": false,
|
| 14 |
+
"failed_stage": null,
|
| 15 |
+
"failed_stage_name": null,
|
| 16 |
+
"failed_stage_critical": null,
|
| 17 |
+
"failed_reason": null,
|
| 18 |
+
"completed_stages": [
|
| 19 |
+
"INIT",
|
| 20 |
+
"SPEC",
|
| 21 |
+
"RTL_GEN",
|
| 22 |
+
"RTL_FIX",
|
| 23 |
+
"VERIFICATION",
|
| 24 |
+
"FORMAL_VERIFY",
|
| 25 |
+
"REGRESSION"
|
| 26 |
+
],
|
| 27 |
+
"completed_stages_count": 7,
|
| 28 |
+
"artifacts": {
|
| 29 |
+
"LOG": [
|
| 30 |
+
{
|
| 31 |
+
"file": "counter8.log",
|
| 32 |
+
"path": "/home/vickynishad/OpenLane/designs/counter8/counter8.log",
|
| 33 |
+
"size_bytes": 32765,
|
| 34 |
+
"size_human": "32.0 KB"
|
| 35 |
+
}
|
| 36 |
+
],
|
| 37 |
+
"CONFIG": [
|
| 38 |
+
{
|
| 39 |
+
"file": "counter8_tb_compile_gate.json",
|
| 40 |
+
"path": "/home/vickynishad/OpenLane/designs/counter8/src/counter8_tb_compile_gate.json",
|
| 41 |
+
"size_bytes": 2128,
|
| 42 |
+
"size_human": "2.1 KB"
|
| 43 |
+
},
|
| 44 |
+
{
|
| 45 |
+
"file": "counter8_tb_static_gate_attempt1.json",
|
| 46 |
+
"path": "/home/vickynishad/OpenLane/designs/counter8/src/counter8_tb_static_gate_attempt1.json",
|
| 47 |
+
"size_bytes": 258,
|
| 48 |
+
"size_human": "258 B"
|
| 49 |
+
},
|
| 50 |
+
{
|
| 51 |
+
"file": "counter8_formal_preflight.json",
|
| 52 |
+
"path": "/home/vickynishad/OpenLane/designs/counter8/src/counter8_formal_preflight.json",
|
| 53 |
+
"size_bytes": 89,
|
| 54 |
+
"size_human": "89 B"
|
| 55 |
+
},
|
| 56 |
+
{
|
| 57 |
+
"file": "counter8_tb_repair_action_attempt1.json",
|
| 58 |
+
"path": "/home/vickynishad/OpenLane/designs/counter8/src/counter8_tb_repair_action_attempt1.json",
|
| 59 |
+
"size_bytes": 114,
|
| 60 |
+
"size_human": "114 B"
|
| 61 |
+
},
|
| 62 |
+
{
|
| 63 |
+
"file": "counter8_tb_static_gate_attempt2.json",
|
| 64 |
+
"path": "/home/vickynishad/OpenLane/designs/counter8/src/counter8_tb_static_gate_attempt2.json",
|
| 65 |
+
"size_bytes": 258,
|
| 66 |
+
"size_human": "258 B"
|
| 67 |
+
},
|
| 68 |
+
{
|
| 69 |
+
"file": "counter8_tb_compile_gate_attempt2.json",
|
| 70 |
+
"path": "/home/vickynishad/OpenLane/designs/counter8/src/counter8_tb_compile_gate_attempt2.json",
|
| 71 |
+
"size_bytes": 2128,
|
| 72 |
+
"size_human": "2.1 KB"
|
| 73 |
+
},
|
| 74 |
+
{
|
| 75 |
+
"file": "counter8_tb_repair_action.json",
|
| 76 |
+
"path": "/home/vickynishad/OpenLane/designs/counter8/src/counter8_tb_repair_action.json",
|
| 77 |
+
"size_bytes": 114,
|
| 78 |
+
"size_human": "114 B"
|
| 79 |
+
},
|
| 80 |
+
{
|
| 81 |
+
"file": "counter8_tb_compile_gate_attempt1.json",
|
| 82 |
+
"path": "/home/vickynishad/OpenLane/designs/counter8/src/counter8_tb_compile_gate_attempt1.json",
|
| 83 |
+
"size_bytes": 2466,
|
| 84 |
+
"size_human": "2.4 KB"
|
| 85 |
+
},
|
| 86 |
+
{
|
| 87 |
+
"file": "counter8_tb_static_gate.json",
|
| 88 |
+
"path": "/home/vickynishad/OpenLane/designs/counter8/src/counter8_tb_static_gate.json",
|
| 89 |
+
"size_bytes": 258,
|
| 90 |
+
"size_human": "258 B"
|
| 91 |
+
}
|
| 92 |
+
],
|
| 93 |
+
"RTL": [
|
| 94 |
+
{
|
| 95 |
+
"file": "counter8.v",
|
| 96 |
+
"path": "/home/vickynishad/OpenLane/designs/counter8/src/counter8.v",
|
| 97 |
+
"size_bytes": 1433,
|
| 98 |
+
"size_human": "1.4 KB"
|
| 99 |
+
},
|
| 100 |
+
{
|
| 101 |
+
"file": "counter8_sby_check.sv",
|
| 102 |
+
"path": "/home/vickynishad/OpenLane/designs/counter8/src/counter8_sby_check.sv",
|
| 103 |
+
"size_bytes": 1160,
|
| 104 |
+
"size_human": "1.1 KB"
|
| 105 |
+
},
|
| 106 |
+
{
|
| 107 |
+
"file": "counter8_sva.sv",
|
| 108 |
+
"path": "/home/vickynishad/OpenLane/designs/counter8/src/counter8_sva.sv",
|
| 109 |
+
"size_bytes": 1046,
|
| 110 |
+
"size_human": "1.0 KB"
|
| 111 |
+
}
|
| 112 |
+
],
|
| 113 |
+
"TESTBENCH": [
|
| 114 |
+
{
|
| 115 |
+
"file": "counter8_tb.v",
|
| 116 |
+
"path": "/home/vickynishad/OpenLane/designs/counter8/src/counter8_tb.v",
|
| 117 |
+
"size_bytes": 2478,
|
| 118 |
+
"size_human": "2.4 KB"
|
| 119 |
+
}
|
| 120 |
+
]
|
| 121 |
+
},
|
| 122 |
+
"artifact_types": [
|
| 123 |
+
"LOG",
|
| 124 |
+
"CONFIG",
|
| 125 |
+
"RTL",
|
| 126 |
+
"TESTBENCH"
|
| 127 |
+
],
|
| 128 |
+
"rtl_generated": true,
|
| 129 |
+
"testbench_generated": true,
|
| 130 |
+
"gds_generated": false,
|
| 131 |
+
"duration_minutes": 5.0,
|
| 132 |
+
"timestamp": "2026-03-06T01:26:38.860725",
|
| 133 |
+
"pdk": "sky130"
|
| 134 |
+
},
|
| 135 |
+
{
|
| 136 |
+
"design_id": "uart_tx",
|
| 137 |
+
"complexity": "Simple",
|
| 138 |
+
"attempt": 1,
|
| 139 |
+
"passed": false,
|
| 140 |
+
"timed_out": false,
|
| 141 |
+
"failed_stage": "RTL_FIX",
|
| 142 |
+
"failed_stage_name": "RTL Lint & Syntax Fix",
|
| 143 |
+
"failed_stage_critical": true,
|
| 144 |
+
"failed_reason": "[RTL_FIX] Semantic rigor gate failed. Attempting mechanical width auto-fix.",
|
| 145 |
+
"completed_stages": [
|
| 146 |
+
"INIT",
|
| 147 |
+
"SPEC",
|
| 148 |
+
"RTL_GEN",
|
| 149 |
+
"RTL_FIX"
|
| 150 |
+
],
|
| 151 |
+
"completed_stages_count": 4,
|
| 152 |
+
"artifacts": {
|
| 153 |
+
"LOG": [
|
| 154 |
+
{
|
| 155 |
+
"file": "uart_tx.log",
|
| 156 |
+
"path": "/home/vickynishad/OpenLane/designs/uart_tx/uart_tx.log",
|
| 157 |
+
"size_bytes": 72014,
|
| 158 |
+
"size_human": "70.3 KB"
|
| 159 |
+
}
|
| 160 |
+
],
|
| 161 |
+
"RTL": [
|
| 162 |
+
{
|
| 163 |
+
"file": "uart_tx.v",
|
| 164 |
+
"path": "/home/vickynishad/OpenLane/designs/uart_tx/src/uart_tx.v",
|
| 165 |
+
"size_bytes": 2947,
|
| 166 |
+
"size_human": "2.9 KB"
|
| 167 |
+
}
|
| 168 |
+
]
|
| 169 |
+
},
|
| 170 |
+
"artifact_types": [
|
| 171 |
+
"LOG",
|
| 172 |
+
"RTL"
|
| 173 |
+
],
|
| 174 |
+
"rtl_generated": true,
|
| 175 |
+
"testbench_generated": false,
|
| 176 |
+
"gds_generated": false,
|
| 177 |
+
"duration_minutes": 7.9,
|
| 178 |
+
"timestamp": "2026-03-06T01:31:40.190788",
|
| 179 |
+
"pdk": "sky130"
|
| 180 |
+
},
|
| 181 |
+
{
|
| 182 |
+
"design_id": "pwm_gen",
|
| 183 |
+
"complexity": "Simple",
|
| 184 |
+
"attempt": 1,
|
| 185 |
+
"passed": false,
|
| 186 |
+
"timed_out": false,
|
| 187 |
+
"failed_stage": "VERIFICATION",
|
| 188 |
+
"failed_stage_name": "Functional Simulation",
|
| 189 |
+
"failed_stage_critical": true,
|
| 190 |
+
"failed_reason": "[VERIFICATION] TB gate failed; applied deterministic auto-repair.",
|
| 191 |
+
"completed_stages": [
|
| 192 |
+
"INIT",
|
| 193 |
+
"SPEC",
|
| 194 |
+
"RTL_GEN",
|
| 195 |
+
"RTL_FIX"
|
| 196 |
+
],
|
| 197 |
+
"completed_stages_count": 4,
|
| 198 |
+
"artifacts": {
|
| 199 |
+
"LOG": [
|
| 200 |
+
{
|
| 201 |
+
"file": "pwm_gen.log",
|
| 202 |
+
"path": "/home/vickynishad/OpenLane/designs/pwm_gen/pwm_gen.log",
|
| 203 |
+
"size_bytes": 20937,
|
| 204 |
+
"size_human": "20.4 KB"
|
| 205 |
+
}
|
| 206 |
+
],
|
| 207 |
+
"CONFIG": [
|
| 208 |
+
{
|
| 209 |
+
"file": "pwm_gen_tb_static_gate_attempt2.json",
|
| 210 |
+
"path": "/home/vickynishad/OpenLane/designs/pwm_gen/src/pwm_gen_tb_static_gate_attempt2.json",
|
| 211 |
+
"size_bytes": 258,
|
| 212 |
+
"size_human": "258 B"
|
| 213 |
+
},
|
| 214 |
+
{
|
| 215 |
+
"file": "pwm_gen_tb_compile_gate_attempt2.json",
|
| 216 |
+
"path": "/home/vickynishad/OpenLane/designs/pwm_gen/src/pwm_gen_tb_compile_gate_attempt2.json",
|
| 217 |
+
"size_bytes": 3491,
|
| 218 |
+
"size_human": "3.4 KB"
|
| 219 |
+
},
|
| 220 |
+
{
|
| 221 |
+
"file": "pwm_gen_tb_static_gate.json",
|
| 222 |
+
"path": "/home/vickynishad/OpenLane/designs/pwm_gen/src/pwm_gen_tb_static_gate.json",
|
| 223 |
+
"size_bytes": 258,
|
| 224 |
+
"size_human": "258 B"
|
| 225 |
+
},
|
| 226 |
+
{
|
| 227 |
+
"file": "pwm_gen_tb_repair_action.json",
|
| 228 |
+
"path": "/home/vickynishad/OpenLane/designs/pwm_gen/src/pwm_gen_tb_repair_action.json",
|
| 229 |
+
"size_bytes": 114,
|
| 230 |
+
"size_human": "114 B"
|
| 231 |
+
},
|
| 232 |
+
{
|
| 233 |
+
"file": "pwm_gen_tb_compile_gate_attempt1.json",
|
| 234 |
+
"path": "/home/vickynishad/OpenLane/designs/pwm_gen/src/pwm_gen_tb_compile_gate_attempt1.json",
|
| 235 |
+
"size_bytes": 3011,
|
| 236 |
+
"size_human": "2.9 KB"
|
| 237 |
+
},
|
| 238 |
+
{
|
| 239 |
+
"file": "pwm_gen_tb_compile_gate_attempt3.json",
|
| 240 |
+
"path": "/home/vickynishad/OpenLane/designs/pwm_gen/src/pwm_gen_tb_compile_gate_attempt3.json",
|
| 241 |
+
"size_bytes": 3011,
|
| 242 |
+
"size_human": "2.9 KB"
|
| 243 |
+
},
|
| 244 |
+
{
|
| 245 |
+
"file": "pwm_gen_tb_static_gate_attempt3.json",
|
| 246 |
+
"path": "/home/vickynishad/OpenLane/designs/pwm_gen/src/pwm_gen_tb_static_gate_attempt3.json",
|
| 247 |
+
"size_bytes": 258,
|
| 248 |
+
"size_human": "258 B"
|
| 249 |
+
},
|
| 250 |
+
{
|
| 251 |
+
"file": "pwm_gen_tb_compile_gate.json",
|
| 252 |
+
"path": "/home/vickynishad/OpenLane/designs/pwm_gen/src/pwm_gen_tb_compile_gate.json",
|
| 253 |
+
"size_bytes": 3011,
|
| 254 |
+
"size_human": "2.9 KB"
|
| 255 |
+
},
|
| 256 |
+
{
|
| 257 |
+
"file": "pwm_gen_tb_static_gate_attempt1.json",
|
| 258 |
+
"path": "/home/vickynishad/OpenLane/designs/pwm_gen/src/pwm_gen_tb_static_gate_attempt1.json",
|
| 259 |
+
"size_bytes": 258,
|
| 260 |
+
"size_human": "258 B"
|
| 261 |
+
},
|
| 262 |
+
{
|
| 263 |
+
"file": "pwm_gen_tb_repair_action_attempt1.json",
|
| 264 |
+
"path": "/home/vickynishad/OpenLane/designs/pwm_gen/src/pwm_gen_tb_repair_action_attempt1.json",
|
| 265 |
+
"size_bytes": 114,
|
| 266 |
+
"size_human": "114 B"
|
| 267 |
+
}
|
| 268 |
+
],
|
| 269 |
+
"TESTBENCH": [
|
| 270 |
+
{
|
| 271 |
+
"file": "pwm_gen_tb.v",
|
| 272 |
+
"path": "/home/vickynishad/OpenLane/designs/pwm_gen/src/pwm_gen_tb.v",
|
| 273 |
+
"size_bytes": 2208,
|
| 274 |
+
"size_human": "2.2 KB"
|
| 275 |
+
}
|
| 276 |
+
],
|
| 277 |
+
"RTL": [
|
| 278 |
+
{
|
| 279 |
+
"file": "pwm_gen.v",
|
| 280 |
+
"path": "/home/vickynishad/OpenLane/designs/pwm_gen/src/pwm_gen.v",
|
| 281 |
+
"size_bytes": 915,
|
| 282 |
+
"size_human": "915 B"
|
| 283 |
+
}
|
| 284 |
+
]
|
| 285 |
+
},
|
| 286 |
+
"artifact_types": [
|
| 287 |
+
"LOG",
|
| 288 |
+
"CONFIG",
|
| 289 |
+
"TESTBENCH",
|
| 290 |
+
"RTL"
|
| 291 |
+
],
|
| 292 |
+
"rtl_generated": true,
|
| 293 |
+
"testbench_generated": true,
|
| 294 |
+
"gds_generated": false,
|
| 295 |
+
"duration_minutes": 0.5,
|
| 296 |
+
"timestamp": "2026-03-06T01:39:32.846798",
|
| 297 |
+
"pdk": "sky130"
|
| 298 |
+
},
|
| 299 |
+
{
|
| 300 |
+
"design_id": "spi_master",
|
| 301 |
+
"complexity": "Simple",
|
| 302 |
+
"attempt": 1,
|
| 303 |
+
"passed": false,
|
| 304 |
+
"timed_out": false,
|
| 305 |
+
"failed_stage": "FORMAL_VERIFY",
|
| 306 |
+
"failed_stage_name": "Formal Verification",
|
| 307 |
+
"failed_stage_critical": false,
|
| 308 |
+
"failed_reason": "[FORMAL_VERIFY] Formal preflight failed: 1 issue(s).",
|
| 309 |
+
"completed_stages": [
|
| 310 |
+
"INIT",
|
| 311 |
+
"SPEC",
|
| 312 |
+
"RTL_GEN",
|
| 313 |
+
"RTL_FIX",
|
| 314 |
+
"VERIFICATION"
|
| 315 |
+
],
|
| 316 |
+
"completed_stages_count": 5,
|
| 317 |
+
"artifacts": {
|
| 318 |
+
"LOG": [
|
| 319 |
+
{
|
| 320 |
+
"file": "spi_master.log",
|
| 321 |
+
"path": "/home/vickynishad/OpenLane/designs/spi_master/spi_master.log",
|
| 322 |
+
"size_bytes": 14056,
|
| 323 |
+
"size_human": "13.7 KB"
|
| 324 |
+
}
|
| 325 |
+
],
|
| 326 |
+
"TESTBENCH": [
|
| 327 |
+
{
|
| 328 |
+
"file": "spi_master_tb.v",
|
| 329 |
+
"path": "/home/vickynishad/OpenLane/designs/spi_master/src/spi_master_tb.v",
|
| 330 |
+
"size_bytes": 1700,
|
| 331 |
+
"size_human": "1.7 KB"
|
| 332 |
+
}
|
| 333 |
+
],
|
| 334 |
+
"CONFIG": [
|
| 335 |
+
{
|
| 336 |
+
"file": "spi_master_tb_compile_gate.json",
|
| 337 |
+
"path": "/home/vickynishad/OpenLane/designs/spi_master/src/spi_master_tb_compile_gate.json",
|
| 338 |
+
"size_bytes": 2180,
|
| 339 |
+
"size_human": "2.1 KB"
|
| 340 |
+
},
|
| 341 |
+
{
|
| 342 |
+
"file": "spi_master_tb_static_gate_attempt1.json",
|
| 343 |
+
"path": "/home/vickynishad/OpenLane/designs/spi_master/src/spi_master_tb_static_gate_attempt1.json",
|
| 344 |
+
"size_bytes": 258,
|
| 345 |
+
"size_human": "258 B"
|
| 346 |
+
},
|
| 347 |
+
{
|
| 348 |
+
"file": "spi_master_tb_compile_gate_attempt1.json",
|
| 349 |
+
"path": "/home/vickynishad/OpenLane/designs/spi_master/src/spi_master_tb_compile_gate_attempt1.json",
|
| 350 |
+
"size_bytes": 2180,
|
| 351 |
+
"size_human": "2.1 KB"
|
| 352 |
+
},
|
| 353 |
+
{
|
| 354 |
+
"file": "spi_master_formal_preflight.json",
|
| 355 |
+
"path": "/home/vickynishad/OpenLane/designs/spi_master/src/spi_master_formal_preflight.json",
|
| 356 |
+
"size_bytes": 292,
|
| 357 |
+
"size_human": "292 B"
|
| 358 |
+
},
|
| 359 |
+
{
|
| 360 |
+
"file": "spi_master_tb_static_gate.json",
|
| 361 |
+
"path": "/home/vickynishad/OpenLane/designs/spi_master/src/spi_master_tb_static_gate.json",
|
| 362 |
+
"size_bytes": 258,
|
| 363 |
+
"size_human": "258 B"
|
| 364 |
+
}
|
| 365 |
+
],
|
| 366 |
+
"RTL": [
|
| 367 |
+
{
|
| 368 |
+
"file": "spi_master.v",
|
| 369 |
+
"path": "/home/vickynishad/OpenLane/designs/spi_master/src/spi_master.v",
|
| 370 |
+
"size_bytes": 4256,
|
| 371 |
+
"size_human": "4.2 KB"
|
| 372 |
+
},
|
| 373 |
+
{
|
| 374 |
+
"file": "spi_master_sva.sv",
|
| 375 |
+
"path": "/home/vickynishad/OpenLane/designs/spi_master/src/spi_master_sva.sv",
|
| 376 |
+
"size_bytes": 1188,
|
| 377 |
+
"size_human": "1.2 KB"
|
| 378 |
+
}
|
| 379 |
+
]
|
| 380 |
+
},
|
| 381 |
+
"artifact_types": [
|
| 382 |
+
"LOG",
|
| 383 |
+
"TESTBENCH",
|
| 384 |
+
"CONFIG",
|
| 385 |
+
"RTL"
|
| 386 |
+
],
|
| 387 |
+
"rtl_generated": true,
|
| 388 |
+
"testbench_generated": true,
|
| 389 |
+
"gds_generated": false,
|
| 390 |
+
"duration_minutes": 1.3,
|
| 391 |
+
"timestamp": "2026-03-06T01:40:00.129996",
|
| 392 |
+
"pdk": "sky130"
|
| 393 |
+
},
|
| 394 |
+
{
|
| 395 |
+
"design_id": "sync_fifo",
|
| 396 |
+
"complexity": "Simple",
|
| 397 |
+
"attempt": 1,
|
| 398 |
+
"passed": false,
|
| 399 |
+
"timed_out": false,
|
| 400 |
+
"failed_stage": "RTL_FIX",
|
| 401 |
+
"failed_stage_name": "RTL Lint & Syntax Fix",
|
| 402 |
+
"failed_stage_critical": true,
|
| 403 |
+
"failed_reason": "[RTL_FIX] Semantic rigor gate failed. Attempting mechanical width auto-fix.",
|
| 404 |
+
"completed_stages": [
|
| 405 |
+
"INIT",
|
| 406 |
+
"SPEC",
|
| 407 |
+
"RTL_GEN",
|
| 408 |
+
"RTL_FIX"
|
| 409 |
+
],
|
| 410 |
+
"completed_stages_count": 4,
|
| 411 |
+
"artifacts": {
|
| 412 |
+
"LOG": [
|
| 413 |
+
{
|
| 414 |
+
"file": "sync_fifo.log",
|
| 415 |
+
"path": "/home/vickynishad/OpenLane/designs/sync_fifo/sync_fifo.log",
|
| 416 |
+
"size_bytes": 53377,
|
| 417 |
+
"size_human": "52.1 KB"
|
| 418 |
+
}
|
| 419 |
+
],
|
| 420 |
+
"RTL": [
|
| 421 |
+
{
|
| 422 |
+
"file": "sync_fifo.v",
|
| 423 |
+
"path": "/home/vickynishad/OpenLane/designs/sync_fifo/src/sync_fifo.v",
|
| 424 |
+
"size_bytes": 1299,
|
| 425 |
+
"size_human": "1.3 KB"
|
| 426 |
+
}
|
| 427 |
+
]
|
| 428 |
+
},
|
| 429 |
+
"artifact_types": [
|
| 430 |
+
"LOG",
|
| 431 |
+
"RTL"
|
| 432 |
+
],
|
| 433 |
+
"rtl_generated": true,
|
| 434 |
+
"testbench_generated": false,
|
| 435 |
+
"gds_generated": false,
|
| 436 |
+
"duration_minutes": 2.4,
|
| 437 |
+
"timestamp": "2026-03-06T01:41:16.885242",
|
| 438 |
+
"pdk": "sky130"
|
| 439 |
+
},
|
| 440 |
+
{
|
| 441 |
+
"design_id": "alu8",
|
| 442 |
+
"complexity": "Medium",
|
| 443 |
+
"attempt": 1,
|
| 444 |
+
"passed": false,
|
| 445 |
+
"timed_out": false,
|
| 446 |
+
"failed_stage": "FORMAL_VERIFY",
|
| 447 |
+
"failed_stage_name": "Formal Verification",
|
| 448 |
+
"failed_stage_critical": false,
|
| 449 |
+
"failed_reason": "[FORMAL_VERIFY] Yosys SVA preflight failed. Regenerating SVA with error context.",
|
| 450 |
+
"completed_stages": [
|
| 451 |
+
"INIT",
|
| 452 |
+
"SPEC",
|
| 453 |
+
"RTL_GEN",
|
| 454 |
+
"RTL_FIX",
|
| 455 |
+
"VERIFICATION",
|
| 456 |
+
"FORMAL_VERIFY"
|
| 457 |
+
],
|
| 458 |
+
"completed_stages_count": 6,
|
| 459 |
+
"artifacts": {
|
| 460 |
+
"LOG": [
|
| 461 |
+
{
|
| 462 |
+
"file": "alu8.log",
|
| 463 |
+
"path": "/home/vickynishad/OpenLane/designs/alu8/alu8.log",
|
| 464 |
+
"size_bytes": 47547,
|
| 465 |
+
"size_human": "46.4 KB"
|
| 466 |
+
}
|
| 467 |
+
],
|
| 468 |
+
"TESTBENCH": [
|
| 469 |
+
{
|
| 470 |
+
"file": "alu8_tb.v",
|
| 471 |
+
"path": "/home/vickynishad/OpenLane/designs/alu8/src/alu8_tb.v",
|
| 472 |
+
"size_bytes": 2674,
|
| 473 |
+
"size_human": "2.6 KB"
|
| 474 |
+
}
|
| 475 |
+
],
|
| 476 |
+
"CONFIG": [
|
| 477 |
+
{
|
| 478 |
+
"file": "alu8_tb_static_gate_attempt1.json",
|
| 479 |
+
"path": "/home/vickynishad/OpenLane/designs/alu8/src/alu8_tb_static_gate_attempt1.json",
|
| 480 |
+
"size_bytes": 258,
|
| 481 |
+
"size_human": "258 B"
|
| 482 |
+
},
|
| 483 |
+
{
|
| 484 |
+
"file": "alu8_tb_compile_gate.json",
|
| 485 |
+
"path": "/home/vickynishad/OpenLane/designs/alu8/src/alu8_tb_compile_gate.json",
|
| 486 |
+
"size_bytes": 13185,
|
| 487 |
+
"size_human": "12.9 KB"
|
| 488 |
+
},
|
| 489 |
+
{
|
| 490 |
+
"file": "alu8_coverage_attempt1.json",
|
| 491 |
+
"path": "/home/vickynishad/OpenLane/designs/alu8/src/alu8_coverage_attempt1.json",
|
| 492 |
+
"size_bytes": 850,
|
| 493 |
+
"size_human": "850 B"
|
| 494 |
+
},
|
| 495 |
+
{
|
| 496 |
+
"file": "alu8_coverage_latest.json",
|
| 497 |
+
"path": "/home/vickynishad/OpenLane/designs/alu8/src/alu8_coverage_latest.json",
|
| 498 |
+
"size_bytes": 851,
|
| 499 |
+
"size_human": "851 B"
|
| 500 |
+
},
|
| 501 |
+
{
|
| 502 |
+
"file": "alu8_coverage_attempt2.json",
|
| 503 |
+
"path": "/home/vickynishad/OpenLane/designs/alu8/src/alu8_coverage_attempt2.json",
|
| 504 |
+
"size_bytes": 850,
|
| 505 |
+
"size_human": "850 B"
|
| 506 |
+
},
|
| 507 |
+
{
|
| 508 |
+
"file": "alu8_tb_compile_gate_attempt1.json",
|
| 509 |
+
"path": "/home/vickynishad/OpenLane/designs/alu8/src/alu8_tb_compile_gate_attempt1.json",
|
| 510 |
+
"size_bytes": 13185,
|
| 511 |
+
"size_human": "12.9 KB"
|
| 512 |
+
},
|
| 513 |
+
{
|
| 514 |
+
"file": "alu8_coverage_attempt3.json",
|
| 515 |
+
"path": "/home/vickynishad/OpenLane/designs/alu8/src/alu8_coverage_attempt3.json",
|
| 516 |
+
"size_bytes": 851,
|
| 517 |
+
"size_human": "851 B"
|
| 518 |
+
},
|
| 519 |
+
{
|
| 520 |
+
"file": "alu8_coverage_attempt4.json",
|
| 521 |
+
"path": "/home/vickynishad/OpenLane/designs/alu8/src/alu8_coverage_attempt4.json",
|
| 522 |
+
"size_bytes": 851,
|
| 523 |
+
"size_human": "851 B"
|
| 524 |
+
},
|
| 525 |
+
{
|
| 526 |
+
"file": "alu8_formal_preflight.json",
|
| 527 |
+
"path": "/home/vickynishad/OpenLane/designs/alu8/src/alu8_formal_preflight.json",
|
| 528 |
+
"size_bytes": 89,
|
| 529 |
+
"size_human": "89 B"
|
| 530 |
+
},
|
| 531 |
+
{
|
| 532 |
+
"file": "alu8_tb_static_gate.json",
|
| 533 |
+
"path": "/home/vickynishad/OpenLane/designs/alu8/src/alu8_tb_static_gate.json",
|
| 534 |
+
"size_bytes": 258,
|
| 535 |
+
"size_human": "258 B"
|
| 536 |
+
}
|
| 537 |
+
],
|
| 538 |
+
"RTL": [
|
| 539 |
+
{
|
| 540 |
+
"file": "alu8_sby_check.sv",
|
| 541 |
+
"path": "/home/vickynishad/OpenLane/designs/alu8/src/alu8_sby_check.sv",
|
| 542 |
+
"size_bytes": 3908,
|
| 543 |
+
"size_human": "3.8 KB"
|
| 544 |
+
},
|
| 545 |
+
{
|
| 546 |
+
"file": "alu8_sva.sv",
|
| 547 |
+
"path": "/home/vickynishad/OpenLane/designs/alu8/src/alu8_sva.sv",
|
| 548 |
+
"size_bytes": 1810,
|
| 549 |
+
"size_human": "1.8 KB"
|
| 550 |
+
},
|
| 551 |
+
{
|
| 552 |
+
"file": "alu8.v",
|
| 553 |
+
"path": "/home/vickynishad/OpenLane/designs/alu8/src/alu8.v",
|
| 554 |
+
"size_bytes": 1517,
|
| 555 |
+
"size_human": "1.5 KB"
|
| 556 |
+
}
|
| 557 |
+
]
|
| 558 |
+
},
|
| 559 |
+
"artifact_types": [
|
| 560 |
+
"LOG",
|
| 561 |
+
"TESTBENCH",
|
| 562 |
+
"CONFIG",
|
| 563 |
+
"RTL"
|
| 564 |
+
],
|
| 565 |
+
"rtl_generated": true,
|
| 566 |
+
"testbench_generated": true,
|
| 567 |
+
"gds_generated": false,
|
| 568 |
+
"duration_minutes": 5.2,
|
| 569 |
+
"timestamp": "2026-03-06T01:43:39.134144",
|
| 570 |
+
"pdk": "sky130"
|
| 571 |
+
},
|
| 572 |
+
{
|
| 573 |
+
"design_id": "i2c_master",
|
| 574 |
+
"complexity": "Medium",
|
| 575 |
+
"attempt": 1,
|
| 576 |
+
"passed": false,
|
| 577 |
+
"timed_out": false,
|
| 578 |
+
"failed_stage": null,
|
| 579 |
+
"failed_stage_name": null,
|
| 580 |
+
"failed_stage_critical": null,
|
| 581 |
+
"failed_reason": "\u2502 address, data, read/write, start trigger. Busy, done, error status. 50 MHz system clock. \u2502",
|
| 582 |
+
"completed_stages": [
|
| 583 |
+
"INIT",
|
| 584 |
+
"SPEC",
|
| 585 |
+
"RTL_GEN",
|
| 586 |
+
"RTL_FIX"
|
| 587 |
+
],
|
| 588 |
+
"completed_stages_count": 4,
|
| 589 |
+
"artifacts": {
|
| 590 |
+
"LOG": [
|
| 591 |
+
{
|
| 592 |
+
"file": "i2c_master.log",
|
| 593 |
+
"path": "/home/vickynishad/OpenLane/designs/i2c_master/i2c_master.log",
|
| 594 |
+
"size_bytes": 24228,
|
| 595 |
+
"size_human": "23.7 KB"
|
| 596 |
+
}
|
| 597 |
+
],
|
| 598 |
+
"CONFIG": [
|
| 599 |
+
{
|
| 600 |
+
"file": "i2c_master_tb_static_gate.json",
|
| 601 |
+
"path": "/home/vickynishad/OpenLane/designs/i2c_master/src/i2c_master_tb_static_gate.json",
|
| 602 |
+
"size_bytes": 258,
|
| 603 |
+
"size_human": "258 B"
|
| 604 |
+
},
|
| 605 |
+
{
|
| 606 |
+
"file": "i2c_master_tb_compile_gate.json",
|
| 607 |
+
"path": "/home/vickynishad/OpenLane/designs/i2c_master/src/i2c_master_tb_compile_gate.json",
|
| 608 |
+
"size_bytes": 5988,
|
| 609 |
+
"size_human": "5.8 KB"
|
| 610 |
+
},
|
| 611 |
+
{
|
| 612 |
+
"file": "i2c_master_tb_compile_gate_attempt1.json",
|
| 613 |
+
"path": "/home/vickynishad/OpenLane/designs/i2c_master/src/i2c_master_tb_compile_gate_attempt1.json",
|
| 614 |
+
"size_bytes": 5988,
|
| 615 |
+
"size_human": "5.8 KB"
|
| 616 |
+
},
|
| 617 |
+
{
|
| 618 |
+
"file": "i2c_master_tb_static_gate_attempt1.json",
|
| 619 |
+
"path": "/home/vickynishad/OpenLane/designs/i2c_master/src/i2c_master_tb_static_gate_attempt1.json",
|
| 620 |
+
"size_bytes": 258,
|
| 621 |
+
"size_human": "258 B"
|
| 622 |
+
}
|
| 623 |
+
],
|
| 624 |
+
"RTL": [
|
| 625 |
+
{
|
| 626 |
+
"file": "i2c_master_controller.v",
|
| 627 |
+
"path": "/home/vickynishad/OpenLane/designs/i2c_master/src/i2c_master_controller.v",
|
| 628 |
+
"size_bytes": 1205,
|
| 629 |
+
"size_human": "1.2 KB"
|
| 630 |
+
},
|
| 631 |
+
{
|
| 632 |
+
"file": "i2c_master.v",
|
| 633 |
+
"path": "/home/vickynishad/OpenLane/designs/i2c_master/src/i2c_master.v",
|
| 634 |
+
"size_bytes": 619,
|
| 635 |
+
"size_human": "619 B"
|
| 636 |
+
}
|
| 637 |
+
],
|
| 638 |
+
"TESTBENCH": [
|
| 639 |
+
{
|
| 640 |
+
"file": "i2c_master_tb.v",
|
| 641 |
+
"path": "/home/vickynishad/OpenLane/designs/i2c_master/src/i2c_master_tb.v",
|
| 642 |
+
"size_bytes": 1543,
|
| 643 |
+
"size_human": "1.5 KB"
|
| 644 |
+
}
|
| 645 |
+
]
|
| 646 |
+
},
|
| 647 |
+
"artifact_types": [
|
| 648 |
+
"LOG",
|
| 649 |
+
"CONFIG",
|
| 650 |
+
"RTL",
|
| 651 |
+
"TESTBENCH"
|
| 652 |
+
],
|
| 653 |
+
"rtl_generated": true,
|
| 654 |
+
"testbench_generated": true,
|
| 655 |
+
"gds_generated": false,
|
| 656 |
+
"duration_minutes": 9.8,
|
| 657 |
+
"timestamp": "2026-03-06T01:48:48.644076",
|
| 658 |
+
"pdk": "sky130"
|
| 659 |
+
},
|
| 660 |
+
{
|
| 661 |
+
"design_id": "apb_timer",
|
| 662 |
+
"complexity": "Medium",
|
| 663 |
+
"attempt": 1,
|
| 664 |
+
"passed": true,
|
| 665 |
+
"timed_out": false,
|
| 666 |
+
"failed_stage": null,
|
| 667 |
+
"failed_stage_name": null,
|
| 668 |
+
"failed_stage_critical": null,
|
| 669 |
+
"failed_reason": null,
|
| 670 |
+
"completed_stages": [
|
| 671 |
+
"INIT",
|
| 672 |
+
"SPEC",
|
| 673 |
+
"RTL_GEN",
|
| 674 |
+
"RTL_FIX",
|
| 675 |
+
"VERIFICATION",
|
| 676 |
+
"FORMAL_VERIFY",
|
| 677 |
+
"REGRESSION"
|
| 678 |
+
],
|
| 679 |
+
"completed_stages_count": 7,
|
| 680 |
+
"artifacts": {
|
| 681 |
+
"LOG": [
|
| 682 |
+
{
|
| 683 |
+
"file": "apb_timer.log",
|
| 684 |
+
"path": "/home/vickynishad/OpenLane/designs/apb_timer/apb_timer.log",
|
| 685 |
+
"size_bytes": 26458,
|
| 686 |
+
"size_human": "25.8 KB"
|
| 687 |
+
}
|
| 688 |
+
],
|
| 689 |
+
"RTL": [
|
| 690 |
+
{
|
| 691 |
+
"file": "apb_timer.v",
|
| 692 |
+
"path": "/home/vickynishad/OpenLane/designs/apb_timer/src/apb_timer.v",
|
| 693 |
+
"size_bytes": 2418,
|
| 694 |
+
"size_human": "2.4 KB"
|
| 695 |
+
},
|
| 696 |
+
{
|
| 697 |
+
"file": "apb_timer_sva.sv",
|
| 698 |
+
"path": "/home/vickynishad/OpenLane/designs/apb_timer/src/apb_timer_sva.sv",
|
| 699 |
+
"size_bytes": 1738,
|
| 700 |
+
"size_human": "1.7 KB"
|
| 701 |
+
},
|
| 702 |
+
{
|
| 703 |
+
"file": "apb_timer_sby_check.sv",
|
| 704 |
+
"path": "/home/vickynishad/OpenLane/designs/apb_timer/src/apb_timer_sby_check.sv",
|
| 705 |
+
"size_bytes": 1743,
|
| 706 |
+
"size_human": "1.7 KB"
|
| 707 |
+
}
|
| 708 |
+
],
|
| 709 |
+
"TESTBENCH": [
|
| 710 |
+
{
|
| 711 |
+
"file": "apb_timer_tb.v",
|
| 712 |
+
"path": "/home/vickynishad/OpenLane/designs/apb_timer/src/apb_timer_tb.v",
|
| 713 |
+
"size_bytes": 1914,
|
| 714 |
+
"size_human": "1.9 KB"
|
| 715 |
+
}
|
| 716 |
+
],
|
| 717 |
+
"CONFIG": [
|
| 718 |
+
{
|
| 719 |
+
"file": "apb_timer_tb_static_gate.json",
|
| 720 |
+
"path": "/home/vickynishad/OpenLane/designs/apb_timer/src/apb_timer_tb_static_gate.json",
|
| 721 |
+
"size_bytes": 258,
|
| 722 |
+
"size_human": "258 B"
|
| 723 |
+
},
|
| 724 |
+
{
|
| 725 |
+
"file": "apb_timer_tb_static_gate_attempt1.json",
|
| 726 |
+
"path": "/home/vickynishad/OpenLane/designs/apb_timer/src/apb_timer_tb_static_gate_attempt1.json",
|
| 727 |
+
"size_bytes": 258,
|
| 728 |
+
"size_human": "258 B"
|
| 729 |
+
},
|
| 730 |
+
{
|
| 731 |
+
"file": "apb_timer_tb_compile_gate.json",
|
| 732 |
+
"path": "/home/vickynishad/OpenLane/designs/apb_timer/src/apb_timer_tb_compile_gate.json",
|
| 733 |
+
"size_bytes": 6322,
|
| 734 |
+
"size_human": "6.2 KB"
|
| 735 |
+
},
|
| 736 |
+
{
|
| 737 |
+
"file": "apb_timer_tb_compile_gate_attempt1.json",
|
| 738 |
+
"path": "/home/vickynishad/OpenLane/designs/apb_timer/src/apb_timer_tb_compile_gate_attempt1.json",
|
| 739 |
+
"size_bytes": 6322,
|
| 740 |
+
"size_human": "6.2 KB"
|
| 741 |
+
},
|
| 742 |
+
{
|
| 743 |
+
"file": "apb_timer_formal_preflight.json",
|
| 744 |
+
"path": "/home/vickynishad/OpenLane/designs/apb_timer/src/apb_timer_formal_preflight.json",
|
| 745 |
+
"size_bytes": 89,
|
| 746 |
+
"size_human": "89 B"
|
| 747 |
+
}
|
| 748 |
+
]
|
| 749 |
+
},
|
| 750 |
+
"artifact_types": [
|
| 751 |
+
"LOG",
|
| 752 |
+
"RTL",
|
| 753 |
+
"TESTBENCH",
|
| 754 |
+
"CONFIG"
|
| 755 |
+
],
|
| 756 |
+
"rtl_generated": true,
|
| 757 |
+
"testbench_generated": true,
|
| 758 |
+
"gds_generated": false,
|
| 759 |
+
"duration_minutes": 4.2,
|
| 760 |
+
"timestamp": "2026-03-06T01:58:37.404877",
|
| 761 |
+
"pdk": "sky130"
|
| 762 |
+
},
|
| 763 |
+
{
|
| 764 |
+
"design_id": "vga_ctrl",
|
| 765 |
+
"complexity": "Medium",
|
| 766 |
+
"attempt": 1,
|
| 767 |
+
"passed": false,
|
| 768 |
+
"timed_out": false,
|
| 769 |
+
"failed_stage": "RTL_FIX",
|
| 770 |
+
"failed_stage_name": "RTL Lint & Syntax Fix",
|
| 771 |
+
"failed_stage_critical": true,
|
| 772 |
+
"failed_reason": "[RTL_FIX] Semantic rigor gate failed. Attempting mechanical width auto-fix.",
|
| 773 |
+
"completed_stages": [
|
| 774 |
+
"INIT",
|
| 775 |
+
"SPEC",
|
| 776 |
+
"RTL_GEN",
|
| 777 |
+
"RTL_FIX"
|
| 778 |
+
],
|
| 779 |
+
"completed_stages_count": 4,
|
| 780 |
+
"artifacts": {
|
| 781 |
+
"LOG": [
|
| 782 |
+
{
|
| 783 |
+
"file": "vga_ctrl.log",
|
| 784 |
+
"path": "/home/vickynishad/OpenLane/designs/vga_ctrl/vga_ctrl.log",
|
| 785 |
+
"size_bytes": 803376,
|
| 786 |
+
"size_human": "784.5 KB"
|
| 787 |
+
}
|
| 788 |
+
],
|
| 789 |
+
"TESTBENCH": [
|
| 790 |
+
{
|
| 791 |
+
"file": "vga_ctrl_tb.v",
|
| 792 |
+
"path": "/home/vickynishad/OpenLane/designs/vga_ctrl/src/vga_ctrl_tb.v",
|
| 793 |
+
"size_bytes": 510,
|
| 794 |
+
"size_human": "510 B"
|
| 795 |
+
}
|
| 796 |
+
],
|
| 797 |
+
"RTL": [
|
| 798 |
+
{
|
| 799 |
+
"file": "vga_ctrl.v",
|
| 800 |
+
"path": "/home/vickynishad/OpenLane/designs/vga_ctrl/src/vga_ctrl.v",
|
| 801 |
+
"size_bytes": 2957,
|
| 802 |
+
"size_human": "2.9 KB"
|
| 803 |
+
}
|
| 804 |
+
]
|
| 805 |
+
},
|
| 806 |
+
"artifact_types": [
|
| 807 |
+
"LOG",
|
| 808 |
+
"TESTBENCH",
|
| 809 |
+
"RTL"
|
| 810 |
+
],
|
| 811 |
+
"rtl_generated": true,
|
| 812 |
+
"testbench_generated": true,
|
| 813 |
+
"gds_generated": false,
|
| 814 |
+
"duration_minutes": 6.7,
|
| 815 |
+
"timestamp": "2026-03-06T02:02:46.652227",
|
| 816 |
+
"pdk": "sky130"
|
| 817 |
+
},
|
| 818 |
+
{
|
| 819 |
+
"design_id": "wb_uart",
|
| 820 |
+
"complexity": "Complex",
|
| 821 |
+
"attempt": 1,
|
| 822 |
+
"passed": false,
|
| 823 |
+
"timed_out": false,
|
| 824 |
+
"failed_stage": "RTL_FIX",
|
| 825 |
+
"failed_stage_name": "RTL Lint & Syntax Fix",
|
| 826 |
+
"failed_stage_critical": true,
|
| 827 |
+
"failed_reason": "[RTL_FIX] Already on fallback strategy. Build Failed.",
|
| 828 |
+
"completed_stages": [
|
| 829 |
+
"INIT",
|
| 830 |
+
"SPEC",
|
| 831 |
+
"RTL_GEN",
|
| 832 |
+
"RTL_FIX"
|
| 833 |
+
],
|
| 834 |
+
"completed_stages_count": 4,
|
| 835 |
+
"artifacts": {
|
| 836 |
+
"LOG": [
|
| 837 |
+
{
|
| 838 |
+
"file": "wb_uart.log",
|
| 839 |
+
"path": "/home/vickynishad/OpenLane/designs/wb_uart/wb_uart.log",
|
| 840 |
+
"size_bytes": 28250,
|
| 841 |
+
"size_human": "27.6 KB"
|
| 842 |
+
}
|
| 843 |
+
],
|
| 844 |
+
"RTL": [
|
| 845 |
+
{
|
| 846 |
+
"file": "wb_uart_tx_fifo.v",
|
| 847 |
+
"path": "/home/vickynishad/OpenLane/designs/wb_uart/src/wb_uart_tx_fifo.v",
|
| 848 |
+
"size_bytes": 1282,
|
| 849 |
+
"size_human": "1.3 KB"
|
| 850 |
+
},
|
| 851 |
+
{
|
| 852 |
+
"file": "wb_uart_wishbone_interface.v",
|
| 853 |
+
"path": "/home/vickynishad/OpenLane/designs/wb_uart/src/wb_uart_wishbone_interface.v",
|
| 854 |
+
"size_bytes": 1041,
|
| 855 |
+
"size_human": "1.0 KB"
|
| 856 |
+
},
|
| 857 |
+
{
|
| 858 |
+
"file": "wb_uart_controller.v",
|
| 859 |
+
"path": "/home/vickynishad/OpenLane/designs/wb_uart/src/wb_uart_controller.v",
|
| 860 |
+
"size_bytes": 1658,
|
| 861 |
+
"size_human": "1.6 KB"
|
| 862 |
+
},
|
| 863 |
+
{
|
| 864 |
+
"file": "wb_uart.v",
|
| 865 |
+
"path": "/home/vickynishad/OpenLane/designs/wb_uart/src/wb_uart.v",
|
| 866 |
+
"size_bytes": 1638,
|
| 867 |
+
"size_human": "1.6 KB"
|
| 868 |
+
},
|
| 869 |
+
{
|
| 870 |
+
"file": "wb_uart_rx_fifo.v",
|
| 871 |
+
"path": "/home/vickynishad/OpenLane/designs/wb_uart/src/wb_uart_rx_fifo.v",
|
| 872 |
+
"size_bytes": 1282,
|
| 873 |
+
"size_human": "1.3 KB"
|
| 874 |
+
}
|
| 875 |
+
]
|
| 876 |
+
},
|
| 877 |
+
"artifact_types": [
|
| 878 |
+
"LOG",
|
| 879 |
+
"RTL"
|
| 880 |
+
],
|
| 881 |
+
"rtl_generated": true,
|
| 882 |
+
"testbench_generated": false,
|
| 883 |
+
"gds_generated": false,
|
| 884 |
+
"duration_minutes": 7.0,
|
| 885 |
+
"timestamp": "2026-03-06T02:09:26.491231",
|
| 886 |
+
"pdk": "sky130"
|
| 887 |
+
}
|
| 888 |
+
]
|
| 889 |
+
}
|
benchmark/results/benchmark_2026-03-06.md
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# AgentIC Benchmark Report
|
| 2 |
+
**Date:** March 06, 2026
|
| 3 |
+
**PDK:** sky130
|
| 4 |
+
**Model:** NVIDIA NIM — Llama 3.3 70B
|
| 5 |
+
**Mode:** RTL only
|
| 6 |
+
|
| 7 |
+
## Summary
|
| 8 |
+
| Metric | Value |
|
| 9 |
+
|--------|-------|
|
| 10 |
+
| Total Designs | 10 |
|
| 11 |
+
| **First-Attempt Pass Rate** | **20% (2/10)** |
|
| 12 |
+
| Average Build Time | 5.0 min |
|
| 13 |
+
| RTL Generated (incl. failures) | 10/10 |
|
| 14 |
+
| GDS Generated | 0/10 |
|
| 15 |
+
|
| 16 |
+
## Results
|
| 17 |
+
| Design | Complexity | Pass? | Failed At | Time | RTL | GDS |
|
| 18 |
+
|--------|-----------|-------|-----------|------|-----|-----|
|
| 19 |
+
| counter8 | Simple | ✓ | — | 5.0 min | ✓ | ✗ |
|
| 20 |
+
| uart_tx | Simple | ✗ | RTL Lint & Syntax Fix | 7.9 min | ✓ | ✗ |
|
| 21 |
+
| pwm_gen | Simple | ✗ | Functional Simulation | 0.5 min | ✓ | ✗ |
|
| 22 |
+
| spi_master | Simple | ✗ | Formal Verification | 1.3 min | ✓ | ✗ |
|
| 23 |
+
| sync_fifo | Simple | ✗ | RTL Lint & Syntax Fix | 2.4 min | ✓ | ✗ |
|
| 24 |
+
| alu8 | Medium | ✗ | Formal Verification | 5.2 min | ✓ | ✗ |
|
| 25 |
+
| i2c_master | Medium | ✗ | — | 9.8 min | ✓ | ✗ |
|
| 26 |
+
| apb_timer | Medium | ✓ | — | 4.2 min | ✓ | ✗ |
|
| 27 |
+
| vga_ctrl | Medium | ✗ | RTL Lint & Syntax Fix | 6.7 min | ✓ | ✗ |
|
| 28 |
+
| wb_uart | Complex | ✗ | RTL Lint & Syntax Fix | 7.0 min | ✓ | ✗ |
|
| 29 |
+
|
| 30 |
+
## Stage Failure Analysis
|
| 31 |
+
| Stage | Industry Name | Failures | Critical? |
|
| 32 |
+
|-------|--------------|----------|-----------|
|
| 33 |
+
| RTL_FIX | RTL Lint & Syntax Fix | 4 | 🔴 Yes |
|
| 34 |
+
| FORMAL_VERIFY | Formal Verification | 2 | 🟡 Optional |
|
| 35 |
+
| VERIFICATION | Functional Simulation | 1 | 🔴 Yes |
|
| 36 |
+
|
| 37 |
+
**Fix `RTL_FIX` first.**
|
| 38 |
+
|
| 39 |
+
## Which Stages Matter in Industry
|
| 40 |
+
| Stage | Skip OK? | Why |
|
| 41 |
+
|-------|----------|-----|
|
| 42 |
+
| RTL_GEN + RTL_FIX | ❌ Never | This is the chip |
|
| 43 |
+
| VERIFICATION | ❌ Never | Proves it works |
|
| 44 |
+
| HARDENING | ❌ Never | Physical layout |
|
| 45 |
+
| SIGNOFF | ❌ Never | Fab requirement |
|
| 46 |
+
| FORMAL_VERIFY | ✅ Simple designs | Optional for non-safety-critical |
|
| 47 |
+
| COVERAGE_CHECK | ✅ If sim passes | Nice to have |
|
| 48 |
+
| REGRESSION | ✅ Yes | Corner cases only |
|
| 49 |
+
| ECO_PATCH | ✅ First attempt | Only if signoff fails |
|
| 50 |
+
| CONVERGENCE | ✅ Simple designs | Embedded in hardening |
|
| 51 |
+
|
| 52 |
+
---
|
| 53 |
+
*Generated by AgentIC Benchmark Runner — March 06, 2026*
|
benchmark/results/interim_2026-03-06.json
ADDED
|
@@ -0,0 +1,884 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"results": [
|
| 3 |
+
{
|
| 4 |
+
"design_id": "counter8",
|
| 5 |
+
"complexity": "Simple",
|
| 6 |
+
"attempt": 1,
|
| 7 |
+
"passed": true,
|
| 8 |
+
"timed_out": false,
|
| 9 |
+
"failed_stage": null,
|
| 10 |
+
"failed_stage_name": null,
|
| 11 |
+
"failed_stage_critical": null,
|
| 12 |
+
"failed_reason": null,
|
| 13 |
+
"completed_stages": [
|
| 14 |
+
"INIT",
|
| 15 |
+
"SPEC",
|
| 16 |
+
"RTL_GEN",
|
| 17 |
+
"RTL_FIX",
|
| 18 |
+
"VERIFICATION",
|
| 19 |
+
"FORMAL_VERIFY",
|
| 20 |
+
"REGRESSION"
|
| 21 |
+
],
|
| 22 |
+
"completed_stages_count": 7,
|
| 23 |
+
"artifacts": {
|
| 24 |
+
"LOG": [
|
| 25 |
+
{
|
| 26 |
+
"file": "counter8.log",
|
| 27 |
+
"path": "/home/vickynishad/OpenLane/designs/counter8/counter8.log",
|
| 28 |
+
"size_bytes": 32765,
|
| 29 |
+
"size_human": "32.0 KB"
|
| 30 |
+
}
|
| 31 |
+
],
|
| 32 |
+
"CONFIG": [
|
| 33 |
+
{
|
| 34 |
+
"file": "counter8_tb_compile_gate.json",
|
| 35 |
+
"path": "/home/vickynishad/OpenLane/designs/counter8/src/counter8_tb_compile_gate.json",
|
| 36 |
+
"size_bytes": 2128,
|
| 37 |
+
"size_human": "2.1 KB"
|
| 38 |
+
},
|
| 39 |
+
{
|
| 40 |
+
"file": "counter8_tb_static_gate_attempt1.json",
|
| 41 |
+
"path": "/home/vickynishad/OpenLane/designs/counter8/src/counter8_tb_static_gate_attempt1.json",
|
| 42 |
+
"size_bytes": 258,
|
| 43 |
+
"size_human": "258 B"
|
| 44 |
+
},
|
| 45 |
+
{
|
| 46 |
+
"file": "counter8_formal_preflight.json",
|
| 47 |
+
"path": "/home/vickynishad/OpenLane/designs/counter8/src/counter8_formal_preflight.json",
|
| 48 |
+
"size_bytes": 89,
|
| 49 |
+
"size_human": "89 B"
|
| 50 |
+
},
|
| 51 |
+
{
|
| 52 |
+
"file": "counter8_tb_repair_action_attempt1.json",
|
| 53 |
+
"path": "/home/vickynishad/OpenLane/designs/counter8/src/counter8_tb_repair_action_attempt1.json",
|
| 54 |
+
"size_bytes": 114,
|
| 55 |
+
"size_human": "114 B"
|
| 56 |
+
},
|
| 57 |
+
{
|
| 58 |
+
"file": "counter8_tb_static_gate_attempt2.json",
|
| 59 |
+
"path": "/home/vickynishad/OpenLane/designs/counter8/src/counter8_tb_static_gate_attempt2.json",
|
| 60 |
+
"size_bytes": 258,
|
| 61 |
+
"size_human": "258 B"
|
| 62 |
+
},
|
| 63 |
+
{
|
| 64 |
+
"file": "counter8_tb_compile_gate_attempt2.json",
|
| 65 |
+
"path": "/home/vickynishad/OpenLane/designs/counter8/src/counter8_tb_compile_gate_attempt2.json",
|
| 66 |
+
"size_bytes": 2128,
|
| 67 |
+
"size_human": "2.1 KB"
|
| 68 |
+
},
|
| 69 |
+
{
|
| 70 |
+
"file": "counter8_tb_repair_action.json",
|
| 71 |
+
"path": "/home/vickynishad/OpenLane/designs/counter8/src/counter8_tb_repair_action.json",
|
| 72 |
+
"size_bytes": 114,
|
| 73 |
+
"size_human": "114 B"
|
| 74 |
+
},
|
| 75 |
+
{
|
| 76 |
+
"file": "counter8_tb_compile_gate_attempt1.json",
|
| 77 |
+
"path": "/home/vickynishad/OpenLane/designs/counter8/src/counter8_tb_compile_gate_attempt1.json",
|
| 78 |
+
"size_bytes": 2466,
|
| 79 |
+
"size_human": "2.4 KB"
|
| 80 |
+
},
|
| 81 |
+
{
|
| 82 |
+
"file": "counter8_tb_static_gate.json",
|
| 83 |
+
"path": "/home/vickynishad/OpenLane/designs/counter8/src/counter8_tb_static_gate.json",
|
| 84 |
+
"size_bytes": 258,
|
| 85 |
+
"size_human": "258 B"
|
| 86 |
+
}
|
| 87 |
+
],
|
| 88 |
+
"RTL": [
|
| 89 |
+
{
|
| 90 |
+
"file": "counter8.v",
|
| 91 |
+
"path": "/home/vickynishad/OpenLane/designs/counter8/src/counter8.v",
|
| 92 |
+
"size_bytes": 1433,
|
| 93 |
+
"size_human": "1.4 KB"
|
| 94 |
+
},
|
| 95 |
+
{
|
| 96 |
+
"file": "counter8_sby_check.sv",
|
| 97 |
+
"path": "/home/vickynishad/OpenLane/designs/counter8/src/counter8_sby_check.sv",
|
| 98 |
+
"size_bytes": 1160,
|
| 99 |
+
"size_human": "1.1 KB"
|
| 100 |
+
},
|
| 101 |
+
{
|
| 102 |
+
"file": "counter8_sva.sv",
|
| 103 |
+
"path": "/home/vickynishad/OpenLane/designs/counter8/src/counter8_sva.sv",
|
| 104 |
+
"size_bytes": 1046,
|
| 105 |
+
"size_human": "1.0 KB"
|
| 106 |
+
}
|
| 107 |
+
],
|
| 108 |
+
"TESTBENCH": [
|
| 109 |
+
{
|
| 110 |
+
"file": "counter8_tb.v",
|
| 111 |
+
"path": "/home/vickynishad/OpenLane/designs/counter8/src/counter8_tb.v",
|
| 112 |
+
"size_bytes": 2478,
|
| 113 |
+
"size_human": "2.4 KB"
|
| 114 |
+
}
|
| 115 |
+
]
|
| 116 |
+
},
|
| 117 |
+
"artifact_types": [
|
| 118 |
+
"LOG",
|
| 119 |
+
"CONFIG",
|
| 120 |
+
"RTL",
|
| 121 |
+
"TESTBENCH"
|
| 122 |
+
],
|
| 123 |
+
"rtl_generated": true,
|
| 124 |
+
"testbench_generated": true,
|
| 125 |
+
"gds_generated": false,
|
| 126 |
+
"duration_minutes": 5.0,
|
| 127 |
+
"timestamp": "2026-03-06T01:26:38.860725",
|
| 128 |
+
"pdk": "sky130"
|
| 129 |
+
},
|
| 130 |
+
{
|
| 131 |
+
"design_id": "uart_tx",
|
| 132 |
+
"complexity": "Simple",
|
| 133 |
+
"attempt": 1,
|
| 134 |
+
"passed": false,
|
| 135 |
+
"timed_out": false,
|
| 136 |
+
"failed_stage": "RTL_FIX",
|
| 137 |
+
"failed_stage_name": "RTL Lint & Syntax Fix",
|
| 138 |
+
"failed_stage_critical": true,
|
| 139 |
+
"failed_reason": "[RTL_FIX] Semantic rigor gate failed. Attempting mechanical width auto-fix.",
|
| 140 |
+
"completed_stages": [
|
| 141 |
+
"INIT",
|
| 142 |
+
"SPEC",
|
| 143 |
+
"RTL_GEN",
|
| 144 |
+
"RTL_FIX"
|
| 145 |
+
],
|
| 146 |
+
"completed_stages_count": 4,
|
| 147 |
+
"artifacts": {
|
| 148 |
+
"LOG": [
|
| 149 |
+
{
|
| 150 |
+
"file": "uart_tx.log",
|
| 151 |
+
"path": "/home/vickynishad/OpenLane/designs/uart_tx/uart_tx.log",
|
| 152 |
+
"size_bytes": 72014,
|
| 153 |
+
"size_human": "70.3 KB"
|
| 154 |
+
}
|
| 155 |
+
],
|
| 156 |
+
"RTL": [
|
| 157 |
+
{
|
| 158 |
+
"file": "uart_tx.v",
|
| 159 |
+
"path": "/home/vickynishad/OpenLane/designs/uart_tx/src/uart_tx.v",
|
| 160 |
+
"size_bytes": 2947,
|
| 161 |
+
"size_human": "2.9 KB"
|
| 162 |
+
}
|
| 163 |
+
]
|
| 164 |
+
},
|
| 165 |
+
"artifact_types": [
|
| 166 |
+
"LOG",
|
| 167 |
+
"RTL"
|
| 168 |
+
],
|
| 169 |
+
"rtl_generated": true,
|
| 170 |
+
"testbench_generated": false,
|
| 171 |
+
"gds_generated": false,
|
| 172 |
+
"duration_minutes": 7.9,
|
| 173 |
+
"timestamp": "2026-03-06T01:31:40.190788",
|
| 174 |
+
"pdk": "sky130"
|
| 175 |
+
},
|
| 176 |
+
{
|
| 177 |
+
"design_id": "pwm_gen",
|
| 178 |
+
"complexity": "Simple",
|
| 179 |
+
"attempt": 1,
|
| 180 |
+
"passed": false,
|
| 181 |
+
"timed_out": false,
|
| 182 |
+
"failed_stage": "VERIFICATION",
|
| 183 |
+
"failed_stage_name": "Functional Simulation",
|
| 184 |
+
"failed_stage_critical": true,
|
| 185 |
+
"failed_reason": "[VERIFICATION] TB gate failed; applied deterministic auto-repair.",
|
| 186 |
+
"completed_stages": [
|
| 187 |
+
"INIT",
|
| 188 |
+
"SPEC",
|
| 189 |
+
"RTL_GEN",
|
| 190 |
+
"RTL_FIX"
|
| 191 |
+
],
|
| 192 |
+
"completed_stages_count": 4,
|
| 193 |
+
"artifacts": {
|
| 194 |
+
"LOG": [
|
| 195 |
+
{
|
| 196 |
+
"file": "pwm_gen.log",
|
| 197 |
+
"path": "/home/vickynishad/OpenLane/designs/pwm_gen/pwm_gen.log",
|
| 198 |
+
"size_bytes": 20937,
|
| 199 |
+
"size_human": "20.4 KB"
|
| 200 |
+
}
|
| 201 |
+
],
|
| 202 |
+
"CONFIG": [
|
| 203 |
+
{
|
| 204 |
+
"file": "pwm_gen_tb_static_gate_attempt2.json",
|
| 205 |
+
"path": "/home/vickynishad/OpenLane/designs/pwm_gen/src/pwm_gen_tb_static_gate_attempt2.json",
|
| 206 |
+
"size_bytes": 258,
|
| 207 |
+
"size_human": "258 B"
|
| 208 |
+
},
|
| 209 |
+
{
|
| 210 |
+
"file": "pwm_gen_tb_compile_gate_attempt2.json",
|
| 211 |
+
"path": "/home/vickynishad/OpenLane/designs/pwm_gen/src/pwm_gen_tb_compile_gate_attempt2.json",
|
| 212 |
+
"size_bytes": 3491,
|
| 213 |
+
"size_human": "3.4 KB"
|
| 214 |
+
},
|
| 215 |
+
{
|
| 216 |
+
"file": "pwm_gen_tb_static_gate.json",
|
| 217 |
+
"path": "/home/vickynishad/OpenLane/designs/pwm_gen/src/pwm_gen_tb_static_gate.json",
|
| 218 |
+
"size_bytes": 258,
|
| 219 |
+
"size_human": "258 B"
|
| 220 |
+
},
|
| 221 |
+
{
|
| 222 |
+
"file": "pwm_gen_tb_repair_action.json",
|
| 223 |
+
"path": "/home/vickynishad/OpenLane/designs/pwm_gen/src/pwm_gen_tb_repair_action.json",
|
| 224 |
+
"size_bytes": 114,
|
| 225 |
+
"size_human": "114 B"
|
| 226 |
+
},
|
| 227 |
+
{
|
| 228 |
+
"file": "pwm_gen_tb_compile_gate_attempt1.json",
|
| 229 |
+
"path": "/home/vickynishad/OpenLane/designs/pwm_gen/src/pwm_gen_tb_compile_gate_attempt1.json",
|
| 230 |
+
"size_bytes": 3011,
|
| 231 |
+
"size_human": "2.9 KB"
|
| 232 |
+
},
|
| 233 |
+
{
|
| 234 |
+
"file": "pwm_gen_tb_compile_gate_attempt3.json",
|
| 235 |
+
"path": "/home/vickynishad/OpenLane/designs/pwm_gen/src/pwm_gen_tb_compile_gate_attempt3.json",
|
| 236 |
+
"size_bytes": 3011,
|
| 237 |
+
"size_human": "2.9 KB"
|
| 238 |
+
},
|
| 239 |
+
{
|
| 240 |
+
"file": "pwm_gen_tb_static_gate_attempt3.json",
|
| 241 |
+
"path": "/home/vickynishad/OpenLane/designs/pwm_gen/src/pwm_gen_tb_static_gate_attempt3.json",
|
| 242 |
+
"size_bytes": 258,
|
| 243 |
+
"size_human": "258 B"
|
| 244 |
+
},
|
| 245 |
+
{
|
| 246 |
+
"file": "pwm_gen_tb_compile_gate.json",
|
| 247 |
+
"path": "/home/vickynishad/OpenLane/designs/pwm_gen/src/pwm_gen_tb_compile_gate.json",
|
| 248 |
+
"size_bytes": 3011,
|
| 249 |
+
"size_human": "2.9 KB"
|
| 250 |
+
},
|
| 251 |
+
{
|
| 252 |
+
"file": "pwm_gen_tb_static_gate_attempt1.json",
|
| 253 |
+
"path": "/home/vickynishad/OpenLane/designs/pwm_gen/src/pwm_gen_tb_static_gate_attempt1.json",
|
| 254 |
+
"size_bytes": 258,
|
| 255 |
+
"size_human": "258 B"
|
| 256 |
+
},
|
| 257 |
+
{
|
| 258 |
+
"file": "pwm_gen_tb_repair_action_attempt1.json",
|
| 259 |
+
"path": "/home/vickynishad/OpenLane/designs/pwm_gen/src/pwm_gen_tb_repair_action_attempt1.json",
|
| 260 |
+
"size_bytes": 114,
|
| 261 |
+
"size_human": "114 B"
|
| 262 |
+
}
|
| 263 |
+
],
|
| 264 |
+
"TESTBENCH": [
|
| 265 |
+
{
|
| 266 |
+
"file": "pwm_gen_tb.v",
|
| 267 |
+
"path": "/home/vickynishad/OpenLane/designs/pwm_gen/src/pwm_gen_tb.v",
|
| 268 |
+
"size_bytes": 2208,
|
| 269 |
+
"size_human": "2.2 KB"
|
| 270 |
+
}
|
| 271 |
+
],
|
| 272 |
+
"RTL": [
|
| 273 |
+
{
|
| 274 |
+
"file": "pwm_gen.v",
|
| 275 |
+
"path": "/home/vickynishad/OpenLane/designs/pwm_gen/src/pwm_gen.v",
|
| 276 |
+
"size_bytes": 915,
|
| 277 |
+
"size_human": "915 B"
|
| 278 |
+
}
|
| 279 |
+
]
|
| 280 |
+
},
|
| 281 |
+
"artifact_types": [
|
| 282 |
+
"LOG",
|
| 283 |
+
"CONFIG",
|
| 284 |
+
"TESTBENCH",
|
| 285 |
+
"RTL"
|
| 286 |
+
],
|
| 287 |
+
"rtl_generated": true,
|
| 288 |
+
"testbench_generated": true,
|
| 289 |
+
"gds_generated": false,
|
| 290 |
+
"duration_minutes": 0.5,
|
| 291 |
+
"timestamp": "2026-03-06T01:39:32.846798",
|
| 292 |
+
"pdk": "sky130"
|
| 293 |
+
},
|
| 294 |
+
{
|
| 295 |
+
"design_id": "spi_master",
|
| 296 |
+
"complexity": "Simple",
|
| 297 |
+
"attempt": 1,
|
| 298 |
+
"passed": false,
|
| 299 |
+
"timed_out": false,
|
| 300 |
+
"failed_stage": "FORMAL_VERIFY",
|
| 301 |
+
"failed_stage_name": "Formal Verification",
|
| 302 |
+
"failed_stage_critical": false,
|
| 303 |
+
"failed_reason": "[FORMAL_VERIFY] Formal preflight failed: 1 issue(s).",
|
| 304 |
+
"completed_stages": [
|
| 305 |
+
"INIT",
|
| 306 |
+
"SPEC",
|
| 307 |
+
"RTL_GEN",
|
| 308 |
+
"RTL_FIX",
|
| 309 |
+
"VERIFICATION"
|
| 310 |
+
],
|
| 311 |
+
"completed_stages_count": 5,
|
| 312 |
+
"artifacts": {
|
| 313 |
+
"LOG": [
|
| 314 |
+
{
|
| 315 |
+
"file": "spi_master.log",
|
| 316 |
+
"path": "/home/vickynishad/OpenLane/designs/spi_master/spi_master.log",
|
| 317 |
+
"size_bytes": 14056,
|
| 318 |
+
"size_human": "13.7 KB"
|
| 319 |
+
}
|
| 320 |
+
],
|
| 321 |
+
"TESTBENCH": [
|
| 322 |
+
{
|
| 323 |
+
"file": "spi_master_tb.v",
|
| 324 |
+
"path": "/home/vickynishad/OpenLane/designs/spi_master/src/spi_master_tb.v",
|
| 325 |
+
"size_bytes": 1700,
|
| 326 |
+
"size_human": "1.7 KB"
|
| 327 |
+
}
|
| 328 |
+
],
|
| 329 |
+
"CONFIG": [
|
| 330 |
+
{
|
| 331 |
+
"file": "spi_master_tb_compile_gate.json",
|
| 332 |
+
"path": "/home/vickynishad/OpenLane/designs/spi_master/src/spi_master_tb_compile_gate.json",
|
| 333 |
+
"size_bytes": 2180,
|
| 334 |
+
"size_human": "2.1 KB"
|
| 335 |
+
},
|
| 336 |
+
{
|
| 337 |
+
"file": "spi_master_tb_static_gate_attempt1.json",
|
| 338 |
+
"path": "/home/vickynishad/OpenLane/designs/spi_master/src/spi_master_tb_static_gate_attempt1.json",
|
| 339 |
+
"size_bytes": 258,
|
| 340 |
+
"size_human": "258 B"
|
| 341 |
+
},
|
| 342 |
+
{
|
| 343 |
+
"file": "spi_master_tb_compile_gate_attempt1.json",
|
| 344 |
+
"path": "/home/vickynishad/OpenLane/designs/spi_master/src/spi_master_tb_compile_gate_attempt1.json",
|
| 345 |
+
"size_bytes": 2180,
|
| 346 |
+
"size_human": "2.1 KB"
|
| 347 |
+
},
|
| 348 |
+
{
|
| 349 |
+
"file": "spi_master_formal_preflight.json",
|
| 350 |
+
"path": "/home/vickynishad/OpenLane/designs/spi_master/src/spi_master_formal_preflight.json",
|
| 351 |
+
"size_bytes": 292,
|
| 352 |
+
"size_human": "292 B"
|
| 353 |
+
},
|
| 354 |
+
{
|
| 355 |
+
"file": "spi_master_tb_static_gate.json",
|
| 356 |
+
"path": "/home/vickynishad/OpenLane/designs/spi_master/src/spi_master_tb_static_gate.json",
|
| 357 |
+
"size_bytes": 258,
|
| 358 |
+
"size_human": "258 B"
|
| 359 |
+
}
|
| 360 |
+
],
|
| 361 |
+
"RTL": [
|
| 362 |
+
{
|
| 363 |
+
"file": "spi_master.v",
|
| 364 |
+
"path": "/home/vickynishad/OpenLane/designs/spi_master/src/spi_master.v",
|
| 365 |
+
"size_bytes": 4256,
|
| 366 |
+
"size_human": "4.2 KB"
|
| 367 |
+
},
|
| 368 |
+
{
|
| 369 |
+
"file": "spi_master_sva.sv",
|
| 370 |
+
"path": "/home/vickynishad/OpenLane/designs/spi_master/src/spi_master_sva.sv",
|
| 371 |
+
"size_bytes": 1188,
|
| 372 |
+
"size_human": "1.2 KB"
|
| 373 |
+
}
|
| 374 |
+
]
|
| 375 |
+
},
|
| 376 |
+
"artifact_types": [
|
| 377 |
+
"LOG",
|
| 378 |
+
"TESTBENCH",
|
| 379 |
+
"CONFIG",
|
| 380 |
+
"RTL"
|
| 381 |
+
],
|
| 382 |
+
"rtl_generated": true,
|
| 383 |
+
"testbench_generated": true,
|
| 384 |
+
"gds_generated": false,
|
| 385 |
+
"duration_minutes": 1.3,
|
| 386 |
+
"timestamp": "2026-03-06T01:40:00.129996",
|
| 387 |
+
"pdk": "sky130"
|
| 388 |
+
},
|
| 389 |
+
{
|
| 390 |
+
"design_id": "sync_fifo",
|
| 391 |
+
"complexity": "Simple",
|
| 392 |
+
"attempt": 1,
|
| 393 |
+
"passed": false,
|
| 394 |
+
"timed_out": false,
|
| 395 |
+
"failed_stage": "RTL_FIX",
|
| 396 |
+
"failed_stage_name": "RTL Lint & Syntax Fix",
|
| 397 |
+
"failed_stage_critical": true,
|
| 398 |
+
"failed_reason": "[RTL_FIX] Semantic rigor gate failed. Attempting mechanical width auto-fix.",
|
| 399 |
+
"completed_stages": [
|
| 400 |
+
"INIT",
|
| 401 |
+
"SPEC",
|
| 402 |
+
"RTL_GEN",
|
| 403 |
+
"RTL_FIX"
|
| 404 |
+
],
|
| 405 |
+
"completed_stages_count": 4,
|
| 406 |
+
"artifacts": {
|
| 407 |
+
"LOG": [
|
| 408 |
+
{
|
| 409 |
+
"file": "sync_fifo.log",
|
| 410 |
+
"path": "/home/vickynishad/OpenLane/designs/sync_fifo/sync_fifo.log",
|
| 411 |
+
"size_bytes": 53377,
|
| 412 |
+
"size_human": "52.1 KB"
|
| 413 |
+
}
|
| 414 |
+
],
|
| 415 |
+
"RTL": [
|
| 416 |
+
{
|
| 417 |
+
"file": "sync_fifo.v",
|
| 418 |
+
"path": "/home/vickynishad/OpenLane/designs/sync_fifo/src/sync_fifo.v",
|
| 419 |
+
"size_bytes": 1299,
|
| 420 |
+
"size_human": "1.3 KB"
|
| 421 |
+
}
|
| 422 |
+
]
|
| 423 |
+
},
|
| 424 |
+
"artifact_types": [
|
| 425 |
+
"LOG",
|
| 426 |
+
"RTL"
|
| 427 |
+
],
|
| 428 |
+
"rtl_generated": true,
|
| 429 |
+
"testbench_generated": false,
|
| 430 |
+
"gds_generated": false,
|
| 431 |
+
"duration_minutes": 2.4,
|
| 432 |
+
"timestamp": "2026-03-06T01:41:16.885242",
|
| 433 |
+
"pdk": "sky130"
|
| 434 |
+
},
|
| 435 |
+
{
|
| 436 |
+
"design_id": "alu8",
|
| 437 |
+
"complexity": "Medium",
|
| 438 |
+
"attempt": 1,
|
| 439 |
+
"passed": false,
|
| 440 |
+
"timed_out": false,
|
| 441 |
+
"failed_stage": "FORMAL_VERIFY",
|
| 442 |
+
"failed_stage_name": "Formal Verification",
|
| 443 |
+
"failed_stage_critical": false,
|
| 444 |
+
"failed_reason": "[FORMAL_VERIFY] Yosys SVA preflight failed. Regenerating SVA with error context.",
|
| 445 |
+
"completed_stages": [
|
| 446 |
+
"INIT",
|
| 447 |
+
"SPEC",
|
| 448 |
+
"RTL_GEN",
|
| 449 |
+
"RTL_FIX",
|
| 450 |
+
"VERIFICATION",
|
| 451 |
+
"FORMAL_VERIFY"
|
| 452 |
+
],
|
| 453 |
+
"completed_stages_count": 6,
|
| 454 |
+
"artifacts": {
|
| 455 |
+
"LOG": [
|
| 456 |
+
{
|
| 457 |
+
"file": "alu8.log",
|
| 458 |
+
"path": "/home/vickynishad/OpenLane/designs/alu8/alu8.log",
|
| 459 |
+
"size_bytes": 47547,
|
| 460 |
+
"size_human": "46.4 KB"
|
| 461 |
+
}
|
| 462 |
+
],
|
| 463 |
+
"TESTBENCH": [
|
| 464 |
+
{
|
| 465 |
+
"file": "alu8_tb.v",
|
| 466 |
+
"path": "/home/vickynishad/OpenLane/designs/alu8/src/alu8_tb.v",
|
| 467 |
+
"size_bytes": 2674,
|
| 468 |
+
"size_human": "2.6 KB"
|
| 469 |
+
}
|
| 470 |
+
],
|
| 471 |
+
"CONFIG": [
|
| 472 |
+
{
|
| 473 |
+
"file": "alu8_tb_static_gate_attempt1.json",
|
| 474 |
+
"path": "/home/vickynishad/OpenLane/designs/alu8/src/alu8_tb_static_gate_attempt1.json",
|
| 475 |
+
"size_bytes": 258,
|
| 476 |
+
"size_human": "258 B"
|
| 477 |
+
},
|
| 478 |
+
{
|
| 479 |
+
"file": "alu8_tb_compile_gate.json",
|
| 480 |
+
"path": "/home/vickynishad/OpenLane/designs/alu8/src/alu8_tb_compile_gate.json",
|
| 481 |
+
"size_bytes": 13185,
|
| 482 |
+
"size_human": "12.9 KB"
|
| 483 |
+
},
|
| 484 |
+
{
|
| 485 |
+
"file": "alu8_coverage_attempt1.json",
|
| 486 |
+
"path": "/home/vickynishad/OpenLane/designs/alu8/src/alu8_coverage_attempt1.json",
|
| 487 |
+
"size_bytes": 850,
|
| 488 |
+
"size_human": "850 B"
|
| 489 |
+
},
|
| 490 |
+
{
|
| 491 |
+
"file": "alu8_coverage_latest.json",
|
| 492 |
+
"path": "/home/vickynishad/OpenLane/designs/alu8/src/alu8_coverage_latest.json",
|
| 493 |
+
"size_bytes": 851,
|
| 494 |
+
"size_human": "851 B"
|
| 495 |
+
},
|
| 496 |
+
{
|
| 497 |
+
"file": "alu8_coverage_attempt2.json",
|
| 498 |
+
"path": "/home/vickynishad/OpenLane/designs/alu8/src/alu8_coverage_attempt2.json",
|
| 499 |
+
"size_bytes": 850,
|
| 500 |
+
"size_human": "850 B"
|
| 501 |
+
},
|
| 502 |
+
{
|
| 503 |
+
"file": "alu8_tb_compile_gate_attempt1.json",
|
| 504 |
+
"path": "/home/vickynishad/OpenLane/designs/alu8/src/alu8_tb_compile_gate_attempt1.json",
|
| 505 |
+
"size_bytes": 13185,
|
| 506 |
+
"size_human": "12.9 KB"
|
| 507 |
+
},
|
| 508 |
+
{
|
| 509 |
+
"file": "alu8_coverage_attempt3.json",
|
| 510 |
+
"path": "/home/vickynishad/OpenLane/designs/alu8/src/alu8_coverage_attempt3.json",
|
| 511 |
+
"size_bytes": 851,
|
| 512 |
+
"size_human": "851 B"
|
| 513 |
+
},
|
| 514 |
+
{
|
| 515 |
+
"file": "alu8_coverage_attempt4.json",
|
| 516 |
+
"path": "/home/vickynishad/OpenLane/designs/alu8/src/alu8_coverage_attempt4.json",
|
| 517 |
+
"size_bytes": 851,
|
| 518 |
+
"size_human": "851 B"
|
| 519 |
+
},
|
| 520 |
+
{
|
| 521 |
+
"file": "alu8_formal_preflight.json",
|
| 522 |
+
"path": "/home/vickynishad/OpenLane/designs/alu8/src/alu8_formal_preflight.json",
|
| 523 |
+
"size_bytes": 89,
|
| 524 |
+
"size_human": "89 B"
|
| 525 |
+
},
|
| 526 |
+
{
|
| 527 |
+
"file": "alu8_tb_static_gate.json",
|
| 528 |
+
"path": "/home/vickynishad/OpenLane/designs/alu8/src/alu8_tb_static_gate.json",
|
| 529 |
+
"size_bytes": 258,
|
| 530 |
+
"size_human": "258 B"
|
| 531 |
+
}
|
| 532 |
+
],
|
| 533 |
+
"RTL": [
|
| 534 |
+
{
|
| 535 |
+
"file": "alu8_sby_check.sv",
|
| 536 |
+
"path": "/home/vickynishad/OpenLane/designs/alu8/src/alu8_sby_check.sv",
|
| 537 |
+
"size_bytes": 3908,
|
| 538 |
+
"size_human": "3.8 KB"
|
| 539 |
+
},
|
| 540 |
+
{
|
| 541 |
+
"file": "alu8_sva.sv",
|
| 542 |
+
"path": "/home/vickynishad/OpenLane/designs/alu8/src/alu8_sva.sv",
|
| 543 |
+
"size_bytes": 1810,
|
| 544 |
+
"size_human": "1.8 KB"
|
| 545 |
+
},
|
| 546 |
+
{
|
| 547 |
+
"file": "alu8.v",
|
| 548 |
+
"path": "/home/vickynishad/OpenLane/designs/alu8/src/alu8.v",
|
| 549 |
+
"size_bytes": 1517,
|
| 550 |
+
"size_human": "1.5 KB"
|
| 551 |
+
}
|
| 552 |
+
]
|
| 553 |
+
},
|
| 554 |
+
"artifact_types": [
|
| 555 |
+
"LOG",
|
| 556 |
+
"TESTBENCH",
|
| 557 |
+
"CONFIG",
|
| 558 |
+
"RTL"
|
| 559 |
+
],
|
| 560 |
+
"rtl_generated": true,
|
| 561 |
+
"testbench_generated": true,
|
| 562 |
+
"gds_generated": false,
|
| 563 |
+
"duration_minutes": 5.2,
|
| 564 |
+
"timestamp": "2026-03-06T01:43:39.134144",
|
| 565 |
+
"pdk": "sky130"
|
| 566 |
+
},
|
| 567 |
+
{
|
| 568 |
+
"design_id": "i2c_master",
|
| 569 |
+
"complexity": "Medium",
|
| 570 |
+
"attempt": 1,
|
| 571 |
+
"passed": false,
|
| 572 |
+
"timed_out": false,
|
| 573 |
+
"failed_stage": null,
|
| 574 |
+
"failed_stage_name": null,
|
| 575 |
+
"failed_stage_critical": null,
|
| 576 |
+
"failed_reason": "\u2502 address, data, read/write, start trigger. Busy, done, error status. 50 MHz system clock. \u2502",
|
| 577 |
+
"completed_stages": [
|
| 578 |
+
"INIT",
|
| 579 |
+
"SPEC",
|
| 580 |
+
"RTL_GEN",
|
| 581 |
+
"RTL_FIX"
|
| 582 |
+
],
|
| 583 |
+
"completed_stages_count": 4,
|
| 584 |
+
"artifacts": {
|
| 585 |
+
"LOG": [
|
| 586 |
+
{
|
| 587 |
+
"file": "i2c_master.log",
|
| 588 |
+
"path": "/home/vickynishad/OpenLane/designs/i2c_master/i2c_master.log",
|
| 589 |
+
"size_bytes": 24228,
|
| 590 |
+
"size_human": "23.7 KB"
|
| 591 |
+
}
|
| 592 |
+
],
|
| 593 |
+
"CONFIG": [
|
| 594 |
+
{
|
| 595 |
+
"file": "i2c_master_tb_static_gate.json",
|
| 596 |
+
"path": "/home/vickynishad/OpenLane/designs/i2c_master/src/i2c_master_tb_static_gate.json",
|
| 597 |
+
"size_bytes": 258,
|
| 598 |
+
"size_human": "258 B"
|
| 599 |
+
},
|
| 600 |
+
{
|
| 601 |
+
"file": "i2c_master_tb_compile_gate.json",
|
| 602 |
+
"path": "/home/vickynishad/OpenLane/designs/i2c_master/src/i2c_master_tb_compile_gate.json",
|
| 603 |
+
"size_bytes": 5988,
|
| 604 |
+
"size_human": "5.8 KB"
|
| 605 |
+
},
|
| 606 |
+
{
|
| 607 |
+
"file": "i2c_master_tb_compile_gate_attempt1.json",
|
| 608 |
+
"path": "/home/vickynishad/OpenLane/designs/i2c_master/src/i2c_master_tb_compile_gate_attempt1.json",
|
| 609 |
+
"size_bytes": 5988,
|
| 610 |
+
"size_human": "5.8 KB"
|
| 611 |
+
},
|
| 612 |
+
{
|
| 613 |
+
"file": "i2c_master_tb_static_gate_attempt1.json",
|
| 614 |
+
"path": "/home/vickynishad/OpenLane/designs/i2c_master/src/i2c_master_tb_static_gate_attempt1.json",
|
| 615 |
+
"size_bytes": 258,
|
| 616 |
+
"size_human": "258 B"
|
| 617 |
+
}
|
| 618 |
+
],
|
| 619 |
+
"RTL": [
|
| 620 |
+
{
|
| 621 |
+
"file": "i2c_master_controller.v",
|
| 622 |
+
"path": "/home/vickynishad/OpenLane/designs/i2c_master/src/i2c_master_controller.v",
|
| 623 |
+
"size_bytes": 1205,
|
| 624 |
+
"size_human": "1.2 KB"
|
| 625 |
+
},
|
| 626 |
+
{
|
| 627 |
+
"file": "i2c_master.v",
|
| 628 |
+
"path": "/home/vickynishad/OpenLane/designs/i2c_master/src/i2c_master.v",
|
| 629 |
+
"size_bytes": 619,
|
| 630 |
+
"size_human": "619 B"
|
| 631 |
+
}
|
| 632 |
+
],
|
| 633 |
+
"TESTBENCH": [
|
| 634 |
+
{
|
| 635 |
+
"file": "i2c_master_tb.v",
|
| 636 |
+
"path": "/home/vickynishad/OpenLane/designs/i2c_master/src/i2c_master_tb.v",
|
| 637 |
+
"size_bytes": 1543,
|
| 638 |
+
"size_human": "1.5 KB"
|
| 639 |
+
}
|
| 640 |
+
]
|
| 641 |
+
},
|
| 642 |
+
"artifact_types": [
|
| 643 |
+
"LOG",
|
| 644 |
+
"CONFIG",
|
| 645 |
+
"RTL",
|
| 646 |
+
"TESTBENCH"
|
| 647 |
+
],
|
| 648 |
+
"rtl_generated": true,
|
| 649 |
+
"testbench_generated": true,
|
| 650 |
+
"gds_generated": false,
|
| 651 |
+
"duration_minutes": 9.8,
|
| 652 |
+
"timestamp": "2026-03-06T01:48:48.644076",
|
| 653 |
+
"pdk": "sky130"
|
| 654 |
+
},
|
| 655 |
+
{
|
| 656 |
+
"design_id": "apb_timer",
|
| 657 |
+
"complexity": "Medium",
|
| 658 |
+
"attempt": 1,
|
| 659 |
+
"passed": true,
|
| 660 |
+
"timed_out": false,
|
| 661 |
+
"failed_stage": null,
|
| 662 |
+
"failed_stage_name": null,
|
| 663 |
+
"failed_stage_critical": null,
|
| 664 |
+
"failed_reason": null,
|
| 665 |
+
"completed_stages": [
|
| 666 |
+
"INIT",
|
| 667 |
+
"SPEC",
|
| 668 |
+
"RTL_GEN",
|
| 669 |
+
"RTL_FIX",
|
| 670 |
+
"VERIFICATION",
|
| 671 |
+
"FORMAL_VERIFY",
|
| 672 |
+
"REGRESSION"
|
| 673 |
+
],
|
| 674 |
+
"completed_stages_count": 7,
|
| 675 |
+
"artifacts": {
|
| 676 |
+
"LOG": [
|
| 677 |
+
{
|
| 678 |
+
"file": "apb_timer.log",
|
| 679 |
+
"path": "/home/vickynishad/OpenLane/designs/apb_timer/apb_timer.log",
|
| 680 |
+
"size_bytes": 26458,
|
| 681 |
+
"size_human": "25.8 KB"
|
| 682 |
+
}
|
| 683 |
+
],
|
| 684 |
+
"RTL": [
|
| 685 |
+
{
|
| 686 |
+
"file": "apb_timer.v",
|
| 687 |
+
"path": "/home/vickynishad/OpenLane/designs/apb_timer/src/apb_timer.v",
|
| 688 |
+
"size_bytes": 2418,
|
| 689 |
+
"size_human": "2.4 KB"
|
| 690 |
+
},
|
| 691 |
+
{
|
| 692 |
+
"file": "apb_timer_sva.sv",
|
| 693 |
+
"path": "/home/vickynishad/OpenLane/designs/apb_timer/src/apb_timer_sva.sv",
|
| 694 |
+
"size_bytes": 1738,
|
| 695 |
+
"size_human": "1.7 KB"
|
| 696 |
+
},
|
| 697 |
+
{
|
| 698 |
+
"file": "apb_timer_sby_check.sv",
|
| 699 |
+
"path": "/home/vickynishad/OpenLane/designs/apb_timer/src/apb_timer_sby_check.sv",
|
| 700 |
+
"size_bytes": 1743,
|
| 701 |
+
"size_human": "1.7 KB"
|
| 702 |
+
}
|
| 703 |
+
],
|
| 704 |
+
"TESTBENCH": [
|
| 705 |
+
{
|
| 706 |
+
"file": "apb_timer_tb.v",
|
| 707 |
+
"path": "/home/vickynishad/OpenLane/designs/apb_timer/src/apb_timer_tb.v",
|
| 708 |
+
"size_bytes": 1914,
|
| 709 |
+
"size_human": "1.9 KB"
|
| 710 |
+
}
|
| 711 |
+
],
|
| 712 |
+
"CONFIG": [
|
| 713 |
+
{
|
| 714 |
+
"file": "apb_timer_tb_static_gate.json",
|
| 715 |
+
"path": "/home/vickynishad/OpenLane/designs/apb_timer/src/apb_timer_tb_static_gate.json",
|
| 716 |
+
"size_bytes": 258,
|
| 717 |
+
"size_human": "258 B"
|
| 718 |
+
},
|
| 719 |
+
{
|
| 720 |
+
"file": "apb_timer_tb_static_gate_attempt1.json",
|
| 721 |
+
"path": "/home/vickynishad/OpenLane/designs/apb_timer/src/apb_timer_tb_static_gate_attempt1.json",
|
| 722 |
+
"size_bytes": 258,
|
| 723 |
+
"size_human": "258 B"
|
| 724 |
+
},
|
| 725 |
+
{
|
| 726 |
+
"file": "apb_timer_tb_compile_gate.json",
|
| 727 |
+
"path": "/home/vickynishad/OpenLane/designs/apb_timer/src/apb_timer_tb_compile_gate.json",
|
| 728 |
+
"size_bytes": 6322,
|
| 729 |
+
"size_human": "6.2 KB"
|
| 730 |
+
},
|
| 731 |
+
{
|
| 732 |
+
"file": "apb_timer_tb_compile_gate_attempt1.json",
|
| 733 |
+
"path": "/home/vickynishad/OpenLane/designs/apb_timer/src/apb_timer_tb_compile_gate_attempt1.json",
|
| 734 |
+
"size_bytes": 6322,
|
| 735 |
+
"size_human": "6.2 KB"
|
| 736 |
+
},
|
| 737 |
+
{
|
| 738 |
+
"file": "apb_timer_formal_preflight.json",
|
| 739 |
+
"path": "/home/vickynishad/OpenLane/designs/apb_timer/src/apb_timer_formal_preflight.json",
|
| 740 |
+
"size_bytes": 89,
|
| 741 |
+
"size_human": "89 B"
|
| 742 |
+
}
|
| 743 |
+
]
|
| 744 |
+
},
|
| 745 |
+
"artifact_types": [
|
| 746 |
+
"LOG",
|
| 747 |
+
"RTL",
|
| 748 |
+
"TESTBENCH",
|
| 749 |
+
"CONFIG"
|
| 750 |
+
],
|
| 751 |
+
"rtl_generated": true,
|
| 752 |
+
"testbench_generated": true,
|
| 753 |
+
"gds_generated": false,
|
| 754 |
+
"duration_minutes": 4.2,
|
| 755 |
+
"timestamp": "2026-03-06T01:58:37.404877",
|
| 756 |
+
"pdk": "sky130"
|
| 757 |
+
},
|
| 758 |
+
{
|
| 759 |
+
"design_id": "vga_ctrl",
|
| 760 |
+
"complexity": "Medium",
|
| 761 |
+
"attempt": 1,
|
| 762 |
+
"passed": false,
|
| 763 |
+
"timed_out": false,
|
| 764 |
+
"failed_stage": "RTL_FIX",
|
| 765 |
+
"failed_stage_name": "RTL Lint & Syntax Fix",
|
| 766 |
+
"failed_stage_critical": true,
|
| 767 |
+
"failed_reason": "[RTL_FIX] Semantic rigor gate failed. Attempting mechanical width auto-fix.",
|
| 768 |
+
"completed_stages": [
|
| 769 |
+
"INIT",
|
| 770 |
+
"SPEC",
|
| 771 |
+
"RTL_GEN",
|
| 772 |
+
"RTL_FIX"
|
| 773 |
+
],
|
| 774 |
+
"completed_stages_count": 4,
|
| 775 |
+
"artifacts": {
|
| 776 |
+
"LOG": [
|
| 777 |
+
{
|
| 778 |
+
"file": "vga_ctrl.log",
|
| 779 |
+
"path": "/home/vickynishad/OpenLane/designs/vga_ctrl/vga_ctrl.log",
|
| 780 |
+
"size_bytes": 803376,
|
| 781 |
+
"size_human": "784.5 KB"
|
| 782 |
+
}
|
| 783 |
+
],
|
| 784 |
+
"TESTBENCH": [
|
| 785 |
+
{
|
| 786 |
+
"file": "vga_ctrl_tb.v",
|
| 787 |
+
"path": "/home/vickynishad/OpenLane/designs/vga_ctrl/src/vga_ctrl_tb.v",
|
| 788 |
+
"size_bytes": 510,
|
| 789 |
+
"size_human": "510 B"
|
| 790 |
+
}
|
| 791 |
+
],
|
| 792 |
+
"RTL": [
|
| 793 |
+
{
|
| 794 |
+
"file": "vga_ctrl.v",
|
| 795 |
+
"path": "/home/vickynishad/OpenLane/designs/vga_ctrl/src/vga_ctrl.v",
|
| 796 |
+
"size_bytes": 2957,
|
| 797 |
+
"size_human": "2.9 KB"
|
| 798 |
+
}
|
| 799 |
+
]
|
| 800 |
+
},
|
| 801 |
+
"artifact_types": [
|
| 802 |
+
"LOG",
|
| 803 |
+
"TESTBENCH",
|
| 804 |
+
"RTL"
|
| 805 |
+
],
|
| 806 |
+
"rtl_generated": true,
|
| 807 |
+
"testbench_generated": true,
|
| 808 |
+
"gds_generated": false,
|
| 809 |
+
"duration_minutes": 6.7,
|
| 810 |
+
"timestamp": "2026-03-06T02:02:46.652227",
|
| 811 |
+
"pdk": "sky130"
|
| 812 |
+
},
|
| 813 |
+
{
|
| 814 |
+
"design_id": "wb_uart",
|
| 815 |
+
"complexity": "Complex",
|
| 816 |
+
"attempt": 1,
|
| 817 |
+
"passed": false,
|
| 818 |
+
"timed_out": false,
|
| 819 |
+
"failed_stage": "RTL_FIX",
|
| 820 |
+
"failed_stage_name": "RTL Lint & Syntax Fix",
|
| 821 |
+
"failed_stage_critical": true,
|
| 822 |
+
"failed_reason": "[RTL_FIX] Already on fallback strategy. Build Failed.",
|
| 823 |
+
"completed_stages": [
|
| 824 |
+
"INIT",
|
| 825 |
+
"SPEC",
|
| 826 |
+
"RTL_GEN",
|
| 827 |
+
"RTL_FIX"
|
| 828 |
+
],
|
| 829 |
+
"completed_stages_count": 4,
|
| 830 |
+
"artifacts": {
|
| 831 |
+
"LOG": [
|
| 832 |
+
{
|
| 833 |
+
"file": "wb_uart.log",
|
| 834 |
+
"path": "/home/vickynishad/OpenLane/designs/wb_uart/wb_uart.log",
|
| 835 |
+
"size_bytes": 28250,
|
| 836 |
+
"size_human": "27.6 KB"
|
| 837 |
+
}
|
| 838 |
+
],
|
| 839 |
+
"RTL": [
|
| 840 |
+
{
|
| 841 |
+
"file": "wb_uart_tx_fifo.v",
|
| 842 |
+
"path": "/home/vickynishad/OpenLane/designs/wb_uart/src/wb_uart_tx_fifo.v",
|
| 843 |
+
"size_bytes": 1282,
|
| 844 |
+
"size_human": "1.3 KB"
|
| 845 |
+
},
|
| 846 |
+
{
|
| 847 |
+
"file": "wb_uart_wishbone_interface.v",
|
| 848 |
+
"path": "/home/vickynishad/OpenLane/designs/wb_uart/src/wb_uart_wishbone_interface.v",
|
| 849 |
+
"size_bytes": 1041,
|
| 850 |
+
"size_human": "1.0 KB"
|
| 851 |
+
},
|
| 852 |
+
{
|
| 853 |
+
"file": "wb_uart_controller.v",
|
| 854 |
+
"path": "/home/vickynishad/OpenLane/designs/wb_uart/src/wb_uart_controller.v",
|
| 855 |
+
"size_bytes": 1658,
|
| 856 |
+
"size_human": "1.6 KB"
|
| 857 |
+
},
|
| 858 |
+
{
|
| 859 |
+
"file": "wb_uart.v",
|
| 860 |
+
"path": "/home/vickynishad/OpenLane/designs/wb_uart/src/wb_uart.v",
|
| 861 |
+
"size_bytes": 1638,
|
| 862 |
+
"size_human": "1.6 KB"
|
| 863 |
+
},
|
| 864 |
+
{
|
| 865 |
+
"file": "wb_uart_rx_fifo.v",
|
| 866 |
+
"path": "/home/vickynishad/OpenLane/designs/wb_uart/src/wb_uart_rx_fifo.v",
|
| 867 |
+
"size_bytes": 1282,
|
| 868 |
+
"size_human": "1.3 KB"
|
| 869 |
+
}
|
| 870 |
+
]
|
| 871 |
+
},
|
| 872 |
+
"artifact_types": [
|
| 873 |
+
"LOG",
|
| 874 |
+
"RTL"
|
| 875 |
+
],
|
| 876 |
+
"rtl_generated": true,
|
| 877 |
+
"testbench_generated": false,
|
| 878 |
+
"gds_generated": false,
|
| 879 |
+
"duration_minutes": 7.0,
|
| 880 |
+
"timestamp": "2026-03-06T02:09:26.491231",
|
| 881 |
+
"pdk": "sky130"
|
| 882 |
+
}
|
| 883 |
+
]
|
| 884 |
+
}
|
benchmark/run_benchmark.py
ADDED
|
@@ -0,0 +1,549 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
#!/usr/bin/env python3
|
| 3 |
+
"""
|
| 4 |
+
AgentIC Benchmark Runner v2
|
| 5 |
+
============================
|
| 6 |
+
Runs 10 chip designs through the AgentIC pipeline and produces
|
| 7 |
+
a detailed report of real pass/fail rates, stage failures, timing,
|
| 8 |
+
and artifact recovery.
|
| 9 |
+
|
| 10 |
+
Usage (from AgentIC root directory):
|
| 11 |
+
python3 benchmark/run_benchmark.py
|
| 12 |
+
python3 benchmark/run_benchmark.py --skip-openlane
|
| 13 |
+
python3 benchmark/run_benchmark.py --full-signoff
|
| 14 |
+
python3 benchmark/run_benchmark.py --design uart_tx
|
| 15 |
+
python3 benchmark/run_benchmark.py --pdk gf180
|
| 16 |
+
"""
|
| 17 |
+
|
| 18 |
+
import os
|
| 19 |
+
import re
|
| 20 |
+
import sys
|
| 21 |
+
import json
|
| 22 |
+
import time
|
| 23 |
+
import argparse
|
| 24 |
+
import datetime
|
| 25 |
+
import subprocess
|
| 26 |
+
from pathlib import Path
|
| 27 |
+
|
| 28 |
+
# ─────────────────────────────────────────────────────────────
|
| 29 |
+
# 10 TEST DESIGNS — simple to complex
|
| 30 |
+
# ─────────────────────────────────────────────────────────────
|
| 31 |
+
TEST_DESIGNS = [
|
| 32 |
+
{
|
| 33 |
+
"id": "counter8",
|
| 34 |
+
"complexity": "Simple",
|
| 35 |
+
"desc": (
|
| 36 |
+
"8-bit synchronous up-counter with active-high synchronous reset and "
|
| 37 |
+
"active-high enable. On every rising clock edge, if reset is high the "
|
| 38 |
+
"counter clears to zero. If enable is high and reset is low, the counter "
|
| 39 |
+
"increments by one. When it reaches 255 it wraps to zero. Output the 8-bit count."
|
| 40 |
+
),
|
| 41 |
+
},
|
| 42 |
+
{
|
| 43 |
+
"id": "uart_tx",
|
| 44 |
+
"complexity": "Simple",
|
| 45 |
+
"desc": (
|
| 46 |
+
"UART transmitter at 115200 baud, 8N1 format. Accepts parallel 8-bit data "
|
| 47 |
+
"and a start signal. Outputs a serial TX line. 50 MHz system clock. "
|
| 48 |
+
"Signals transmission complete via a done flag. Idle state is logic high."
|
| 49 |
+
),
|
| 50 |
+
},
|
| 51 |
+
{
|
| 52 |
+
"id": "pwm_gen",
|
| 53 |
+
"complexity": "Simple",
|
| 54 |
+
"desc": (
|
| 55 |
+
"PWM generator with a 16-bit period register and 16-bit duty cycle register, "
|
| 56 |
+
"both writable via a simple register interface with address and write-enable. "
|
| 57 |
+
"Outputs a single PWM signal. 50 MHz clock. Edge-aligned mode."
|
| 58 |
+
),
|
| 59 |
+
},
|
| 60 |
+
{
|
| 61 |
+
"id": "spi_master",
|
| 62 |
+
"complexity": "Simple",
|
| 63 |
+
"desc": (
|
| 64 |
+
"SPI master controller, mode 0 only (CPOL=0 CPHA=0). 8-bit transfers. "
|
| 65 |
+
"Generates SCLK, MOSI, CS. Accepts MISO. Clock divider to set SPI speed "
|
| 66 |
+
"from 50 MHz system clock. Busy and done status signals."
|
| 67 |
+
),
|
| 68 |
+
},
|
| 69 |
+
{
|
| 70 |
+
"id": "sync_fifo",
|
| 71 |
+
"complexity": "Simple",
|
| 72 |
+
"desc": (
|
| 73 |
+
"Synchronous FIFO, 8-bit data width, 16-entry depth, single clock domain. "
|
| 74 |
+
"Push and pop with full and empty flags. Almost-full flag when 2 or fewer "
|
| 75 |
+
"slots remain. Almost-empty flag when 2 or fewer entries stored."
|
| 76 |
+
),
|
| 77 |
+
},
|
| 78 |
+
{
|
| 79 |
+
"id": "alu8",
|
| 80 |
+
"complexity": "Medium",
|
| 81 |
+
"desc": (
|
| 82 |
+
"8-bit ALU with 4-bit opcode selecting: ADD, SUB, AND, OR, XOR, NOT, "
|
| 83 |
+
"left shift by 1, right shift by 1, increment, decrement. Outputs 8-bit "
|
| 84 |
+
"result and 4-bit flags: zero, carry, overflow, negative. Fully combinational."
|
| 85 |
+
),
|
| 86 |
+
},
|
| 87 |
+
{
|
| 88 |
+
"id": "i2c_master",
|
| 89 |
+
"complexity": "Medium",
|
| 90 |
+
"desc": (
|
| 91 |
+
"I2C master controller, standard mode 100 kHz. Generates SCL and SDA with "
|
| 92 |
+
"open-drain outputs. 7-bit addressing. Handles START, STOP conditions. "
|
| 93 |
+
"ACK/NACK detection. Register interface for address, data, read/write, "
|
| 94 |
+
"start trigger. Busy, done, error status. 50 MHz system clock."
|
| 95 |
+
),
|
| 96 |
+
},
|
| 97 |
+
{
|
| 98 |
+
"id": "apb_timer",
|
| 99 |
+
"complexity": "Medium",
|
| 100 |
+
"desc": (
|
| 101 |
+
"32-bit APB timer peripheral with interrupt. APB3 slave interface with "
|
| 102 |
+
"PCLK, PRESETn, PSEL, PENABLE, PWRITE, PADDR, PWDATA, PRDATA, PREADY. "
|
| 103 |
+
"Registers: control, prescaler, reload value, current count, interrupt status. "
|
| 104 |
+
"Supports one-shot and continuous modes. Interrupt when counter reaches zero. "
|
| 105 |
+
"Prescaler divides clock 1 to 65536."
|
| 106 |
+
),
|
| 107 |
+
},
|
| 108 |
+
{
|
| 109 |
+
"id": "vga_ctrl",
|
| 110 |
+
"complexity": "Medium",
|
| 111 |
+
"desc": (
|
| 112 |
+
"VGA timing controller for 640x480 at 60 Hz. Generates HSYNC and VSYNC "
|
| 113 |
+
"with correct timing. Outputs current pixel X and Y coordinates and "
|
| 114 |
+
"active video enable signal. Pixel clock input at 25 MHz."
|
| 115 |
+
),
|
| 116 |
+
},
|
| 117 |
+
{
|
| 118 |
+
"id": "wb_uart",
|
| 119 |
+
"complexity": "Complex",
|
| 120 |
+
"desc": (
|
| 121 |
+
"UART transceiver with Wishbone B4 slave interface. 8N1 format. "
|
| 122 |
+
"Configurable baud rate via baud divisor register. 16-byte TX FIFO and "
|
| 123 |
+
"16-byte RX FIFO. Wishbone registers: TX data, RX data, status "
|
| 124 |
+
"(TX full, TX empty, RX full, RX empty, overrun), control (baud divisor, "
|
| 125 |
+
"loopback enable), interrupt enable. Interrupt on RX available and TX empty. "
|
| 126 |
+
"50 MHz clock. Wishbone signals: CLK_I RST_I ADR_I DAT_I DAT_O WE_I STB_I ACK_O CYC_I."
|
| 127 |
+
),
|
| 128 |
+
},
|
| 129 |
+
]
|
| 130 |
+
|
| 131 |
+
# ─────────────────────────────────────────────────────────────
|
| 132 |
+
# STAGE METADATA
|
| 133 |
+
# ─────────────────────────────────────────────────────────────
|
| 134 |
+
STAGE_INFO = {
|
| 135 |
+
"INIT": {"name": "Environment Setup", "critical": True},
|
| 136 |
+
"SPEC": {"name": "Architectural Planning", "critical": True},
|
| 137 |
+
"RTL_GEN": {"name": "RTL Generation", "critical": True},
|
| 138 |
+
"RTL_FIX": {"name": "RTL Lint & Syntax Fix", "critical": True},
|
| 139 |
+
"VERIFICATION": {"name": "Functional Simulation", "critical": True},
|
| 140 |
+
"FORMAL_VERIFY": {"name": "Formal Verification", "critical": False},
|
| 141 |
+
"COVERAGE_CHECK": {"name": "Coverage Closure", "critical": False},
|
| 142 |
+
"REGRESSION": {"name": "Regression Testing", "critical": False},
|
| 143 |
+
"SDC_GEN": {"name": "Timing Constraints", "critical": True},
|
| 144 |
+
"FLOORPLAN": {"name": "Physical Floorplanning", "critical": True},
|
| 145 |
+
"HARDENING": {"name": "Place & Route", "critical": True},
|
| 146 |
+
"CONVERGENCE": {"name": "Timing Convergence", "critical": True},
|
| 147 |
+
"ECO_PATCH": {"name": "Engineering Change Order", "critical": False},
|
| 148 |
+
"SIGNOFF": {"name": "DRC/LVS/STA Signoff", "critical": True},
|
| 149 |
+
}
|
| 150 |
+
|
| 151 |
+
SUCCESS_MARKERS = [
|
| 152 |
+
"PIPELINE COMPLETE", "BUILD COMPLETE", "ALL STAGES PASSED",
|
| 153 |
+
"SIGNOFF PASSED", "BUILD SUCCEEDED", "SUCCESS",
|
| 154 |
+
]
|
| 155 |
+
FAILURE_MARKERS = [
|
| 156 |
+
"PIPELINE FAILED", "BUILD FAILED", "FATAL ERROR",
|
| 157 |
+
"STAGE FAILED", "ABORTING", "FAIL-CLOSED",
|
| 158 |
+
]
|
| 159 |
+
|
| 160 |
+
STAGE_PATTERN = re.compile(
|
| 161 |
+
r"\b(INIT|SPEC|RTL_GEN|RTL_FIX|VERIFICATION|FORMAL_VERIFY|"
|
| 162 |
+
r"COVERAGE_CHECK|REGRESSION|SDC_GEN|FLOORPLAN|HARDENING|"
|
| 163 |
+
r"CONVERGENCE|ECO_PATCH|SIGNOFF)\b",
|
| 164 |
+
re.IGNORECASE,
|
| 165 |
+
)
|
| 166 |
+
|
| 167 |
+
|
| 168 |
+
def parse_args():
|
| 169 |
+
p = argparse.ArgumentParser(description="AgentIC Benchmark Runner v2")
|
| 170 |
+
p.add_argument("--pdk", default="sky130", choices=["sky130", "gf180"])
|
| 171 |
+
p.add_argument("--skip-openlane", action="store_true")
|
| 172 |
+
p.add_argument("--skip-coverage", action="store_true")
|
| 173 |
+
p.add_argument("--full-signoff", action="store_true")
|
| 174 |
+
p.add_argument("--design", default=None)
|
| 175 |
+
p.add_argument("--max-retries", default=3, type=int)
|
| 176 |
+
p.add_argument("--output-dir", default="benchmark/results")
|
| 177 |
+
p.add_argument("--attempts", default=1, type=int)
|
| 178 |
+
p.add_argument("--timeout", default=3600, type=int)
|
| 179 |
+
return p.parse_args()
|
| 180 |
+
|
| 181 |
+
|
| 182 |
+
def build_command(design, args):
|
| 183 |
+
cmd = [
|
| 184 |
+
"python3", "main.py", "build",
|
| 185 |
+
"--name", design["id"],
|
| 186 |
+
"--desc", design["desc"],
|
| 187 |
+
"--pdk-profile", args.pdk,
|
| 188 |
+
"--max-retries", str(args.max_retries),
|
| 189 |
+
"--strict-gates",
|
| 190 |
+
]
|
| 191 |
+
if args.skip_openlane:
|
| 192 |
+
cmd.append("--skip-openlane")
|
| 193 |
+
if args.skip_coverage:
|
| 194 |
+
cmd.append("--skip-coverage")
|
| 195 |
+
if args.full_signoff:
|
| 196 |
+
cmd.append("--full-signoff")
|
| 197 |
+
return cmd
|
| 198 |
+
|
| 199 |
+
|
| 200 |
+
def detect_pass_fail(stdout, stderr, returncode):
|
| 201 |
+
combined = (stdout + stderr).upper()
|
| 202 |
+
for marker in FAILURE_MARKERS:
|
| 203 |
+
if marker in combined:
|
| 204 |
+
return False
|
| 205 |
+
for marker in SUCCESS_MARKERS:
|
| 206 |
+
if marker in combined:
|
| 207 |
+
return True
|
| 208 |
+
return returncode == 0
|
| 209 |
+
|
| 210 |
+
|
| 211 |
+
def extract_failed_stage(stdout, stderr):
|
| 212 |
+
combined = stdout + stderr
|
| 213 |
+
last_stage = None
|
| 214 |
+
for line in combined.split("\n"):
|
| 215 |
+
m = STAGE_PATTERN.search(line)
|
| 216 |
+
if m:
|
| 217 |
+
last_stage = m.group(1).upper()
|
| 218 |
+
if any(kw in line.upper() for kw in ["FAILED", "ERROR", "FATAL", "ABORT", "FAIL-CLOSED"]):
|
| 219 |
+
return last_stage, line.strip()[:250]
|
| 220 |
+
return None, None
|
| 221 |
+
|
| 222 |
+
|
| 223 |
+
def extract_completed_stages(stdout):
|
| 224 |
+
completed = []
|
| 225 |
+
for line in stdout.split("\n"):
|
| 226 |
+
m = STAGE_PATTERN.search(line)
|
| 227 |
+
if m:
|
| 228 |
+
stage = m.group(1).upper()
|
| 229 |
+
if any(kw in line.upper() for kw in [
|
| 230 |
+
"COMPLETE", "PASSED", "SUCCESS", "DONE", "TRANSITION", "FINISHED"
|
| 231 |
+
]):
|
| 232 |
+
if stage not in completed:
|
| 233 |
+
completed.append(stage)
|
| 234 |
+
return completed
|
| 235 |
+
|
| 236 |
+
|
| 237 |
+
def find_openlane_root():
|
| 238 |
+
env = os.environ.get("OPENLANE_ROOT")
|
| 239 |
+
if env and Path(env).exists():
|
| 240 |
+
return env
|
| 241 |
+
for c in [Path.home() / "OpenLane", Path("/opt/OpenLane")]:
|
| 242 |
+
if c.exists():
|
| 243 |
+
return str(c)
|
| 244 |
+
return str(Path.home() / "OpenLane")
|
| 245 |
+
|
| 246 |
+
|
| 247 |
+
def find_artifacts(design_id, openlane_root):
|
| 248 |
+
"""Only find files actually belonging to THIS design — no false positives."""
|
| 249 |
+
found = {}
|
| 250 |
+
type_map = {
|
| 251 |
+
".v": "RTL", ".sv": "RTL", ".sva": "FORMAL", ".sby": "FORMAL",
|
| 252 |
+
".sdc": "TIMING", ".tcl": "PHYSICAL", ".lef": "PHYSICAL",
|
| 253 |
+
".def": "PHYSICAL", ".gds": "PHYSICAL", ".json": "CONFIG",
|
| 254 |
+
".log": "LOG", ".rpt": "SIGNOFF",
|
| 255 |
+
}
|
| 256 |
+
scan_dirs = [
|
| 257 |
+
Path(f"outputs/{design_id}"),
|
| 258 |
+
Path(f"results/{design_id}"),
|
| 259 |
+
Path(f"designs/{design_id}"),
|
| 260 |
+
Path(openlane_root) / "designs" / design_id,
|
| 261 |
+
]
|
| 262 |
+
for d in scan_dirs:
|
| 263 |
+
if not d.exists():
|
| 264 |
+
continue
|
| 265 |
+
for f in d.rglob("*"):
|
| 266 |
+
if not f.is_file():
|
| 267 |
+
continue
|
| 268 |
+
# STRICT: only files where design_id is in filename OR direct parent folder
|
| 269 |
+
in_name = design_id.lower() in f.name.lower()
|
| 270 |
+
in_parent = design_id.lower() in f.parent.name.lower()
|
| 271 |
+
if not (in_name or in_parent):
|
| 272 |
+
continue
|
| 273 |
+
atype = type_map.get(f.suffix.lower())
|
| 274 |
+
if not atype:
|
| 275 |
+
continue
|
| 276 |
+
if atype == "RTL" and "_tb" in f.name.lower():
|
| 277 |
+
atype = "TESTBENCH"
|
| 278 |
+
if atype not in found:
|
| 279 |
+
found[atype] = []
|
| 280 |
+
sz = f.stat().st_size
|
| 281 |
+
found[atype].append({
|
| 282 |
+
"file": f.name,
|
| 283 |
+
"path": str(f),
|
| 284 |
+
"size_bytes": sz,
|
| 285 |
+
"size_human": fmt_size(sz),
|
| 286 |
+
})
|
| 287 |
+
return found
|
| 288 |
+
|
| 289 |
+
|
| 290 |
+
def fmt_size(b):
|
| 291 |
+
if b < 1024: return f"{b} B"
|
| 292 |
+
elif b < 1048576: return f"{b/1024:.1f} KB"
|
| 293 |
+
else: return f"{b/1048576:.1f} MB"
|
| 294 |
+
|
| 295 |
+
|
| 296 |
+
def run_build(design, args, attempt):
|
| 297 |
+
openlane_root = find_openlane_root()
|
| 298 |
+
cmd = build_command(design, args)
|
| 299 |
+
timestamp = datetime.datetime.now().isoformat()
|
| 300 |
+
|
| 301 |
+
print(f"\n{'─'*60}")
|
| 302 |
+
print(f" Design : {design['id']} ({design['complexity']})")
|
| 303 |
+
print(f" Attempt : {attempt}")
|
| 304 |
+
print(f" PDK : {args.pdk}")
|
| 305 |
+
print(f" Command : {' '.join(cmd[:6])} ...")
|
| 306 |
+
print(f"{'─'*60}")
|
| 307 |
+
|
| 308 |
+
start = time.time()
|
| 309 |
+
try:
|
| 310 |
+
proc = subprocess.run(cmd, capture_output=True, text=True, timeout=args.timeout)
|
| 311 |
+
stdout, stderr, retcode = proc.stdout, proc.stderr, proc.returncode
|
| 312 |
+
except subprocess.TimeoutExpired:
|
| 313 |
+
dur = round((time.time() - start) / 60, 1)
|
| 314 |
+
print(f" Result : ✗ TIMEOUT ({dur} min)")
|
| 315 |
+
return make_result(design, attempt, args, False, "TIMEOUT",
|
| 316 |
+
f"Exceeded {args.timeout}s timeout", [], {}, dur, timestamp, True)
|
| 317 |
+
except FileNotFoundError:
|
| 318 |
+
print("ERROR: main.py not found. Run from AgentIC root.")
|
| 319 |
+
sys.exit(1)
|
| 320 |
+
|
| 321 |
+
dur = round((time.time() - start) / 60, 1)
|
| 322 |
+
passed = detect_pass_fail(stdout, stderr, retcode)
|
| 323 |
+
|
| 324 |
+
# Sanity check — real builds never finish in under 2 minutes
|
| 325 |
+
# BUT only apply this if no real stages completed (otherwise it was a real fast failure)
|
| 326 |
+
completed = extract_completed_stages(stdout)
|
| 327 |
+
if dur < 2.0 and len(completed) <= 1:
|
| 328 |
+
print(f" ⚠ WARNING: Finished in {dur} min with no meaningful progress.")
|
| 329 |
+
print(f" ⚠ Check that your CLI args match and the orchestrator actually ran.")
|
| 330 |
+
passed = False
|
| 331 |
+
failed_stage = "INIT"
|
| 332 |
+
failed_reason = f"Build exited in {dur} min with ≤1 stage — CLI args may be wrong."
|
| 333 |
+
elif dur < 2.0:
|
| 334 |
+
# Build ran real stages but failed fast — use real failure data
|
| 335 |
+
print(f" ⚠ NOTE: Build completed in {dur} min (fast failure after {len(completed)} stages).")
|
| 336 |
+
failed_stage, failed_reason = (None, None) if passed else extract_failed_stage(stdout, stderr)
|
| 337 |
+
else:
|
| 338 |
+
failed_stage, failed_reason = (None, None) if passed else extract_failed_stage(stdout, stderr)
|
| 339 |
+
|
| 340 |
+
|
| 341 |
+
artifacts = find_artifacts(design["id"], openlane_root)
|
| 342 |
+
|
| 343 |
+
status = "✓ PASS" if passed else "✗ FAIL"
|
| 344 |
+
fail_info = ""
|
| 345 |
+
if failed_stage:
|
| 346 |
+
name = STAGE_INFO.get(failed_stage, {}).get("name", failed_stage)
|
| 347 |
+
fail_info = f" — failed at {failed_stage} ({name})"
|
| 348 |
+
|
| 349 |
+
print(f" Result : {status}{fail_info}")
|
| 350 |
+
print(f" Time : {dur} min")
|
| 351 |
+
print(f" Stages : {len(completed)} completed")
|
| 352 |
+
print(f" Artifacts: {', '.join(artifacts.keys()) if artifacts else 'none found for this design'}")
|
| 353 |
+
|
| 354 |
+
return make_result(design, attempt, args, passed, failed_stage,
|
| 355 |
+
failed_reason, completed, artifacts, dur, timestamp)
|
| 356 |
+
|
| 357 |
+
|
| 358 |
+
def make_result(design, attempt, args, passed, failed_stage, failed_reason,
|
| 359 |
+
completed, artifacts, duration, timestamp, timed_out=False):
|
| 360 |
+
info = STAGE_INFO.get(failed_stage, {}) if failed_stage else {}
|
| 361 |
+
return {
|
| 362 |
+
"design_id": design["id"],
|
| 363 |
+
"complexity": design["complexity"],
|
| 364 |
+
"attempt": attempt,
|
| 365 |
+
"passed": passed,
|
| 366 |
+
"timed_out": timed_out,
|
| 367 |
+
"failed_stage": failed_stage,
|
| 368 |
+
"failed_stage_name": info.get("name"),
|
| 369 |
+
"failed_stage_critical": info.get("critical"),
|
| 370 |
+
"failed_reason": failed_reason,
|
| 371 |
+
"completed_stages": completed,
|
| 372 |
+
"completed_stages_count": len(completed),
|
| 373 |
+
"artifacts": artifacts,
|
| 374 |
+
"artifact_types": list(artifacts.keys()),
|
| 375 |
+
"rtl_generated": "RTL" in artifacts,
|
| 376 |
+
"testbench_generated": "TESTBENCH" in artifacts,
|
| 377 |
+
"gds_generated": "PHYSICAL" in artifacts,
|
| 378 |
+
"duration_minutes": duration,
|
| 379 |
+
"timestamp": timestamp,
|
| 380 |
+
"pdk": args.pdk,
|
| 381 |
+
}
|
| 382 |
+
|
| 383 |
+
|
| 384 |
+
def print_summary(results):
|
| 385 |
+
passed = [r for r in results if r["passed"]]
|
| 386 |
+
failed = [r for r in results if not r["passed"]]
|
| 387 |
+
rate = len(passed) / len(results) * 100 if results else 0
|
| 388 |
+
avg = sum(r["duration_minutes"] for r in results) / len(results)
|
| 389 |
+
fails = {}
|
| 390 |
+
for r in failed:
|
| 391 |
+
s = r.get("failed_stage")
|
| 392 |
+
if s: fails[s] = fails.get(s, 0) + 1
|
| 393 |
+
|
| 394 |
+
print(f"\n{'═'*60}")
|
| 395 |
+
print(f" BENCHMARK COMPLETE")
|
| 396 |
+
print(f"{'═'*60}")
|
| 397 |
+
print(f" Pass Rate : {rate:.0f}% ({len(passed)}/{len(results)})")
|
| 398 |
+
print(f" Avg Time : {avg:.1f} min")
|
| 399 |
+
print(f"{'─'*60}")
|
| 400 |
+
for r in passed:
|
| 401 |
+
print(f" ✓ {r['design_id']:<22} {r['duration_minutes']} min")
|
| 402 |
+
for r in failed:
|
| 403 |
+
at = r.get("failed_stage_name") or r.get("failed_stage") or "unknown"
|
| 404 |
+
print(f" ✗ {r['design_id']:<22} failed at {at}")
|
| 405 |
+
if fails:
|
| 406 |
+
worst = max(fails, key=fails.get)
|
| 407 |
+
name = STAGE_INFO.get(worst, {}).get("name", worst)
|
| 408 |
+
print(f"\n ⚠ Bottleneck: {worst} ({name}) — fix this first")
|
| 409 |
+
print(f"{'═'*60}\n")
|
| 410 |
+
|
| 411 |
+
|
| 412 |
+
def generate_markdown(results, args):
|
| 413 |
+
today = datetime.date.today().strftime("%B %d, %Y")
|
| 414 |
+
passed = [r for r in results if r["passed"]]
|
| 415 |
+
failed = [r for r in results if not r["passed"]]
|
| 416 |
+
rate = len(passed) / len(results) * 100 if results else 0
|
| 417 |
+
avg = sum(r["duration_minutes"] for r in results) / len(results)
|
| 418 |
+
fails = {}
|
| 419 |
+
for r in failed:
|
| 420 |
+
s = r.get("failed_stage")
|
| 421 |
+
if s: fails[s] = fails.get(s, 0) + 1
|
| 422 |
+
|
| 423 |
+
L = [
|
| 424 |
+
f"# AgentIC Benchmark Report",
|
| 425 |
+
f"**Date:** {today} ",
|
| 426 |
+
f"**PDK:** {args.pdk} ",
|
| 427 |
+
f"**Model:** NVIDIA NIM — Llama 3.3 70B ",
|
| 428 |
+
f"**Mode:** {'RTL only' if args.skip_openlane else 'Full pipeline'}",
|
| 429 |
+
"",
|
| 430 |
+
"## Summary",
|
| 431 |
+
"| Metric | Value |",
|
| 432 |
+
"|--------|-------|",
|
| 433 |
+
f"| Total Designs | {len(results)} |",
|
| 434 |
+
f"| **First-Attempt Pass Rate** | **{rate:.0f}% ({len(passed)}/{len(results)})** |",
|
| 435 |
+
f"| Average Build Time | {avg:.1f} min |",
|
| 436 |
+
f"| RTL Generated (incl. failures) | {sum(1 for r in results if r.get('rtl_generated'))}/{len(results)} |",
|
| 437 |
+
f"| GDS Generated | {sum(1 for r in results if r.get('gds_generated'))}/{len(results)} |",
|
| 438 |
+
"",
|
| 439 |
+
"## Results",
|
| 440 |
+
"| Design | Complexity | Pass? | Failed At | Time | RTL | GDS |",
|
| 441 |
+
"|--------|-----------|-------|-----------|------|-----|-----|",
|
| 442 |
+
]
|
| 443 |
+
for r in results:
|
| 444 |
+
s = "✓" if r["passed"] else "✗"
|
| 445 |
+
f = r.get("failed_stage_name") or r.get("failed_stage") or "—"
|
| 446 |
+
L.append(f"| {r['design_id']} | {r['complexity']} | {s} | {f} | {r['duration_minutes']} min | {'✓' if r.get('rtl_generated') else '✗'} | {'✓' if r.get('gds_generated') else '✗'} |")
|
| 447 |
+
|
| 448 |
+
if fails:
|
| 449 |
+
L += ["", "## Stage Failure Analysis",
|
| 450 |
+
"| Stage | Industry Name | Failures | Critical? |",
|
| 451 |
+
"|-------|--------------|----------|-----------|"]
|
| 452 |
+
for stage, count in sorted(fails.items(), key=lambda x: -x[1]):
|
| 453 |
+
info = STAGE_INFO.get(stage, {})
|
| 454 |
+
L.append(f"| {stage} | {info.get('name', stage)} | {count} | {'🔴 Yes' if info.get('critical') else '🟡 Optional'} |")
|
| 455 |
+
worst = max(fails, key=fails.get)
|
| 456 |
+
L += ["", f"**Fix `{worst}` first.**"]
|
| 457 |
+
|
| 458 |
+
L += [
|
| 459 |
+
"", "## Which Stages Matter in Industry",
|
| 460 |
+
"| Stage | Skip OK? | Why |",
|
| 461 |
+
"|-------|----------|-----|",
|
| 462 |
+
"| RTL_GEN + RTL_FIX | ❌ Never | This is the chip |",
|
| 463 |
+
"| VERIFICATION | ❌ Never | Proves it works |",
|
| 464 |
+
"| HARDENING | ❌ Never | Physical layout |",
|
| 465 |
+
"| SIGNOFF | ❌ Never | Fab requirement |",
|
| 466 |
+
"| FORMAL_VERIFY | ✅ Simple designs | Optional for non-safety-critical |",
|
| 467 |
+
"| COVERAGE_CHECK | ✅ If sim passes | Nice to have |",
|
| 468 |
+
"| REGRESSION | ✅ Yes | Corner cases only |",
|
| 469 |
+
"| ECO_PATCH | ✅ First attempt | Only if signoff fails |",
|
| 470 |
+
"| CONVERGENCE | ✅ Simple designs | Embedded in hardening |",
|
| 471 |
+
"", "---",
|
| 472 |
+
f"*Generated by AgentIC Benchmark Runner — {today}*",
|
| 473 |
+
]
|
| 474 |
+
return "\n".join(L)
|
| 475 |
+
|
| 476 |
+
|
| 477 |
+
def main():
|
| 478 |
+
args = parse_args()
|
| 479 |
+
|
| 480 |
+
if not Path("main.py").exists():
|
| 481 |
+
print("ERROR: Run from AgentIC root directory (where main.py is).")
|
| 482 |
+
sys.exit(1)
|
| 483 |
+
|
| 484 |
+
output_dir = Path(args.output_dir)
|
| 485 |
+
output_dir.mkdir(parents=True, exist_ok=True)
|
| 486 |
+
|
| 487 |
+
designs = TEST_DESIGNS
|
| 488 |
+
if args.design:
|
| 489 |
+
designs = [d for d in TEST_DESIGNS if d["id"] == args.design]
|
| 490 |
+
if not designs:
|
| 491 |
+
print(f"ERROR: '{args.design}' not found.")
|
| 492 |
+
print(f"Available IDs: {[d['id'] for d in TEST_DESIGNS]}")
|
| 493 |
+
sys.exit(1)
|
| 494 |
+
|
| 495 |
+
total = len(designs) * args.attempts
|
| 496 |
+
est_mins = total * 25
|
| 497 |
+
|
| 498 |
+
print(f"\n{'═'*60}")
|
| 499 |
+
print(f" AgentIC Benchmark Runner v2")
|
| 500 |
+
print(f"{'═'*60}")
|
| 501 |
+
print(f" Designs : {len(designs)}")
|
| 502 |
+
print(f" Total runs: {total}")
|
| 503 |
+
print(f" PDK : {args.pdk}")
|
| 504 |
+
mode_parts = []
|
| 505 |
+
if args.skip_openlane:
|
| 506 |
+
mode_parts.append("RTL only (--skip-openlane)")
|
| 507 |
+
else:
|
| 508 |
+
mode_parts.append("Full pipeline")
|
| 509 |
+
if args.skip_coverage:
|
| 510 |
+
mode_parts.append("skip coverage (--skip-coverage)")
|
| 511 |
+
print(f" Mode : {', '.join(mode_parts)}")
|
| 512 |
+
print(f" Est. time : ~{est_mins} min")
|
| 513 |
+
print(f" Output : {output_dir}/")
|
| 514 |
+
print(f"{'═'*60}\n")
|
| 515 |
+
|
| 516 |
+
all_results = []
|
| 517 |
+
date_str = datetime.date.today().strftime("%Y-%m-%d")
|
| 518 |
+
|
| 519 |
+
for design in designs:
|
| 520 |
+
for attempt in range(1, args.attempts + 1):
|
| 521 |
+
result = run_build(design, args, attempt)
|
| 522 |
+
all_results.append(result)
|
| 523 |
+
# Save after every build
|
| 524 |
+
with open(output_dir / f"interim_{date_str}.json", "w") as f:
|
| 525 |
+
json.dump({"results": all_results}, f, indent=2)
|
| 526 |
+
|
| 527 |
+
# Final saves
|
| 528 |
+
with open(output_dir / f"benchmark_{date_str}.json", "w") as f:
|
| 529 |
+
json.dump({
|
| 530 |
+
"meta": {
|
| 531 |
+
"date": date_str, "pdk": args.pdk,
|
| 532 |
+
"pass_rate_pct": round(
|
| 533 |
+
len([r for r in all_results if r["passed"]]) / len(all_results) * 100, 1
|
| 534 |
+
)
|
| 535 |
+
},
|
| 536 |
+
"results": all_results
|
| 537 |
+
}, f, indent=2)
|
| 538 |
+
|
| 539 |
+
md_path = output_dir / f"benchmark_{date_str}.md"
|
| 540 |
+
with open(md_path, "w") as f:
|
| 541 |
+
f.write(generate_markdown(all_results, args))
|
| 542 |
+
|
| 543 |
+
print_summary(all_results)
|
| 544 |
+
print(f" Saved: {md_path}")
|
| 545 |
+
print(f" Saved: {output_dir}/benchmark_{date_str}.json\n")
|
| 546 |
+
|
| 547 |
+
|
| 548 |
+
if __name__ == "__main__":
|
| 549 |
+
main()
|
docs/IP_SAFETY_AND_EXPANSION.md
ADDED
|
@@ -0,0 +1,146 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# AgentIC — IP Safety, Data Privacy & Expansion Plan
|
| 2 |
+
|
| 3 |
+
## 1. Is Your IP Secure?
|
| 4 |
+
|
| 5 |
+
**Short answer: Yes, by design — with caveats to understand.**
|
| 6 |
+
|
| 7 |
+
Your chip designs (RTL, specs, build prompts) pass through external LLM APIs during the build. Here is precisely what leaves the system and what never does.
|
| 8 |
+
|
| 9 |
+
---
|
| 10 |
+
|
| 11 |
+
## 2. What Data Leaves AgentIC
|
| 12 |
+
|
| 13 |
+
| Data | Where it goes | Can you control it? |
|
| 14 |
+
|---|---|---|
|
| 15 |
+
| Design description + RTL prompts | NVIDIA NIM API (`integrate.api.nvidia.com`) | Yes — route to local Ollama instead |
|
| 16 |
+
| Spec + RTL during agent reasoning | Same NVIDIA endpoint | Yes — BYOK plan lets you use your own hosted API |
|
| 17 |
+
| Build logs | Stays on server only | N/A — never sent externally |
|
| 18 |
+
| VCD waveforms | Stays on server only | N/A |
|
| 19 |
+
| GDS layout files | Stays on server only | N/A |
|
| 20 |
+
| Training JSONL export | Stays on local disk (`training/agentic_sft_data.jsonl`) | N/A — never uploaded |
|
| 21 |
+
| API keys | HuggingFace Space Secrets (encrypted at rest by HF) | Yes — rotate at any time |
|
| 22 |
+
| User profiles + build counts | Supabase (only when auth is enabled) | Yes — opt-in, use your own Supabase project |
|
| 23 |
+
|
| 24 |
+
**Nothing is ever sold, shared, or used to train third-party models.** The training JSONL is written locally on your machine or HF Space persistent storage — it stays yours.
|
| 25 |
+
|
| 26 |
+
---
|
| 27 |
+
|
| 28 |
+
## 3. The LLM API Risk — And How to Eliminate It
|
| 29 |
+
|
| 30 |
+
When a user submits `"Design a 32-bit RISC-V processor with branch prediction"`, that prompt goes to NVIDIA's inference endpoint. NVIDIA's [API Terms of Service](https://www.nvidia.com/en-us/agreements/enterprise-software/nvidia-api-trial-terms-of-service/) state they do not use API inputs to train their models.
|
| 31 |
+
|
| 32 |
+
**If your design is confidential, use the BYOK plan:**
|
| 33 |
+
- Set `plan = byok` for your account in Supabase
|
| 34 |
+
- Store your own API key (pointing to a **self-hosted** vLLM/Ollama endpoint)
|
| 35 |
+
- The build runs entirely on-premises — nothing leaves your network
|
| 36 |
+
|
| 37 |
+
**Self-hosted LLM options (zero data egress):**
|
| 38 |
+
```
|
| 39 |
+
# Ollama — local GPU inference
|
| 40 |
+
LLM_BASE_URL=http://localhost:11434
|
| 41 |
+
LLM_MODEL=ollama/llama3.3:70b
|
| 42 |
+
|
| 43 |
+
# vLLM on your own server
|
| 44 |
+
LLM_BASE_URL=http://YOUR_SERVER:8000/v1
|
| 45 |
+
LLM_MODEL=meta-llama/Llama-3.3-70B-Instruct
|
| 46 |
+
```
|
| 47 |
+
|
| 48 |
+
---
|
| 49 |
+
|
| 50 |
+
## 4. What Stays Completely Private
|
| 51 |
+
|
| 52 |
+
These never leave the system under any configuration:
|
| 53 |
+
|
| 54 |
+
- **EDA tool execution** — `iverilog`, `verilator`, `yosys`, `sby` run 100% locally
|
| 55 |
+
- **VCD simulation waveforms** — generated and stored locally
|
| 56 |
+
- **GDS chip layouts** — OpenLane output, stays on disk
|
| 57 |
+
- **Training JSONL** — local fine-tuning data, never uploaded
|
| 58 |
+
- **Build logs** — streamed to your browser via SSE, never stored externally
|
| 59 |
+
- **Supabase data** — your own Supabase project, your data
|
| 60 |
+
|
| 61 |
+
---
|
| 62 |
+
|
| 63 |
+
## 5. Expansion Plan
|
| 64 |
+
|
| 65 |
+
### Phase 1 — Platform Foundation (Current)
|
| 66 |
+
- [x] Multi-agent RTL build pipeline (RTL → Verification → Formal → Coverage → GDSII)
|
| 67 |
+
- [x] Human-in-the-loop approval at each stage
|
| 68 |
+
- [x] Supabase auth + plan tiers (Free / Starter / Pro / BYOK)
|
| 69 |
+
- [x] Razorpay billing with webhook verification
|
| 70 |
+
- [x] HuggingFace Spaces deployment (Docker)
|
| 71 |
+
- [x] Training data export pipeline (local JSONL)
|
| 72 |
+
|
| 73 |
+
### Phase 2 — Scale & Monetize (Q1 2026)
|
| 74 |
+
- [ ] **Frontend auth UI** — login/signup pages using Supabase Auth JS SDK
|
| 75 |
+
- [ ] **Pricing page** — Razorpay checkout integration in React
|
| 76 |
+
- [ ] **User dashboard** — build history, plan status, upgrade prompts
|
| 77 |
+
- [ ] **BYOK key management UI** — set/update encrypted API key from browser
|
| 78 |
+
- [ ] **Team accounts** — shared plan, shared build quota
|
| 79 |
+
|
| 80 |
+
### Phase 3 — IP Hardening (Q2 2026)
|
| 81 |
+
- [ ] **On-premise mode** — single Docker Compose stack with bundled local LLM (Ollama)
|
| 82 |
+
- [ ] **Air-gapped deployment guide** — no internet required, all EDA tools + LLM in one stack
|
| 83 |
+
- [ ] **Design vault** — encrypted storage for completed RTL/GDS with per-user S3-compatible bucket
|
| 84 |
+
- [ ] **Differential privacy** on training export — strip user identifiers from JSONL before fine-tuning
|
| 85 |
+
- [ ] **Audit log** — every API call that contains design data is logged with timestamp + user
|
| 86 |
+
|
| 87 |
+
### Phase 4 — Enterprise (Q3 2026)
|
| 88 |
+
- [ ] **SSO** — SAML/OIDC via Supabase (works with Google Workspace, Okta)
|
| 89 |
+
- [ ] **NDA-grade deployment** — dedicated HF Space per enterprise tenant with isolated secrets
|
| 90 |
+
- [ ] **Custom PDK support** — bring your own standard cell library without submitting it to any cloud
|
| 91 |
+
- [ ] **Multi-project wafer slot reservation** — integration with Efabless / Skywater shuttle APIs
|
| 92 |
+
- [ ] **SLA agreement** — 99.9% uptime on HF Pro+ hardware (A10G GPU)
|
| 93 |
+
|
| 94 |
+
---
|
| 95 |
+
|
| 96 |
+
## 6. Security Architecture Summary
|
| 97 |
+
|
| 98 |
+
```
|
| 99 |
+
User Browser
|
| 100 |
+
│
|
| 101 |
+
│ HTTPS (TLS 1.3)
|
| 102 |
+
▼
|
| 103 |
+
HuggingFace Space (Docker container)
|
| 104 |
+
│
|
| 105 |
+
├── FastAPI (server/api.py)
|
| 106 |
+
│ ├── Supabase JWT verification ← user never sees DB directly
|
| 107 |
+
│ ├── Plan guard (402 on limit)
|
| 108 |
+
│ └── BYOK key decrypt ← key never logged
|
| 109 |
+
│
|
| 110 |
+
├── LLM call ─��────────────────────► NVIDIA NIM API (or your private endpoint)
|
| 111 |
+
│ └── Design prompt goes here ← only this crosses the boundary
|
| 112 |
+
│
|
| 113 |
+
├── EDA tools (iverilog, yosys, sby) ← 100% local, no network calls
|
| 114 |
+
│
|
| 115 |
+
└── Build artifacts → local disk
|
| 116 |
+
training/agentic_sft_data.jsonl ← yours only
|
| 117 |
+
|
| 118 |
+
Supabase (your project)
|
| 119 |
+
├── profiles (plan, build count, encrypted BYOK key)
|
| 120 |
+
├── builds (job history)
|
| 121 |
+
└── payments (Razorpay records)
|
| 122 |
+
```
|
| 123 |
+
|
| 124 |
+
---
|
| 125 |
+
|
| 126 |
+
## 7. Secrets You Control
|
| 127 |
+
|
| 128 |
+
| Secret | Stored where | How to rotate |
|
| 129 |
+
|---|---|---|
|
| 130 |
+
| `NVIDIA_API_KEY` | HF Space Secrets + local `.env` | NVIDIA dashboard → regenerate |
|
| 131 |
+
| `SUPABASE_SERVICE_KEY` | HF Space Secrets only | Supabase → Settings → API |
|
| 132 |
+
| `ENCRYPTION_KEY` | HF Space Secrets only | Change + re-encrypt stored BYOK keys |
|
| 133 |
+
| `RAZORPAY_KEY_SECRET` | HF Space Secrets only | Razorpay dashboard |
|
| 134 |
+
| `HF_TOKEN` | GitHub Actions Secrets | HuggingFace → Settings → Tokens |
|
| 135 |
+
|
| 136 |
+
**Rotate all keys immediately if:**
|
| 137 |
+
- A key appears in any public log, PR, or error message
|
| 138 |
+
- You suspect unauthorized use
|
| 139 |
+
- Any team member with access leaves
|
| 140 |
+
|
| 141 |
+
To update HF Space secrets programmatically:
|
| 142 |
+
```python
|
| 143 |
+
from huggingface_hub import HfApi
|
| 144 |
+
api = HfApi(token="your_new_hf_token")
|
| 145 |
+
api.add_space_secret("vxkyyy/AgentIC", "NVIDIA_API_KEY", "new_value")
|
| 146 |
+
```
|
metircs/apb_timer/apb_timer_industry_benchmark_20260306_020245.json
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"design_name": "apb_timer",
|
| 3 |
+
"generated_at_epoch": 1772742765,
|
| 4 |
+
"build_status": "SUCCESS",
|
| 5 |
+
"signoff_result": "UNKNOWN",
|
| 6 |
+
"pdk_profile": "sky130",
|
| 7 |
+
"pdk": "sky130A",
|
| 8 |
+
"std_cell_library": "sky130_fd_sc_hd",
|
| 9 |
+
"verification_metadata": {
|
| 10 |
+
"tb_gate_mode": "strict",
|
| 11 |
+
"tb_max_retries": 3,
|
| 12 |
+
"tb_fallback_template": "uvm_lite",
|
| 13 |
+
"tb_static_fail_count": 0,
|
| 14 |
+
"tb_compile_fail_count": 0,
|
| 15 |
+
"tb_repair_fail_count": 0,
|
| 16 |
+
"tb_gate_history_count": 1,
|
| 17 |
+
"tb_gate_history": [
|
| 18 |
+
{
|
| 19 |
+
"timestamp": 1772742645,
|
| 20 |
+
"gate": "compile",
|
| 21 |
+
"ok": true,
|
| 22 |
+
"action": "gate_pass",
|
| 23 |
+
"issue_categories": [
|
| 24 |
+
"compile_ok"
|
| 25 |
+
],
|
| 26 |
+
"fingerprint": "f0eae3025ab704df"
|
| 27 |
+
}
|
| 28 |
+
],
|
| 29 |
+
"coverage_backend": "auto",
|
| 30 |
+
"coverage_fallback_policy": "fallback_oss",
|
| 31 |
+
"coverage_profile": "balanced",
|
| 32 |
+
"coverage_thresholds": {
|
| 33 |
+
"line": 85.0,
|
| 34 |
+
"branch": 80.0,
|
| 35 |
+
"toggle": 75.0,
|
| 36 |
+
"functional": 80.0
|
| 37 |
+
},
|
| 38 |
+
"coverage_mode": "unknown",
|
| 39 |
+
"coverage_error_kind": "",
|
| 40 |
+
"coverage_diag_path": "",
|
| 41 |
+
"coverage_threshold_pass": {
|
| 42 |
+
"line": false,
|
| 43 |
+
"branch": false,
|
| 44 |
+
"toggle": false,
|
| 45 |
+
"functional": false
|
| 46 |
+
}
|
| 47 |
+
},
|
| 48 |
+
"industry_benchmark": {
|
| 49 |
+
"area_um2": 0.0,
|
| 50 |
+
"cell_count": 0.0,
|
| 51 |
+
"utilization_pct": 0.0,
|
| 52 |
+
"timing_wns_ns": 0.0,
|
| 53 |
+
"timing_tns_ns": 0.0,
|
| 54 |
+
"hold_slack_ns": 0.0,
|
| 55 |
+
"drc_violations": -1,
|
| 56 |
+
"lvs_errors": -1,
|
| 57 |
+
"antenna_violations": -1,
|
| 58 |
+
"total_power_mw": 0.0,
|
| 59 |
+
"internal_power_mw": 0.0,
|
| 60 |
+
"switching_power_mw": 0.0,
|
| 61 |
+
"leakage_power_uw": 0.0,
|
| 62 |
+
"irdrop_vpwr_mv": 0.0,
|
| 63 |
+
"irdrop_vgnd_mv": 0.0,
|
| 64 |
+
"congestion_usage_pct": 0.0,
|
| 65 |
+
"congestion_overflow": 0,
|
| 66 |
+
"coverage_line_pct": 0.0,
|
| 67 |
+
"coverage_branch_pct": 0.0,
|
| 68 |
+
"coverage_toggle_pct": 0.0,
|
| 69 |
+
"coverage_functional_pct": 0.0,
|
| 70 |
+
"coverage_backend": "auto",
|
| 71 |
+
"coverage_mode": "unknown",
|
| 72 |
+
"formal_result": "PASS",
|
| 73 |
+
"lec_result": "UNKNOWN",
|
| 74 |
+
"regression_passed": 0,
|
| 75 |
+
"regression_total": 0,
|
| 76 |
+
"clock_period_ns": "10.0",
|
| 77 |
+
"pivots_used": 0,
|
| 78 |
+
"global_steps": 7
|
| 79 |
+
}
|
| 80 |
+
}
|
metircs/apb_timer/apb_timer_industry_benchmark_20260306_020245.md
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# apb_timer Industry Benchmark Metrics
|
| 2 |
+
|
| 3 |
+
- Generated At (epoch): `1772742765`
|
| 4 |
+
- Build Status: `SUCCESS`
|
| 5 |
+
- Signoff Result: `UNKNOWN`
|
| 6 |
+
- PDK Profile: `sky130`
|
| 7 |
+
|
| 8 |
+
| Metric | Value |
|
| 9 |
+
|---|---|
|
| 10 |
+
| `area_um2` | `0.0` |
|
| 11 |
+
| `cell_count` | `0.0` |
|
| 12 |
+
| `utilization_pct` | `0.0` |
|
| 13 |
+
| `timing_wns_ns` | `0.0` |
|
| 14 |
+
| `timing_tns_ns` | `0.0` |
|
| 15 |
+
| `hold_slack_ns` | `0.0` |
|
| 16 |
+
| `drc_violations` | `-1` |
|
| 17 |
+
| `lvs_errors` | `-1` |
|
| 18 |
+
| `antenna_violations` | `-1` |
|
| 19 |
+
| `total_power_mw` | `0.0` |
|
| 20 |
+
| `internal_power_mw` | `0.0` |
|
| 21 |
+
| `switching_power_mw` | `0.0` |
|
| 22 |
+
| `leakage_power_uw` | `0.0` |
|
| 23 |
+
| `irdrop_vpwr_mv` | `0.0` |
|
| 24 |
+
| `irdrop_vgnd_mv` | `0.0` |
|
| 25 |
+
| `congestion_usage_pct` | `0.0` |
|
| 26 |
+
| `congestion_overflow` | `0` |
|
| 27 |
+
| `coverage_line_pct` | `0.0` |
|
| 28 |
+
| `coverage_branch_pct` | `0.0` |
|
| 29 |
+
| `coverage_toggle_pct` | `0.0` |
|
| 30 |
+
| `coverage_functional_pct` | `0.0` |
|
| 31 |
+
| `coverage_backend` | `auto` |
|
| 32 |
+
| `coverage_mode` | `unknown` |
|
| 33 |
+
| `formal_result` | `PASS` |
|
| 34 |
+
| `lec_result` | `UNKNOWN` |
|
| 35 |
+
| `regression_passed` | `0` |
|
| 36 |
+
| `regression_total` | `0` |
|
| 37 |
+
| `clock_period_ns` | `10.0` |
|
| 38 |
+
| `pivots_used` | `0` |
|
| 39 |
+
| `global_steps` | `7` |
|
metircs/apb_timer/latest.json
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"design_name": "apb_timer",
|
| 3 |
+
"generated_at_epoch": 1772742765,
|
| 4 |
+
"build_status": "SUCCESS",
|
| 5 |
+
"signoff_result": "UNKNOWN",
|
| 6 |
+
"pdk_profile": "sky130",
|
| 7 |
+
"pdk": "sky130A",
|
| 8 |
+
"std_cell_library": "sky130_fd_sc_hd",
|
| 9 |
+
"verification_metadata": {
|
| 10 |
+
"tb_gate_mode": "strict",
|
| 11 |
+
"tb_max_retries": 3,
|
| 12 |
+
"tb_fallback_template": "uvm_lite",
|
| 13 |
+
"tb_static_fail_count": 0,
|
| 14 |
+
"tb_compile_fail_count": 0,
|
| 15 |
+
"tb_repair_fail_count": 0,
|
| 16 |
+
"tb_gate_history_count": 1,
|
| 17 |
+
"tb_gate_history": [
|
| 18 |
+
{
|
| 19 |
+
"timestamp": 1772742645,
|
| 20 |
+
"gate": "compile",
|
| 21 |
+
"ok": true,
|
| 22 |
+
"action": "gate_pass",
|
| 23 |
+
"issue_categories": [
|
| 24 |
+
"compile_ok"
|
| 25 |
+
],
|
| 26 |
+
"fingerprint": "f0eae3025ab704df"
|
| 27 |
+
}
|
| 28 |
+
],
|
| 29 |
+
"coverage_backend": "auto",
|
| 30 |
+
"coverage_fallback_policy": "fallback_oss",
|
| 31 |
+
"coverage_profile": "balanced",
|
| 32 |
+
"coverage_thresholds": {
|
| 33 |
+
"line": 85.0,
|
| 34 |
+
"branch": 80.0,
|
| 35 |
+
"toggle": 75.0,
|
| 36 |
+
"functional": 80.0
|
| 37 |
+
},
|
| 38 |
+
"coverage_mode": "unknown",
|
| 39 |
+
"coverage_error_kind": "",
|
| 40 |
+
"coverage_diag_path": "",
|
| 41 |
+
"coverage_threshold_pass": {
|
| 42 |
+
"line": false,
|
| 43 |
+
"branch": false,
|
| 44 |
+
"toggle": false,
|
| 45 |
+
"functional": false
|
| 46 |
+
}
|
| 47 |
+
},
|
| 48 |
+
"industry_benchmark": {
|
| 49 |
+
"area_um2": 0.0,
|
| 50 |
+
"cell_count": 0.0,
|
| 51 |
+
"utilization_pct": 0.0,
|
| 52 |
+
"timing_wns_ns": 0.0,
|
| 53 |
+
"timing_tns_ns": 0.0,
|
| 54 |
+
"hold_slack_ns": 0.0,
|
| 55 |
+
"drc_violations": -1,
|
| 56 |
+
"lvs_errors": -1,
|
| 57 |
+
"antenna_violations": -1,
|
| 58 |
+
"total_power_mw": 0.0,
|
| 59 |
+
"internal_power_mw": 0.0,
|
| 60 |
+
"switching_power_mw": 0.0,
|
| 61 |
+
"leakage_power_uw": 0.0,
|
| 62 |
+
"irdrop_vpwr_mv": 0.0,
|
| 63 |
+
"irdrop_vgnd_mv": 0.0,
|
| 64 |
+
"congestion_usage_pct": 0.0,
|
| 65 |
+
"congestion_overflow": 0,
|
| 66 |
+
"coverage_line_pct": 0.0,
|
| 67 |
+
"coverage_branch_pct": 0.0,
|
| 68 |
+
"coverage_toggle_pct": 0.0,
|
| 69 |
+
"coverage_functional_pct": 0.0,
|
| 70 |
+
"coverage_backend": "auto",
|
| 71 |
+
"coverage_mode": "unknown",
|
| 72 |
+
"formal_result": "PASS",
|
| 73 |
+
"lec_result": "UNKNOWN",
|
| 74 |
+
"regression_passed": 0,
|
| 75 |
+
"regression_total": 0,
|
| 76 |
+
"clock_period_ns": "10.0",
|
| 77 |
+
"pivots_used": 0,
|
| 78 |
+
"global_steps": 7
|
| 79 |
+
}
|
| 80 |
+
}
|
metircs/apb_timer/latest.md
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# apb_timer Industry Benchmark Metrics
|
| 2 |
+
|
| 3 |
+
- Generated At (epoch): `1772742765`
|
| 4 |
+
- Build Status: `SUCCESS`
|
| 5 |
+
- Signoff Result: `UNKNOWN`
|
| 6 |
+
- PDK Profile: `sky130`
|
| 7 |
+
|
| 8 |
+
| Metric | Value |
|
| 9 |
+
|---|---|
|
| 10 |
+
| `area_um2` | `0.0` |
|
| 11 |
+
| `cell_count` | `0.0` |
|
| 12 |
+
| `utilization_pct` | `0.0` |
|
| 13 |
+
| `timing_wns_ns` | `0.0` |
|
| 14 |
+
| `timing_tns_ns` | `0.0` |
|
| 15 |
+
| `hold_slack_ns` | `0.0` |
|
| 16 |
+
| `drc_violations` | `-1` |
|
| 17 |
+
| `lvs_errors` | `-1` |
|
| 18 |
+
| `antenna_violations` | `-1` |
|
| 19 |
+
| `total_power_mw` | `0.0` |
|
| 20 |
+
| `internal_power_mw` | `0.0` |
|
| 21 |
+
| `switching_power_mw` | `0.0` |
|
| 22 |
+
| `leakage_power_uw` | `0.0` |
|
| 23 |
+
| `irdrop_vpwr_mv` | `0.0` |
|
| 24 |
+
| `irdrop_vgnd_mv` | `0.0` |
|
| 25 |
+
| `congestion_usage_pct` | `0.0` |
|
| 26 |
+
| `congestion_overflow` | `0` |
|
| 27 |
+
| `coverage_line_pct` | `0.0` |
|
| 28 |
+
| `coverage_branch_pct` | `0.0` |
|
| 29 |
+
| `coverage_toggle_pct` | `0.0` |
|
| 30 |
+
| `coverage_functional_pct` | `0.0` |
|
| 31 |
+
| `coverage_backend` | `auto` |
|
| 32 |
+
| `coverage_mode` | `unknown` |
|
| 33 |
+
| `formal_result` | `PASS` |
|
| 34 |
+
| `lec_result` | `UNKNOWN` |
|
| 35 |
+
| `regression_passed` | `0` |
|
| 36 |
+
| `regression_total` | `0` |
|
| 37 |
+
| `clock_period_ns` | `10.0` |
|
| 38 |
+
| `pivots_used` | `0` |
|
| 39 |
+
| `global_steps` | `7` |
|
metircs/counter8/counter8_industry_benchmark_20260306_013138.json
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"design_name": "counter8",
|
| 3 |
+
"generated_at_epoch": 1772740898,
|
| 4 |
+
"build_status": "SUCCESS",
|
| 5 |
+
"signoff_result": "UNKNOWN",
|
| 6 |
+
"pdk_profile": "sky130",
|
| 7 |
+
"pdk": "sky130A",
|
| 8 |
+
"std_cell_library": "sky130_fd_sc_hd",
|
| 9 |
+
"verification_metadata": {
|
| 10 |
+
"tb_gate_mode": "strict",
|
| 11 |
+
"tb_max_retries": 3,
|
| 12 |
+
"tb_fallback_template": "uvm_lite",
|
| 13 |
+
"tb_static_fail_count": 0,
|
| 14 |
+
"tb_compile_fail_count": 1,
|
| 15 |
+
"tb_repair_fail_count": 0,
|
| 16 |
+
"tb_gate_history_count": 3,
|
| 17 |
+
"tb_gate_history": [
|
| 18 |
+
{
|
| 19 |
+
"timestamp": 1772740616,
|
| 20 |
+
"gate": "compile",
|
| 21 |
+
"ok": false,
|
| 22 |
+
"action": "gate_fail",
|
| 23 |
+
"issue_categories": [
|
| 24 |
+
"compile_error"
|
| 25 |
+
],
|
| 26 |
+
"fingerprint": "ae3cc7ecd62b2214"
|
| 27 |
+
},
|
| 28 |
+
{
|
| 29 |
+
"timestamp": 1772740616,
|
| 30 |
+
"gate": "compile",
|
| 31 |
+
"ok": false,
|
| 32 |
+
"action": "auto_repair",
|
| 33 |
+
"issue_categories": [
|
| 34 |
+
"compile_error"
|
| 35 |
+
],
|
| 36 |
+
"fingerprint": "ae3cc7ecd62b2214"
|
| 37 |
+
},
|
| 38 |
+
{
|
| 39 |
+
"timestamp": 1772740616,
|
| 40 |
+
"gate": "compile",
|
| 41 |
+
"ok": true,
|
| 42 |
+
"action": "gate_pass",
|
| 43 |
+
"issue_categories": [
|
| 44 |
+
"compile_ok"
|
| 45 |
+
],
|
| 46 |
+
"fingerprint": "db727dd2dc2e58b0"
|
| 47 |
+
}
|
| 48 |
+
],
|
| 49 |
+
"coverage_backend": "auto",
|
| 50 |
+
"coverage_fallback_policy": "fallback_oss",
|
| 51 |
+
"coverage_profile": "balanced",
|
| 52 |
+
"coverage_thresholds": {
|
| 53 |
+
"line": 85.0,
|
| 54 |
+
"branch": 80.0,
|
| 55 |
+
"toggle": 75.0,
|
| 56 |
+
"functional": 80.0
|
| 57 |
+
},
|
| 58 |
+
"coverage_mode": "unknown",
|
| 59 |
+
"coverage_error_kind": "",
|
| 60 |
+
"coverage_diag_path": "",
|
| 61 |
+
"coverage_threshold_pass": {
|
| 62 |
+
"line": false,
|
| 63 |
+
"branch": false,
|
| 64 |
+
"toggle": false,
|
| 65 |
+
"functional": false
|
| 66 |
+
}
|
| 67 |
+
},
|
| 68 |
+
"industry_benchmark": {
|
| 69 |
+
"area_um2": 0.0,
|
| 70 |
+
"cell_count": 0.0,
|
| 71 |
+
"utilization_pct": 0.0,
|
| 72 |
+
"timing_wns_ns": 0.0,
|
| 73 |
+
"timing_tns_ns": 0.0,
|
| 74 |
+
"hold_slack_ns": 0.0,
|
| 75 |
+
"drc_violations": -1,
|
| 76 |
+
"lvs_errors": -1,
|
| 77 |
+
"antenna_violations": -1,
|
| 78 |
+
"total_power_mw": 0.0,
|
| 79 |
+
"internal_power_mw": 0.0,
|
| 80 |
+
"switching_power_mw": 0.0,
|
| 81 |
+
"leakage_power_uw": 0.0,
|
| 82 |
+
"irdrop_vpwr_mv": 0.0,
|
| 83 |
+
"irdrop_vgnd_mv": 0.0,
|
| 84 |
+
"congestion_usage_pct": 0.0,
|
| 85 |
+
"congestion_overflow": 0,
|
| 86 |
+
"coverage_line_pct": 0.0,
|
| 87 |
+
"coverage_branch_pct": 0.0,
|
| 88 |
+
"coverage_toggle_pct": 0.0,
|
| 89 |
+
"coverage_functional_pct": 0.0,
|
| 90 |
+
"coverage_backend": "auto",
|
| 91 |
+
"coverage_mode": "unknown",
|
| 92 |
+
"formal_result": "PASS",
|
| 93 |
+
"lec_result": "UNKNOWN",
|
| 94 |
+
"regression_passed": 0,
|
| 95 |
+
"regression_total": 0,
|
| 96 |
+
"clock_period_ns": "10.0",
|
| 97 |
+
"pivots_used": 0,
|
| 98 |
+
"global_steps": 13
|
| 99 |
+
}
|
| 100 |
+
}
|
metircs/counter8/counter8_industry_benchmark_20260306_013138.md
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# counter8 Industry Benchmark Metrics
|
| 2 |
+
|
| 3 |
+
- Generated At (epoch): `1772740898`
|
| 4 |
+
- Build Status: `SUCCESS`
|
| 5 |
+
- Signoff Result: `UNKNOWN`
|
| 6 |
+
- PDK Profile: `sky130`
|
| 7 |
+
|
| 8 |
+
| Metric | Value |
|
| 9 |
+
|---|---|
|
| 10 |
+
| `area_um2` | `0.0` |
|
| 11 |
+
| `cell_count` | `0.0` |
|
| 12 |
+
| `utilization_pct` | `0.0` |
|
| 13 |
+
| `timing_wns_ns` | `0.0` |
|
| 14 |
+
| `timing_tns_ns` | `0.0` |
|
| 15 |
+
| `hold_slack_ns` | `0.0` |
|
| 16 |
+
| `drc_violations` | `-1` |
|
| 17 |
+
| `lvs_errors` | `-1` |
|
| 18 |
+
| `antenna_violations` | `-1` |
|
| 19 |
+
| `total_power_mw` | `0.0` |
|
| 20 |
+
| `internal_power_mw` | `0.0` |
|
| 21 |
+
| `switching_power_mw` | `0.0` |
|
| 22 |
+
| `leakage_power_uw` | `0.0` |
|
| 23 |
+
| `irdrop_vpwr_mv` | `0.0` |
|
| 24 |
+
| `irdrop_vgnd_mv` | `0.0` |
|
| 25 |
+
| `congestion_usage_pct` | `0.0` |
|
| 26 |
+
| `congestion_overflow` | `0` |
|
| 27 |
+
| `coverage_line_pct` | `0.0` |
|
| 28 |
+
| `coverage_branch_pct` | `0.0` |
|
| 29 |
+
| `coverage_toggle_pct` | `0.0` |
|
| 30 |
+
| `coverage_functional_pct` | `0.0` |
|
| 31 |
+
| `coverage_backend` | `auto` |
|
| 32 |
+
| `coverage_mode` | `unknown` |
|
| 33 |
+
| `formal_result` | `PASS` |
|
| 34 |
+
| `lec_result` | `UNKNOWN` |
|
| 35 |
+
| `regression_passed` | `0` |
|
| 36 |
+
| `regression_total` | `0` |
|
| 37 |
+
| `clock_period_ns` | `10.0` |
|
| 38 |
+
| `pivots_used` | `0` |
|
| 39 |
+
| `global_steps` | `13` |
|
metircs/counter8/latest.json
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"design_name": "counter8",
|
| 3 |
+
"generated_at_epoch": 1772740898,
|
| 4 |
+
"build_status": "SUCCESS",
|
| 5 |
+
"signoff_result": "UNKNOWN",
|
| 6 |
+
"pdk_profile": "sky130",
|
| 7 |
+
"pdk": "sky130A",
|
| 8 |
+
"std_cell_library": "sky130_fd_sc_hd",
|
| 9 |
+
"verification_metadata": {
|
| 10 |
+
"tb_gate_mode": "strict",
|
| 11 |
+
"tb_max_retries": 3,
|
| 12 |
+
"tb_fallback_template": "uvm_lite",
|
| 13 |
+
"tb_static_fail_count": 0,
|
| 14 |
+
"tb_compile_fail_count": 1,
|
| 15 |
+
"tb_repair_fail_count": 0,
|
| 16 |
+
"tb_gate_history_count": 3,
|
| 17 |
+
"tb_gate_history": [
|
| 18 |
+
{
|
| 19 |
+
"timestamp": 1772740616,
|
| 20 |
+
"gate": "compile",
|
| 21 |
+
"ok": false,
|
| 22 |
+
"action": "gate_fail",
|
| 23 |
+
"issue_categories": [
|
| 24 |
+
"compile_error"
|
| 25 |
+
],
|
| 26 |
+
"fingerprint": "ae3cc7ecd62b2214"
|
| 27 |
+
},
|
| 28 |
+
{
|
| 29 |
+
"timestamp": 1772740616,
|
| 30 |
+
"gate": "compile",
|
| 31 |
+
"ok": false,
|
| 32 |
+
"action": "auto_repair",
|
| 33 |
+
"issue_categories": [
|
| 34 |
+
"compile_error"
|
| 35 |
+
],
|
| 36 |
+
"fingerprint": "ae3cc7ecd62b2214"
|
| 37 |
+
},
|
| 38 |
+
{
|
| 39 |
+
"timestamp": 1772740616,
|
| 40 |
+
"gate": "compile",
|
| 41 |
+
"ok": true,
|
| 42 |
+
"action": "gate_pass",
|
| 43 |
+
"issue_categories": [
|
| 44 |
+
"compile_ok"
|
| 45 |
+
],
|
| 46 |
+
"fingerprint": "db727dd2dc2e58b0"
|
| 47 |
+
}
|
| 48 |
+
],
|
| 49 |
+
"coverage_backend": "auto",
|
| 50 |
+
"coverage_fallback_policy": "fallback_oss",
|
| 51 |
+
"coverage_profile": "balanced",
|
| 52 |
+
"coverage_thresholds": {
|
| 53 |
+
"line": 85.0,
|
| 54 |
+
"branch": 80.0,
|
| 55 |
+
"toggle": 75.0,
|
| 56 |
+
"functional": 80.0
|
| 57 |
+
},
|
| 58 |
+
"coverage_mode": "unknown",
|
| 59 |
+
"coverage_error_kind": "",
|
| 60 |
+
"coverage_diag_path": "",
|
| 61 |
+
"coverage_threshold_pass": {
|
| 62 |
+
"line": false,
|
| 63 |
+
"branch": false,
|
| 64 |
+
"toggle": false,
|
| 65 |
+
"functional": false
|
| 66 |
+
}
|
| 67 |
+
},
|
| 68 |
+
"industry_benchmark": {
|
| 69 |
+
"area_um2": 0.0,
|
| 70 |
+
"cell_count": 0.0,
|
| 71 |
+
"utilization_pct": 0.0,
|
| 72 |
+
"timing_wns_ns": 0.0,
|
| 73 |
+
"timing_tns_ns": 0.0,
|
| 74 |
+
"hold_slack_ns": 0.0,
|
| 75 |
+
"drc_violations": -1,
|
| 76 |
+
"lvs_errors": -1,
|
| 77 |
+
"antenna_violations": -1,
|
| 78 |
+
"total_power_mw": 0.0,
|
| 79 |
+
"internal_power_mw": 0.0,
|
| 80 |
+
"switching_power_mw": 0.0,
|
| 81 |
+
"leakage_power_uw": 0.0,
|
| 82 |
+
"irdrop_vpwr_mv": 0.0,
|
| 83 |
+
"irdrop_vgnd_mv": 0.0,
|
| 84 |
+
"congestion_usage_pct": 0.0,
|
| 85 |
+
"congestion_overflow": 0,
|
| 86 |
+
"coverage_line_pct": 0.0,
|
| 87 |
+
"coverage_branch_pct": 0.0,
|
| 88 |
+
"coverage_toggle_pct": 0.0,
|
| 89 |
+
"coverage_functional_pct": 0.0,
|
| 90 |
+
"coverage_backend": "auto",
|
| 91 |
+
"coverage_mode": "unknown",
|
| 92 |
+
"formal_result": "PASS",
|
| 93 |
+
"lec_result": "UNKNOWN",
|
| 94 |
+
"regression_passed": 0,
|
| 95 |
+
"regression_total": 0,
|
| 96 |
+
"clock_period_ns": "10.0",
|
| 97 |
+
"pivots_used": 0,
|
| 98 |
+
"global_steps": 13
|
| 99 |
+
}
|
| 100 |
+
}
|
metircs/counter8/latest.md
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# counter8 Industry Benchmark Metrics
|
| 2 |
+
|
| 3 |
+
- Generated At (epoch): `1772740898`
|
| 4 |
+
- Build Status: `SUCCESS`
|
| 5 |
+
- Signoff Result: `UNKNOWN`
|
| 6 |
+
- PDK Profile: `sky130`
|
| 7 |
+
|
| 8 |
+
| Metric | Value |
|
| 9 |
+
|---|---|
|
| 10 |
+
| `area_um2` | `0.0` |
|
| 11 |
+
| `cell_count` | `0.0` |
|
| 12 |
+
| `utilization_pct` | `0.0` |
|
| 13 |
+
| `timing_wns_ns` | `0.0` |
|
| 14 |
+
| `timing_tns_ns` | `0.0` |
|
| 15 |
+
| `hold_slack_ns` | `0.0` |
|
| 16 |
+
| `drc_violations` | `-1` |
|
| 17 |
+
| `lvs_errors` | `-1` |
|
| 18 |
+
| `antenna_violations` | `-1` |
|
| 19 |
+
| `total_power_mw` | `0.0` |
|
| 20 |
+
| `internal_power_mw` | `0.0` |
|
| 21 |
+
| `switching_power_mw` | `0.0` |
|
| 22 |
+
| `leakage_power_uw` | `0.0` |
|
| 23 |
+
| `irdrop_vpwr_mv` | `0.0` |
|
| 24 |
+
| `irdrop_vgnd_mv` | `0.0` |
|
| 25 |
+
| `congestion_usage_pct` | `0.0` |
|
| 26 |
+
| `congestion_overflow` | `0` |
|
| 27 |
+
| `coverage_line_pct` | `0.0` |
|
| 28 |
+
| `coverage_branch_pct` | `0.0` |
|
| 29 |
+
| `coverage_toggle_pct` | `0.0` |
|
| 30 |
+
| `coverage_functional_pct` | `0.0` |
|
| 31 |
+
| `coverage_backend` | `auto` |
|
| 32 |
+
| `coverage_mode` | `unknown` |
|
| 33 |
+
| `formal_result` | `PASS` |
|
| 34 |
+
| `lec_result` | `UNKNOWN` |
|
| 35 |
+
| `regression_passed` | `0` |
|
| 36 |
+
| `regression_total` | `0` |
|
| 37 |
+
| `clock_period_ns` | `10.0` |
|
| 38 |
+
| `pivots_used` | `0` |
|
| 39 |
+
| `global_steps` | `13` |
|
metircs/the_dhruva_chip_is/latest.json
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"design_name": "the_dhruva_chip_is",
|
| 3 |
+
"generated_at_epoch": 1773041127,
|
| 4 |
+
"build_status": "SUCCESS",
|
| 5 |
+
"signoff_result": "UNKNOWN",
|
| 6 |
+
"pdk_profile": "sky130",
|
| 7 |
+
"pdk": "sky130A",
|
| 8 |
+
"std_cell_library": "sky130_fd_sc_hd",
|
| 9 |
+
"verification_metadata": {
|
| 10 |
+
"tb_gate_mode": "strict",
|
| 11 |
+
"tb_max_retries": 3,
|
| 12 |
+
"tb_fallback_template": "uvm_lite",
|
| 13 |
+
"tb_static_fail_count": 0,
|
| 14 |
+
"tb_compile_fail_count": 0,
|
| 15 |
+
"tb_repair_fail_count": 0,
|
| 16 |
+
"tb_gate_history_count": 2,
|
| 17 |
+
"tb_gate_history": [
|
| 18 |
+
{
|
| 19 |
+
"timestamp": 1773041052,
|
| 20 |
+
"gate": "compile",
|
| 21 |
+
"ok": true,
|
| 22 |
+
"action": "gate_pass",
|
| 23 |
+
"issue_categories": [
|
| 24 |
+
"compile_ok"
|
| 25 |
+
],
|
| 26 |
+
"fingerprint": "fe89b3612bbd8d10"
|
| 27 |
+
},
|
| 28 |
+
{
|
| 29 |
+
"timestamp": 1773041078,
|
| 30 |
+
"gate": "compile",
|
| 31 |
+
"ok": true,
|
| 32 |
+
"action": "gate_pass",
|
| 33 |
+
"issue_categories": [
|
| 34 |
+
"compile_ok"
|
| 35 |
+
],
|
| 36 |
+
"fingerprint": "719d55d7cf9f66b7"
|
| 37 |
+
}
|
| 38 |
+
],
|
| 39 |
+
"coverage_backend": "auto",
|
| 40 |
+
"coverage_fallback_policy": "fail_closed",
|
| 41 |
+
"coverage_profile": "balanced",
|
| 42 |
+
"coverage_thresholds": {
|
| 43 |
+
"line": 85.0,
|
| 44 |
+
"branch": 80.0,
|
| 45 |
+
"toggle": 75.0,
|
| 46 |
+
"functional": 80.0
|
| 47 |
+
},
|
| 48 |
+
"coverage_mode": "unknown",
|
| 49 |
+
"coverage_error_kind": "",
|
| 50 |
+
"coverage_diag_path": "",
|
| 51 |
+
"coverage_threshold_pass": {
|
| 52 |
+
"line": false,
|
| 53 |
+
"branch": false,
|
| 54 |
+
"toggle": false,
|
| 55 |
+
"functional": false
|
| 56 |
+
}
|
| 57 |
+
},
|
| 58 |
+
"industry_benchmark": {
|
| 59 |
+
"area_um2": 0.0,
|
| 60 |
+
"cell_count": 0.0,
|
| 61 |
+
"utilization_pct": 0.0,
|
| 62 |
+
"timing_wns_ns": 0.0,
|
| 63 |
+
"timing_tns_ns": 0.0,
|
| 64 |
+
"hold_slack_ns": 0.0,
|
| 65 |
+
"drc_violations": -1,
|
| 66 |
+
"lvs_errors": -1,
|
| 67 |
+
"antenna_violations": -1,
|
| 68 |
+
"total_power_mw": 0.0,
|
| 69 |
+
"internal_power_mw": 0.0,
|
| 70 |
+
"switching_power_mw": 0.0,
|
| 71 |
+
"leakage_power_uw": 0.0,
|
| 72 |
+
"irdrop_vpwr_mv": 0.0,
|
| 73 |
+
"irdrop_vgnd_mv": 0.0,
|
| 74 |
+
"congestion_usage_pct": 0.0,
|
| 75 |
+
"congestion_overflow": 0,
|
| 76 |
+
"coverage_line_pct": 0.0,
|
| 77 |
+
"coverage_branch_pct": 0.0,
|
| 78 |
+
"coverage_toggle_pct": 0.0,
|
| 79 |
+
"coverage_functional_pct": 0.0,
|
| 80 |
+
"coverage_backend": "auto",
|
| 81 |
+
"coverage_mode": "unknown",
|
| 82 |
+
"formal_result": "UNKNOWN",
|
| 83 |
+
"lec_result": "UNKNOWN",
|
| 84 |
+
"regression_passed": 0,
|
| 85 |
+
"regression_total": 0,
|
| 86 |
+
"clock_period_ns": "10.0",
|
| 87 |
+
"pivots_used": 0,
|
| 88 |
+
"global_steps": 15
|
| 89 |
+
}
|
| 90 |
+
}
|
metircs/the_dhruva_chip_is/latest.md
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# the_dhruva_chip_is Industry Benchmark Metrics
|
| 2 |
+
|
| 3 |
+
- Generated At (epoch): `1773041127`
|
| 4 |
+
- Build Status: `SUCCESS`
|
| 5 |
+
- Signoff Result: `UNKNOWN`
|
| 6 |
+
- PDK Profile: `sky130`
|
| 7 |
+
|
| 8 |
+
| Metric | Value |
|
| 9 |
+
|---|---|
|
| 10 |
+
| `area_um2` | `0.0` |
|
| 11 |
+
| `cell_count` | `0.0` |
|
| 12 |
+
| `utilization_pct` | `0.0` |
|
| 13 |
+
| `timing_wns_ns` | `0.0` |
|
| 14 |
+
| `timing_tns_ns` | `0.0` |
|
| 15 |
+
| `hold_slack_ns` | `0.0` |
|
| 16 |
+
| `drc_violations` | `-1` |
|
| 17 |
+
| `lvs_errors` | `-1` |
|
| 18 |
+
| `antenna_violations` | `-1` |
|
| 19 |
+
| `total_power_mw` | `0.0` |
|
| 20 |
+
| `internal_power_mw` | `0.0` |
|
| 21 |
+
| `switching_power_mw` | `0.0` |
|
| 22 |
+
| `leakage_power_uw` | `0.0` |
|
| 23 |
+
| `irdrop_vpwr_mv` | `0.0` |
|
| 24 |
+
| `irdrop_vgnd_mv` | `0.0` |
|
| 25 |
+
| `congestion_usage_pct` | `0.0` |
|
| 26 |
+
| `congestion_overflow` | `0` |
|
| 27 |
+
| `coverage_line_pct` | `0.0` |
|
| 28 |
+
| `coverage_branch_pct` | `0.0` |
|
| 29 |
+
| `coverage_toggle_pct` | `0.0` |
|
| 30 |
+
| `coverage_functional_pct` | `0.0` |
|
| 31 |
+
| `coverage_backend` | `auto` |
|
| 32 |
+
| `coverage_mode` | `unknown` |
|
| 33 |
+
| `formal_result` | `UNKNOWN` |
|
| 34 |
+
| `lec_result` | `UNKNOWN` |
|
| 35 |
+
| `regression_passed` | `0` |
|
| 36 |
+
| `regression_total` | `0` |
|
| 37 |
+
| `clock_period_ns` | `10.0` |
|
| 38 |
+
| `pivots_used` | `0` |
|
| 39 |
+
| `global_steps` | `15` |
|
metircs/the_dhruva_chip_is/the_dhruva_chip_is_industry_benchmark_20260309_125527.json
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"design_name": "the_dhruva_chip_is",
|
| 3 |
+
"generated_at_epoch": 1773041127,
|
| 4 |
+
"build_status": "SUCCESS",
|
| 5 |
+
"signoff_result": "UNKNOWN",
|
| 6 |
+
"pdk_profile": "sky130",
|
| 7 |
+
"pdk": "sky130A",
|
| 8 |
+
"std_cell_library": "sky130_fd_sc_hd",
|
| 9 |
+
"verification_metadata": {
|
| 10 |
+
"tb_gate_mode": "strict",
|
| 11 |
+
"tb_max_retries": 3,
|
| 12 |
+
"tb_fallback_template": "uvm_lite",
|
| 13 |
+
"tb_static_fail_count": 0,
|
| 14 |
+
"tb_compile_fail_count": 0,
|
| 15 |
+
"tb_repair_fail_count": 0,
|
| 16 |
+
"tb_gate_history_count": 2,
|
| 17 |
+
"tb_gate_history": [
|
| 18 |
+
{
|
| 19 |
+
"timestamp": 1773041052,
|
| 20 |
+
"gate": "compile",
|
| 21 |
+
"ok": true,
|
| 22 |
+
"action": "gate_pass",
|
| 23 |
+
"issue_categories": [
|
| 24 |
+
"compile_ok"
|
| 25 |
+
],
|
| 26 |
+
"fingerprint": "fe89b3612bbd8d10"
|
| 27 |
+
},
|
| 28 |
+
{
|
| 29 |
+
"timestamp": 1773041078,
|
| 30 |
+
"gate": "compile",
|
| 31 |
+
"ok": true,
|
| 32 |
+
"action": "gate_pass",
|
| 33 |
+
"issue_categories": [
|
| 34 |
+
"compile_ok"
|
| 35 |
+
],
|
| 36 |
+
"fingerprint": "719d55d7cf9f66b7"
|
| 37 |
+
}
|
| 38 |
+
],
|
| 39 |
+
"coverage_backend": "auto",
|
| 40 |
+
"coverage_fallback_policy": "fail_closed",
|
| 41 |
+
"coverage_profile": "balanced",
|
| 42 |
+
"coverage_thresholds": {
|
| 43 |
+
"line": 85.0,
|
| 44 |
+
"branch": 80.0,
|
| 45 |
+
"toggle": 75.0,
|
| 46 |
+
"functional": 80.0
|
| 47 |
+
},
|
| 48 |
+
"coverage_mode": "unknown",
|
| 49 |
+
"coverage_error_kind": "",
|
| 50 |
+
"coverage_diag_path": "",
|
| 51 |
+
"coverage_threshold_pass": {
|
| 52 |
+
"line": false,
|
| 53 |
+
"branch": false,
|
| 54 |
+
"toggle": false,
|
| 55 |
+
"functional": false
|
| 56 |
+
}
|
| 57 |
+
},
|
| 58 |
+
"industry_benchmark": {
|
| 59 |
+
"area_um2": 0.0,
|
| 60 |
+
"cell_count": 0.0,
|
| 61 |
+
"utilization_pct": 0.0,
|
| 62 |
+
"timing_wns_ns": 0.0,
|
| 63 |
+
"timing_tns_ns": 0.0,
|
| 64 |
+
"hold_slack_ns": 0.0,
|
| 65 |
+
"drc_violations": -1,
|
| 66 |
+
"lvs_errors": -1,
|
| 67 |
+
"antenna_violations": -1,
|
| 68 |
+
"total_power_mw": 0.0,
|
| 69 |
+
"internal_power_mw": 0.0,
|
| 70 |
+
"switching_power_mw": 0.0,
|
| 71 |
+
"leakage_power_uw": 0.0,
|
| 72 |
+
"irdrop_vpwr_mv": 0.0,
|
| 73 |
+
"irdrop_vgnd_mv": 0.0,
|
| 74 |
+
"congestion_usage_pct": 0.0,
|
| 75 |
+
"congestion_overflow": 0,
|
| 76 |
+
"coverage_line_pct": 0.0,
|
| 77 |
+
"coverage_branch_pct": 0.0,
|
| 78 |
+
"coverage_toggle_pct": 0.0,
|
| 79 |
+
"coverage_functional_pct": 0.0,
|
| 80 |
+
"coverage_backend": "auto",
|
| 81 |
+
"coverage_mode": "unknown",
|
| 82 |
+
"formal_result": "UNKNOWN",
|
| 83 |
+
"lec_result": "UNKNOWN",
|
| 84 |
+
"regression_passed": 0,
|
| 85 |
+
"regression_total": 0,
|
| 86 |
+
"clock_period_ns": "10.0",
|
| 87 |
+
"pivots_used": 0,
|
| 88 |
+
"global_steps": 15
|
| 89 |
+
}
|
| 90 |
+
}
|
metircs/the_dhruva_chip_is/the_dhruva_chip_is_industry_benchmark_20260309_125527.md
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# the_dhruva_chip_is Industry Benchmark Metrics
|
| 2 |
+
|
| 3 |
+
- Generated At (epoch): `1773041127`
|
| 4 |
+
- Build Status: `SUCCESS`
|
| 5 |
+
- Signoff Result: `UNKNOWN`
|
| 6 |
+
- PDK Profile: `sky130`
|
| 7 |
+
|
| 8 |
+
| Metric | Value |
|
| 9 |
+
|---|---|
|
| 10 |
+
| `area_um2` | `0.0` |
|
| 11 |
+
| `cell_count` | `0.0` |
|
| 12 |
+
| `utilization_pct` | `0.0` |
|
| 13 |
+
| `timing_wns_ns` | `0.0` |
|
| 14 |
+
| `timing_tns_ns` | `0.0` |
|
| 15 |
+
| `hold_slack_ns` | `0.0` |
|
| 16 |
+
| `drc_violations` | `-1` |
|
| 17 |
+
| `lvs_errors` | `-1` |
|
| 18 |
+
| `antenna_violations` | `-1` |
|
| 19 |
+
| `total_power_mw` | `0.0` |
|
| 20 |
+
| `internal_power_mw` | `0.0` |
|
| 21 |
+
| `switching_power_mw` | `0.0` |
|
| 22 |
+
| `leakage_power_uw` | `0.0` |
|
| 23 |
+
| `irdrop_vpwr_mv` | `0.0` |
|
| 24 |
+
| `irdrop_vgnd_mv` | `0.0` |
|
| 25 |
+
| `congestion_usage_pct` | `0.0` |
|
| 26 |
+
| `congestion_overflow` | `0` |
|
| 27 |
+
| `coverage_line_pct` | `0.0` |
|
| 28 |
+
| `coverage_branch_pct` | `0.0` |
|
| 29 |
+
| `coverage_toggle_pct` | `0.0` |
|
| 30 |
+
| `coverage_functional_pct` | `0.0` |
|
| 31 |
+
| `coverage_backend` | `auto` |
|
| 32 |
+
| `coverage_mode` | `unknown` |
|
| 33 |
+
| `formal_result` | `UNKNOWN` |
|
| 34 |
+
| `lec_result` | `UNKNOWN` |
|
| 35 |
+
| `regression_passed` | `0` |
|
| 36 |
+
| `regression_total` | `0` |
|
| 37 |
+
| `clock_period_ns` | `10.0` |
|
| 38 |
+
| `pivots_used` | `0` |
|
| 39 |
+
| `global_steps` | `15` |
|
requirements.txt
CHANGED
|
@@ -2,6 +2,8 @@
|
|
| 2 |
crewai==1.9.3
|
| 3 |
crewai-tools
|
| 4 |
langchain_openai
|
|
|
|
|
|
|
| 5 |
|
| 6 |
# ── CLI & Logging ─────────────────────────────────────────────────────
|
| 7 |
typer
|
|
|
|
| 2 |
crewai==1.9.3
|
| 3 |
crewai-tools
|
| 4 |
langchain_openai
|
| 5 |
+
litellm>=1.0.0
|
| 6 |
+
openai>=1.0.0
|
| 7 |
|
| 8 |
# ── CLI & Logging ─────────────────────────────────────────────────────
|
| 9 |
typer
|
server/api.py
CHANGED
|
@@ -829,6 +829,12 @@ def read_root():
|
|
| 829 |
return {"message": "AgentIC API is online", "version": "3.0.0"}
|
| 830 |
|
| 831 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 832 |
@app.get("/health")
|
| 833 |
def health_check():
|
| 834 |
"""Health probe — verifies the LLM backend is reachable."""
|
|
|
|
| 829 |
return {"message": "AgentIC API is online", "version": "3.0.0"}
|
| 830 |
|
| 831 |
|
| 832 |
+
@app.get("/ping")
|
| 833 |
+
def ping():
|
| 834 |
+
"""Zero-processing liveness probe for uptime monitors."""
|
| 835 |
+
return {"status": "ok"}
|
| 836 |
+
|
| 837 |
+
|
| 838 |
@app.get("/health")
|
| 839 |
def health_check():
|
| 840 |
"""Health probe — verifies the LLM backend is reachable."""
|
src/__init__.py
ADDED
|
File without changes
|
src/agentic/config.py
CHANGED
|
@@ -4,8 +4,12 @@ from dotenv import load_dotenv
|
|
| 4 |
|
| 5 |
# Project Paths
|
| 6 |
WORKSPACE_ROOT = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
| 7 |
-
|
| 8 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9 |
|
| 10 |
OPENLANE_ROOT = os.environ.get("OPENLANE_ROOT", os.path.expanduser("~/OpenLane"))
|
| 11 |
DESIGNS_DIR = os.path.join(OPENLANE_ROOT, "designs")
|
|
|
|
| 4 |
|
| 5 |
# Project Paths
|
| 6 |
WORKSPACE_ROOT = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
| 7 |
+
|
| 8 |
+
# Load .env file ONLY if it exists, and NEVER override environment variables
|
| 9 |
+
# already set by the platform (e.g. HuggingFace Spaces secrets).
|
| 10 |
+
_dotenv_path = os.path.join(WORKSPACE_ROOT, ".env")
|
| 11 |
+
if os.path.isfile(_dotenv_path):
|
| 12 |
+
load_dotenv(_dotenv_path, override=False)
|
| 13 |
|
| 14 |
OPENLANE_ROOT = os.environ.get("OPENLANE_ROOT", os.path.expanduser("~/OpenLane"))
|
| 15 |
DESIGNS_DIR = os.path.join(OPENLANE_ROOT, "designs")
|
tests/test_reliability_contracts.py
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import sys
|
| 2 |
+
import contextlib
|
| 3 |
+
import unittest
|
| 4 |
+
from unittest import mock
|
| 5 |
+
from pathlib import Path
|
| 6 |
+
|
| 7 |
+
REPO_ROOT = Path(__file__).resolve().parents[1]
|
| 8 |
+
SRC_ROOT = REPO_ROOT / "src"
|
| 9 |
+
if str(SRC_ROOT) not in sys.path:
|
| 10 |
+
sys.path.insert(0, str(SRC_ROOT))
|
| 11 |
+
|
| 12 |
+
from agentic.contracts import FailureClass, extract_json_object, infer_failure_class, validate_agent_payload
|
| 13 |
+
from agentic.orchestrator import BuildOrchestrator, BuildState
|
| 14 |
+
|
| 15 |
+
|
| 16 |
+
class ReliabilityContractsTest(unittest.TestCase):
|
| 17 |
+
def _make_orchestrator(self) -> BuildOrchestrator:
|
| 18 |
+
orch = BuildOrchestrator(
|
| 19 |
+
name="demo",
|
| 20 |
+
desc="demo design",
|
| 21 |
+
llm=object(),
|
| 22 |
+
verbose=False,
|
| 23 |
+
)
|
| 24 |
+
orch.logger = mock.Mock()
|
| 25 |
+
orch.state = BuildState.VERIFICATION
|
| 26 |
+
orch.artifacts["rtl_code"] = (
|
| 27 |
+
"module demo(input logic clk, input logic rst_n, output logic y);\n"
|
| 28 |
+
"assign y = clk;\n"
|
| 29 |
+
"endmodule\n"
|
| 30 |
+
)
|
| 31 |
+
orch.artifacts["rtl_path"] = "/tmp/demo.v"
|
| 32 |
+
return orch
|
| 33 |
+
|
| 34 |
+
def test_extract_json_object_from_fenced_text(self):
|
| 35 |
+
raw = 'noise\n```json\n{"class":"B","root_cause":"bad"}\n```\n'
|
| 36 |
+
parsed = extract_json_object(raw)
|
| 37 |
+
self.assertEqual(parsed, {"class": "B", "root_cause": "bad"})
|
| 38 |
+
|
| 39 |
+
def test_validate_agent_payload_missing_keys(self):
|
| 40 |
+
errors = validate_agent_payload({"class": "A"}, ["class", "root_cause"])
|
| 41 |
+
self.assertEqual(errors, ["Missing required key 'root_cause'."])
|
| 42 |
+
|
| 43 |
+
def test_infer_failure_class(self):
|
| 44 |
+
cls = infer_failure_class(
|
| 45 |
+
producer="llm_fixer",
|
| 46 |
+
raw_output="This is not valid json",
|
| 47 |
+
diagnostics=["Missing required key 'root_cause'."],
|
| 48 |
+
)
|
| 49 |
+
self.assertEqual(cls, FailureClass.LLM_FORMAT_ERROR)
|
| 50 |
+
|
| 51 |
+
def test_transition_resets_retry_count(self):
|
| 52 |
+
orch = self._make_orchestrator()
|
| 53 |
+
orch.retry_count = 3
|
| 54 |
+
orch.transition(BuildState.FORMAL_VERIFY)
|
| 55 |
+
self.assertEqual(orch.retry_count, 0)
|
| 56 |
+
|
| 57 |
+
def test_required_artifact_handoff_raises(self):
|
| 58 |
+
orch = self._make_orchestrator()
|
| 59 |
+
with self.assertRaises(RuntimeError):
|
| 60 |
+
orch._consume_handoff("tb_regen_context", consumer="VERIFICATION", required=True)
|
| 61 |
+
|
| 62 |
+
def test_parse_structured_agent_json_rejects_prose(self):
|
| 63 |
+
orch = self._make_orchestrator()
|
| 64 |
+
result = orch._parse_structured_agent_json(
|
| 65 |
+
agent_name="VerificationAnalyst",
|
| 66 |
+
raw_output="The issue is likely in the RTL.",
|
| 67 |
+
required_keys=["class", "root_cause"],
|
| 68 |
+
)
|
| 69 |
+
self.assertFalse(result.ok)
|
| 70 |
+
self.assertEqual(result.failure_class, FailureClass.LLM_FORMAT_ERROR)
|
| 71 |
+
|
| 72 |
+
def test_validate_rtl_candidate_rejects_hierarchy_rewrite(self):
|
| 73 |
+
orch = self._make_orchestrator()
|
| 74 |
+
previous = (
|
| 75 |
+
"module demo(input logic clk, output logic y); assign y = clk; endmodule\n"
|
| 76 |
+
"module demo_helper(input logic a, output logic b); assign b = a; endmodule\n"
|
| 77 |
+
)
|
| 78 |
+
candidate = "module demo(input logic clk, output logic y); assign y = clk; endmodule\n"
|
| 79 |
+
issues = orch._validate_rtl_candidate(candidate, previous)
|
| 80 |
+
self.assertTrue(any("module inventory" in issue for issue in issues))
|
| 81 |
+
|
| 82 |
+
def test_validate_tb_candidate_requires_waveform_and_name(self):
|
| 83 |
+
orch = self._make_orchestrator()
|
| 84 |
+
issues = orch._validate_tb_candidate("module wrong_tb; initial begin $finish; end endmodule")
|
| 85 |
+
self.assertTrue(any("TB module name" in issue for issue in issues))
|
| 86 |
+
self.assertTrue(any("dumpfile" in issue for issue in issues))
|
| 87 |
+
|
| 88 |
+
def test_tb_regen_context_bypasses_golden_tb(self):
|
| 89 |
+
orch = self._make_orchestrator()
|
| 90 |
+
orch.artifacts["golden_tb"] = "module counter_tb; endmodule"
|
| 91 |
+
orch.artifacts["golden_template"] = "counter"
|
| 92 |
+
orch._set_artifact(
|
| 93 |
+
"tb_regen_context",
|
| 94 |
+
'{"issue":"pin mismatch"}',
|
| 95 |
+
producer="test",
|
| 96 |
+
consumer="VERIFICATION",
|
| 97 |
+
required=True,
|
| 98 |
+
blocking=True,
|
| 99 |
+
)
|
| 100 |
+
generated_tb = """module demo_tb;
|
| 101 |
+
initial begin
|
| 102 |
+
$dumpfile("demo_wave.vcd");
|
| 103 |
+
$dumpvars(0, demo_tb);
|
| 104 |
+
$display("TEST FAILED");
|
| 105 |
+
$display("TEST PASSED");
|
| 106 |
+
$finish;
|
| 107 |
+
end
|
| 108 |
+
endmodule
|
| 109 |
+
"""
|
| 110 |
+
|
| 111 |
+
with mock.patch("agentic.orchestrator.get_testbench_agent", return_value=object()), \
|
| 112 |
+
mock.patch("agentic.orchestrator.Task", side_effect=lambda **kwargs: kwargs), \
|
| 113 |
+
mock.patch.object(orch, "_kickoff_with_timeout", return_value=generated_tb) as kickoff, \
|
| 114 |
+
mock.patch("agentic.orchestrator.console.status", return_value=contextlib.nullcontext()), \
|
| 115 |
+
mock.patch("agentic.orchestrator.write_verilog", return_value="/tmp/demo_tb.v"), \
|
| 116 |
+
mock.patch("agentic.orchestrator.run_tb_static_contract_check", side_effect=RuntimeError("stop_after_generation")):
|
| 117 |
+
with self.assertRaisesRegex(RuntimeError, "stop_after_generation"):
|
| 118 |
+
orch.do_verification()
|
| 119 |
+
self.assertTrue(kickoff.called)
|
| 120 |
+
|
| 121 |
+
|
| 122 |
+
if __name__ == "__main__":
|
| 123 |
+
unittest.main()
|
tests/test_vlsi_tools_temp_paths.py
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import os
|
| 2 |
+
import subprocess
|
| 3 |
+
import sys
|
| 4 |
+
import tempfile
|
| 5 |
+
import unittest
|
| 6 |
+
from pathlib import Path
|
| 7 |
+
from unittest import mock
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
REPO_ROOT = Path(__file__).resolve().parents[1]
|
| 11 |
+
SRC_ROOT = REPO_ROOT / "src"
|
| 12 |
+
if str(SRC_ROOT) not in sys.path:
|
| 13 |
+
sys.path.insert(0, str(SRC_ROOT))
|
| 14 |
+
|
| 15 |
+
from agentic.tools import vlsi_tools
|
| 16 |
+
|
| 17 |
+
|
| 18 |
+
class TempPathRewriteTests(unittest.TestCase):
|
| 19 |
+
def test_rewrite_temp_paths_replaces_absolute_and_basename_forms(self):
|
| 20 |
+
original = "/workspace/designs/counter8/src/counter8.v"
|
| 21 |
+
staged = "/tmp/tmpabc/counter8.v"
|
| 22 |
+
staged_map = {original: staged}
|
| 23 |
+
|
| 24 |
+
rewritten_abs = vlsi_tools._rewrite_temp_paths(
|
| 25 |
+
f"%Error: {staged}:12:3: syntax error",
|
| 26 |
+
staged_map,
|
| 27 |
+
)
|
| 28 |
+
rewritten_base = vlsi_tools._rewrite_temp_paths(
|
| 29 |
+
"%Error: counter8.v:12:3: syntax error",
|
| 30 |
+
staged_map,
|
| 31 |
+
)
|
| 32 |
+
|
| 33 |
+
self.assertIn(original, rewritten_abs)
|
| 34 |
+
self.assertIn(original, rewritten_base)
|
| 35 |
+
self.assertNotIn("/tmp/tmpabc", rewritten_abs)
|
| 36 |
+
self.assertNotIn("/tmp/tmpabc", rewritten_base)
|
| 37 |
+
|
| 38 |
+
def test_rewrite_result_paths_sanitizes_all_text_fields(self):
|
| 39 |
+
original = "/workspace/designs/counter8/src/counter8.v"
|
| 40 |
+
staged = "/tmp/tmpxyz/counter8.v"
|
| 41 |
+
staged_map = {original: staged}
|
| 42 |
+
payload = {
|
| 43 |
+
"stdout": f"warning in {staged}:4:1",
|
| 44 |
+
"stderr": "counter8.v:7:2: syntax error",
|
| 45 |
+
"diagnostics": [
|
| 46 |
+
f"%Error: {staged}:9:9: bad token",
|
| 47 |
+
"counter8.v:10:11: width warning",
|
| 48 |
+
],
|
| 49 |
+
}
|
| 50 |
+
|
| 51 |
+
sanitized = vlsi_tools._rewrite_result_paths(payload, staged_map)
|
| 52 |
+
|
| 53 |
+
for text in [sanitized["stdout"], sanitized["stderr"], *sanitized["diagnostics"]]:
|
| 54 |
+
self.assertIn(original, text)
|
| 55 |
+
self.assertNotIn("/tmp/tmpxyz", text)
|
| 56 |
+
|
| 57 |
+
def test_run_syntax_check_returns_original_path_in_legacy_message(self):
|
| 58 |
+
with tempfile.TemporaryDirectory() as src_dir:
|
| 59 |
+
rtl_path = os.path.join(src_dir, "counter8.v")
|
| 60 |
+
with open(rtl_path, "w", encoding="utf-8") as f:
|
| 61 |
+
f.write("module counter8; endmodule\n")
|
| 62 |
+
|
| 63 |
+
seen = {}
|
| 64 |
+
|
| 65 |
+
def fake_run(cmd, capture_output, text, timeout, cwd=None):
|
| 66 |
+
seen["cwd"] = cwd
|
| 67 |
+
return subprocess.CompletedProcess(
|
| 68 |
+
cmd,
|
| 69 |
+
1,
|
| 70 |
+
stdout="",
|
| 71 |
+
stderr=f"%Error: {cwd}/counter8.v:12:3: syntax error\n",
|
| 72 |
+
)
|
| 73 |
+
|
| 74 |
+
with mock.patch("agentic.tools.vlsi_tools.subprocess.run", side_effect=fake_run):
|
| 75 |
+
ok, message = vlsi_tools.run_syntax_check(rtl_path)
|
| 76 |
+
|
| 77 |
+
self.assertFalse(ok)
|
| 78 |
+
self.assertIn(rtl_path, message)
|
| 79 |
+
self.assertNotIn(seen["cwd"], message)
|
| 80 |
+
|
| 81 |
+
|
| 82 |
+
if __name__ == "__main__":
|
| 83 |
+
unittest.main()
|