ACE-RTL
Use this skill as the entry point for ACE-RTL work. It contains the agent
protocol, CVDP runbooks, role guidance, optional external LLM bridge, and
task-driven CVDP prompt guidance.
Core Rules
- Clone the official CVDP benchmark code from
https://github.com/NVlabs/cvdp_benchmark.git into this workspace and follow
that checkout's own setup instructions. Do not use a CVDP checkout, setup,
environment, or data outside the current workspace unless the user explicitly
authorizes it.
- Report final pass/fail only from the real CVDP evaluator.
- When Docker is unavailable or the daemon socket is inaccessible, use the
checked-in native runner
scripts/ace_cvdp_native_runner.py after
setup-native.md. Do not hand-roll Docker-to-native path translation.
- Native CVDP runs must execute under the repo-local
.cvdp-native Python
environment when it exists. Missing Python packages, pytest
collection/import failures, or missing harness env variables are
INFRA_SETUP, not candidate RTL failures.
- Before starting any native CVDP datapoint workers or LLM calls, verify the
selected rows' harness services have their required simulator tools on
PATH. Rows that request Xcelium/Cadence services require a configured
simulator command such as irun or xrun and usually imc; if either is
missing, use the eda_tool_setup skill to configure site-provided EDA tools
before classifying the run as setup-blocked.
- For native commercial/Cadence rows, copied harness command files must have
container paths, configured Cadence command names, and a default Cadence
timescale option rewritten before execution. The runner should inject
-timescale 1ns/1ps into xrun/irun commands unless the harness already
sets a timescale.
- Do not classify candidate RTL reset/register/output initialization failures
as
INFRA_SETUP just because a simulator or assertion line says "failed to
initialize". Setup classification is for missing tools, missing Python
modules, invalid harness environment variables, license/database/tool
initialization failures, collection failures, or native path/setup breakage.
- The native runner must post-process generated SystemVerilog before CVDP
evaluation, save bounded evaluator reports, and feed reports through the
reusable
FocusedDebugger reflector and FreshStartCoordinator coordinator
components.
- Preserve every generated target path declared by the selected CVDP row. For
multi-file targets, generator prompts must list every target file and require
one complete
// TARGET_FILE: <path> section per file.
- Native-runner generator prompts must be task-aware and data-driven from the
selected CVDP row, target paths, prompt, and harness services. Do not
hard-code a partial list of task IDs or inject one task shape's guidance into
unrelated CVDP task types.
- Reusable RTL-agent components live under
scripts/ace_rtl_agent/ and must be
launched through scripts/ace_agent_runner.py.
- Do not use hidden solutions, golden outputs, private reference code,
expected answer tables, or injected bug internals.
- Do not hardcode datapoint-specific answers or recognizable test vectors.
- Do not modify immutable harness, source, or helper files unless the task
explicitly lists them as generated targets.
- During native-runner iteration, role agents and external models may receive
public prompt/context, generated targets, current candidates, role history,
and bounded evaluator reports emitted by the real CVDP run. Do not separately
open, copy, or inject private scorer files, real test files,
expected-output code, mutation definitions, or harness internals.
- Default CVDP scheduling is 4 datapoints in parallel, with 30 max iterations
per process and 5 parallel independent processes per datapoint.
- Native evaluator subprocesses must be bounded and reaped after timeout or
service exit.
- Every CVDP run must create a unique directory under
outputs/, stream run
logs to run.log, and write a Markdown result report with overall pass rate
for the requested runtime filter, unique solved datapoint IDs, failed
datapoint IDs, and useful run metadata.
- By default, do not call external LLM APIs. Use coding-agent reasoning and
spawned role agents unless the user explicitly assigns a model to a role.
- If the user assigns a model to a role, use
scripts/llm_call.py and
scripts/extract_solution.py.
Role Agents
Spawn three role agents for non-trivial runs:
- generator: produces the next complete target RTL, testbench, assertion, or
optimization artifact.
- reflector: use the reusable
FocusedDebugger component to analyze the latest
evaluator report and create focused fix guidance.
- coordinator: use the reusable
FreshStartCoordinator component to maintain
history and decide restart.
Read references/agent-workflow.md for the full loop,
references/role-guidance.md for role prompts, and
references/agent-components.md when selecting or modifying the local reusable
implementation.
CVDP Setup
- Dataset setup:
references/benchmarks/cvdp/setup-datasets.md
- Native no-Docker setup:
references/benchmarks/cvdp/setup-native.md
- Docker setup:
references/benchmarks/cvdp/setup-docker.md
- Concrete run checklist:
references/benchmarks/cvdp/run-cvdp.md
- EDA tool setup skill:
../eda_tool_setup/SKILL.md
CVDP Task Guidance
Read references/benchmarks/cvdp/cid-index.md, inspect the JSONL row, target
paths, prompt, and harness services, then choose guidance based on task behavior
rather than hard-coded task IDs.
Optional LLM Calls
Read references/llm-routing.md only when the user explicitly assigns external
models to roles. The default hosted provider is NVIDIA Inference API with model
nvidia/nemotron-3-ultra-550b-a55b; users may replace that path with
ACE_RTL_LLM_SCRIPT.
1---2name: ace-rtl3description: Consolidated ACE-RTL skill for running an iterative generator-reflector-coordinator RTL agent on CVDP. Use for CVDP official repo setup with native or Docker environments, no-cheating benchmark runs, role-based external LLM routing, unique outputs logging, task-driven CVDP prompt guidance, and real pass-rate reporting.4---56# ACE-RTL78Use this skill as the entry point for ACE-RTL work. It contains the agent9protocol, CVDP runbooks, role guidance, optional external LLM bridge, and10task-driven CVDP prompt guidance.1112## Core Rules1314- Clone the official CVDP benchmark code from15 `https://github.com/NVlabs/cvdp_benchmark.git` into this workspace and follow16 that checkout's own setup instructions. Do not use a CVDP checkout, setup,17 environment, or data outside the current workspace unless the user explicitly18 authorizes it.19- Report final pass/fail only from the real CVDP evaluator.20- When Docker is unavailable or the daemon socket is inaccessible, use the21 checked-in native runner `scripts/ace_cvdp_native_runner.py` after22 `setup-native.md`. Do not hand-roll Docker-to-native path translation.23- Native CVDP runs must execute under the repo-local `.cvdp-native` Python24 environment when it exists. Missing Python packages, pytest25 collection/import failures, or missing harness env variables are26 `INFRA_SETUP`, not candidate RTL failures.27- Before starting any native CVDP datapoint workers or LLM calls, verify the28 selected rows' harness services have their required simulator tools on29 `PATH`. Rows that request Xcelium/Cadence services require a configured30 simulator command such as `irun` or `xrun` and usually `imc`; if either is31 missing, use the `eda_tool_setup` skill to configure site-provided EDA tools32 before classifying the run as setup-blocked.33- For native commercial/Cadence rows, copied harness command files must have34 container paths, configured Cadence command names, and a default Cadence35 timescale option rewritten before execution. The runner should inject36 `-timescale 1ns/1ps` into `xrun`/`irun` commands unless the harness already37 sets a timescale.38- Do not classify candidate RTL reset/register/output initialization failures39 as `INFRA_SETUP` just because a simulator or assertion line says "failed to40 initialize". Setup classification is for missing tools, missing Python41 modules, invalid harness environment variables, license/database/tool42 initialization failures, collection failures, or native path/setup breakage.43- The native runner must post-process generated SystemVerilog before CVDP44 evaluation, save bounded evaluator reports, and feed reports through the45 reusable `FocusedDebugger` reflector and `FreshStartCoordinator` coordinator46 components.47- Preserve every generated target path declared by the selected CVDP row. For48 multi-file targets, generator prompts must list every target file and require49 one complete `// TARGET_FILE: <path>` section per file.50- Native-runner generator prompts must be task-aware and data-driven from the51 selected CVDP row, target paths, prompt, and harness services. Do not52 hard-code a partial list of task IDs or inject one task shape's guidance into53 unrelated CVDP task types.54- Reusable RTL-agent components live under `scripts/ace_rtl_agent/` and must be55 launched through `scripts/ace_agent_runner.py`.56- Do not use hidden solutions, golden outputs, private reference code,57 expected answer tables, or injected bug internals.58- Do not hardcode datapoint-specific answers or recognizable test vectors.59- Do not modify immutable harness, source, or helper files unless the task60 explicitly lists them as generated targets.61- During native-runner iteration, role agents and external models may receive62 public prompt/context, generated targets, current candidates, role history,63 and bounded evaluator reports emitted by the real CVDP run. Do not separately64 open, copy, or inject private scorer files, real test files,65 expected-output code, mutation definitions, or harness internals.66- Default CVDP scheduling is 4 datapoints in parallel, with 30 max iterations67 per process and 5 parallel independent processes per datapoint.68- Native evaluator subprocesses must be bounded and reaped after timeout or69 service exit.70- Every CVDP run must create a unique directory under `outputs/`, stream run71 logs to `run.log`, and write a Markdown result report with overall pass rate72 for the requested runtime filter, unique solved datapoint IDs, failed73 datapoint IDs, and useful run metadata.74- By default, do not call external LLM APIs. Use coding-agent reasoning and75 spawned role agents unless the user explicitly assigns a model to a role.76- If the user assigns a model to a role, use `scripts/llm_call.py` and77 `scripts/extract_solution.py`.7879## Role Agents8081Spawn three role agents for non-trivial runs:8283- generator: produces the next complete target RTL, testbench, assertion, or84 optimization artifact.85- reflector: use the reusable `FocusedDebugger` component to analyze the latest86 evaluator report and create focused fix guidance.87- coordinator: use the reusable `FreshStartCoordinator` component to maintain88 history and decide restart.8990Read `references/agent-workflow.md` for the full loop,91`references/role-guidance.md` for role prompts, and92`references/agent-components.md` when selecting or modifying the local reusable93implementation.9495## CVDP Setup9697- Dataset setup: `references/benchmarks/cvdp/setup-datasets.md`98- Native no-Docker setup: `references/benchmarks/cvdp/setup-native.md`99- Docker setup: `references/benchmarks/cvdp/setup-docker.md`100- Concrete run checklist: `references/benchmarks/cvdp/run-cvdp.md`101- EDA tool setup skill: `../eda_tool_setup/SKILL.md`102103## CVDP Task Guidance104105Read `references/benchmarks/cvdp/cid-index.md`, inspect the JSONL row, target106paths, prompt, and harness services, then choose guidance based on task behavior107rather than hard-coded task IDs.108109## Optional LLM Calls110111Read `references/llm-routing.md` only when the user explicitly assigns external112models to roles. The default hosted provider is NVIDIA Inference API with model113`nvidia/nemotron-3-ultra-550b-a55b`; users may replace that path with114`ACE_RTL_LLM_SCRIPT`.