The ASIC Engineer's Mental Model for AI

🧠 Silicon Reality vs. Statistical Prediction

In software engineering, a typo or off-by-one bug can be patched in production within minutes via a container push. In ASIC semiconductor design, an undetected RTL bug results in a $5M–$20M metal-spin or full-mask respin, a 6–9 month schedule slip, and catastrophic market window loss.

Large Language Models (LLMs) like Claude 3.5 Sonnet are fundamentally probabilistic token prediction engines trained on massive corpora of syntax and technical prose. They possess extraordinary structural knowledge of SystemVerilog grammar, AMBA bus protocol standards, and SVA syntax. However:

⚠️ Non-Negotiable ASIC Engineering Reality
Claude has no physics engine. It cannot calculate non-linear interconnect RC delays, evaluate 3nm FinFET quantum tunneling leakage, or run a deterministic boolean SAT solver. It predicts what valid Verilog looks like, not what physical silicon does.

To use Claude effectively as a Principal RTL Architect, you must adopt the Three-Tier ASIC AI Verification Contract:

Tier Actor Primary Responsibility Deterministic Authority
Tier 1: Generation & Review Claude / Claude Code Scaffolding, protocol translation, lint diagnosis, SVA synthesis, prompt-driven code review Zero Sign-Off Authority (Advisory Only)
Tier 2: Verification & Implementation EDA Tool Suite (VCS, Questa, JasperGold, Genus, DC, SpyGlass) Exhaustive random simulation, static lint, CDC verification, formal equivalence, technology mapping, STA sign-off 100% Mathematical & Physical Proof
Tier 3: Sign-Off & Tapeout Human Principal Engineer / ASIC Architect Microarchitecture validation, constraint sign-off, waiver review, silicon tapeout sign-off Final Legal & Technical Accountability

Common AI Failure Modes in Semiconductor Design

Every front-end engineer must guard against these specific failure modes:

  • Phantom Port Generation: In multi-module instantiations, Claude may invent plausible-looking signals (e.g., axi_awqos, bvalid_ack) that do not exist in your team's frozen IP interface.
  • Silent Vector Truncation: In complex arithmetic expressions, mixing logic [31:0] with implicit 32-bit signed integers can silently drop MSBs or invert signedness without generating a compiler error.
  • Inferred Latches via Incomplete Branches: Claude frequently omits default assignments in deeply nested if-else or case structures, creating level-sensitive latches that wreck scan ATPG and STA closure.
  • Hallucinated Tool Commands & SDC Options: Asking Claude for Cadence Genus or Synopsys PrimeTime commands can yield synthesized flag names (e.g., set_clock_groups -exclusive_async) that fail during batch EDA runs.

12 Core Front-End RTL Design Skills with Claude

These twelve modular skills represent the primary daily activities of ASIC front-end RTL and SoC integration engineers, paired with battle-tested Claude workflows.

01. Specification to Synthesizable RTL

Converting natural-language PRDs (Product Requirement Documents) or interface specs into RTL is prone to human error when requirements are underspecified. Claude acts as a requirements auditor and RTL scaffolder.

What Claude Does:

  • Extracts implicit hardware elements: counter widths, state machine topologies, datapath registers, and handshake conditions.
  • Constructs cycle-by-cycle micro-architectural execution tables before generating Verilog.
  • Surfaces ambiguous edge cases: "What happens if push and pop assert simultaneously when the buffer contains 1 element?"
Specification Matrix → Cycle Table
Microarchitecture
Cycle | Reset_n | wr_en | rd_en | wdata | count | rdata | full | empty | Action
------+---------+-------+-------+-------+-------+-------+------+-------+---------------------------------
  0   |    0    |   X   |   X   |   X   |   0   |  X    |  0   |   1   | Asynchronous Reset active
  1   |    1    |   1   |   0   | 0xAA  |   0   |  X    |  0   |   1   | Write accepted; count increments
  2   |    1    |   1   |   0   | 0xBB  |   1   | 0xAA  |  0   |   0   | Data available; empty deasserts
  3   |    1    |   1   |   1   | 0xCC  |   2   | 0xAA  |  0   |   0   | Sim Write+Read; count unchanged
  4   |    1    |   0   |   1   |   X   |   2   | 0xBB  |  0   |   0   | Read advances rdata pipeline
⚠️ Independent Validation Procedure
Verify Claude-generated cycle tables against your block's Architectural Interface Agreement (AIA). Run a zero-delay behavioral simulation in Synopsys VCS or Siemens Questa with a directed testbench matching the cycle table verbatim.

02. SystemVerilog RTL Code Review & Antipattern Triage

RTL code review requires detecting insidious race conditions, non-synthesizable constructs, and simulation-synthesis mismatches.

Antipattern Category Simulation Impact Synthesis & Silicon Impact
Blocking (=) in always_ff Zero-delay race conditions dependent on simulator event-queue ordering Synthesizes to combinational logic or broken shift registers
Incomplete always_comb branch Functional simulation retains previous value (latches) Infers transparent latches; breaks STA and scan chain testing
Unsigned comparison on signed variable Negative numbers evaluate as huge positive numbers Incorrect datapath results in ALU and filters
Multi-Driver Assignment Simulator resolves to 1'bx (unknown) Physical short-circuit / synthesis elaboration fatal error
Buggy RTL vs. Corrected SystemVerilog
Code Review
// ❌ BUGGY RTL: Inferred latch, blocking assignment in FF, and signedness hazard
module counter_buggy (
    input  wire        clk, rst_n, en,
    input  wire signed [7:0] offset,
    output logic [7:0] count
);
    // BUG 1: Incomplete combinational logic infers latch
    logic [7:0] next_count;
    always_comb begin
        if (en)
            next_count = count + offset; // BUG 2: mixed signed/unsigned arithmetic
        // Missing else -> INFERRED LATCH
    end

    // BUG 3: Blocking assignment in clocked procedural block
    always_ff @(posedge clk or negedge rst_n) begin
        if (!rst_n)
            count = 8'h00; // Blocking assignment in sequential logic!
        else
            count = next_count;
    end
endmodule

// ✅ CORRECTED SYSTEMVERILOG: Latch-free, non-blocking, explicit signedness
module counter_clean (
    input  logic             clk,
    input  logic             rst_n,
    input  logic             en,
    input  logic signed [7:0] offset,
    output logic signed [7:0] count
);
    logic signed [7:0] next_count;

    // Explicit default prevents latches
    always_comb begin
        next_count = count;
        if (en) begin
            next_count = count + offset;
        end
    end

    // Strict non-blocking sequential assignments
    always_ff @(posedge clk or negedge rst_n) begin
        if (!rst_n) begin
            count <= 8'sd0;
        end else begin
            count <= next_count;
        end
    end
endmodule

03. AMBA Protocol Implementation & Ready/Valid Handshakes

Bus protocols (AXI4, AXI4-Lite, APB4) govern on-chip communication in modern SoCs. Protocol compliance errors are notoriously difficult to debug after synthesis.

ARM AXI Golden Rule
A sender's VALID signal must NEVER depend combinationally on the receiver's READY signal. Doing so creates circular combinational loops across IP blocks, causing system deadlocks. However, READY may wait for VALID.

When registering READY to break long timing paths, a standard single flip-flop causes a 1-cycle throughput penalty (50% maximum bandwidth). To achieve 100% throughput with fully registered inputs and outputs, a Skid Buffer is required. Claude can generate and verify skid buffers across AXI channels.

04. FIFO and Asynchronous Clock Domain Crossing Design

FIFOs decouple data producer and consumer rates. Dual-clock Asynchronous FIFOs cross data between asynchronous clock domains using Gray-code pointers.

  • Gray Code Property: Successive Gray-code values differ by exactly one bit, preventing multi-bit bus skew hazards when sampled by 2-FF synchronizers.
  • Pointer Math: For a FIFO of depth 2^N, pointers must be N+1 bits wide. The extra MSB distinguishes a completely full FIFO from an empty FIFO when the bottom N bits match.
  • Safe Empty Condition: Evaluated in the Read Clock domain:
    assign empty = (rptr_gray == wptr_gray_sync);
  • Safe Full Condition: Evaluated in the Write Clock domain by checking inverted top 2 MSBs:
    assign full = (wptr_gray == {~rptr_gray_sync[N:N-1], rptr_gray_sync[N-2:0]});

05. Finite State Machine (FSM) Optimization & Encoding

State encoding directly impacts area, critical path timing, and dynamic power dissipation. Claude helps evaluate trade-offs:

Encoding Type Flip-Flops Required Combinational Decode Depth Best Used For
Binary (Sequential) ceil(log2(S)) (Minimum) Moderate to Deep (multi-bit comparator) Area-constrained control blocks, low-speed interfaces
One-Hot S (1 flop per state) Minimal (Single gate per state test) High-speed ASIC pipelines (>1 GHz), FPGAs
Gray Code ceil(log2(S)) Low to Moderate Adjacent state sequences, low-power state transitions

Claude can convert 1-process FSMs into industry-standard 3-process FSMs (State FF, Combinational Next-State, and Registered Outputs) to guarantee glitch-free control outputs without combinational timing penalties.

06. Clock & Reset Domain Crossing (CDC / RDC) Analysis

Metastability cannot be eliminated; it can only be bounded to acceptable Mean Time Between Failures (MTBF > 1000 years).

  • Single-Bit CDC: Safe with 2-FF or 3-FF synchronizers (using standard cell synchronizer library cells like SYNC2_X1).
  • Multi-Bit CDC Hazard: Never run multi-bit binary buses through independent synchronizers. Interconnect net delay differences (bus skew) cause bits to be sampled on different clock cycles, transmitting illegal intermediate values.
  • Reset Deassertion Metastability: While reset assertion can be asynchronous, reset release must be synchronous to the clock to prevent flip-flops from entering metastability if reset deasserts within the setup/hold window.
CDC Sign-off Mandate
RTL review by Claude is an early-filtering filter. It does NOT replace structural and functional CDC verification via Siemens Questa CDC or Synopsys VC CDC.

07. Lint Report Triage & Automated Remediation

Industrial lint tools (SpyGlass, Verilator, Synopsys Lint) generate thousands of warnings on complex SoCs. Feeding raw logs to Claude allows rapid categorization and surgical code refactoring.

Commercial Lint Log Triage Prompt Pattern
SpyGlass / Verilator
Act as a Senior ASIC Lint Specialist. Analyze the following Synopsys SpyGlass Lint warnings:
Rule: W164b (Truncation in assignment: RHS width 32, LHS width 16) at dma_engine.sv line 142
Rule: W415a (Latch inferred for signal 'state_next') at dma_fsm.sv line 88
Rule: W240 (Input port 'cfg_mode[3:2]' is never read) at dma_engine.sv line 15

Provide:
1. Exact root cause in the underlying Verilog construct.
2. Synthesizable code fix that preserves functional intent.
3. Appropriate SpyGlass waiver pragma only if this is an intentional hardware truncation.

08. Synthesis QoR and STA Timing Path Interpretation

When a synthesis run fails timing with negative slack (WNS < 0), the RTL engineer must inspect the gate-level critical path report and map it back to RTL structures.

