Skip to content
Back to skills

2491 Common Violations 08c1ab71

ASecurity

**Specification:** "System transitions from IDLE to BUSY when start=1, and from BUSY to DONE when complete=1"

  • 9 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added October 11, 2026
design

Security analysis

A100/100

Scanned October 11, 2026

npx -y skills add tools-only/X-Skills --skill 2491-common_violations_08c1ab71 --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of 2491 Common Violations 08c1ab71?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for 2491 Common Violations 08c1ab71
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tools-only-2491-common-violations-08c1ab71/badge)](https://www.skillsdirectory.com/skills/tools-only-2491-common-violations-08c1ab71)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

SKILL.md
# Common Specification-RTL Violations

## Functional Violations

### Missing State Transitions

**Specification:**
"System transitions from IDLE to BUSY when start=1, and from BUSY to DONE when complete=1"

**Violation Example:**
```verilog
case (state)
    IDLE: if (start) next_state = BUSY;
    BUSY: next_state = BUSY;  // Missing transition to DONE!
    DONE: next_state = IDLE;
endcase
```

**Detection:**
- Check all specified transitions exist in RTL
- Verify transition conditions match specification

**Fix:**
```verilog
case (state)
    IDLE: if (start) next_state = BUSY;
    BUSY: if (complete) next_state = DONE;  // Added missing transition
    DONE: next_state = IDLE;
endcase
```

### Incorrect Transition Conditions

**Specification:**
"Transition to ERROR state if timeout occurs OR invalid input received"

**Violation Example:**
```verilog
if (timeout && invalid_input)  // Should be OR, not AND
    next_state = ERROR;
```

**Detection:**
- Compare boolean conditions in spec vs RTL
- Check for AND/OR mismatches

**Fix:**
```verilog
if (timeout || invalid_input)  // Corrected to OR
    next_state = ERROR;
```

### Missing Edge Cases

**Specification:**
"Counter increments on each clock cycle, saturates at MAX_VALUE"

**Violation Example:**
```verilog
always @(posedge clk) begin
    counter <= counter + 1;  // No saturation logic!
end
```

**Detection:**
- Check boundary conditions
- Verify overflow/underflow handling

**Fix:**
```verilog
always @(posedge clk) begin
    if (counter < MAX_VALUE)
        counter <= counter + 1;
    // Saturates at MAX_VALUE
end
```

### Wrong Default Values

**Specification:**
"Output defaults to 0 when not explicitly set"

**Violation Example:**
```verilog
always @(*) begin
    case (sel)
        2'b00: out = a;
        2'b01: out = b;
        // No default → latches previous value
    endcase
end
```

**Detection:**
- Check for default assignments
- Verify reset values match spec

**Fix:**
```verilog
always @(*) begin
    out = 0;  // Default value
    case (sel)
        2'b00: out = a;
        2'b01: out = b;
    endcase
end
```

## Protocol Violations

### Handshake Protocol Errors

**Specification:**
"Data must remain stable while valid=1 until ready=1"

**Violation Example:**
```verilog
always @(posedge clk) begin
    if (has_new_data) begin
        valid <= 1;
        data <= new_data;  // Data changes even if previous not accepted!
    end
end
```

**Detection:**
- Trace data signal when valid=1 and ready=0
- Check if data changes

**Fix:**
```verilog
always @(posedge clk) begin
    if (!valid || ready) begin  // Only update when transfer completes
        if (has_new_data) begin
            valid <= 1;
            data <= new_data;
        end else begin
            valid <= 0;
        end
    end
    // Else hold data stable
end
```

### Missing Acknowledgment

**Specification:**
"Request must be acknowledged before next request"

**Violation Example:**
```verilog
always @(posedge clk) begin
    if (need_request) begin
        request <= 1;  // Can send multiple requests without ack!
    end
end
```

**Detection:**
- Check if request can be asserted multiple times
- Verify acknowledgment is checked

**Fix:**
```verilog
always @(posedge clk) begin
    if (need_request && !request) begin
        request <= 1;
    end else if (acknowledge) begin
        request <= 0;
    end
end
```

### Out-of-Order Operations

**Specification:**
"Write must complete before read can start"

**Violation Example:**
```verilog
// Write and read can happen simultaneously
assign write_en = wr_req;
assign read_en = rd_req;
```

**Detection:**
- Check operation ordering
- Verify dependencies are enforced

**Fix:**
```verilog
always @(posedge clk) begin
    case (state)
        IDLE: if (wr_req) state <= WRITING;
        WRITING: if (wr_done) state <= IDLE;
        // Read only allowed in IDLE after write completes
    endcase
end

assign write_en = (state == WRITING);
assign read_en = (state == IDLE) && rd_req && !wr_req;
```

## Timing Violations

### Incorrect Latency

**Specification:**
"Output valid 3 cycles after input valid"

**Violation Example:**
```verilog
always @(posedge clk) begin
    stage1 <= input_data;
    stage2 <= stage1;
    output_data <= stage2;  // Only 2 cycles!
end
```

**Detection:**
- Count pipeline stages
- Trace signal through registers

**Fix:**
```verilog
always @(posedge clk) begin
    stage1 <= input_data;
    stage2 <= stage1;
    stage3 <= stage2;
    output_data <= stage3;  // Now 3 cycles
end
```

### Missing Delay

**Specification:**
"Assert output 1 cycle after input condition met"

**Violation Example:**
```verilog
assign output_signal = input_condition;  // Combinational, no delay!
```

**Detection:**
- Check if signal is registered
- Verify timing of assertion

**Fix:**
```verilog
always @(posedge clk) begin
    output_signal <= input_condition;  // 1 cycle delay
end
```

### Throughput Mismatch

**Specification:**
"Process one transaction per cycle"

**Violation Example:**
```verilog
always @(posedge clk) begin
    if (valid && ready && !busy) begin
        busy <= 1;
        // Process takes multiple cycles
    end else if (busy && done) begin
        busy <= 0;
    end
end
```

**Detection:**
- Measure cycles between transactions
- Check if pipeline is full

**Fix:**
Add pipelining to achieve 1 transaction/cycle throughput.

## Reset Violations

### Missing Reset

**Specification:**
"All state must reset to known values"

**Violation Example:**
```verilog
always @(posedge clk) begin
    if (!rst_n) begin
        state <= IDLE;
        // counter not reset!
    end else begin
        counter <= counter + 1;
    end
end
```

**Detection:**
- Check all registers in reset block
- Verify all state is initialized

**Fix:**
```verilog
always @(posedge clk) begin
    if (!rst_n) begin
        state <= IDLE;
        counter <= 0;  // Added reset
    end else begin
        counter <= counter + 1;
    end
end
```

### Wrong Reset Value

**Specification:**
"Counter resets to 10"

**Violation Example:**
```verilog
if (!rst_n)
    counter <= 0;  // Should be 10!
```

**Detection:**
- Compare reset values in spec vs RTL

**Fix:**
```verilog
if (!rst_n)
    counter <= 10;  // Correct reset value
```

### Incomplete Reset

**Specification:**
"Synchronous reset for all logic"

**Violation Example:**
```verilog
always @(posedge clk or negedge rst_n) begin  // Async reset!
    if (!rst_n)
        state <= IDLE;
    elsif rising_edge(clk)
        // ...
end
```

**Detection:**
- Check reset style (sync vs async)
- Verify consistency across design

**Fix:**
```verilog
always @(posedge clk) begin  // Synchronous reset
    if (!rst_n)
        state <= IDLE;
    else
        // ...
end
```

## Data Path Violations

### Wrong Data Width

**Specification:**
"Data bus is 32 bits wide"

**Violation Example:**
```verilog
reg [15:0] data_bus;  // Only 16 bits!
```

**Detection:**
- Compare signal widths
- Check for truncation

**Fix:**
```verilog
reg [31:0] data_bus;  // Correct width
```

### Missing Data Validation

**Specification:**
"Input data must be validated before use"

**Violation Example:**
```verilog
always @(posedge clk) begin
    result <= input_data + offset;  // No validation!
end
```

**Detection:**
- Check for validation logic
- Verify error handling

**Fix:**
```verilog
always @(posedge clk) begin
    if (input_valid && input_data < MAX_VALUE) begin
        result <= input_data + offset;
        error <= 0;
    end else begin
        error <= 1;
    end
end
```

### Incorrect Arithmetic

**Specification:**
"Calculate average of two inputs: (A + B) / 2"

**Violation Example:**
```verilog
assign average = (A + B) >> 1;  // Overflow if A+B > max!
```

**Detection:**
- Check arithmetic operations
- Verify overflow handling

**Fix:**
```verilog
wire [WIDTH:0] sum = {1'b0, A} + {1'b0, B};  // Extra bit for overflow
assign average = sum[WIDTH:1];  // Divide by 2
```

## Control Flow Violations

### Missing Priority

**Specification:**
"Error condition has highest priority"

**Violation Example:**
```verilog
if (normal_req) next_state = PROCESS;
else if (error) next_state = ERROR;  // Error checked last!
```

**Detection:**
- Check condition ordering
- Verify priority matches spec

**Fix:**
```verilog
if (error) next_state = ERROR;  // Error checked first
else if (normal_req) next_state = PROCESS;
```

### Unreachable States

**Specification:**
"System has states: IDLE, BUSY, DONE"

**Violation Example:**
```verilog
case (state)
    IDLE: next_state = BUSY;
    BUSY: next_state = BUSY;  // Can never reach DONE!
    DONE: next_state = IDLE;
endcase
```

**Detection:**
- Analyze state reachability
- Check for dead states

**Fix:**
Add proper transition to DONE state.

### Deadlock Conditions

**Specification:**
"System must always make progress"

**Violation Example:**
```verilog
case (state)
    WAIT_A: if (signal_b) next_state = WAIT_B;
    WAIT_B: if (signal_a) next_state = WAIT_A;
    // Deadlock if both signals false!
endcase
```

**Detection:**
- Check for circular wait conditions
- Verify progress guarantees

**Fix:**
Add timeout or alternative exit path.

## Underspecified Scenarios

### Ambiguous Behavior

**Specification:**
"Output updates when input changes"

**Issue:**
- Does it update immediately (combinational)?
- Does it update on next clock (registered)?
- What if input changes multiple times in one cycle?

**Resolution Needed:**
Clarify timing and update mechanism in specification.

### Missing Corner Cases

**Specification:**
"Increment counter on enable"

**Issue:**
- What happens at maximum value?
- Wrap around or saturate?
- Generate overflow flag?

**Resolution Needed:**
Specify boundary behavior explicitly.

### Undefined Initial State

**Specification:**
"State machine with states A, B, C"

**Issue:**
- What is the initial state?
- How does system enter initial state?

**Resolution Needed:**
Specify reset behavior and initial state.

## Uncheckable Scenarios

### Missing Environmental Assumptions

**Specification:**
"Process input when valid signal asserted"

**Issue:**
- How long does valid stay asserted?
- Can valid be asserted back-to-back?
- What is maximum valid duration?

**Needed:**
Environmental constraints or assumptions about input behavior.

### External Dependencies

**Specification:**
"Interface with external memory controller"

**Issue:**
- Memory controller behavior not specified
- Timing of memory responses unknown
- Error conditions not defined

**Needed:**
External component specifications or interface protocol definition.

### Incomplete Timing Information

**Specification:**
"Fast response required"

**Issue:**
- How fast is "fast"?
- Measured in cycles or time?
- Under what conditions?

**Needed:**
Quantitative timing requirements with units and conditions.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.