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:
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-elseorcasestructures, 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?"
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 pipeline02. 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: 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
endmodule03. 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.
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.
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.
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.
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
nameand actionabledescriptionspecifying 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.
.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.
---
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.
---
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.
---
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.
---
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.
---
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.
---
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.
---
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.
---
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.
---
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.
---
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.
---
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.
---
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.
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.rptProduction-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 — 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).git diff before committing any AI-assisted code change.
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.
//=============================================================================
// 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);
endmoduleFormal SVA Assertion Verification
// 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.
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
endmoduleProject 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.
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);
endmoduleProject 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.
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
endmoduleProject 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.
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
endmodulePractical 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.
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).
- 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? ▼
How do I prevent Claude from generating non-synthesizable SystemVerilog? ▼
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? ▼
What are Claude Code skills and how do they benefit RTL teams? ▼
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? ▼
/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
-
📄 Genus & DC Synthesis Commands →
Complete Tcl reference for Cadence Genus & Synopsys Design Compiler.
-
🔄 Asynchronous FIFO Design Lab →
Gray-code pointer CDC math, 2-FF synchronizers, and full/empty flags.
-
🎓 VLSI Design Flow: RTL to GDS →
Comprehensive 8-module master curriculum on ASIC physical design.
-
🧪 Claude for DV Engineers →
Comprehensive SVA assertions, UVM testbenches, and coverage closure guide.
-
🔬 3D Silicon Explorer Hub →
Explore real iPhone 6s and Apple M1 semiconductor dies in real-time WebGL.