STA Report Symptom Underlying Hardware Bottleneck RTL Architectural Fix
High Logic Depth (>25 gates in 1GHz clock) Unpipelined arithmetic (e.g. Add → Multiply → Compare in 1 cycle) Insert pipeline stage (register retiming) between arithmetic ops
High Cell Fanout (>64 loads) Global control signal driving hundreds of multiplexers or enables Duplicate control registers in RTL (register replication)
Mux Cascade Delay Deep priority if-else tree on wide bus Refactor into parallel one-hot multiplexer or balanced tree

09. Formal Verification & SystemVerilog Assertions (SVA)

Formal Property Verification (FPV) in tools like Cadence JasperGold or Synopsys VC Formal mathematically proves that a design satisfies properties across all possible input scenarios without writing a testbench.

  • Assume (assume property): Constrains environment inputs (e.g., "The upstream block will never assert read when empty").
  • Assert (assert property): Proves internal design guarantees (e.g., "FIFO pointers will never overflow").
  • Cover (cover property): Proves that a target scenario is reachable (e.g., "FIFO reaches full state within 20 cycles").

10. Low-Power RTL and IEEE 1801 UPF Separation

Modern SoCs utilize aggressive low-power techniques: dynamic clock gating, multi-voltage islands, power gating, and state retention.

Clean Division: RTL vs. UPF
What belongs in RTL: Functional enable signals, power management state machine sequencers, and handshake logic.
What belongs in UPF (Unified Power Format): Power switches, level shifters, isolation strategies, and retention cell mapping. Never instantiate physical isolation NAND/NOR gates manually in functional RTL.

11. RTL Refactoring and PPA (Power-Performance-Area) Optimization

PPA optimization requires eliminating redundant logic while preserving cycle-exact interface timing.

  • Operator Sharing: Sharing expensive 32-bit adders or multipliers across mutually exclusive branches.
  • Common Subexpression Elimination: Pre-calculating identical address offsets.
  • Clock Gating Readiness: Ensuring register load enables have low activity factors so synthesis tools can automatically insert Integrated Clock Gating (ICG) cells.

12. Waveform and Simulation Regression Debugging

When regression testbenches fail, debugging requires correlating signal transitions across time. Claude can analyze ASCII signal tables or VCD excerpts to pinpoint race conditions and off-by-one pointer errors.

Build 12 Reusable Claude Code Skills for RTL Teams

⚡ Claude Code Skills Architecture for Front-End Engineering

Claude Code skills allow engineering teams to define custom, repeatable, version-controlled workflows directly within their git repositories. Placing a SKILL.md file in .claude/skills/<skill-name>/ exposes custom slash commands (e.g., /rtl-code-review, /sva-generator) equipped with domain-specific rules, validation checklists, and structured outputs.

Every Claude Code skill requires:

  • YAML Frontmatter: Mandatory name and actionable description specifying when the skill should trigger.
  • Required Inputs: Specific RTL files, protocol standards, clock domains, or EDA reports needed for execution.
  • Step-by-Step Workflow: Explicit sequence of operations preventing skipped verification phases.
  • Strict Technical Constraints: Inviolable rules (e.g., "Never alter interface pinout", "Never mask genuine lint errors with waivers").
  • Validation Checklist: Pass/Fail gates that must be satisfied before the response is finalized.
📦 Instant Production Skill Pack
Download all 12 skills bundled into a ready-to-unzip .claude/skills/ archive for your local repository.

01. RTL Code Review (.claude/skills/rtl-code-review/SKILL.md)

Audits SystemVerilog RTL for synthesizability, race conditions, latch inference, and signedness.

.claude/skills/rtl-code-review/SKILL.md
Claude Code Skill
---
name: rtl-code-review
description: Performs rigorous ASIC/FPGA SystemVerilog RTL code review for synthesizability, race conditions, latch inference, signedness pitfalls, and coding guidelines.
---

# RTL Code Review Skill for ASIC Front-End Engineers

## Purpose
Performs comprehensive static architectural and syntactic review of SystemVerilog/Verilog RTL modules before synthesis and simulation, flagging race conditions, inferred latches, multi-driver nets, and non-synthesizable constructs.

## When to Activate
Activate when an engineer provides a SystemVerilog module for code quality inspection, pre-commit audit, or lint-preparation review.

## Required Inputs
- SystemVerilog/Verilog source code (`.sv` or `.v`)
- Target technology context (ASIC standard cell vs FPGA)
- Clock and reset convention (e.g., active-low asynchronous reset, synchronous reset)
- Module interface specification (optional but recommended)

## Step-by-Step Workflow
1. **Header & Interface Audit:** Verify port directions, explicit bit-widths (avoid bare integers), unpacked dimensions, and package imports.
2. **Procedural Block Verification:**
   - Confirm sequential logic strictly uses `always_ff @(posedge clk or negedge rst_n)` with non-blocking assignments (`<=`).
   - Confirm combinational logic strictly uses `always_comb` with blocking assignments (`=`).
   - Confirm latches are never inferred unless intentionally declared via `always_latch`.
3. **Branch Completeness & Default Assignment:**
   - Verify every conditional branch (`if-else`, `case`) has an exhaustive default assignment or complete coverage to prevent unintended latches.
   - For `case` statements, verify `unique case` or `priority case` usage matches designer intent.
4. **Data Type & Arithmetic Sanity:**
   - Check signed vs unsigned operations: ensure mixed signed/unsigned arithmetic is explicitly cast with `$signed()`.
   - Audit bit-slice assignments and vector truncations.
5. **Synthesis & Simulation Antipatterns:**
   - Flag simulation delays (`#1`), initial blocks (outside simulation testbenches), and unsynthesizable system functions (`$display`, `$finish` inside synthesizable modules).
6. **Generate Structured Review Report:** Output categorized findings (Critical, Warning, Informational).

## Technical Constraints
- Never alter interface port names, signal widths, or cycle latency without explicit permission.
- Never assume an undeclared signal is 1 bit; flag explicit declarations.
- Distinguish between FPGA block RAM templates and ASIC flip-flop banks.

## Output Format
- **Executive Summary:** Pass/Needs Revision verdict.
- **Critical Issues (Must Fix):** Race conditions, inferred latches, multi-driver nets.
- **Warnings (Review Needed):** Truncation, signedness, default branches.
- **Suggested Corrected RTL:** Full synthesizable code block with line-by-line diff.

## Validation Checklist
- [ ] No blocking assignments in `always_ff`.
- [ ] No non-blocking assignments in `always_comb`.
- [ ] No inferred latches.
- [ ] Reset values provided for all sequential state registers.
- [ ] No multi-driver nets.

## Example Invocation
```text
/rtl-code-review
Inspect the following arbiter module for ASIC synthesis compliance:
[paste arbiter.sv]
```

02. SV Lint Triage (.claude/skills/systemverilog-lint-review/SKILL.md)

Interprets SpyGlass, Verilator, and Questa lint reports with non-breaking fixes.

.claude/skills/systemverilog-lint-review/SKILL.md
Claude Code Skill
---
name: systemverilog-lint-review
description: Analyzes EDA static lint violation reports (SpyGlass, Veridian, Synopsys, Cadence HAL) and provides root-cause diagnosis and non-breaking RTL fixes.
---

# SystemVerilog Lint Review Skill

## Purpose
Interprets industrial static lint violation logs from commercial EDA tools (Synopsys SpyGlass, Siemens Questa Lint, Cadence HAL, Verilator) and provides actionable root-cause analysis and minimal-impact RTL repairs.

## When to Activate
Activate when an engineer pastes lint warnings/errors or requests automated resolution of lint rule violations.

## Required Inputs
- Lint report log snippet (Rule ID, message, file, line number)
- Associated SystemVerilog RTL module source code
- Target tool name / rule set (e.g., SpyGlass Lint, STARC, OpenMORE)

## Step-by-Step Workflow
1. **Rule Classification:** Parse Rule IDs (e.g., `W415a` latch inference, `W164b` truncation, `W240` unused net, `W188` signedness mismatch).
2. **Context Correlation:** Pinpoint exact source lines and identify the underlying hardware construct triggering the warning.
3. **False Positive vs True Defect Assessment:**
   - Determine whether the rule violation represents a true functional hazard (e.g., unintentional vector drop) or an intentional design choice (e.g., unused upper bits of a counter).
4. **Remediation Strategy:**
   - True Defect: Formulate an exact RTL correction maintaining functional equivalence.
   - False Positive / Intentional: Provide tool waiver syntax (e.g., `// spyglass disable_block W240`) or standard SV lint-clean coding idiom.
5. **Impact Verification:** Confirm the suggested modification introduces zero simulation divergence or timing impact.

## Technical Constraints
- Never mask a genuine functional defect with a tool waiver comment without explicit engineer confirmation.
- Ensure all bit slices remain explicitly dimensioned.

## Output Format
- **Violation Breakdown Table:** Rule ID | Severity | Root Cause | Fix Strategy
- **Corrected Code Snippets:** Before vs After with exact diff.
- **Recommended Waiver Directives:** If applicable, formatted for SpyGlass / Verilator.

## Validation Checklist
- [ ] Root cause verified against IEEE 1800-2023 semantics.
- [ ] Fix does not modify module latency or pinout.
- [ ] No unintended latch or multi-driver introduced by the fix.

## Example Invocation
```text
/systemverilog-lint-review
Tool: SpyGlass 2023.09
Violations:
- W164b: Truncation in assignment: rhs width 32, lhs width 16 (fifo_ctrl.sv:84)
- W415a: Latch inferred for signal 'next_state' (fsm.sv:52)
```

03. FIFO & CDC Review (.claude/skills/fifo-design-review/SKILL.md)

Audits Gray-code pointer math, empty/full flags, and watermarks across clock boundaries.

.claude/skills/fifo-design-review/SKILL.md
Claude Code Skill
---
name: fifo-design-review
description: Evaluates synchronous and asynchronous FIFO architectures for Gray-code pointer safety, almost-full/empty calculation, overflow protection, and CDC integrity.
---

# FIFO Design Review Skill

## Purpose
Audits dual-clock and single-clock FIFO implementations for pointer math correctness, empty/full detection, almost-empty/almost-full watermarks, circular memory wrap-around, and CDC safety.

## When to Activate
Activate when designing, verifying, or debugging FIFO buffers, queue controllers, or latency bridges.

## Required Inputs
- FIFO SystemVerilog source code
- Clock domain specifications (Synchronous single-clock vs Asynchronous dual-clock)
- Depth and Data Width parameters
- Watermark requirements (programmable empty/full threshold levels)

## Step-by-Step Workflow
1. **Pointer Dimensioning:** Confirm pointer width is $N+1$ where Depth = $2^N$ to distinguish full from empty.
2. **Gray Code Conversion Audit (Async FIFO):**
   - Verify binary-to-Gray conversion: `assign gray_ptr = bin_ptr ^ (bin_ptr >> 1)`.
   - Verify Gray-to-binary conversion logic in the destination domain.
   - Confirm Gray pointers are registered before crossing clock boundaries.
