Coverage options in FC
The coverage options control the behavior of covergroup, coverpoint, and cross. There are two types of options which are
- Specific to an instance of a covergroup
- Specific to the covergroup type as a whole.
Type A: Specific to an instance of a covergroup
Each instance of the covergroup can have an instance-specific option.
Syntax:
option.<option_name> = <expression>;
Where,
option – a built-in member of any coverage group.
<option_name> – supported options are specified in the below table.
Option name |
Description |
Allowed in Syntactic level |
Weight = number [Default value = 1] |
1. If it is set at the covergroup syntactic level, then it specifies the weight of this covergroup instance for computing the overall instance coverage of the simulation. 2. If it is set at coverpoint or cross syntactic level, then it specifies the weight of a coverpoint or a cross for computing the instance coverage of the enclosing covergroup. |
covergroup, coverpoint, cross |
name = string |
Specifies a name for the covergroup instance. If it is not specified, the tool will generate a unique name for each instance. |
covergroup |
per_instance = boolean [Default value = False/0] |
Each covergroup instance contributes to the overall coverage information for the coverage type. If it is true, coverage information for this covergroup instance is also tracked. |
covergroup |
goal = number [Default value = 90] |
Specifies target goal for coverpoint or cross or covergroup instance. |
covergroup, coverpoint, cross |
comment = string |
Saves comment in coverage database and includes in the coverage report for an instance of covergroup, coverpoint, and cross. |
covergroup, coverpoint, cross |
at_least = number [Default value = 1] |
Specifies the minimum number of hits for each bin. If the bin is hit less than the specified number, then it is not considered. |
covergroup, coverpoint, cross |
detect_overlap=boolean [Default value = False/0] |
When it is true, it reports a warning for an overlap between the range list of the two bins of a coverpoint. |
covergroup, coverpoint |
auto_bin_max = number [Default value = 64] |
When no bins are explicitly specified for a coverpoint, it denotes the maximum number of automatically created bins. |
covergroup, coverpoint |
cross_auto_bin_max = number |
Denotes the maximum number of automatically created cross-product bins for a cross. |
covergroup cross |
cross_num_print_missing = number [Default value = 0] |
Saves uncovered cross-product bins in the coverage database and includes them in the coverage report. |
covergroup, cross |
Example for specific to an instance of a covergroup
module func_coverage;
bit [7:0] addr, data;
covergroup c_group;
option.per_instance = 1;
option.comment = "This is the comment";
cp1: coverpoint addr {
option.weight = 2;
option.auto_bin_max = 32;
}
cp2: coverpoint data;
cp1_X_cp2: cross cp1, cp2 {
option.cross_auto_bin_max = 32;
}
endgroup : c_group
c_group cg = new();
initial begin
forever begin
cg.sample();
#5;
end
end
initial begin
$monitor("At time = %0t: addr = %0d, data = %0d", $time, addr, data);
repeat(5) begin
addr = $random;
data = $random;
#5;
end
$display("Coverage = %f", cg.get_coverage());
$finish;
end
endmodule
Output:
At time = 0: addr = 36, data = 129
At time = 5: addr = 9, data = 99
At time = 10: addr = 13, data = 141
At time = 15: addr = 101, data = 18
At time = 20: addr = 1, data = 13
Coverage = 7.389323
Type B: Specific to the covergroup type as a whole
It specified a particular feature or property of the covergroup type as a whole. They are analogous to static data members of classes.
Syntax:
type_option.<option_name> = <expression>;
Where,
type_option – a built-in member of any coverage group.
<option_name> – supported options are specified in the below table.
Option name |
Description |
Allowed in Syntactic level |
Weight = constant_number [Default value = 1] |
1. If it is set at the covergroup syntactic level, then it specifies the weight of this covergroup instance for computing the overall instance coverage of the simulation. 2. If it is set at coverpoint or cross syntactic level, then it specifies the weight of a coverpoint or a cross for computing the instance coverage of the enclosing covergroup. |
covergroup, coverpoint, cross |
goal = number [Default value = 90] |
Specifies target goal for coverpoint or cross or covergroup instance. |
covergroup, coverpoint, cross |
comment = string |
Saves comment in coverage database and includes in the coverage report for an instance of covergroup, coverpoint, and cross. |
covergroup, coverpoint, cross |
strobe = constant_number [Default value = 0] |
Similar to the $strobe system task, if it sets to 1, sampling is done at the end of the time slot. |
covergroup |
Example for specific to the covergroup type as a whole
module func_coverage;
bit [7:0] addr, data;
covergroup c_group;
option.per_instance = 1;
type_option.comment = "This is the comment";
type_option.strobe = 1;
cp1: coverpoint addr {
type_option.weight = 2;
}
cp2: coverpoint data;
cp1_X_cp2: cross cp1, cp2;
endgroup : c_group
c_group cg = new();
initial begin
forever begin
cg.sample();
#5;
end
end
initial begin
$monitor("At time = %0t: addr = %0d, data = %0d", $time, addr, data);
repeat(5) begin
addr = $random;
data = $random;
#5;
end
$display("Coverage = %f", cg.get_coverage());
$finish;
end
endmodule
Output:
At time = 0: addr = 36, data = 129
At time = 5: addr = 9, data = 99
At time = 10: addr = 13, data = 141
At time = 15: addr = 101, data = 18
At time = 20: addr = 1, data = 13
Coverage = 6.286621
Functional Coverage