RTL Rules Reference

Fpgawright ships with 140+ design rules organized into seven categories. All rules are enabled by default. Override severity or disable specific rules in your .fpgawright.yaml file.

Clock Domain Crossing (GLT)

Rules in this category detect unsafe clock domain crossing paths — the most common source of intermittent failures in mixed-frequency designs.

Rule IDDescriptionDefault
GLT-001Unregistered signal crossing clock domainsERROR
GLT-002Multi-bit bus crossing without CDC synchronizerERROR
GLT-003Reconvergence hazard — paths from same source through different domainsERROR
GLT-004Async reset propagation into synchronous domainERROR
GLT-005Missing synchronizer FIFO on data path crossingWARN
GLT-011CDC path width mismatch at receiverWARN
GLT-018Glitch path through combinational reconvergenceERROR

Reset Topology (RST)

Rules detecting incorrect reset handling — a common source of hard-to-reproduce boot failures and simulation mismatches.

Rule IDDescriptionDefault
RST-001Async reset not de-asserted synchronouslyERROR
RST-002Reset domain crossing without synchronizerERROR
RST-007Asynchronous reset used in synchronous domain logicERROR
RST-012Reset tree fanout exceeds threshold — potential glitch susceptibilityWARN
RST-015Missing reset on registered outputWARN

State Machine Coverage (FSM)

Rules that trace finite state machine coverage against simulation logs and detect structural issues in state transition logic.

Rule IDDescriptionDefault
FSM-001Unreachable state detected in state transition graphERROR
FSM-004Missing default case in case statementWARN
FSM-008Latch inferred in state transition logicERROR
FSM-012State not covered by simulation log (learning-assisted)WARN
FSM-017Missing transition assertion for critical pathWARN

Combinational Hazards (CMB)

Rules detecting combinational logic issues — latches, loops, false paths, and glitch-prone structures.

Rule IDDescriptionDefault
CMB-001Unintended latch inferred from incomplete assignmentERROR
CMB-005Combinational loop detected in logic graphERROR
CMB-009False path candidate not covered in timing constraintsWARN
CMB-016Glitch-prone mux with unregistered selectWARN

Bus Width and Connectivity (BUS)

Rules detecting width mismatches, undriven inputs, and multi-driver conflicts.

Rule IDDescriptionDefault
BUS-001Port width mismatch at module instantiationERROR
BUS-003Undriven input port connected to logicERROR
BUS-007Multiple drivers on same netERROR
BUS-011Implicit port truncation — width assignment mismatchWARN

Timing Path Analysis (TIM)

Static timing rules that identify setup/hold risks and long combinational paths without requiring full STA.

Rule IDDescriptionDefault
TIM-001Setup violation risk — long combinational path between registersWARN
TIM-004Hold violation risk — zero-delay path between same-edge flip-flopsERROR
TIM-009Clock gating without enable synchronizationERROR
TIM-015Path length exceeds configured critical path budgetWARN

Configuring rules

Override severity or disable any rule in your .fpgawright.yaml:

rules:
  GLT-003: error   # default, explicit
  GLT-011: warn    # downgrade from error
  FSM-012: off     # disable entirely
  TIM-001:
    severity: warn
    threshold_ns: 4.5