3. **Synchronizer Chain Verification:**
   - Confirm 2-stage (or 3-stage) flip-flop synchronizers exist on pointer crossings.
   - Check for `(* ASYNC_REG = "TRUE" *)`, `set_false_path`, or `set_max_delay -datapath_only` constraint requirements.
4. **Full and Empty Flag Generation:**
   - Empty: `assign empty = (rptr_gray == wptr_gray_sync)` in read domain.
   - Full: Verify top two MSBs inverted with lower bits identical: `assign full = (wptr_gray == {~rptr_gray_sync[N:N-1], rptr_gray_sync[N-2:0]})`.
5. **Simultaneous Push/Pop Hazards:** Check behavior when `wr_en` and `rd_en` assert concurrently under edge conditions.
6. **Watermark / Level Counter Accuracy:** Audit almost-full and almost-empty calculations for one-cycle latency offset.

## Technical Constraints
- Non-power-of-2 depth asynchronous FIFOs require specialized Gray coding or dual-pointer math; flag non-$2^N$ depth as a critical CDC risk.

## Output Format
- **Architecture Assessment:** Synchronous vs Asynchronous assessment.
- **Pointer & Synchronizer Audit:** Detailed analysis of pointer generation and CDC path.
- **Flag Correctness Review:** Mathematical verification of empty/full formulas.
- **SVA Assertions:** SystemVerilog assertions to prove safety.

## Validation Checklist
- [ ] Pointer width is $\log_2(	ext{DEPTH}) + 1$.
- [ ] Gray code changes by only 1 bit per increment.
- [ ] Full condition verified in write clock domain.
- [ ] Empty condition verified in read clock domain.
- [ ] Write into full and read from empty are strictly prevented.

## Example Invocation
```text
/fifo-design-review
Review this async FIFO for a 16-deep 64-bit PCIe-to-AXI bridge:
[paste async_fifo.sv]
```

04. CDC & RDC Analysis (.claude/skills/cdc-rdc-review/SKILL.md)

Detects multi-bit skew, reconvergence, and reset deassertion metastability.

.claude/skills/cdc-rdc-review/SKILL.md
Claude Code Skill
---
name: cdc-rdc-review
description: Analyzes clock-domain crossings (CDC) and reset-domain crossings (RDC) for metastability hazards, reconvergence, bus skew, and reset deassertion safety.
---

# Clock & Reset Domain Crossing (CDC/RDC) Review Skill

## Purpose
Identifies asynchronous timing hazards, metastability risks, multi-bit coherency bugs, reconvergence artifacts, and reset assertion/deassertion vulnerabilities in multi-clock ASIC SoCs.

## When to Activate
Activate when analyzing multi-clock RTL, async reset distribution, or preparing for Questa CDC / Synopsys VC CDC signoff.

## Required Inputs
- Multi-clock SystemVerilog RTL modules
- Clock definition list (clock frequencies, domains, asynchronous relationships)
- Reset architecture (asynchronous assert / synchronous deassert scheme)

## Step-by-Step Workflow
1. **Clock Domain Identification:** Map every flip-flop to its originating clock tree.
2. **Single-Bit Crossing Audit:**
   - Ensure multi-flop synchronizers (2-FF / 3-FF) are deployed on all async control signals.
   - Verify pulse synchronizers (toggle-type) for fast-to-slow clock domain pulses.
3. **Multi-Bit Crossing Audit (Crucial):**
   - Check for unsafe multi-bit CDC: Flag any instance where individual bits of a binary bus cross through separate synchronizers.
   - Mandate Gray code conversion, asynchronous FIFO, or Valid/Ready 4-phase handshake synchronizer.
4. **Reconvergence Analysis:**
   - Detect signals that cross asynchronously, synchronize separately, and subsequently converge into common combinational logic.
5. **Reset Domain Crossing (RDC):**
   - Check that asynchronous resets use an Asynchronous Assert, Synchronous Deassert (AASD) synchronizer per clock domain.
   - Check for reset race conditions on sequential circuits during power-up/wake-up.

## Technical Constraints
- Never declare a CDC path "clean" based solely on simulation or code inspection. State clearly that Questa CDC / VC CDC / SpyGlass CDC and SDC constraints (`set_clock_groups -asynchronous`) are mandatory for sign-off.

## Output Format
- **Domain Topology Table:** Clock A -> Clock B | Signal Name | Synchronizer Topology | Hazard Status
- **Identified Hazards & Risks:** Explanation of potential failure modes (metastability, skew, reconvergence).
- **Hardened SystemVerilog Module:** Safe synchronizer implementation.
- **Synthesis/STA Directives:** Necessary false-path / max-delay constraints.

## Validation Checklist
- [ ] All async signals pass through dedicated synchronizers.
- [ ] No binary counters cross domains without Gray coding or handshaking.
- [ ] Reset release synchronized to destination clock edge.
- [ ] Synchronizer flip-flops marked with `DONT_TOUCH` and `ASYNC_REG`.

## Example Invocation
```text
/cdc-rdc-review
Review this clock-crossing block between 400MHz AXI and 100MHz APB:
[paste cdc_bridge.sv]
```

05. APB & AXI Protocols (.claude/skills/apb-axi-protocol-review/SKILL.md)

Verifies ready/valid handshake rules, backpressure, burst rules, and skid buffers.

.claude/skills/apb-axi-protocol-review/SKILL.md
Claude Code Skill
---
name: apb-axi-protocol-review
description: Verifies APB4, AXI4-Lite, and AXI4 ready/valid handshake protocols, backpressure, burst rules, outstanding transactions, and skid buffers.
---

# APB & AXI Protocol Review Skill

## Purpose
Audits AMBA APB4, AXI4-Lite, and AXI4 bus interfaces for protocol compliance, deadlock freedom, zero-bubble throughput, skid buffer integration, and backpressure correctness.

## When to Activate
Activate when writing or inspecting memory-mapped bus interfaces, peripherals, crossbars, DMA controllers, or protocol converters.

## Required Inputs
- Protocol type (AMBA APB4, AXI4-Lite, AXI4 Full)
- Role (Master / Subordinate / Interconnect)
- SystemVerilog RTL source code
- Outstanding transaction / burst capability specifications

## Step-by-Step Workflow
1. **Handshake Rule Verification (AXI/AXI-Lite):**
   - Verify ARM AXI Rule: `VALID` signal must NEVER depend combinationally on `READY` (prevents deadlock).
   - Verify `READY` may depend on `VALID`.
   - Verify once `VALID` is asserted, payload and `VALID` remain asserted until `READY` is high (Handshake Stability Rule).
2. **APB4 Protocol Compliance:**
   - Verify two-cycle access: Setup phase (`PSEL=1, PENABLE=0`) followed by Access phase (`PSEL=1, PENABLE=1`).
   - Audit `PREADY` wait-state handling and `PSLVERR` error response.
   - Verify write strobe (`PSTRB`) and byte-lane routing.
3. **Skid Buffer & Throughput Audit:**
   - If registered `READY` output is required to break long combinational timing paths, ensure a 2-stage skid buffer is used to prevent throughput drops.
4. **Channel Decoupling (AXI):**
   - Confirm Write Address (AW), Write Data (W), Write Response (B), Read Address (AR), and Read Data (R) channels function independently.
5. **Reset & Flush Integrity:**
   - Ensure `ARVALID`, `AWVALID`, `WVALID`, `BVALID`, and `RVALID` deassert to 0 on reset.

## Technical Constraints
- Strict adherence to official ARM AMBA AXI and APB protocol specifications (IHI0022E / IHI0024C).

## Output Format
- **Protocol Compliance Matrix:** Check results for all core AMBA rules.
- **Timing & Handshake Diagrams:** ASCII or WaveDrom sequence of legal/illegal transfers.
- **Identified Bugs & Corner Cases:** Deadlocks, dropped beats, unstable payloads.
- **Compliant RTL Fix:** Corrected module code.

## Validation Checklist
- [ ] No `VALID` waiting on `READY` combinationally.
- [ ] Data holds stable until handshake completes.
- [ ] Skid buffer implemented if `READY` is registered.
- [ ] `PREADY` and `PSLVERR` legal in APB Access phase.

## Example Invocation
```text
/apb-axi-protocol-review
Protocol: AXI4-Lite Subordinate
Check if this register slice violates the AXI handshake rules:
[paste axi_reg_slice.sv]
```

06. Synthesis QoR Analysis (.claude/skills/synthesis-report-analysis/SKILL.md)

Decodes Cadence Genus and Synopsys DC area, gate count, and cell usage reports.

.claude/skills/synthesis-report-analysis/SKILL.md
Claude Code Skill
---
name: synthesis-report-analysis
description: Interprets Cadence Genus and Synopsys Design Compiler synthesis reports (QoR, area, gate count, cell distribution) and guides RTL optimization.
---

# Synthesis Report Analysis Skill

## Purpose
Diagnoses post-synthesis QoR (Quality of Results) reports from Synopsys Design Compiler (`dc_shell`) and Cadence Genus Synthesis Solution, mapping gate-level bottlenecks back to RTL microarchitecture.

## When to Activate
Activate when analyzing synthesis logs, area breakdowns, high-gate-count modules, or cell utilization reports.

## Required Inputs
- Synthesis report text (e.g., `report_qor`, `report_area -hierarchy`, `report_gates`)
- Tool identity (Synopsys DC vs Cadence Genus)
- Target technology node and cell library (e.g., TSMC N5, GF 22FDX, SkyWater 130)
- Associated SystemVerilog RTL source code

## Step-by-Step Workflow
1. **Metrics Extraction:**
   - Extract Total Cell Area, Sequential Area, Inverter/Buffer Area, Combinational Area.
   - Check macro count (RAMs, ROMs, PLLs) vs standard cell logic.
2. **Sequential vs Combinational Ratio Analysis:**
   - Identify abnormally high flop-to-combinational ratios (potential over-pipelining or bloated register files).
   - Identify excessive combinational logic per flop (insufficient pipelining).
3. **Logic Structure Diagnosis:**
   - Detect bloated arithmetic units: Look for multi-bit dividers, unshared multipliers, or 64-bit adders mapped to generic ripple-carry logic.
   - Detect huge multiplexer trees: Large case statements or dynamic bus multiplexers causing area explosion.
4. **Cell Type Breakdown:**
   - Identify excessive inverter/buffer count indicating severe fanout or long design rules.
   - Check high-drive cell utilization (potential dynamic power and area penalty).
5. **Formulate RTL Microarchitecture Action Plan:**
   - Provide concrete RTL refactoring strategies (operator sharing, state encoding, mux restructuring).

## Technical Constraints
- Never modify functional behavior when recommending area-reduction transformations.
- Acknowledge difference between wireload-model synthesis and physical synthesis (e.g., DC-Topo / Genus iSpatial).

## Output Format
- **Synthesis Summary Scorecard:** Area, Instances, Flop Count, Combinational Depth.
- **Hotspot Hierarchy Table:** Modules ranked by area contribution percentage.
- **Root-Cause RTL Assessment:** Specific lines of code causing cell bloat.
- **Actionable Optimization Recommendations:** Code diffs for resource sharing and mux pruning.

