Advanced Coverage Concepts in Design
Verification
Faisal Manzoor
faesalmanzoor@gmail.com
2025
Introduction
This document expands upon the concept of coverage in design verification by diving into
advanced topics like bin creation, instance coverage, transition coverage, cross coverage,
and filters in cross coverage. Real-world analogies and examples are provided for better
understanding.
1 Types of Functional Coverage
Functional coverage ensures not just code execution, but that key features and scenarios
are actually exercised. It includes:
• Coverpoint Coverage – tracks value occurrences for specific variables.
• Cross Coverage – checks for all combinations of multiple variables.
• Transition Coverage – verifies ordered sequences of values.
• Per-Instance Coverage – collects coverage separately for each covergroup in-
stance.
Analogy
Coverpoint is like noting down which single students raised their hand. Cross cov-
erage checks who raised hands together. Transition coverage observes the sequence
of who raised hands. Instance coverage checks which student groups (e.g., different
classes) participated.
1
2 Types of Bin Creation
In SystemVerilog, bins determine how values are grouped and monitored in coverage.
• Explicit Bins: Manually specify exact values.
• Implicit Bins: Automatically generated one per legal value.
• Wildcard Bins: Use pattern matching (e.g., ‘3’b1?¿).
• Range Bins: Monitor values over a range (e.g., 1 to 10).
• Illegal Bins: Represent invalid/illegal value combinations.
• Ignore Bins: Values not considered in coverage statistics.
Listing 1: Bin Types Example
coverpoint opcode {
bins add_op = {4 ’ b0000 };
bins range1 = {[4 ’ b0010 :4 ’ b0100 ]};
bins wild1 = {4 ’ b1 ??0};
illegal_bins bad_values = {4 ’ b1111 };
}
3 Instance Coverage
Instance coverage keeps coverage results separate for each covergroup instantiation. This
is essential when covergroups are used in different blocks or modules.
Listing 2: Per-instance Coverage Example
class env ;
covergroup cg @ ( posedge clk );
coverpoint data ;
endgroup
cg cg_inst1 , cg_inst2 ;
function new ;
cg_inst1 = new ();
cg_inst2 = new ();
endfunction
endclass
© 2025 Faisal Manzoor — faesalmanzoor@gmail.com
4 Transition Coverage
Transition bins monitor specific sequences of values. They’re useful to validate protocols
and FSM state changes.
Listing 3: Transition Coverage Example
coverpoint state {
bins idle_to_busy = (0 = > 1);
bins full_seq = (0 = > 1 = > 2);
}
Analogy
Think of transition bins like a traffic light sequence. You want to confirm the
system goes from RED to GREEN to YELLOW in order.
5 Cross Coverage
Cross coverage tracks all combinations of two or more coverpoints. This is crucial when
the interaction between multiple variables is significant.
Listing 4: Cross Coverage Example
covergroup cg ;
coverpoint a ;
coverpoint b ;
cross a , b ;
endgroup
6 Filters in Cross Coverage
Sometimes, not all combinations in a cross are valid or important. Filters like ‘ignoreb ins‘and‘illegalb ins‘
• ignore bins: Excludes certain combinations from coverage statistics.
• illegal bins: Marks illegal value pairs — if hit, they flag a verification error.
Listing 5: Cross Coverage with Filters
covergroup cg ;
coverpoint a ;
coverpoint b ;
cross a , b {
ignore_bins ignore01 = binsof ( a ) intersect {1} && binsof ( b ) intersect {0}
© 2025 Faisal Manzoor — faesalmanzoor@gmail.com
illegal_bins illegal23 = binsof ( a ) intersect {2} && binsof ( b ) intersect {
}
endgroup
Conclusion
Advanced coverage techniques are essential to achieve high-quality verification and ensure
that both design functionality and corner cases are exhaustively validated.
© 2025 Faisal Manzoor — faesalmanzoor@gmail.com
© 2025 Faisal Manzoor — faesalmanzoor@gmail.com