Coverage Group SystemVerilog - EDA Playground
Warning! This exercise has been opened in another tab; autosave has been disabled. Close this tab or refresh to reactivate.

 Languages & Libraries

 Tools & Simulators

 Examples

204


48
 
1
// Code your testbench here
2
// or browse Examples
3
4
module LED_PANEL_TB();
5
6
  //Wildcard import of all packaged items:
7
  import LED_PKG::*;
8
9
  //Declare a variable of panel type:
10
  LED_PANEL LP;
11
  
12
  initial
13
    begin
14
    #10 LP = new();      
15
      fork
16
        LP.WALK_RED(0, GRN); //Walk through row 1 with GRN background.
17
        LP.WALK_RED(1, YEL); //Walk through row 2 with YEL background.
18
      join
19
      repeat (25)
20
      begin:TRIALS
21
        //Construct new LP:
22
        //#10 LP = new();
23
        LP.randomize();
24
        LP.TALLY_RED();
25
        $display(
26
          "%4t ms: %p  @'h%h",  $time, LP.PANEL, LP
27
        );
28
      end:  TRIALS
29
    end
30
  
31
  initial begin
32
    $dumpfile("dump.vcd");
33
    $dumpvars;
34
    #(150ms);    
35
    //$finish();    //Always call finish with always block, otherwise, it will run forever 
36
  end
37
  
38
  final begin
39
  $display("Total red alerts: %0d", LP.ALERTS);
40
  $display(
41
      "Coverage: %9.6f %%\nCross Coverage: %9.6f %%\n",
42
    LP.CVG.get_coverage(),
43
    LP.CVG.COMBS.get_coverage()
44
    );
45
    
46
  end
47
48
endmodule: LED_PANEL_TB
xxxxxxxxxx
1
78
 
1
// Code your design here
2
// Code your design here
3
//Unit-scope items:
4
timeunit 1ms;
5
timeprecision 1ms;
6
7
package LED_PKG;
8
9
typedef enum {
10
  BLU,
11
  GRN,
12
  YEL,
13
  RED
14
} led_et;
15
16
typedef led_et panel_t [2][4];  //It has to be unpacked since LED_t is of type enum and it's values are of type int so it can't be                                  packed
17
18
class LED_PANEL;
19
20
  //A random variable:
21
  rand panel_t PANEL;
22
  //Constrain all 2x4 LEDs:
23
  constraint COLOR_con {
24
    foreach (PANEL[J,K])
25
      PANEL[J][K] dist {
26
        BLU := 30,
27
        GRN := 40,
28
        YEL := 25,
29
        RED :=  5
30
      };     // 100 total.
31
  }
32
  
33
  //An embedded coverage group:
34
  covergroup CVG;
35
    //Individual LED coverages:
36
    LED11: coverpoint PANEL[0][1];
37
    LED12: coverpoint PANEL[0][2];
38
    LED13: coverpoint PANEL[0][3];
39
    LED14: coverpoint PANEL[0][0];
40
    LED21: coverpoint PANEL[1][1];
41
    LED22: coverpoint PANEL[1][2];
42
    LED23: coverpoint PANEL[1][3];
43
    LED24: coverpoint PANEL[1][0];
44
    COMBS: cross LED11, LED12, LED13, LED14, LED21, LED22, LED23, LED24;
45
  endgroup: CVG
46
  
47
  //Red-alert status:
48
  int ALERTS = 0;
49
  bit DANGER;
50
  function new();
51
    this.srandom(100);
52
    CVG = new();
53
  endfunction
54
55
  //Count up red alerts:
56
  task TALLY_RED();
57
    DANGER = RED inside {PANEL};
58
    if (DANGER) ++ALERTS;
59
    CVG.sample();
60
  endtask: TALLY_RED
61
  
62
  //Walk a RED through one row of LEDs:
63
  task WALK_RED (int ROW_arg, led_et BKGND_arg);
64
    #10ms PANEL[ROW_arg] = '{0: RED, default:BKGND_arg};
65
    $display("  %4t ms: %p \n", $time, PANEL);
66
    #10ms PANEL[ROW_arg] = '{1: RED, default:BKGND_arg};
67
    $display("  %4t ms: %p \n", $time, PANEL);
68
    #10ms PANEL[ROW_arg] = '{3: RED, default:BKGND_arg};
69
    $display("  %4t ms: %p \n", $time, PANEL);
70
    #10ms PANEL[ROW_arg] = '{2: RED, default:BKGND_arg};
71
    $display("  %4t ms: %p \n", $time, PANEL);
72
    #10ms PANEL = '{default:BKGND_arg};
73
    $display("  %4t ms: %p \n", $time, PANEL);
74
  endtask: WALK_RED
75
76
endclass: LED_PANEL
77
78
endpackage: LED_PKG
94 views and 0 likes     
A short description will be helpful for you to remember your playground's details
 
100:0