## Validation Checklist
- [ ] Area numbers properly categorized by standard cell vs macro.
- [ ] RTL modifications preserve clock-cycle latency and protocol contracts.
- [ ] Synthesis constraints (operating condition, wireload model) accounted for.

## Example Invocation
```text
/synthesis-report-analysis
Tool: Synopsys Design Compiler 2022.12
Report: [paste report_area.rpt]
RTL: [paste crypto_engine.sv]
```

07. STA Timing Analysis (.claude/skills/timing-report-analysis/SKILL.md)

Isolates negative slack bottlenecks in setup/hold reports and guides RTL restructuring.

.claude/skills/timing-report-analysis/SKILL.md
Claude Code Skill
---
name: timing-report-analysis
description: Analyzes setup and hold static timing analysis (STA) path reports from Synopsys PrimeTime, Design Compiler, or Cadence Genus/Tempus to guide RTL path remediation.
---

# Timing Report Analysis Skill

## Purpose
Decodes complex Static Timing Analysis (STA) critical path reports, isolates data-arrival bottlenecks, and formulates RTL-level architectural timing closure strategies.

## When to Activate
Activate when an engineer has negative slack (WNS/TNS) in setup (`max_delay`) or hold (`min_delay`) paths post-synthesis or post-place-and-route.

## Required Inputs
- STA Timing Report snippet (`report_timing -nosplit -transition_time -nets -attributes`)
- Clock period and operating corner (e.g., SSG 0.675V -40C, TT 0.8V 25C)
- RTL module source code corresponding to the failing timing path

## Step-by-Step Workflow
1. **Slack & Constraint Extraction:**
   - Identify WNS (Worst Negative Slack), clock period, required time, arrival time, clock uncertainty.
2. **Path Topology Deconstruction:**
   - Trace Startpoint (launch flip-flop `CK -> Q`), Combinational Path, and Endpoint (capture flip-flop `D`).
   - Check clock skew between launch clock path and capture clock path.
3. **Delay Component Breakdown:**
   - Calculate Cell Delay vs Net (Interconnect) Delay percentage.
   - Count logic depth (number of gates between launch and capture).
   - Identify High Fanout Nets (HFN) on the datapath.
4. **Identify RTL Timing Antipatterns:**
   - Cascaded priority encoders (`if-else` chains on wide buses).
   - Deep arithmetic operations (e.g., adder followed by comparator followed by shifter in single cycle).
   - Wide multi-bit multiplexers before register input.
5. **Remediation Strategy Formulation:**
   - Recommend targeted RTL transformations: Pipelining (register retiming), Shannon decomposition, parallel prefix restructuring, or pre-decoding control signals.

## Technical Constraints
- Never change cycle latency without architectural permission. If a pipeline stage cannot be added, focus on logic flattening and balancing.

## Output Format
- **Path Breakdown Table:** Stage | Cell Type | Fanout | Cell Delay | Net Delay | Cumulative
- **Bottleneck Diagnosis:** Pinpoint the exact RTL expression consuming excessive delay.
- **RTL Refactoring Solution:** Code replacement with flattened logic or balanced multiplexing.
- **Downstream Tool Recommendations:** Directives for synthesis (e.g., grouping, path priority).

## Validation Checklist
- [ ] Logic depth verified against clock period budget (rule of thumb: ~25-30 FO4 per ns).
- [ ] Clock skew identified as either helping or hurting slack.
- [ ] Solution does not break cycle-by-cycle interface contracts.

## Example Invocation
```text
/timing-report-analysis
Clock Period: 1.0 ns (1 GHz target)
Slack: -240 ps WNS
Report: [paste report_timing.rpt]
RTL: [paste packet_parser.sv]
```

08. SVA Generator (.claude/skills/sva-generator/SKILL.md)

Creates formal assume/assert/cover properties for JasperGold and VC Formal.

.claude/skills/sva-generator/SKILL.md
Claude Code Skill
---
name: sva-generator
description: Generates formal SystemVerilog Assertions (SVA) for protocols, FIFOs, FSMs, arbiters, and interface contracts with assume/assert/cover properties.
---

# SystemVerilog Assertions (SVA) Generator Skill

## Purpose
Synthesizes high-coverage, mathematically precise SystemVerilog Assertions (SVA) for simulation monitoring and formal property verification (FPV) in Cadence JasperGold, Synopsys VC Formal, or Siemens Questa Formal.

## When to Activate
Activate when verifying protocols, creating formal testbenches, adding interface assertions, or proving safety and liveness properties.

## Required Inputs
- Design specification or SystemVerilog RTL module
- Target interface signals (Clock, Reset, Control, Data)
- Property requirements (e.g., no overflow, mutual exclusion, handshake stability, starvation freedom)
- Verification mode (Dynamic Simulation vs Formal Property Verification)

## Step-by-Step Workflow
1. **Clock & Reset Setup:** Define default clocking block and disable condition:
   ```systemverilog
   default clocking cb @(posedge clk); endclocking
   default disable iff (!rst_n);
   ```
2. **Immediate vs Concurrent Classification:**
   - Use concurrent assertions (`property ... endproperty`) for temporal relationships.
   - Use immediate assertions for one-shot sanity checks in combinational logic.
3. **Safety Properties (Bad things never happen):**
   - Write/Read bounds (FIFO never writes when full, never reads when empty).
   - Mutual exclusion (one-hot state encoding, grant arbiter outputs).
   - Protocol invariants (AXI `VALID` stable until `READY`, `ADDR` aligned).
4. **Liveness Properties (Good things eventually happen):**
   - Eventual response under fairness assumptions: `req |-> s_eventually ack`.
5. **Assume vs Assert Partitioning:**
   - Tag module inputs with `assume property` (environment constraints).
   - Tag module internal states and outputs with `assert property` (design proof).
   - Add `cover property` for reachability verification.

## Technical Constraints
- Distinguish overlapping implication (`|->`) from non-overlapping implication (`|=>`).
- Avoid unbounded liveness assertions in simulation that cause performance collapse.

## Output Format
- **Assertion Specification Table:** Property Name | Type (Safety/Liveness) | Intent | Formal Rule
- **Self-Contained SVA Checker Module:** Ready to bind via `bind` construct.
- **Formal Verification Command Script:** Basic setup for JasperGold or VC Formal.

## Validation Checklist
- [ ] All properties use appropriate `disable iff (!rst_n)`.
- [ ] Implication operators properly selected (`|->` vs `|=>`).
- [ ] No race conditions between assertion evaluation and NBA updates.
- [ ] SVA module cleanly bindable without modifying original RTL source.

## Example Invocation
```text
/sva-generator
Generate comprehensive SVA assertions for an AXI4-Lite Slave interface:
Clock: clk, Reset: rst_n
Signals: awvalid, awready, wvalid, wready, bvalid, bready, bresp
```

09. Low-Power & UPF (.claude/skills/low-power-upf-review/SKILL.md)

Audits ICG clock gating, power domain sequencing, and IEEE 1801 UPF isolation.

.claude/skills/low-power-upf-review/SKILL.md
Claude Code Skill
---
name: low-power-upf-review
description: Audits low-power RTL constructs, Integrated Clock Gating (ICG), power domain isolation, retention flip-flops, and IEEE 1801 UPF compatibility.
---

# Low-Power RTL & UPF Review Skill

## Purpose
Examines RTL designs for power optimization compatibility, Integrated Clock Gating (ICG) enablement, power domain partitioning, retention strategies, and IEEE 1801 UPF (Unified Power Format) consistency.

## When to Activate
Activate when auditing battery-powered, mobile, or high-efficiency ASIC subsystems with multi-voltage domains or power-gated blocks.

## Required Inputs
- SystemVerilog RTL modules
- Power architecture intent (Power Switch, Isolation, Level Shifter, State Retention)
- UPF / CPF specification (optional)
- Clock gating targets and minimum enable bit-widths

## Step-by-Step Workflow
1. **Clock Gating Efficiency Audit:**
   - Detect data-recirculating registers lacking enable signals: `if (load_en) q <= d; else q <= q;`.
   - Ensure enable signals have sufficient idle periods to justify ICG cell insertion.
   - Flag clock gating on registers narrower than minimum threshold (typically 4 or 8 bits).
2. **Power Gating Sequence Review:**
   - Audit Power Management Controller FSM:
     1. Assert isolate enable (`iso_en = 1`).
     2. Assert reset (`rst_n = 0`).
     3. Deassert power switch (`pwr_sw = 0`).
     4. Power-up reverse order: Power switch on -> stabilize -> deassert reset -> release isolation.
3. **Isolation Cell Readiness in RTL:**
   - Ensure signals leaving a power-down domain connect to well-defined clamping values (0, 1, or latch) during sleep.
   - Never implement isolation logic with standard gates in RTL if UPF will insert library ISO cells (avoids double-isolation).
4. **Level Shifter Awareness:**
   - Audit cross-domain nets between different $V_{DD}$ rails.
5. **Memory Power States:**
   - Review SRAM sleep, deep-sleep, and shutdown pins.

## Technical Constraints
- Never mix UPF intent with structural RTL isolation gates; clearly distinguish RTL functional requirements from UPF synthesis-inserted physical cells.

## Output Format
- **Power Optimization Audit Table:** Optimization Opportunity | Domain | Estimated Savings | Risk
- **Clock Gating Clean RTL:** Refactored register descriptions.
- **Power Sequencing FSM Review:** Analysis of wake-up/sleep state machines.
- **Companion UPF Snippet:** Matching IEEE 1801 `set_isolation`, `create_power_domain` directives.

## Validation Checklist
- [ ] Clock enables are glitch-free and ICG-cell synthesizable.
- [ ] Isolation signals clamped correctly prior to power switch disable.
- [ ] Retention registers properly controlled.
- [ ] No floating inputs during sleep states.

## Example Invocation
```text
/low-power-upf-review
Review this power domain controller FSM and isolated output interfaces:
[paste pwr_ctrl.sv]
```

10. Spec-to-RTL Design (.claude/skills/rtl-specification-to-design/SKILL.md)

Translates natural-language microarchitecture specs into synthesizable SystemVerilog.

.claude/skills/rtl-specification-to-design/SKILL.md
Claude Code Skill
---
name: rtl-specification-to-design
description: Converts architectural English specifications into synthesizable SystemVerilog RTL with cycle-by-cycle execution tables, datapath registers, and FSMs.
---

# RTL Specification-to-Design Skill

## Purpose
Translates natural-language microarchitecture documents, interface tables, and functional specifications into verified, synthesizable SystemVerilog RTL with strict hardware discipline.

## When to Activate
Activate when initiating a new hardware block, implementing an accelerator datapath, or translating an architectural micro-spec into RTL.

## Required Inputs
- Functional requirement or microarchitecture description
- Interface definitions (Ports, Widths, Protocols: AXI, APB, Ready/Valid, Streaming)
- Clocking, reset, and performance targets (e.g., single-cycle throughput, latency)
- Parameterization requirements (Data widths, buffer depths)

## Step-by-Step Workflow
1. **Specification Gap Analysis:**
   - Interrogate the prompt for missing hardware constraints: Backpressure behavior, reset state, simultaneous transactions, error handling.
