Help us improve
Share bugs, ideas, or general feedback.
From hdl
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 claudepluginhub outcomeeng/claude --plugin hdlHow this skill is triggered — by the user, by Claude, or both
Slash command
/hdl:reviewing-systemverilogThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
<objective>
Lints SystemVerilog files using Verilator or Verible, categorizes errors/warnings, explains common issues with fixes, and returns structured output for /gf orchestration.
Enforces lowRISC + project-specific SystemVerilog coding conventions for .sv/.v files. Covers naming, module structure, timing, and synthesis rules.
Applies 10 pre-set color/font themes or generates custom ones for slides, documents, reports, and HTML landing pages.
Share bugs, ideas, or general feedback.
<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>
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.
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>