一键导入
vflow
Scan project state to determine phase completion, write flow_status.md, and orchestrate the full RTL design flow from architecture to documentation
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Scan project state to determine phase completion, write flow_status.md, and orchestrate the full RTL design flow from architecture to documentation
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Decompose an IP requirement into submodules, define interfaces, and generate an architecture document plus per-module requirement files and a top-level skeleton
Trace failing signals through the RTL hierarchy, classify root cause, and write a debug report per issue — no fix is proposed
Generate a design proposal, documentation, and RTL backbone from a requirement file
Generate documentation for any RTL module from Verilog source files
Implement Verilog code from an approved design proposal, then lint and simulate
Run all IP-level testcases from tc_list.md through the bench Makefile, capture results, and write per-failure issue reports with no fix suggestions
| name | vflow |
| description | Scan project state to determine phase completion, write flow_status.md, and orchestrate the full RTL design flow from architecture to documentation |
Two responsibilities:
./flow_status.md.Input is an IP name, optionally followed by a mode keyword.
Resolve the IP name before anything else — never guess across IPs. flow_status.md and every downstream skill operate on exactly one IP.
Single-IP-repo assumption. The bundled scanner assumes the repo holds one IP: its Phase 2 and Phase 3 checks scan all of ddoc/*_req.md and rtl/ rather than scoping to <ip>_top's hierarchy. With one IP this is exact. If a repo ever holds two IPs, those two phase counts would mix submodules across IPs — scope them to the <ip>_top instantiation hierarchy before relying on the scan (see the note in scan.sh).
.md in the project root (a .md that is not CLAUDE.md, flow_status.md, or other generated/status doc) → use it.| Invocation | Behavior |
|---|---|
vflow [<ip>] | Scan and execute (default): Step 1 → Step 2 → Step 3. |
vflow [<ip>] status (also scan, --scan-only, --dry-run) | Scan only: Step 1 → Step 2, present flow_status.md, then stop. Touch no file but flow_status.md; invoke no downstream skill. |
Never Read a whole .md to compute a status symbol. All status comes from existence / mtime / grep/awk counts, which the bundled scanner already does. (Enumerating RTL_BUG locations for the Step 2 open-issues display is a targeted grep of debug_summary.md, not a whole-file read — that is allowed.) Run the scanner once from the project root; do not reissue per-check commands inline:
bash <skill-dir>/scan.sh <ip>
<skill-dir> is the directory containing this SKILL.md (the running copy — repo skills/vflow/ or the global ~/.claude/skills/vflow/). Resolve scan.sh as the sibling of this file. If it cannot be located or it errors out, fall back to performing the same existence/mtime/count checks inline rather than skipping the scan.
Greenfield is normal. A brand-new IP has only ./ddoc/<ip>.md and no ./rtl yet (Phase 1 creates rtl/). The scanner treats a missing ./rtl as the pre-architecture state and reports P1 PENDING (everything downstream PENDING) — it does not error. ERR: is emitted only when ./ddoc itself is absent (you are not at a project root). So on a greenfield run, proceed straight to Phase 1 (varch); do not treat P1 PENDING as a problem.
It prints one compact line per phase signal: P1 DONE|PENDING, P2 d/n, P3 left=N, P4 DONE|PENDING, P5 RUN|SCAFFOLDED|NONE, P7 DONE|PENDING, and (only when a run exists) FAILED=N, DEBUG=current|stale|none, plus RTLBUG=N when DEBUG=current. A ? value (FAILED=?, RTLBUG=?) means the count row was malformed/absent in run_summary.md/debug_summary.md — inspect that file's breakdown manually rather than assuming 0. RTLBUG is read from the classification breakdown in debug_summary.md's Results section; it depends on that section listing a per-class count. If it prints ERR: …, you are not at a project root or the layout is non-standard — stop and resolve that.
| Phase | DONE | Otherwise |
|---|---|---|
| 1 – Architecture | P1 DONE | PENDING |
| 2 – Design | P2 d/n with n>0 && d==n | ⚠ IN PROGRESS (d/n); n==0 means nothing to design yet → PENDING (Phase 1 not DONE), never DONE |
| 3 – Implementation | P3 left=0 (and Phase 2 DONE) | ⚠ IN PROGRESS (markers remain) |
| 4 – Synthesis | P4 DONE | PENDING |
| 5 – IP Testing | P5 RUN | ⚠ IN PROGRESS if SCAFFOLDED, else PENDING |
| 6 – Debug | FAILED=0, or DEBUG=current with RTLBUG=0 | failures + DEBUG=none/stale → debug pending; DEBUG=current with RTLBUG>0 → ⚠ IN PROGRESS (awaiting fix) |
| 7 – Documentation | P7 DONE | PENDING |
Caveats (one rule each):
//@ is not proof lint/sim passed. Sim-pass is enforced at execution time (Phase 3 pauses on failure), so a re-scan must not upgrade a module on marker absence alone while a known sim failure is unresolved.vtestrun overwrites run_summary.md each re-test while a prior debug_summary.md lingers; DEBUG=stale means that report predates the latest run and does NOT satisfy Phase 6. Treat debug as not-yet-run for the current failures.Overwrite ./flow_status.md (a live snapshot, not history).
✓ DONE, ⚠ IN PROGRESS (N/M), ✗ PENDING, ✗ BLOCKED (<reason>), ✗ ERROR (<reason>). BLOCKED = a prerequisite phase isn't DONE; ERROR = the phase's skill aborted (see Orchestration Rules).vfill → rtl/foo_ctrl.v). May instead be a non-skill state: wait (parked at a user gate, e.g. WAITING on user RTL fix (Phase 6B)), blocked (what must finish first), or error (which phase errored).run_summary.md shows FAILED>0) — the Failed count. If DEBUG=current, list each RTL_BUG root-cause location (one line per unique location); if stale, note debug must be re-run.Scan-only mode stops here — present flow_status.md and invoke no skill.
Otherwise execute the next incomplete phase. A DONE phase is skipped entirely.
[CHECKPOINT]When: Phase 1 PENDING.
Run varch on the IP requirement file; it writes ddoc/<ip>_arch.md and derives the per-submodule _req.md files and rtl/<ip>_top.v.
Checkpoint: present the module decomposition and interfaces; wait for explicit approval. On change requests, edit ddoc/<ip>_arch.md and re-run varch (it regenerates only affected submodules and reports the change set), then re-present. No advance without approval.
[CHECKPOINT per submodule]When: Phase 2 PENDING or IN PROGRESS.
For each submodule in ddoc/ lacking rtl/<module>.v:
vdesign on ddoc/<module>_req.md.One at a time. Do not batch-approve.
[AUTO]When: Phase 3 PENDING or IN PROGRESS.
Run vfill on each rtl/<module>.v (not <ip>_top.v) that still has //@ markers. The top skeleton's //@ are integration notes, not fill directions — never vfill it.
Process pending submodules sequentially, no checkpoints. If vfill fails lint or sim, report and pause — do not continue while errors are unresolved.
[AUTO]When: Phase 3 DONE, Phase 4 PENDING.
Run vsynth on the full IP — target the top module <ip>_top, so the report lands at synth/<ip>_top/synth_report.md (the path the scan checks). No checkpoint; include the Fmax/utilization one-liner in the status and continue.
[AUTO]When: Phase 4 DONE, Phase 5 PENDING or IN PROGRESS.
Run vtestgen (scaffold + generate the suite), then vtestrun. If the bench is already scaffolded with tc_list.md (was IN PROGRESS), resume — don't re-scaffold. After vtestrun, read FAILED:
0 → skip Phase 6, go to Phase 7.>0 → Phase 6.[AUTO + GATE]When: Phase 5 DONE and failures exist.
Run vdebug in batch mode on the IP.
Present: total open failures; every RTL_BUG (classification, file, module, block, one-line description); TC_BUG entries (need testcase fixes); DOC_AMBIGUITY entries (need clarification). State explicitly: "RTL fixes are required before the flow can continue. Signal when fixes are applied."
TC_BUG/DOC_AMBIGUITY don't block. If no RTL_BUG remains, skip the gate and go to Phase 7.
On the user's signal:
vtestrun again — the test result is ground truth that the fix took effect. vtestrun rebuilds every testcase whose RTL/TB sources are newer than its last simulate.log; an RTL fix touches rtl/, so all dependent testcases re-simulate (a regression in a previously-passing testcase is caught, not skipped) while unrelated results are reused. (This overwrites run_summary.md, making the old debug_summary.md stale per the currency rule.)vdebug on them (writes a current debug_summary.md) and return to 6B.Repeat until clear or the user stops.
[AUTO]When: all prior phases DONE and no open RTL_BUG. That precondition is established by 6B/6C, or by Phase 5 with zero failures — Phase 7 is reachable only those ways; by any other path, return to Phase 6.
Run vdoc on the IP. Then re-run Step 1–2 (scan + write flow_status.md) — not the whole skill — and present the all-DONE status as the completion summary.
✗ ERROR (<reason>), surface the skill's output verbatim, never advance. Applies to the [AUTO] phases too. (Tool-unavailable is the one pre-classified abort → ✗ BLOCKED, below.)vdebug never edits rtl//lib/; its probes live only in a disposable testbench include and vdebug removes them.flow_status.md after each phase.✗ BLOCKED (tool unavailable: <tool>), report it, and continue scanning the rest.