2. **Cycle-by-Cycle Execution Table:**
   - Construct a timing table showing signals for typical, edge-case, and backpressured clock cycles.
3. **Partitioning Datapath vs Control:**
   - Isolate control paths (FSMs, counters, handshake arbiters) from datapaths (ALUs, multiplexers, registers).
4. **SystemVerilog Implementation:**
   - Use clean IEEE 1800-2023 constructs: `always_ff`, `always_comb`, parameterized widths, typed enumerations.
5. **Self-Review for Synthesizability:**
   - Ensure zero latches, no multi-driver nets, and complete sensitivity.

## Technical Constraints
- Never invent interface signals not implied by the architecture.
- Always include explicit reset values for all registers.

## Output Format
- **Microarchitecture Summary:** Datapath block diagram description and pipeline stages.
- **Cycle Timing Matrix:** Step-by-step cycle execution table.
- **Complete Synthesizable SystemVerilog RTL:** Ready for compilation.
- **Design Assumptions & Unspecified Corner Cases:** Explicit list of decisions made.

## Validation Checklist
- [ ] All inputs registered or combinationally processed cleanly.
- [ ] Handshakes obey standard ready/valid rules.
- [ ] Full parameterization with safe default values.
- [ ] Lint-clean and synthesizable in Synopsys DC and Cadence Genus.

## Example Invocation
```text
/rtl-specification-to-design
Design a Credit-Based Flow Control Receiver:
- In: 32-bit data + valid
- Out: 8-bit credit return pulse
- Internal 8-entry buffer
- Clock: 250MHz, sync reset active-high
```

11. Regression Debugger (.claude/skills/rtl-regression-debugger/SKILL.md)

Diagnoses simulation failure logs, scoreboard data mismatches, and assertion fires.

.claude/skills/rtl-regression-debugger/SKILL.md
Claude Code Skill
---
name: rtl-regression-debugger
description: Diagnoses failing simulation logs, UVM scoreboard mismatches, assertion fires, and VCD/FSDB waveform transitions to isolate RTL root causes.
---

# RTL Regression Debugger Skill

## Purpose
Accelerates ASIC verification debug by analyzing simulation failure transcripts, scoreboard data mismatches, and signal transition dumps, isolating the exact RTL defect.

## When to Activate
Activate when a verification test fails in VCS, Questa, or Xcelium, or an SVA assertion triggers during regression.

## Required Inputs
- Simulation log / error transcript
- Scoreboard comparison mismatch (Expected vs Actual packet)
- Assertion failure message with timestamp and offending signal states
- Offending RTL module source code

## Step-by-Step Workflow
1. **Failure Symptom Categorization:**
   - Scoreboard payload mismatch (data corruption).
   - Dropped transaction / missing beat.
   - Timeout / Deadlock (hang waiting on handshake).
   - Assertion violation (`assert property` fire).
2. **Temporal Alignment:**
   - Map failure timestamp back to the simulation cycle.
   - Trace backwards from the point of observation to the point of generation.
3. **Root-Cause Hypothesis Formulation:**
   - Counter off-by-one error on buffer read/write pointers.
   - Unregistered control signal causing 1-cycle latency skew.
   - Race condition on reset release.
   - Backpressure hazard (dropping data when valid is high and ready deasserts).
4. **Code Inspection & Diagnosis:**
   - Pinpoint the exact line of SystemVerilog code responsible.
5. **Regression Patch:**
   - Provide minimal-impact code fix and companion SVA assertion to prevent regression.

## Technical Constraints
- Never guess missing waveform values; if critical internal states are unlogged, request specific signal dumps from the engineer.

## Output Format
- **Failure Summary:** Test Name | Time of Failure | Failing Signal/Assert
- **Root-Cause Analysis:** Step-by-step tracing of how the bug occurred.
- **Proposed RTL Fix:** Side-by-side code diff.
- **Recommended Regression Test Scenario:** Testbench stimulus to guarantee closure.

## Validation Checklist
- [ ] Fix resolves the failing corner case without perturbing passing tests.
- [ ] No added latency cycles on existing paths.
- [ ] SVA assertion provided to detect future regressions.

## Example Invocation
```text
/rtl-regression-debugger
Test failed: test_axi_backpressure_random
Log: [paste vcs_sim.log excerpt]
Offending module: [paste axi_skid_buffer.sv]
```

12. FSM Design Review (.claude/skills/fsm-design-review/SKILL.md)

Evaluates state encoding (one-hot, binary, Gray), illegal state traps, and Moore/Mealy timing.

.claude/skills/fsm-design-review/SKILL.md
Claude Code Skill
---
name: fsm-design-review
description: Evaluates finite state machines for safe encoding (one-hot, binary, Gray), illegal state traps, deadlock recovery, and Moore vs Mealy output timing.
---

# FSM Design Review Skill

## Purpose
Performs comprehensive architectural inspection of SystemVerilog Finite State Machines (FSMs), auditing state encoding choices, illegal state handling, glitch-free output timing, and transition coverage.

## When to Activate
Activate when designing, optimizing, or reviewing sequential control FSMs, protocol controllers, or power management sequencers.

## Required Inputs
- SystemVerilog FSM code (or state diagram / state transition table)
- Performance & Timing goals (Target frequency, critical output latency)
- Target architecture (ASIC vs FPGA)

## Step-by-Step Workflow
1. **FSM Architecture Identification:**
   - Determine if the FSM is Moore (outputs depend only on state) or Mealy (outputs depend on state and inputs).
   - Check if outputs are registered (glitch-free) or combinational (potential timing bottleneck).
2. **Coding Style Audit:**
   - Verify classic 2-process or 3-process FSM coding:
     - Process 1: Sequential state register (`always_ff @(posedge clk ...)`).
     - Process 2: Combinational next-state logic (`always_comb`).
     - Process 3: Registered or combinational output logic.
3. **Encoding Evaluation:**
   - Binary encoding: Compact (minimum flops), good for area-constrained slow control paths.
   - One-hot encoding: 1 bit per state, single gate decode, optimal for high-speed ASIC control paths and FPGAs.
   - Gray encoding: Optimal for sequenced counters with single-bit transitions.
4. **Deadlock & Illegal State Trap Verification:**
   - Verify `default:` branch in next-state decode.
   - For safety-critical designs (automotive, aerospace), check for safe recovery logic to return illegal states to IDLE or ERROR.
5. **Timing & Glitch Elimination:**
   - Flag combinational Mealy outputs routed across module boundaries (can cause long timing arcs and combinational loops).

## Technical Constraints
- Acknowledge that modern synthesis tools (Design Compiler, Genus) can override state encoding via `fsm_encoding` attributes; review both RTL intent and synthesis impact.

## Output Format
- **State Transition Matrix:** Current State | Input Conditions | Next State | Outputs
- **Architecture Evaluation:** Moore vs Mealy, Encoding trade-offs.
- **Identified Defects:** Unreachable states, deadlocks, glitchy outputs.
- **Hardened SystemVerilog Code:** Optimized FSM implementation.

## Validation Checklist
- [ ] Strict use of `typedef enum logic [W-1:0]` for state names.
- [ ] Exhaustive next-state decode with explicit `default`.
- [ ] Outputs are glitch-free and registered where timing critical.
- [ ] Reset state unambiguously defined.

## Example Invocation
```text
/fsm-design-review
Target: 1.2 GHz ASIC control path
Evaluate this SDRAM initialization FSM:
[paste sdram_init_fsm.sv]
```

Claude Code Project Setup for Front-End RTL Teams

📁 Recommended Repository Architecture

An enterprise ASIC front-end repository must establish clear boundaries between functional RTL, verification testbenches, timing constraints, EDA logs, and AI instructions.

Enterprise Front-End Directory Layout
Git Structure
chip_top_subsystem/
├── .claude/
│   └── skills/                         # Reusable team-wide Claude Code skills
│       ├── rtl-code-review/SKILL.md
│       ├── sva-generator/SKILL.md
│       ├── apb-axi-protocol-review/SKILL.md
│       └── synthesis-report-analysis/SKILL.md
├── CLAUDE.md                           # Project-wide engineering guidelines for Claude
├── docs/                               # Architecture Specs & Memory Maps (read-only for AI)
│   ├── spec_subsystem_v1.4.md
│   └── register_map.csv
├── rtl/                                # Synthesizable SystemVerilog modules
│   ├── core/                           # Datapath ALUs, FIFOs, arbiters
│   ├── interfaces/                     # AXI/APB bus bridges, skid buffers
│   └── top/                            # Subsystem top-level wrapper
├── tb/                                 # UVM & SystemVerilog testbenches
├── sva/                                # Formal & Dynamic SystemVerilog Assertions
├── constraints/                        # SDC & UPF power constraints
│   ├── timing.sdc
│   └── power_intent.upf
├── scripts/                            # Permitted local build & lint scripts
│   ├── run_verilator_lint.sh
│   └── run_dc_elaboration.tcl
└── reports/                            # Read-only synthesis, lint, & STA logs
    ├── spyglass_lint.rpt
    └── dc_timing_setup.rpt

Production-Ready CLAUDE.md Engineering Instructions

The CLAUDE.md file in your repository root sets the operational baseline for every Claude Code session. It enforces company coding standards, restricts unauthorized file modifications, and defines permitted commands.

CLAUDE.md — Industrial ASIC Engineering Baseline
Configuration
# CLAUDE.md — ASIC Front-End Engineering Guidelines

## 1. Role and Engineering Discipline
You are an expert ASIC RTL Design and Verification Architect. You must produce 
deterministic, high-reliability, synthesizable SystemVerilog compliant with IEEE 1800-2023.

## 2. Mandatory Coding Conventions
- **Language Standard:** Strict SystemVerilog (IEEE 1800-2023).
- **Sequential Logic:** Strictly use `always_ff @(posedge clk or negedge rst_n)` with non-blocking assignments (`<=`).
- **Combinational Logic:** Strictly use `always_comb` with blocking assignments (`=`). Provide complete default branches to prevent inferred latches.
- **Port Declarations:** Explicit `input logic [W-1:0]`, `output logic [W-1:0]`. Avoid bare `wire`, `reg`, or untyped integers.
- **Reset Scheme:** Active-low asynchronous reset (`rst_n`) unless explicitly instructed otherwise.
- **Naming Conventions:**
  - Clocks: `clk_<domain>` (e.g., `clk_axi`, `clk_core`)
  - Resets: `rst_<domain>_n` (active-low)
  - Control handshakes: `<channel>_valid`, `<channel>_ready`
  - Parameters: Upper case (e.g., `DATA_WIDTH`, `FIFO_DEPTH`)

## 3. Strict Prohibitions
- NEVER introduce `#delays` or `initial` blocks inside synthesizable RTL modules.
- NEVER mix blocking and non-blocking assignments inside the same procedural block.
- NEVER cross clock domains without using approved synchronizers (2-FF, toggle, or async FIFO).
- NEVER alter interface pinouts or cycle latency without explicit architectural permission.
- NEVER run destructive shell commands (`rm -rf`, `git reset --hard`).

