Tutorials

Learn More

The coverage options control the behavior of covergroup, coverpoint, and cross. There are two types of options which are 

  1. Specific to an instance of a covergroup
  2. 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