Review rtl architecture
Review ASIC RTL architecture with backend-independent OpenADA lint and structural evidence. Use for SystemVerilog or Verilog design reviews involving hierarchy, clocks and resets, state/control structure, parameterization, inferred latches or combinational loops, arithmetic width, signedness, overflow or saturation diagnostics, interface protocols, or deciding whether RTL is ready for synthesis without treating a clean lint run as functional verification.From its SKILL.md
npx -y skills add simra-tech/OpenADA --skill review-rtl-architectureAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 19 stars19 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
12.4 KB, as published. Nobody here has run it
Review RTL Architecture
Review the implemented RTL as a senior design reviewer, but keep every
conclusion inside the available evidence. Use $openada:openada for execution
and normalized results. Never teach this workflow a native tool command, parse
a native log into a second result, or rename a missing check as passed.
Define the decision
State the application, design phase, top module, and immediate decision. Ask whether the review is intended to establish:
- the declared source configuration and successful elaboration;
- strict diagnostic cleanliness;
- a plausible architecture for the declared throughput, latency, area, power, clock, reset, and test goals; or
- readiness for a separate synthesis, timing, CDC/RDC, formal, simulation, or implementation workflow.
These are different claims. RTL lint does not prove function, CDC safety, reset release safety, timing, power, equivalence, or specification satisfaction.
Freeze the source configuration
Record one review manifest before invoking an operation:
- repository revision and exact ordered source files;
- top module, SystemVerilog revision, include directories, defines, and generated-source identity;
- declared clocks, clock relationships, reset domains and polarities, intended operating modes, and interface protocols;
- authoritative architecture/specification references and unresolved assumptions;
- selected operation/feature, implementation, native product/version, evidence directory, result-envelope path, artifact paths, byte counts, and hashes.
The current result envelope has no general request or result correlation field; do not invent one. Bind reviews with the repository revision, exact file and artifact hashes, operation profile, tool identity, and evidence path instead.
Do not guess the top, file order, defines, clock intent, reset intent, or a black-box model. The v1alpha1 lint surface has no module-parameter override; if the intended configuration requires one, report that configuration as not evaluated instead of silently using defaults. If any supported choice can change elaboration, stop and ask one narrow question. Treat source and PDK/library trees as read-only and use a fresh task-local evidence directory.
Inspect capabilities before execution
Require the typed lint contract:
openada.operation/rtl.lint/v1alpha1openada.assertion/rtl.lint.clean/v1alpha1openada.feature/rtl.lint.systemverilog/v1alpha1
Inspect its installed closed request and result schemas:
openada profile show openada.operation/rtl.lint/v1alpha1
Run scoped preflight only for the smallest next assertion:
openada doctor --project-root /absolute/project --assertion rtl-lint-clean
Preflight proves only point-in-time tool and project-root readiness. It does not read the RTL or evaluate lint. If the operation, feature, implementation, or executable is unavailable, report not evaluated — capability unavailable. Do not fall through to a raw backend command.
Establish strict lint evidence
Invoke only the semantic command, using the exact frozen file order and configuration:
openada rtl-lint rtl/pkg.sv rtl/top.sv \
--top top \
--language 1800-2017 \
--include-dir rtl/include \
--define ASIC \
--output-dir evidence/rtl-lint
Supply repeatable include and define options only when they are present in the frozen manifest. The v1alpha1 warning policy is strict: any normalized warning or error makes the engineering assertion fail. Do not suppress a warning to manufacture a pass.
Keep design RTL distinct from PDK, macro, generated black-box, and simulator library sources. The current v1alpha1 request has no separate library-source or waiver-provenance role, so warnings originating only in those support models still make OpenADA's strict assertion fail. Preserve that result as a harness coverage gap and correlate it with the exact synthesis-flow lint configuration; do not relabel it as a clean design pass or add broad source suppressions. A future semantic extension should bind library sources and reviewed warning policy separately while retaining both original diagnostics and file hashes.
Treat 1800-2017 or 1800-2023 as the requested frontend language revision,
not as proof that the design or implementation has been certified conformant
to the corresponding IEEE 1800 standard.
Read execution.status separately from engineering.status. Confirm the
operation and assertion profile IDs in data.protocol, ordered sources,
dependency records, unresolved-literal-include disclosure, language, top,
strict policy, diagnostic counts and bounded records, native implementation
identity, retained transcript, and all input/artifact hashes before accepting
the result.
data.include_dependencies is conservative capture, not proof of the exact
conditional-preprocessor path. Files below an include root may be retained even
when inactive, and data.unresolved_literal_includes may include tokens from
inactive branches. Report those normalized facts exactly. Establish whether a
particular branch is active only by reviewing the source and declared defines,
and label that conclusion source inspection, not OpenADA-normalized lint
evidence.
Route the result as follows:
| Result | Meaning | Action |
|---|---|---|
engineering pass | Complete diagnostic evidence contains no warning or error under the strict policy | Continue the architecture review; do not claim function |
engineering fail | Complete evidence contains one or more normalized warnings or errors | Classify every diagnostic; repair root causes and rerun the same manifest |
engineering unknown | Evidence, provenance, execution, capture, or diagnostic interpretation is incomplete | Stop all cleanliness and readiness claims; repair the cited gap |
| invalid request | The source/configuration request is malformed or unsafe | Correct the manifest without changing design intent |
| unavailable/timeout/invocation failure | No RTL assertion was evaluated | Restore the same capability and rerun; do not substitute a tool |
Establish elaborated structure separately
When successful elaboration and structural checks are required, preflight and invoke the existing OpenADA surface as a distinct assertion:
openada doctor --project-root /absolute/project \
--assertion rtl-structural-check-passes
openada rtl-check rtl/pkg.sv rtl/top.sv \
--top top --output-dir evidence/rtl-structure
Keep this result separate from lint. A structural pass establishes only the defined elaboration and structural checks for the exact source configuration. Use this surface only when its advertised arguments can express that configuration; otherwise keep the structural row not evaluated instead of dropping includes, defines, generated sources, or a required parameter override.
An engineering unknown stops hierarchy and readiness conclusions. Preserve
the generated structural artifact and hashes rather than reconstructing
hierarchy from log text.
Perform the architecture review
Review authoritative RTL and normalized evidence together, while preserving their different authority. Label contract fields and hashed artifacts normalized evidence; label findings obtained by reading RTL, intent documents, or generated sources source inspection; mark hypotheses inferred and uncovered checks not evaluated. Examine:
- ownership and relationships of clocks, asynchronous inputs, resets, enables, and power/test modes;
- reset assertion/deassertion strategy and state initialized by reset versus configuration or protocol;
- state machines, arbitration, backpressure, outstanding transactions, buffer depth, and progress/deadlock assumptions;
- combinational depth and feedback, implicit storage, priority structure, signedness, truncation/extension, out-of-range indexing, and parameter edge cases;
- intended register, latch, memory, clock-gating, arithmetic, and mux structures versus what the source actually describes;
- hierarchy boundaries, reusable interfaces, generated variants, and whether the frozen top represents the intended ASIC configuration.
Do not call visual inspection a CDC/RDC, formal, simulation, synthesis, DFT,
security, or power-domain result. Record these as open coverage rows when no
installed semantic primitive evaluates them. Route hardware-inference and
mapping questions to $openada:assess-synthesis-and-inference; route
constraint-bound delay questions to $openada:assess-asic-timing only after a
valid mapped netlist exists.
When functional simulation is supplied as adjacent evidence, audit what each test actually proves before citing its pass count. A test that only completes a command, logs an expected value, catches a missing internal signal, or replaces an unread value with zero is execution coverage, not a checked functional result. Prefer assertions on the package-facing interface and compare observed data with an independent reference model. Read only status bits defined by the interface contract; unresolved unused pad bits must not contaminate a defined status slice, but they must remain visible as separate unknown coverage. Make reset release and the first command distinct clock events so simulator scheduling cannot silently drop the first transaction. For multi-byte or multi-cycle protocols, assert the documented transfer length, address meaning, byte ordering, and final numerical result. If strengthening these checks turns a prior pass into a failure, supersede downstream synthesis/physical evidence that was built from the failing RTL rather than grandfathering it. A lint pass is not functional evidence.
For arithmetic checks, freeze the operand-width contract before constructing the harness: signedness, declared and intermediate widths, legal and reachable operand ranges, and the intended truncation, rounding, overflow, or saturation behavior. Build the independent oracle from explicitly widened signed operands and intermediates; never let implicit expression sizing, an unsized literal, or a DUT helper function define the expected value. Drive the threshold boundaries directly, the reachable extrema, and deterministic nominal and mixed-sign vectors. Classify a vector outside the frozen reachable range as an illegal harness input, not a design defect, unless the implemented interface can admit it.
Make the harness fail closed. Every mismatch must produce a nonzero process exit
and engineering fail; zero executed checks, unknown observed values, timeout,
compile or invocation failure, or incomplete capture must produce engineering
unknown, never pass. Retain the exact RTL, harness, vector/reference, and
tool identities plus hashes of both the failing transcript and the passing
transcript after repair. Keep native adjacent evidence labeled as such when no
OpenADA semantic operation produced its engineering status.
Stop boundaries
Stop before an RTL-readiness conclusion when the declared source set, top/configuration, unresolved-include interpretation, provenance, or either required evidence result is unknown. Stop before a functional conclusion even when lint and structural checks pass. Stop before modifying RTL unless the user separately authorizes a design change.
For each proposed change, state one hypothesis and the expected observable effect. Change one cause at a time, preserve the source diff, create a new manifest/evidence directory, and rerun the same required assertions. Never compare two reviews when ordered sources, captured dependency hashes, top, defines, language, or intent changed without labeling the comparison non-equivalent.
Report
Return the frozen source/configuration identity; execution and engineering
statuses; operation, assertion, feature, implementation and tool version;
diagnostic and structural evidence with artifact hashes; architecture findings
classified as normalized evidence/source inspection/inferred/not evaluated;
the conservative include-capture limitation; uncovered verification domains;
and one smallest next action that can change the decision. Finish with
signoff: not claimed.