## 4. Permitted Local Tool Invocations
- You may execute local lint via: `bash scripts/run_verilator_lint.sh`
- You may inspect git diffs via: `git diff rtl/`
- DO NOT attempt to run licensed EDA tools (Synopsys DC, Cadence Genus, VCS) without engineer confirmation.

## 5. Review and Sign-Off Protocol
After generating or refactoring any RTL module:
1. State all architectural assumptions and parameter choices.
2. Provide companion SystemVerilog Assertions (SVA) proving safety.
3. Highlight potential corner cases (backpressure, buffer full, simultaneous push/pop).
⚠️ Guardrail: Protecting Frozen RTL from Accidental Edit
To prevent Claude Code from inadvertently modifying third-party IP or tapeout-frozen RTL, designate protected directories in git permissions or mark them read-only in local filesystems. Always review git diff before committing any AI-assisted code change.
Advertisement

Five Complete Hands-On RTL Projects

Each project demonstrates an end-to-end front-end workflow: Specification → Prompt → Synthesizable SystemVerilog → Code Review → SVA → Synthesis Considerations → Sign-Off Checklist.

Project A AMBA APB4 Slave Register Block with PSLVERR

1. Specification: 32-bit APB4 subordinate peripheral featuring 4 memory-mapped registers: Control (RW), Status (RO), Interrupt Status (W1C - Write-1-to-Clear), and Interrupt Enable (RW). Unmapped address access returns PSLVERR = 1 with zero wait-state read/write.

2. Design Requirements: Clock: PCLK, Reset: PRESETn. Zero wait-states (PREADY = 1). Strobe handling (PSTRB) for byte-lane write masking.

apb4_slave_reg.sv
SystemVerilog RTL
//=============================================================================
// Module: apb4_slave_reg
// Description: AMBA APB4 Subordinate Register Block with W1C and PSLVERR
//=============================================================================
module apb4_slave_reg #(
    parameter int ADDR_WIDTH = 8,
    parameter int DATA_WIDTH = 32
)(
    input  logic                   PCLK,
    input  logic                   PRESETn,
    input  logic [ADDR_WIDTH-1:0]  PADDR,
    input  logic [2:0]             PPROT,
    input  logic                   PSEL,
    input  logic                   PENABLE,
    input  logic                   PWRITE,
    input  logic [DATA_WIDTH-1:0]  PWDATA,
    input  logic [(DATA_WIDTH/8)-1:0] PSTRB,
    output logic                   PREADY,
    output logic [DATA_WIDTH-1:0]  PRDATA,
    output logic                   PSLVERR,

    // Hardware Sideband Signals
    input  logic [31:0]            hw_status_i,
    input  logic [31:0]            hw_irq_event_i,
    output logic [31:0]            ctrl_reg_o,
    output logic                   irq_o
);

    // Register Offsets
    localparam logic [ADDR_WIDTH-1:0] REG_CTRL     = 8'h00;
    localparam logic [ADDR_WIDTH-1:0] REG_STATUS   = 8'h04;
    localparam logic [ADDR_WIDTH-1:0] REG_IRQ_STAT = 8'h08;
    localparam logic [ADDR_WIDTH-1:0] REG_IRQ_EN   = 8'h0C;

    // Internal Registers
    logic [31:0] reg_ctrl;
    logic [31:0] reg_irq_stat;
    logic [31:0] reg_irq_en;

    // APB Transfer Detection (Setup phase -> Access phase)
    logic apb_write_trans;
    logic apb_read_trans;

    assign apb_write_trans = PSEL && PENABLE &&  PWRITE;
    assign apb_read_trans  = PSEL && PENABLE && !PWRITE;
    assign PREADY          = 1'b1; // Zero wait-state

    // Register Write Logic (Synchronous)
    always_ff @(posedge PCLK or negedge PRESETn) begin
        if (!PRESETn) begin
            reg_ctrl     <= 32'h0000_0000;
            reg_irq_stat <= 32'h0000_0000;
            reg_irq_en   <= 32'h0000_0000;
        end else begin
            // Hardware interrupt pulse capture
            reg_irq_stat <= reg_irq_stat | hw_irq_event_i;

            if (apb_write_trans) begin
                case (PADDR)
                    REG_CTRL: begin
                        for (int i = 0; i < 4; i++) begin
                            if (PSTRB[i]) reg_ctrl[i*8 +: 8] <= PWDATA[i*8 +: 8];
                        end
                    end
                    REG_IRQ_STAT: begin
                        // W1C: Writing 1 clears the corresponding interrupt bit
                        for (int i = 0; i < 4; i++) begin
                            if (PSTRB[i]) reg_irq_stat[i*8 +: 8] <= (reg_irq_stat[i*8 +: 8] & ~PWDATA[i*8 +: 8]);
                        end
                    end
                    REG_IRQ_EN: begin
                        for (int i = 0; i < 4; i++) begin
                            if (PSTRB[i]) reg_irq_en[i*8 +: 8] <= PWDATA[i*8 +: 8];
                        end
                    end
                    default: ; // Unmapped address write triggers PSLVERR
                endcase
            end
        end
    end

    // Combinational Read Multiplexer & Error Response
    always_comb begin
        PRDATA  = 32'h0000_0000;
        PSLVERR = 1'b0;

        if (PSEL) begin
            case (PADDR)
                REG_CTRL:     PRDATA = reg_ctrl;
                REG_STATUS:   PRDATA = hw_status_i; // Live HW status
                REG_IRQ_STAT: PRDATA = reg_irq_stat;
                REG_IRQ_EN:   PRDATA = reg_irq_en;
                default: begin
                    PRDATA  = 32'hDEAD_BEEF;
                    PSLVERR = 1'b1; // Error on unmapped address
                end
            endcase
        end
    end

    assign ctrl_reg_o = reg_ctrl;
    assign irq_o      = |(reg_irq_stat & reg_irq_en);

endmodule

Formal SVA Assertion Verification

