plugins/hdl/skills/reviewing-systemverilog/SKILL.md
ALWAYS invoke this skill when reviewing SystemVerilog or Verilog code for idiomatic style, synthesizability, or best practices. NEVER review SystemVerilog or Verilog without this skill.
npx skillsauth add outcomeeng/claude reviewing-systemverilogInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
<quick_start>
Invoke: /reviewing-systemverilog
Provide the SystemVerilog files you want reviewed (design files, packages, interfaces, testbenches, or any combination). The skill walks through a structured review:
logic usage, enums, structs, packages, parameterizationalways_ff/always_comb, blocking vs non-blocking, FSM patterns</quick_start>
<essential_principles>
logic everywhere. wire and reg are legacy. logic is the unified type — it works in all contexts. Only use wire for multi-driver nets (tri-state buses).
always_ff and always_comb, never always @. always_ff enforces sequential semantics. always_comb enforces combinational semantics and auto-infers the sensitivity list. always @(posedge clk) and always @(*) are legacy Verilog-2001.
unique case, not bare case. unique case tells the synthesizer all cases are covered and mutually exclusive. priority case when first-match priority encoding is intended. Bare case communicates nothing about designer intent.
Non-blocking (<=) in always_ff, blocking (=) in always_comb. Mixing them up causes simulation/synthesis mismatch. always_ff enforces this; always @(posedge clk) does not.
ANSI-style ports, named connections. Module ports declared in the header, not in a separate body. Instantiations use .port_name(signal), never positional.
Packages for shared types. Enums, structs, typedefs, constants, and functions belong in packages. No `define macros for things that can be parameter or localparam.
</essential_principles>
<intake> What would you like reviewed?Provide any combination of:
You can provide file paths, paste code, or point to a directory.
Wait for the user to provide files before proceeding.
</intake> <routing> After the user provides files, execute the review workflow:Read ${SKILL_DIR}/references/systemverilog-idioms.md first, then follow ${SKILL_DIR}/workflows/systemverilog-review.md exactly.
| User Provides | Reference to Read | Additional Context |
| --------------- | ------------------------------------------------- | ---------------------------------------- |
| Design files | ${SKILL_DIR}/references/systemverilog-idioms.md | Full review against all idiom categories |
| Package files | ${SKILL_DIR}/references/systemverilog-idioms.md | Focus on type discipline, naming |
| Interface files | ${SKILL_DIR}/references/systemverilog-idioms.md | Focus on modport, parameterization |
| Testbench files | ${SKILL_DIR}/references/systemverilog-idioms.md | Testbench-specific idioms apply |
| Mixed | ${SKILL_DIR}/references/systemverilog-idioms.md | Review each file in its appropriate mode |
<reference_index>
| File | Purpose |
| ------------------------------------------------- | -------------------------------------------------------------- |
| ${SKILL_DIR}/references/systemverilog-idioms.md | Comprehensive idiomatic SystemVerilog IEEE 1800-2017 reference |
| ${SKILL_DIR}/workflows/systemverilog-review.md | Step-by-step review procedure with finding format |
</reference_index>
<success_criteria> Review is complete when:
</success_criteria>
tools
ALWAYS invoke this skill when creating Excalidraw diagrams, visualizing workflows, architectures, or concepts. NEVER generate Excalidraw JSON without this skill.
development
ALWAYS invoke this skill when writing or fixing tests for TypeScript.
development
TypeScript code standards enforced across all skills. Loaded by other skills, not invoked directly.
development
TypeScript ADR conventions enforced across architect and auditor skills. Loaded by other skills, not invoked directly.