Code coverage helps check if your Verilog test covers all parts of your design. It shows what is tested and what is missed.
Code coverage concepts in Verilog
// Example of coverage block in SystemVerilog covergroup cg; coverpoint signal_name { bins low = {0}; bins high = {1}; } endgroup initial begin cg cg_inst = new(); cg_inst.sample(signal_name); end
Verilog itself does not have built-in coverage, but SystemVerilog adds coverage features.
Coverage groups and coverpoints help track which values or states occur during simulation.
covergroup cg; coverpoint state; endgroup initial begin cg cg_inst = new(); cg_inst.sample(state); end
covergroup cg;
coverpoint data {
bins zero = {0};
bins positive = {[1:127]};
bins negative = {[-128:-1]};
}
endgroupcovergroup cg;
coverpoint opcode {
bins add = {4'b0001};
bins sub = {4'b0010};
}
endgroupThis program defines a coverage group to track the 'state' signal values. It samples three states: idle, run, and stop.
`timescale 1ns/1ps
module coverage_example();
reg [1:0] state;
covergroup cg;
coverpoint state {
bins idle = {2'b00};
bins run = {2'b01};
bins stop = {2'b10};
}
endgroup
cg cg_inst;
initial begin
cg_inst = new();
state = 2'b00; // idle
#10 cg_inst.sample(state);
state = 2'b01; // run
#10 cg_inst.sample(state);
state = 2'b10; // stop
#10 cg_inst.sample(state);
$display("Coverage example finished.");
$finish;
end
endmoduleCode coverage helps find parts of your design not tested by your testbench.
SystemVerilog coverage features include covergroups, coverpoints, and bins.
Coverage data is collected during simulation and can be viewed with tools.
Code coverage shows which parts of your Verilog design are tested.
Use SystemVerilog covergroups and coverpoints to define coverage points.
Sampling coverage during simulation helps improve test quality.
Practice
Solution
Step 1: Understand code coverage concept
Code coverage tracks which parts of the Verilog design are exercised during simulation.Step 2: Identify the main goal
The goal is to ensure tests cover all design parts, improving test quality.Final Answer:
To check which parts of the design have been tested -> Option CQuick Check:
Code coverage = tested parts check [OK]
- Confusing coverage with simulation speed
- Thinking coverage generates synthesis reports
- Assuming coverage optimizes hardware layout
Solution
Step 1: Recall coverage constructs
SystemVerilog usescovergroupto group coverage points andcoverpointto define individual coverage points.Step 2: Identify the coverage point
The coverage point is specifically defined bycoverpoint, inside acovergroup.Final Answer:
coverpoint -> Option AQuick Check:
Coverage point = coverpoint [OK]
- Confusing covergroup with coverpoint
- Using assertion or property for coverage points
- Mixing coverage with verification constructs
state after these values: 0, 1, 0, 2?
int state; covergroup cg; coverpoint state; endgroup cg cg_inst = new(); state = 0; cg_inst.sample(); state = 1; cg_inst.sample(); state = 0; cg_inst.sample(); state = 2; cg_inst.sample();
Solution
Step 1: Understand coverage counting
Coverage counts unique values sampled by the coverpoint. Values 0,1,2 appear.Step 2: Count unique values
Values sampled: 0 (twice), 1, 2. Unique values are 0,1,2 -> 3 unique hits.Final Answer:
3 -> Option DQuick Check:
Unique states = 3 [OK]
- Counting repeated samples multiple times
- Assuming total samples equal coverage count
- Ignoring unique value concept
int signal;
covergroup cg;
coverpoint signal {
bins low = {0};
bins high = {1};
}
endgroup
cg cg_inst = new();
signal = 2;
cg_inst.sample();Solution
Step 1: Analyze bins coverage
Bins cover values 0 and 1 only. Sampled value is 2, which is not covered.Step 2: Identify error impact
Sampling 2 will not hit any bin, causing incomplete coverage.Final Answer:
Bins do not cover the sampled value 2 -> Option BQuick Check:
Bins coverage missing sampled value [OK]
- Ignoring uncovered sampled values
- Thinking semicolon is missing after coverpoint
- Assuming sample() method is invalid
a and b in SystemVerilog?Solution
Step 1: Understand covergroup composition
A covergroup can contain multiple coverpoints to track individual signals.Step 2: Use cross coverage
Cross coverage tracks combinations of values from multiple coverpoints, hereaandb.Final Answer:
Define coverpoints foraandband add acrosscoverage for both inside the covergroup -> Option AQuick Check:
Cross coverage = combined signal tracking [OK]
- Not using cross coverage for combined signals
- Defining separate covergroups without cross
- Confusing assertions with coverage
Ready to prove it?
Pass the test and this pattern moves unknown