apb4_slave_sva.sv
Formal SVA
// SVA: PSLVERR must only assert in Access phase for illegal addresses
property p_pslverr_valid;
    @(posedge PCLK) disable iff (!PRESETn)
    PSLVERR |-> (PSEL && PENABLE && (PADDR > 8'h0C));
endproperty
assert property (p_pslverr_valid);

// SVA: PREADY must be high when PENABLE asserts
property p_pready_instant;
    @(posedge PCLK) disable iff (!PRESETn)
    (PSEL && PENABLE) |-> PREADY;
endproperty
assert property (p_pready_instant);

Project B Parameterized Synchronous FIFO with Watermarks

1. Specification: Single-clock FIFO with configurable depth ($2^N$) and data width, single-cycle latency, circular pointer architecture, and programmable almost-full/almost-empty flags.

sync_fifo.sv
SystemVerilog RTL
module sync_fifo #(
    parameter int DATA_WIDTH = 32,
    parameter int DEPTH      = 16,
    parameter int AFULL_TH   = 14,
    parameter int AEMPTY_TH  = 2
)(
    input  logic                  clk,
    input  logic                  rst_n,
    input  logic                  wr_en,
    input  logic [DATA_WIDTH-1:0] wdata,
    input  logic                  rd_en,
    output logic [DATA_WIDTH-1:0] rdata,
    output logic                  full,
    output logic                  empty,
    output logic                  almost_full,
    output logic                  almost_empty,
    output logic [$clog2(DEPTH):0] count
);
    localparam int ADDR_W = $clog2(DEPTH);

    logic [DATA_WIDTH-1:0] mem [0:DEPTH-1];
    logic [ADDR_W:0] wptr, rptr;

    assign full  = (count == DEPTH);
    assign empty = (count == 0);
    assign almost_full  = (count >= AFULL_TH);
    assign almost_empty = (count <= AEMPTY_TH);

    // Pointer & Level Counter Management
    always_ff @(posedge clk or negedge rst_n) begin
        if (!rst_n) begin
            wptr  <= '0;
            rptr  <= '0;
            count <= '0;
            rdata <= '0;
        end else begin
            case ({wr_en && !full, rd_en && !empty})
                2'b10: begin // Write Only
                    mem[wptr[ADDR_W-1:0]] <= wdata;
                    wptr  <= wptr + 1'b1;
                    count <= count + 1'b1;
                end
                2'b01: begin // Read Only
                    rdata <= mem[rptr[ADDR_W-1:0]];
                    rptr  <= rptr + 1'b1;
                    count <= count - 1'b1;
                end
                2'b11: begin // Simultaneous Write and Read
                    mem[wptr[ADDR_W-1:0]] <= wdata;
                    rdata <= mem[rptr[ADDR_W-1:0]];
                    wptr  <= wptr + 1'b1;
                    rptr  <= rptr + 1'b1;
                    // count remains unchanged
                end
                default: ; // Idle
            endcase
        end
    end
endmodule

Project C Dual-Clock Asynchronous FIFO with Gray-Code Pointers

1. Specification: Safe clock domain crossing between independent write and read clocks using $N+1$ bit Gray-code pointers and 2-stage synchronizers.

async_fifo.sv
SystemVerilog RTL
module async_fifo #(
    parameter int DWIDTH = 64,
    parameter int DEPTH  = 16 // Must be 2^N
)(
    input  logic              wclk,
    input  logic              wrst_n,
    input  logic              wr_en,
    input  logic [DWIDTH-1:0] wdata,
    output logic              wfull,

    input  logic              rclk,
    input  logic              rrst_n,
    input  logic              rd_en,
    output logic [DWIDTH-1:0] rdata,
    output logic              rempty
);
    localparam int AWIDTH = $clog2(DEPTH);

    logic [AWIDTH:0] wptr_bin, wptr_gray, wptr_gray_sync1, wptr_gray_sync2;
    logic [AWIDTH:0] rptr_bin, rptr_gray, rptr_gray_sync1, rptr_gray_sync2;
    logic [DWIDTH-1:0] mem [0:DEPTH-1];

    // Dual-Port RAM Write
    always_ff @(posedge wclk) begin
        if (wr_en && !wfull)
            mem[wptr_bin[AWIDTH-1:0]] <= wdata;
    end

    // RAM Read (unregistered output)
    assign rdata = mem[rptr_bin[AWIDTH-1:0]];

    // Binary to Gray Helper
    function automatic logic [AWIDTH:0] bin2gray(input logic [AWIDTH:0] b);
        return b ^ (b >> 1);
    endfunction

    // Write Domain Logic
    always_ff @(posedge wclk or negedge wrst_n) begin
        if (!wrst_n) begin
            wptr_bin  <= '0;
            wptr_gray <= '0;
        end else if (wr_en && !wfull) begin
            wptr_bin  <= wptr_bin + 1'b1;
            wptr_gray <= bin2gray(wptr_bin + 1'b1);
        end
    end

    // Read Pointer Synchronizer into Write Domain (2-FF)
    always_ff @(posedge wclk or negedge wrst_n) begin
        if (!wrst_n) begin
            rptr_gray_sync1 <= '0;
            rptr_gray_sync2 <= '0;
        end else begin
            rptr_gray_sync1 <= rptr_gray;
            rptr_gray_sync2 <= rptr_gray_sync1;
        end
    end

    // Write Full Generation
    assign wfull = (wptr_gray == {~rptr_gray_sync2[AWIDTH:AWIDTH-1], rptr_gray_sync2[AWIDTH-2:0]});

    // Read Domain Logic
    always_ff @(posedge rclk or negedge rrst_n) begin
        if (!rrst_n) begin
            rptr_bin  <= '0;
            rptr_gray <= '0;
        end else if (rd_en && !rempty) begin
            rptr_bin  <= rptr_bin + 1'b1;
            rptr_gray <= bin2gray(rptr_bin + 1'b1);
        end
    end

    // Write Pointer Synchronizer into Read Domain (2-FF)
    always_ff @(posedge rclk or negedge rrst_n) begin
        if (!rrst_n) begin
            wptr_gray_sync1 <= '0;
            wptr_gray_sync2 <= '0;
        end else begin
            wptr_gray_sync1 <= wptr_gray;
            wptr_gray_sync2 <= wptr_gray_sync1;
        end
    end

    // Read Empty Generation
    assign rempty = (rptr_gray == wptr_gray_sync2);

endmodule

Project D AXI4 Ready/Valid Skid Buffer (Zero Latency Bubbles)

1. Problem Statement: Standard register slices add latency or create combinational feedback loops between READY and VALID. A 2-slot Skid Buffer registers both the forward payload and the backward READY path, maintaining 100% throughput under backpressure.

axi_skid_buffer.sv
SystemVerilog RTL
module axi_skid_buffer #(
    parameter int DATA_WIDTH = 32
)(
    input  logic                  clk,
    input  logic                  rst_n,

    // Ingress Interface
    input  logic                  s_valid,
    output logic                  s_ready,
    input  logic [DATA_WIDTH-1:0] s_data,

    // Egress Interface
    output logic                  m_valid,
    input  logic                  m_ready,
    output logic [DATA_WIDTH-1:0] m_data
);

    // Internal Storage: Primary Output Register & Skid Register
    logic [DATA_WIDTH-1:0] reg_data, skid_data;
    logic                  reg_valid, skid_valid;

    // Upstream ready when skid buffer is unoccupied
    assign s_ready = !skid_valid;

    // Downstream output
    assign m_valid = reg_valid;
    assign m_data  = reg_data;

    always_ff @(posedge clk or negedge rst_n) begin
        if (!rst_n) begin
            reg_valid  <= 1'b0;
            skid_valid <= 1'b0;
            reg_data   <= '0;
            skid_data  <= '0;
        end else begin
            // If downstream accepts current data
            if (m_ready) begin
                if (skid_valid) begin
                    // Drain skid buffer to main register
                    reg_valid  <= 1'b1;
                    reg_data   <= skid_data;
                    skid_valid <= 1'b0;
                end else begin
                    // Pass-through new incoming data
                    reg_valid  <= s_valid;
                    reg_data   <= s_data;
                end
            end else begin
                // Downstream is stalled (backpressure active)
                if (s_valid && s_ready) begin
                    // Store incoming transaction in skid buffer
                    skid_valid <= 1'b1;
                    skid_data  <= s_data;
                end
            end
        end
    end
endmodule

Project E FSM-Based Power Domain Sequencer

1. Specification: Power management controller sequencing power-down and power-up for an island domain: Isolation Enable → Reset Assert → Power Switch Gate → Clock Gate → Power Ack.

pwr_seq_fsm.sv
SystemVerilog RTL
module pwr_seq_fsm (
    input  logic clk,
    input  logic rst_n,
    input  logic pwr_down_req_i,
    input  logic pwr_up_req_i,
    input  logic pwr_switch_ack_i,

    output logic iso_en_o,
    output logic domain_rst_n_o,
    output logic pwr_switch_en_o,
    output logic clk_en_o,
    output logic pwr_status_idle_o
);

    typedef enum logic [2:0] {
        ST_ACTIVE    = 3'b000,
        ST_ISO_ON    = 3'b001,
        ST_RST_ASSERT= 3'b010,
        ST_PWR_OFF   = 3'b011,
        ST_OFF_IDLE  = 3'b100,
        ST_PWR_ON    = 3'b101,
        ST_RST_DEAS  = 3'b110,
        ST_ISO_OFF   = 3'b111
    } pwr_state_e;

    pwr_state_e state_q, state_d;

    // State Register
    always_ff @(posedge clk or negedge rst_n) begin
        if (!rst_n) state_q <= ST_ACTIVE;
        else        state_q <= state_d;
    end

    // Next State Logic
    always_comb begin
        state_d = state_q;
        case (state_q)
            ST_ACTIVE:     if (pwr_down_req_i) state_d = ST_ISO_ON;
            ST_ISO_ON:     state_d = ST_RST_ASSERT;
            ST_RST_ASSERT: state_d = ST_PWR_OFF;
            ST_PWR_OFF:    if (pwr_switch_ack_i) state_d = ST_OFF_IDLE;
            ST_OFF_IDLE:   if (pwr_up_req_i) state_d = ST_PWR_ON;
            ST_PWR_ON:     if (pwr_switch_ack_i) state_d = ST_RST_DEAS;
            ST_RST_DEAS:   state_d = ST_ISO_OFF;
            ST_ISO_OFF:    state_d = ST_ACTIVE;
            default:       state_d = ST_ACTIVE; // Safe recovery
        endcase
    end

    // Registered Glitch-Free Outputs
    always_ff @(posedge clk or negedge rst_n) begin
        if (!rst_n) begin
            iso_en_o           <= 1'b0;
            domain_rst_n_o     <= 1'b1;
            pwr_switch_en_o    <= 1'b1;
            clk_en_o           <= 1'b1;
            pwr_status_idle_o  <= 1'b1;
        end else begin
            case (state_d)
                ST_ACTIVE: begin
                    iso_en_o        <= 1'b0;
                    domain_rst_n_o  <= 1'b1;
                    pwr_switch_en_o <= 1'b1;
                    clk_en_o        <= 1'b1;
                end
                ST_ISO_ON: iso_en_o <= 1'b1;
                ST_RST_ASSERT: domain_rst_n_o <= 1'b0;
                ST_PWR_OFF, ST_OFF_IDLE: begin
                    pwr_switch_en_o <= 1'b0;
                    clk_en_o        <= 1'b0;
                end
                ST_PWR_ON: pwr_switch_en_o <= 1'b1;
                ST_RST_DEAS: begin
                    clk_en_o       <= 1'b1;
                    domain_rst_n_o <= 1'b1;
                end
                ST_ISO_OFF: iso_en_o <= 1'b0;
            endcase
        end
    end
endmodule

Practical Claude Prompts Library for ASIC RTL

32 production-tested prompts designed specifically for front-end ASIC engineering. Filter by category, copy directly, and provide required technical inputs.

SPEC
Arbiter Microarchitecture Specification
Required Inputs: spec_doc.txt, client count, priority scheme
Act as a Principal ASIC RTL Architect. Analyze the attached round-robin arbiter specification (4 request clients, single grant, 1-cycle latency). Identify all hidden state requirements, generate a cycle-by-cycle execution table covering simultaneous requests, and produce synthesizable SystemVerilog compliant with IEEE 1800-2023.
SPEC
Credit-Based Flow Control Transmitter
Required Inputs: buffer depth, credit width, payload struct
Design a synthesizable SystemVerilog credit-based flow control transmitter. Maintain an internal credit counter initialized to DEPTH=8. Decrement credit when a payload beat is transmitted; increment credit when a return credit pulse is received. Prevent transmission when credits == 0.
SPEC
Multi-Bank Memory Controller Arbiter
Required Inputs: bank count = 4, read/write latency, bank conflicts
Create a synthesizable 4-bank interleaved memory controller arbiter in SystemVerilog. Map incoming 32-bit addresses to Bank IDs using address bits [3:2]. Grant non-conflicting bank requests in parallel; stall conflicting bank requests using round-robin fairness.
SPEC
Configurable Timer/Watchdog Subsystem
Required Inputs: APB interface, prescaler width, 32-bit counter
Translate this watchdog timer PRD into an APB4 subordinate peripheral: 32-bit programmable down-counter with 8-bit prescaler, periodic interrupt generation, lock key register (write 0xA5A5 to unlock reset), and system reset trigger on underflow.
REVIEW
Inferred Latch & Race Condition Audit
Required Inputs: target_module.sv, active reset convention
Perform an exhaustive static code audit on the attached SystemVerilog module. Detect all instances of inferred latches, blocking assignments inside clocked procedural blocks, and mixed signed/unsigned comparisons. Output a severity-ranked defect table.
REVIEW
Multi-Driver Net & Truncation Triage
Required Inputs: subsystem_top.sv, lint summary
Audit this top-level interconnect wrapper for implicit net truncation, multi-driver contention, and unassigned bus slices. Verify that all vector slices [High:Low] are dimensioned explicitly and no port connections leave input pins floating.
REVIEW
Deadlock Analysis on Nested Case Statements
Required Inputs: packet_fsm.sv
Inspect this packet parser FSM for potential deadlock conditions. Check if every state has a deterministic exit condition under all possible combinations of valid, error, and timeout flags. Verify that the default branch handles illegal states safely.
REVIEW
Bit-Width & Sign Extension Verification
Required Inputs: dsp_filter_tap.sv
Review this DSP filter tap for bit-growth overflow. Inputs: 16-bit signed Q1.15 coefficients and 16-bit signed audio samples. Ensure the 32-bit product is properly accumulated into a 40-bit accumulator with saturation detection.
REVIEW
Parameter Override & Elaboration Review
Required Inputs: configurable_crossbar.sv
Audit this parameterized N-to-M crossbar switch for out-of-bounds parameter overrides. Ensure $clog2 arithmetic does not evaluate to 0 when input width is 1, and add compile-time $error checks using generate blocks.
PROTO
AXI4-Lite Master State Machine
Required Inputs: read/write channels, timeout cycle threshold
Design an AXI4-Lite master state machine in SystemVerilog that initiates a 32-bit write transaction followed by a read verification. Follow strict ARM AMBA rules: do not depend VALID on READY. Handle SLVERR and DECERR responses cleanly.
PROTO
APB4 to AXI4-Lite Protocol Converter
Required Inputs: PCLK, ACLK, sync or async domain
Create a synchronous bridge module that translates APB4 slave transactions into downstream AXI4-Lite master requests. Map PENABLE access phases to AXI AW/W or AR handshakes, and hold PREADY low until BVALID or RVALID completes.
PROTO
Registered AXI Skid Buffer
Required Inputs: DATA_WIDTH = 64, pipeline latency = 0
Implement a 64-bit AXI stream skid buffer in SystemVerilog. Both input s_ready and output m_valid must be registered to cut combinational paths. Ensure zero-bubble throughput under alternating backpressure.
PROTO
AXI4-Stream Packet Pack/Unpack Adapter
Required Inputs: Ingress 64-bit, Egress 16-bit, tkeep/tlast
Design an AXI4-Stream data width down-converter (64-bit to 16-bit). Handle unaligned transfers using TKEEP byte-enables, preserve TLAST on the final 16-bit beat, and backpressure the ingress interface until all sub-words are consumed.
CDC
Dual-Clock FIFO Gray Code Synchronizer Audit
Required Inputs: async_fifo_top.sv, wclk/rclk frequencies
Inspect the attached dual-clock asynchronous FIFO. Verify that: 1) Gray code pointers only change by 1 bit per cycle; 2) Synchronizer flip-flops have (* ASYNC_REG = "TRUE" *) directives; 3) Full and empty math contains no race conditions.
CDC
Pulse Synchronizer (Fast-to-Slow & Slow-to-Fast)
Required Inputs: src_clk, dst_clk, toggle flip-flop
Implement a toggle-based pulse synchronizer in SystemVerilog to safely transfer single-cycle control pulses from a 500MHz clock domain into a 100MHz clock domain without pulse stretching loss.
CDC
4-Phase Request-Acknowledge Handshake Synchronizer
Required Inputs: multi-bit data payload, async clocks
Create a 4-phase request/acknowledge handshake synchronizer for transferring an unsynchronized 64-bit configuration bus between completely unrelated clock domains. Data must remain static during the entire handshake.
CDC
Reset Domain Crossing (RDC) Synchronizer
Required Inputs: async master reset, destination clock
Design an Asynchronous Assert, Synchronous Deassert (AASD) reset synchronizer block. Ensure the reset asserts instantaneously upon input trigger, but releases cleanly on the rising edge of the local clock with 3 stages of flip-flops.
LINT
SpyGlass W415a Latch Elimination
Required Inputs: offending_module.sv, line number 84
Analyze this SpyGlass Lint report warning: 'W415a: Latch inferred for signal next_state'. Inspect the combinatorial always_comb block, identify the missing execution branch, and provide a clean, latch-free rewrite.
LINT
Verilator UNUSED & UNDRIVEN Signal Cleanup
Required Inputs: dma_controller.sv, verilator.log
Triage these Verilator lint warnings: UNUSED signal 'cfg_burst_len[7:4]' and UNDRIVEN signal 'int_status_ack'. Distinguish between intentional hardware drops and accidental signal misnamings.
LINT
Signedness Mismatch & Truncation Triage
Required Inputs: mac_unit.sv, SpyGlass W164b report
Explain why assigning a 32-bit signed multiply-accumulate result to a 32-bit unsigned port triggers SpyGlass W188 and W164b warnings. Provide the mathematically correct saturation and casting code.
LINT
Combinational Loop Identification & Breaking
Required Inputs: priority_encoder.sv, lint report
A synthesis elaboration log reports: 'Combinational loop detected between net A and net B'. Analyze the feedback path in this priority encoder and restructure the logic into a pure feed-forward tree.
SYN
Design Compiler Setup Violation Breakdown
Required Inputs: timing_report_setup.rpt, target_freq = 1.2GHz
Analyze this Synopsys Design Compiler timing path report with WNS = -340ps. Deconstruct the delay into: Clock-to-Q, Cell Delay, Net Interconnect Delay, and Clock Uncertainty. Identify the top 3 gates contributing excessive delay.
SYN
Cadence Genus Area Optimization Strategy
Required Inputs: report_area.rpt, crypto_core.sv
Review this Cadence Genus hierarchical area report. Module 'aes_sbox' consumes 68% of total standard cell area. Recommend RTL transformations (e.g., composite field arithmetic vs LUT storage) to reduce cell area by >40%.
SYN
High-Fanout Net (HFN) Mitigation in RTL
Required Inputs: control_decoder.sv, fanout = 256
A global instruction decode signal 'is_branch' has a fanout of 256 loads, causing setup violations. Refactor the RTL to instantiate a 4-way balanced register duplication tree without changing downstream functional latency.
SYN
Logic Depth Reduction on Critical Path
Required Inputs: alu_compare.sv, path depth = 32 gates
The critical path through a 64-bit comparator and priority encoder spans 32 levels of logic in 7nm. Restructure this monolithic comparator into a 4-level balanced tournament tree to reduce logic depth to <14 gates.
FORMAL
AXI4-Stream Backpressure SVA Checker
Required Inputs: axis_interface.sv
Write a comprehensive SystemVerilog Assertions (SVA) checker module for an AXI4-Stream master interface. Prove that: 1) TVALID never falls once asserted until TREADY is high; 2) TDATA, TSTRB, and TLAST hold completely stable while stalled.
FORMAL
Round-Robin Arbiter Fairness & Starvation Proof
Required Inputs: arbiter.sv, SVA formal
Develop formal assertions and fairness assumptions for a 4-way round-robin arbiter in Cadence JasperGold. Prove the liveness property: any client asserting request will eventually be granted within 4 grant cycles.
FORMAL
Asynchronous FIFO Pointer Distance SVA
Required Inputs: async_fifo.sv
Create formal assertions proving that the write pointer can never overtake the synchronized read pointer (no overflow), and the read pointer can never overtake the synchronized write pointer (no underflow).
FORMAL
One-Hot State Machine Safety Invariant
Required Inputs: traffic_fsm.sv
Generate formal SVA verifying that a 6-state one-hot traffic controller FSM never has zero active states (illegal cold state) and never has more than one active state (illegal multi-hot state) across all reachable cycles.
POWER
Integrated Clock Gating (ICG) RTL Enable Audit
Required Inputs: dsp_pipeline.sv
Inspect this DSP pipeline for clock gating efficiency. Identify wide register banks (>=16 bits) whose load enables are currently coded as recirculating muxes, and refactor them into clean ICG-friendly enable blocks.
POWER
Power Domain Isolation State Sequencer Review
Required Inputs: pwr_ctrl.sv, UPF 3.0 intent
Review this power domain shutdown controller. Ensure that isolation control signals (iso_en) assert strictly BEFORE the power switch disconnects, and that domain reset asserts before power collapse to prevent spurious logic glitches.
POWER
State Retention Power Gating (SRPG) Controller
Required Inputs: retention_fsm.sv
Design an SRPG retention controller FSM in SystemVerilog. Sequence the save, sleep, restore, and normal execution phases for a subsystem equipped with retention flip-flops and balloon latches.

