A community-driven registry for Claude, Cursor, Windsurf, Cline & more. Not affiliated with Anthropic.
Are you the author? Sign in to claim
VeriFlow-CC: A Claude Code-driven RTL design pipeline. Automates Chip-on-Chat from architecture to synthesis (iVerilog/Y
Claude Code-driven RTL design pipeline — zero Python dependencies, Claude Code main session is the driver.
VeriFlow-CC treats Claude Code as the pipeline brain: the main Claude Code session controls stage transitions, calls a sub-agent for RTL generation, and handles errors and rollbacks.
Differences from the full VeriFlow-Agent:
pip install requiredUser types /vf-rtl <project_dir>
↓
Main Claude (skill prompt injected)
│
├→ Step 0: init + clarification → eda_env.sh, clarifications.md
├→ Stage 1: spec_golden (vf-spec-golden merged agent)
│ → spec.json + golden_model.py
├→ Stage 2: codegen (vf-coder AI assembly per module, parallel)
│ → rtl/*.v
├→ Stage 3: verify_fix (inline sim + error recovery, 3-retry budget)
│ → logs/sim.log, expected_trace_*.md, VCD analysis
└→ Stage 4: lint_synth (vf-linter + vf-synthesizer, parallel)
→ logs/lint.log + synth_report.txt
4 stages: spec_golden → codegen → verify_fix → lint_synth. Sub-agents handle specialist work (RTL coding, lint, synthesis). Main session handles orchestration and error recovery.
git clone https://github.com/bjwanneng/veriflow-cc.git
cd veriflow-cc
python install.py
Installs to ~/.claude/:
skills/vf-rtl/SKILL.md — Pipeline orchestration skillskills/vf-rtl/state.py — State managementskills/vf-rtl/vcd2table.py — VCD waveform analysisskills/vf-rtl/coding_style.md — Verilog coding style rulesskills/vf-rtl/cocotb_runner.py — Cocotb simulation runnerskills/vf-rtl/iverilog_runner.py — Pure-Verilog simulation runnerskills/vf-rtl/timing_contract_checker.py — Timing contract validatorskills/vf-rtl/benchmark_runner.py — Batch evaluation & reportingskills/vf-rtl/bug_pattern_match.py — Automated divergence pattern matchingskills/vf-rtl/corner_case_generator.py — Boundary test vector generationskills/vf-rtl/formal_property_gen.py — Assertion generation from timing contractsskills/vf-rtl/design_graph.py — Module connectivity graph analysisskills/vf-rtl/cross_verify.py — Dual-RTL equivalence comparisonskills/vf-rtl/knowledge_base.py — Cross-project bug pattern learningagents/vf-coder.md — RTL code generation sub-agentagents/vf-spec-golden.md — Spec + golden model generation sub-agentagents/vf-tb-gen.md — Testbench generation sub-agentagents/vf-linter.md — Lint sub-agentagents/vf-synthesizer.md — Synthesis sub-agentUninstall: python install.py --uninstall
my_alu/
├── requirement.md # Functional requirements (required)
├── constraints.md # Design constraints (optional)
├── design_intent.md # Preliminary design ideas (optional)
└── context/ # Reference materials (optional)
└── reference.md
Input files:
| File | Required | Description |
|---|---|---|
requirement.md | Yes | Functional requirements: what the design does |
constraints.md | No | Timing, area, power, IO constraints |
design_intent.md | No | Architecture preferences, IP reuse, design decisions |
context/*.md | No | Reference materials, IP docs, datasheets |
If optional files are missing, the pipeline asks targeted clarification questions during Step 0.
/vf-rtl /path/to/my_alu
Optional flags:
--benchmark — After the pipeline completes, automatically run benchmark_runner.py
and generate a JSON report at logs/benchmark_report.json.Example:
/vf-rtl /path/to/my_alu --benchmark
Strict sequential execution, no skipping:
spec_golden → codegen → verify_fix → lint_synth
1 2 3 4
| Stage | Type | Input | Output |
|---|---|---|---|
| spec_golden | LLM (vf-spec-golden) | requirement.md, constraints.md, design_intent.md, context/ | spec.json + golden_model.py |
| codegen | vf-coder sub-agent (AI assembly per module, parallel) | spec.json, golden_model.py, coding_style.md | rtl/*.v |
| verify_fix | EDA (iverilog+vvp or cocotb) + error recovery | rtl/.v, tb/.v, golden_model.py | logs/sim.log, VCD waveform analysis, expected_trace_*.md |
| lint_synth | EDA (iverilog + yosys, parallel) | rtl/*.v | logs/lint.log + synth_report.txt |
Stage 1 produces golden_model.py which serves as both reference model and test vector generator:
The vf-coder sub-agent includes 5 inline Verilog-2005 mini-patterns:
These give the LLM concrete register-transfer skeletons to adapt, eliminating the need for external reference implementations.
vf-coder.md includes 7 common pitfalls (P1–P7) from SM3 retrospective:
always @*valid pulse cleared one cycle too earlydefault in FSM casevalid and data updated in different cycles_next value as if it were a registerMandatory 7-point pre-write self-check ensures every module is verified before writing.
Before proceeding past Stage 1, a readiness check validates spec.json and golden_model.py for completeness.
EDA tool paths (iverilog, vvp, yosys) are discovered once in Step 0 and saved to .veriflow/eda_env.sh. Every subsequent EDA command sources this file, avoiding the "PATH doesn't persist between Bash calls" issue. eda_env.sh also exports PYTHONPATH pointing at the installed skill directory, so helper scripts can import state.py without per-call PYTHONPATH prefixes.
All EDA outputs are saved to log files for post-run analysis:
logs/lint.log — iverilog syntax check outputlogs/sim.log — integration simulation outputlogs/sim.raw.log — raw simulation output (iverilog_runner --save-raw-log)logs/wave_diff.txt — VCD vs golden model comparisonlogs/wave_table.txt — VCD waveform cycle tablelogs/expected_trace_golden.md — per-cycle register traces from golden_model.py (Stage 3 error recovery)logs/timing_diagnostic.json — bug classification + fix suggestionslogs/prev_failure_summary.md — concise failure summary injected to next vf-coder retryworkspace/synth/synth_report.txt — yosys synthesis reportThe simulation hook uses strict 3-layer verification on logs/sim.log:
[FAIL] or FAILED: prefixALL TESTS PASSED summary lineThis prevents false-positive "all green" when sim.log contains both passing and failing tests, or is empty.
Stage 3 (verify_fix) uses cocotb (Python co-simulation) as the primary simulation path when available:
await RisingEdge(dut.clk) fires via VPI callback AFTER the NBA region, eliminating all Verilog TB-DUT race conditions$display-based testbenches when cocotb is unavailableWhen simulation fails:
timing_diagnostic.py classifies the bug (A=computation, B=timing offset, D=initialization)prev_failure_summary.md is built with cycle, signal, expected, actual, and fix suggestionPREV_FAILURE fieldspec.json port definitions are locked after Stage 1. Port semantic fields enforce consistent interpretation across all stages:
reset_polarity: "active_high" only (reset ports must declare this)handshake: "hold_until_ack" | "single_cycle" | "pulse" (valid ports must declare this)ack_port: name of the associated ack input (required for hold_until_ack)spec.json includes machine-verifiable timing contracts for every inter-module connection:
producer_cycle, visible_cycle, consumer_cycle — exact cycle relationshipssame_cycle_visible, pipeline_delay_cycles — registered vs combinational semanticssample_phase — posedge or negedge sampling, preventing TB/DUT racesstage_journal.mdlogs/expected_trace_golden.md (from golden_model.py) vs VCD-derived actual values — the fastest way to localise the wrong NBA assignmentprev_failure_summary.md is passed to next vf-coder retry targeting the exact divergence.v files during error recovery; debug artifacts cleaned up after each attemptAfter synthesis, yosys_equiv.py proves functional equivalence between the original RTL and the synthesized netlist using SAT-based induction (equiv_make → equiv_simple → equiv_induct). If equivalence is not proved, the pipeline marks lint_synth as FAILED and aborts.
bug_pattern_match.py catalogs 15 known bug patterns (6 from SM3 retrospective, 8 from later projects, 1 tooling). On simulation failure, it automatically matches the divergence signature against the catalog and reports confidence-ranked suggestions. Each pattern includes: symptom, root cause, fix, and prevention rule.
iverilog_runner.py automatically computes test vector coverage ratio (exercised / total) by comparing the golden model's TEST_VECTORS against the simulation log. Reported in JSON output under coverage.*.
corner_case_generator.py auto-generates 8 boundary-condition test vectors from spec.json ports: all-zeros, all-ones, min, max, alternating, LSB-hot, MSB-hot, half-range. Integrated into vf-tb-gen Step 5b as a mandatory supplement to golden model vectors.
formal_property_gen.py generates Verilog-2005 compatible assertion comments from spec.json timing contracts, handshake protocols, and FSM state tables. Outputs a synthesizable assertion module for Yosys formal flows.
design_graph.py builds a directed graph from module_connectivity and checks for:
benchmark_runner.py supports batch evaluation, LLM variant comparison, and RealBench JSONL conversion. Outputs JSON/CSV/Markdown reports with per-stage pass/fail breakdown.
knowledge_base.py persists bug pattern frequencies, design templates, and project outcomes to ~/.claude/skills/vf-rtl/knowledge/. Enables institutional learning: frequently-hit patterns are prioritized in agent prompts.
| Tool | Purpose | Example |
|---|---|---|
benchmark_runner.py | Batch eval / variant compare | --compare sm3 --variants deepseek,glm5.1 |
bug_pattern_match.py | Match divergences to catalog | --divergences logs/divergences.json |
corner_case_generator.py | Boundary test vectors | --spec spec.json -o corners.json |
cross_verify.py | Dual-RTL equivalence | --rtl-a v1 --rtl-b v2 --module top |
design_graph.py | Connectivity analysis | --spec spec.json -o graph.json |
formal_property_gen.py | Assertion generation | --spec spec.json -o props.v |
knowledge_base.py | Query learned patterns | --top-patterns --count 10 |
my_project/
├── requirement.md # Functional requirements (required)
├── constraints.md # Timing, area, power, IO constraints (optional)
├── design_intent.md # Architecture preferences, IP reuse (optional)
├── context/ # Reference materials (optional)
├── .veriflow/
│ ├── pipeline_state.json # Pipeline state (resumable)
│ └── eda_env.sh # EDA tool paths + PYTHONPATH (auto-generated)
├── logs/
│ ├── lint.log # iverilog lint output
│ ├── sim.log # Integration simulation output
│ ├── sim.raw.log # Raw simulation log
│ ├── wave_diff.txt # VCD vs golden model comparison
│ ├── wave_table.txt # VCD waveform cycle table
│ ├── expected_trace_golden.md # Per-cycle register traces from golden_model.py
│ ├── timing_diagnostic.json # Bug classification + fix suggestions
│ └── prev_failure_summary.md # Concise failure summary for retry
└── workspace/
├── docs/
│ ├── spec.json # Interface spec (ports, constraints, timing contracts)
│ └── golden_model.py # Reference model with cycle-accurate trace
├── rtl/ # Generated Verilog files
├── tb/ # Testbenches (one per module + integration)
├── sim/ # Compiled simulation (.vvp files)
└── synth/
└── synth_report.txt # Yosys synthesis report
veriflow-cc/
├── src/
│ ├── claude_skills/
│ │ └── vf-rtl/
│ │ ├── SKILL.md # Pipeline orchestration skill
│ │ ├── state.py # State machine (JSON persistence)
│ │ ├── init.py # Project init (discovers EDA, writes eda_env.sh)
│ │ ├── vcd2table.py # VCD waveform to cycle table converter
│ │ ├── iverilog_runner.py # Pure-Verilog simulation runner
│ │ ├── cocotb_runner.py # Cocotb simulation runner
│ │ ├── timing_diagnostic.py # Bug classification + fix suggestions
│ │ ├── timing_contract_checker.py
│ │ ├── benchmark_runner.py # Batch evaluation & reporting
│ │ ├── bug_pattern_match.py # Automated divergence pattern matching
│ │ ├── corner_case_generator.py # Boundary test vector generation
│ │ ├── formal_property_gen.py # Assertion generation
│ │ ├── design_graph.py # Module connectivity graph analysis
│ │ ├── cross_verify.py # Dual-RTL equivalence comparison
│ │ ├── knowledge_base.py # Cross-project bug pattern learning
│ │ ├── error_recovery.md # Stage 3 error recovery procedure
│ │ ├── design_rules.md # Design rules for all stages
│ │ ├── coding_style.md # Verilog-2005 coding rules
│ │ └── templates/ # Template files for sub-agents
│ │ ├── spec_template.json
│ │ ├── golden_model_template.py
│ │ ├── cocotb_template.py
│ │ └── tb_integration_template.v
│ └── claude_agents/
│ ├── vf-spec-golden.md # Spec + golden model generation (Stage 1)
│ ├── vf-coder.md # RTL code generation (Stage 2)
│ ├── vf-tb-gen.md # Testbench generation
│ ├── vf-linter.md # Lint sub-agent (Stage 4)
│ └── vf-synthesizer.md # Synthesis sub-agent (Stage 4)
├── install.py # Python installer (symlinks to ~/.claude/)
├── tests/ # Test suite (pytest + unittest)
├── CLAUDE.md # Claude Code project instructions
└── README.md # This file
iverilog / vvp (optional, for lint/sim stages)yosys (optional, for synth stage)No pip install required.
Run all tests:
python -m pytest tests/ -q
Or with unittest:
python -m unittest discover tests -v
python install.py --uninstall
Ensure the agent's tools field uses comma-separated capitalized names:
# WRONG — causes silent tool permission failure
tools:
- read
- write
# CORRECT
tools: Read, Write, Glob, Grep, Bash
See GitHub Issue #12392 for details.
iverilog needs its internal drivers (ivlpp, ivl) which live in lib/ivl/. The pipeline auto-discovers and saves these paths. Verify with:
source .veriflow/eda_env.sh && iverilog -V
The sim hook uses strict 3-layer verification: (1) sim.log must be non-empty, (2) no [FAIL] or FAILED: lines, (3) must contain ALL TESTS PASSED. If your testbench prints [FAIL] in passing messages (e.g., "checking FAIL case"), use a different format to avoid triggering Layer 2.
Add WeChat for more details and discussion:
Design enforcement with memory — keeps your UI consistent across a project
1000+ skills curated from Anthropic, Vercel, Stripe, and other engineering teams
Claude Code skill for YouTube creators — channel audits, video SEO, retention scripts, thumbnails, content strategy, Sho
AI image generation skill for Claude Code -- Creative Director powered by Gemini