Understanding SystemVerilog Assertions for Design Verification
Core Concepts of SystemVerilog Assertions
-
Purpose:
- Monitor signal timing to ensure design intent
- Verify correct logical behavior at boundary points
- Serve as loggging mechanism
-
Implementation:
- Written within module blocks
-
Assertion Types:
- Immediate assertions (non-temporal):
- Execute like procedural statements
- Can be used in initial/always blocks or tasks/functions
- Concurrent assertions (temporal):
- Clock-based verification
- Use 'property' keyword
- Execute in parallel with design
- Activated only at clock edges
- Immediate assertions (non-temporal):
-
Assertion Creation Process:
- Create boolean expressions
- Define sequence expressions
- Establish properties
- Assert properties
-
Key Constructs:
sequence: Describes temporal behavior- Can be parameterized
- Can call other sequences
property: Defines clocked behavior- Can instantiate sequences and properties
- Supprots implication operators
-
Statement Types:
// Assert example assert (condition) else $error("Verification failed"); // Assume example assume property (prop_expr) action_block; // Cover example cover property (cov_expr); -
Operators:
- Implication:
- Overlap:
|->(immediate check) - Non-overlap:
|=>(next cycle check)
- Overlap:
- Delay:
##n(n clock cycles) - Repetition:
[*n]: Consecutive repetition[=n]: Non-consecutive repetition
- Sequence operators:
and,or,intersectfirst_match,throughout,within
- Implication:
System Functions for Assertions
-
Sampling Functions:
$rose(sig): Detects rising edge$fell(sig): Detects falling edge$stable(sig): Checks signal stability$past(sig,n): Gets historical value
-
Utility Functions:
$onehot(exp): Single-bit high check$countones(exp): Counts high bits$isunknown(exp): Detects X/Z states
Assertion Control Mechanisms
-
Runtime Controls:
$asserton(); // Enable assertions $assertoff(); // Disable assertions $assertkill(); // Terminate assertions -
Simulator Options:
-assert enable_diag-assert hier=path