Claude vs. Commercial EDA Tools Matrix

⚖️ Delineation of Responsibilities Across the ASIC Flow

An essential professional skill for any chip designer is knowing where AI assistance ends and where commercial Electronic Design Automation (EDA) engines must take over.

EDA Tool / Domain Primary Commercial Products What Claude Can Do What ONLY the EDA Tool Can Do
RTL Synthesis Synopsys Design Compiler, Cadence Genus Structure microarchitecture, suggest resource sharing, evaluate FSM encodings, interpret QoR reports Technology library mapping (.lib), physical wire parasitics, timing-driven optimization, gate-level netlist export
Logic Simulation Synopsys VCS, Siemens Questa, Cadence Xcelium Generate directed SystemVerilog testbenches, interpret simulation failure logs, diagnose scoreboard mismatches Cycle-accurate event-driven execution, 4-state IEEE 1800 simulation, random constraint solving, VCD/FSDB dumping
Formal Property Verification Cadence JasperGold, Synopsys VC Formal Generate synthesizable SVA assertions (assume/assert/cover), explain formal counterexamples Mathematical SAT/BDD proof of unbounded correctness across all reachable states, formal bug hunting
Clock Domain Crossing (CDC) Siemens Questa CDC, Synopsys VC CDC Draft 2-FF synchronizers, Gray code counters, explain CDC rules Structural and functional metastability verification, bus skew analysis, reconvergence sign-off
Static Timing Analysis (STA) Synopsys PrimeTime, Cadence Tempus Diagnose negative slack bottlenecks, suggest pipelining or mux restructuring Multi-corner sign-off (SSG, TT, FFG), on-chip variation (AOCV/POCV), signal integrity crosstalk delay
Formal Equivalence (LEC) Cadence Conformal, Synopsys Formality Review structural port alignments, audit clock gating changes Mathematical proof that synthesized netlist matches golden RTL across retiming and boundary optimizations
Waveform Debugging Synopsys Verdi, Siemens Visualizer Analyze ASCII signal transition tables, diagnose timing diagrams Interactive multi-gigabyte FSDB trace navigation, schematic tracing, active driver tracing, source drag-and-drop

Engineering Security, IP Protection & NDA Compliance

🔒 Semiconductor IP Protection Mandate

Semiconductor intellectual property (RTL source, foundry PDKs, cell library characterization files, architecture specs) represents billions of dollars in enterprise value and is protected by severe legal Non-Disclosure Agreements (NDAs).

🚨 Zero-Tolerance AI Security Rules
  • Never paste unredacted proprietary RTL into public AI services: Consumer-tier LLM subscriptions frequently retain inputs for model training, violating foundry and client NDAs.
  • Verify Enterprise Zero Data Retention (ZDR): Only use enterprise Claude deployments covered by signed business associate agreements guaranteeing that inputs are never retained, logged, or used for model training.
  • Sanitized Anonymization: When asking Claude to debug a complex datapath, extract the mathematical topology into a generic, sanitized module (e.g., replace internal project codenames and bus widths with generic parameters).
  • Foundry PDK Secrecy: Never share foundry design rules (TSMC, Intel Foundry, Samsung, GlobalFoundries) or proprietary standard cell names (e.g., TSMC_N5_DFCNQD1) with external LLMs.

Frequently Asked Questions for RTL Engineers

Can Claude replace commercial ASIC synthesis tools like Synopsys DC or Cadence Genus? ▼
No. Claude is an LLM with no physical or electrical modeling engines. It cannot calculate non-linear interconnect RC delays, evaluate standard cell timing tables (.lib), or perform deterministic logic mapping. Claude functions as a front-end accelerator for generating and reviewing RTL before deterministic synthesis.
How do I prevent Claude from generating non-synthesizable SystemVerilog? ▼
Enforce strict constraints via your CLAUDE.md file: mandate IEEE 1800-2023 synthesizable constructs only (always_ff with non-blocking assignments, always_comb with blocking assignments, explicit reset conditions), strictly ban simulation constructs (#delays, initial blocks), and pass all generated code through Verilator or SpyGlass.
Can Claude guarantee Clock Domain Crossing (CDC) correctness? ▼
No. While Claude can write synchronizers and explain Gray code pointer math, code inspection alone cannot guarantee CDC sign-off. Silicon sign-off requires formal CDC tools (Questa CDC, VC CDC) with accurate SDC constraints to verify the absence of metastability, data reconvergence, and bus skew.
What are Claude Code skills and how do they benefit RTL teams? ▼
Claude Code skills are modular, version-controlled SKILL.md packages placed in your repository's .claude/skills/ directory. They define domain-specific workflows, mandatory coding standards, required input parameters, and validation checklists for tasks such as RTL code review, SVA generation, lint report triage, and timing report diagnosis.
How does an engineer debug synthesis timing violations with Claude? ▼
Extract the critical path report from Design Compiler or Genus (showing startpoint, cell delays, net delays, endpoint, and slack). Feed this report alongside the corresponding RTL module to Claude using the /timing-report-analysis skill. Claude will deconstruct the logic depth, identify high-fanout bottlenecks, and recommend architectural RTL fixes (e.g., register retiming, balanced multiplexer trees).

🔗 Related ASIC & VLSI Resources on EcrioniX