Line Coverage for Module : 
prim_generic_ram_2p
 | Line No. | Total | Covered | Percent | 
| TOTAL |  | 21 | 21 | 100.00 | 
| CONT_ASSIGN | 49 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 60 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 60 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 60 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 60 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 61 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 61 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 61 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 61 | 1 | 1 | 100.00 | 
| ALWAYS | 76 | 6 | 6 | 100.00 | 
| ALWAYS | 91 | 6 | 6 | 100.00 | 
48                        logic unused_cfg;
49         1/1            assign unused_cfg = ^cfg_i;
           Tests:       T2 
50                      
51                        // Width of internal write mask. Note *_wmask_i input into the module is always assumed
52                        // to be the full bit mask.
53                        localparam int MaskWidth = Width / DataBitsPerMask;
54                      
55                        logic [Width-1:0]     mem [Depth];
56                        logic [MaskWidth-1:0] a_wmask;
57                        logic [MaskWidth-1:0] b_wmask;
58                      
59                        for (genvar k = 0; k < MaskWidth; k++) begin : gen_wmask
60         4/4              assign a_wmask[k] = &a_wmask_i[k*DataBitsPerMask +: DataBitsPerMask];
           Tests:       T1 T2 T3  | T1 T2 T3  | T1 T2 T3  | T1 T2 T3 
61         4/4              assign b_wmask[k] = &b_wmask_i[k*DataBitsPerMask +: DataBitsPerMask];
           Tests:       T1 T2 T3  | T1 T2 T3  | T1 T2 T3  | T1 T2 T3 
62                      
63                          // Ensure that all mask bits within a group have the same value for a write
64                          `ASSERT(MaskCheckPortA_A, a_req_i && a_write_i |->
65                              a_wmask_i[k*DataBitsPerMask +: DataBitsPerMask] inside {{DataBitsPerMask{1'b1}}, '0},
66                              clk_a_i, '0)
67                          `ASSERT(MaskCheckPortB_A, b_req_i && b_write_i |->
68                              b_wmask_i[k*DataBitsPerMask +: DataBitsPerMask] inside {{DataBitsPerMask{1'b1}}, '0},
69                              clk_b_i, '0)
70                        end
71                      
72                        // Xilinx FPGA specific Dual-port RAM coding style
73                        // using always instead of always_ff to avoid 'ICPD  - illegal combination of drivers' error
74                        // thrown due to 'mem' being driven by two always processes below
75                        always @(posedge clk_a_i) begin
76         1/1              if (a_req_i) begin
           Tests:       T1 T2 T3 
77         1/1                if (a_write_i) begin
           Tests:       T3 T5 T6 
78         1/1                  for (int i=0; i < MaskWidth; i = i + 1) begin
           Tests:       T3 T5 T6 
79         1/1                    if (a_wmask[i]) begin
           Tests:       T3 T5 T6 
80         1/1                      mem[a_addr_i][i*DataBitsPerMask +: DataBitsPerMask] <=
           Tests:       T3 T5 T6 
81                                    a_wdata_i[i*DataBitsPerMask +: DataBitsPerMask];
82                                end
                   ==>  MISSING_ELSE
83                              end
84                            end else begin
85         1/1                  a_rdata_o <= mem[a_addr_i];
           Tests:       T3 T5 T38 
86                            end
87                          end
                        MISSING_ELSE
88                        end
89                      
90                        always @(posedge clk_b_i) begin
91         1/1              if (b_req_i) begin
           Tests:       T4 T5 T6 
92         1/1                if (b_write_i) begin
           Tests:       T5 T7 T8 
93         1/1                  for (int i=0; i < MaskWidth; i = i + 1) begin
           Tests:       T5 T15 T25 
94         1/1                    if (b_wmask[i]) begin
           Tests:       T5 T15 T25 
95         1/1                      mem[b_addr_i][i*DataBitsPerMask +: DataBitsPerMask] <=
           Tests:       T5 T15 T25 
96                                    b_wdata_i[i*DataBitsPerMask +: DataBitsPerMask];
97                                end
                        MISSING_ELSE
98                              end
99                            end else begin
100        1/1                  b_rdata_o <= mem[b_addr_i];
           Tests:       T5 T7 T8 
101                           end
102                         end
                        MISSING_ELSE
Branch Coverage for Module : 
prim_generic_ram_2p
 | Line No. | Total | Covered | Percent | 
| Branches | 
 | 
6 | 
6 | 
100.00 | 
| IF | 
76 | 
3 | 
3 | 
100.00 | 
| IF | 
91 | 
3 | 
3 | 
100.00 | 
76             if (a_req_i) begin
               -1-  
77               if (a_write_i) begin
                 -2-  
78                 for (int i=0; i < MaskWidth; i = i + 1) begin
                   ==>
79                   if (a_wmask[i]) begin
80                     mem[a_addr_i][i*DataBitsPerMask +: DataBitsPerMask] <=
81                       a_wdata_i[i*DataBitsPerMask +: DataBitsPerMask];
82                   end
83                 end
84               end else begin
85                 a_rdata_o <= mem[a_addr_i];
                   ==>
86               end
87             end
               MISSING_ELSE
               ==>
Branches:
| -1- | -2- | Status | Tests | 
| 1 | 
1 | 
Covered | 
T3,T5,T6 | 
| 1 | 
0 | 
Covered | 
T3,T5,T38 | 
| 0 | 
- | 
Covered | 
T1,T2,T3 | 
91             if (b_req_i) begin
               -1-  
92               if (b_write_i) begin
                 -2-  
93                 for (int i=0; i < MaskWidth; i = i + 1) begin
                   ==>
94                   if (b_wmask[i]) begin
95                     mem[b_addr_i][i*DataBitsPerMask +: DataBitsPerMask] <=
96                       b_wdata_i[i*DataBitsPerMask +: DataBitsPerMask];
97                   end
98                 end
99               end else begin
100                b_rdata_o <= mem[b_addr_i];
                   ==>
101              end
102            end
               MISSING_ELSE
               ==>
Branches:
| -1- | -2- | Status | Tests | 
| 1 | 
1 | 
Covered | 
T5,T15,T25 | 
| 1 | 
0 | 
Covered | 
T5,T7,T8 | 
| 0 | 
- | 
Covered | 
T4,T5,T6 | 
Assert Coverage for Module : 
prim_generic_ram_2p
Assertion Details
gen_wmask[0].MaskCheckPortA_A
| Name | Attempts | Real Successes | Failures | Incomplete | 
| Total | 
417361488 | 
2027920 | 
0 | 
0 | 
| T3 | 
2604 | 
100 | 
0 | 
0 | 
| T4 | 
2417 | 
0 | 
0 | 
0 | 
| T5 | 
3001 | 
41 | 
0 | 
0 | 
| T6 | 
9435 | 
832 | 
0 | 
0 | 
| T7 | 
9250 | 
832 | 
0 | 
0 | 
| T8 | 
14054 | 
832 | 
0 | 
0 | 
| T9 | 
48313 | 
0 | 
0 | 
0 | 
| T10 | 
8193 | 
0 | 
0 | 
0 | 
| T11 | 
10853 | 
832 | 
0 | 
0 | 
| T12 | 
1455 | 
0 | 
0 | 
0 | 
| T13 | 
0 | 
5 | 
0 | 
0 | 
| T15 | 
0 | 
832 | 
0 | 
0 | 
| T25 | 
0 | 
1038 | 
0 | 
0 | 
| T38 | 
0 | 
100 | 
0 | 
0 | 
gen_wmask[0].MaskCheckPortB_A
| Name | Attempts | Real Successes | Failures | Incomplete | 
| Total | 
147321941 | 
1242583 | 
0 | 
0 | 
| T5 | 
5136 | 
175 | 
0 | 
0 | 
| T6 | 
2064 | 
0 | 
0 | 
0 | 
| T7 | 
2600 | 
0 | 
0 | 
0 | 
| T8 | 
10486 | 
0 | 
0 | 
0 | 
| T9 | 
119480 | 
0 | 
0 | 
0 | 
| T11 | 
15764 | 
0 | 
0 | 
0 | 
| T13 | 
216 | 
0 | 
0 | 
0 | 
| T14 | 
1745 | 
0 | 
0 | 
0 | 
| T15 | 
125589 | 
1554 | 
0 | 
0 | 
| T25 | 
298405 | 
2427 | 
0 | 
0 | 
| T27 | 
0 | 
999 | 
0 | 
0 | 
| T30 | 
0 | 
226 | 
0 | 
0 | 
| T43 | 
0 | 
321 | 
0 | 
0 | 
| T44 | 
0 | 
3452 | 
0 | 
0 | 
| T48 | 
0 | 
514 | 
0 | 
0 | 
| T69 | 
0 | 
2041 | 
0 | 
0 | 
| T70 | 
0 | 
115 | 
0 | 
0 | 
gen_wmask[1].MaskCheckPortA_A
| Name | Attempts | Real Successes | Failures | Incomplete | 
| Total | 
417361488 | 
2027920 | 
0 | 
0 | 
| T3 | 
2604 | 
100 | 
0 | 
0 | 
| T4 | 
2417 | 
0 | 
0 | 
0 | 
| T5 | 
3001 | 
41 | 
0 | 
0 | 
| T6 | 
9435 | 
832 | 
0 | 
0 | 
| T7 | 
9250 | 
832 | 
0 | 
0 | 
| T8 | 
14054 | 
832 | 
0 | 
0 | 
| T9 | 
48313 | 
0 | 
0 | 
0 | 
| T10 | 
8193 | 
0 | 
0 | 
0 | 
| T11 | 
10853 | 
832 | 
0 | 
0 | 
| T12 | 
1455 | 
0 | 
0 | 
0 | 
| T13 | 
0 | 
5 | 
0 | 
0 | 
| T15 | 
0 | 
832 | 
0 | 
0 | 
| T25 | 
0 | 
1038 | 
0 | 
0 | 
| T38 | 
0 | 
100 | 
0 | 
0 | 
gen_wmask[1].MaskCheckPortB_A
| Name | Attempts | Real Successes | Failures | Incomplete | 
| Total | 
147321941 | 
1242583 | 
0 | 
0 | 
| T5 | 
5136 | 
175 | 
0 | 
0 | 
| T6 | 
2064 | 
0 | 
0 | 
0 | 
| T7 | 
2600 | 
0 | 
0 | 
0 | 
| T8 | 
10486 | 
0 | 
0 | 
0 | 
| T9 | 
119480 | 
0 | 
0 | 
0 | 
| T11 | 
15764 | 
0 | 
0 | 
0 | 
| T13 | 
216 | 
0 | 
0 | 
0 | 
| T14 | 
1745 | 
0 | 
0 | 
0 | 
| T15 | 
125589 | 
1554 | 
0 | 
0 | 
| T25 | 
298405 | 
2427 | 
0 | 
0 | 
| T27 | 
0 | 
999 | 
0 | 
0 | 
| T30 | 
0 | 
226 | 
0 | 
0 | 
| T43 | 
0 | 
321 | 
0 | 
0 | 
| T44 | 
0 | 
3452 | 
0 | 
0 | 
| T48 | 
0 | 
514 | 
0 | 
0 | 
| T69 | 
0 | 
2041 | 
0 | 
0 | 
| T70 | 
0 | 
115 | 
0 | 
0 | 
gen_wmask[2].MaskCheckPortA_A
| Name | Attempts | Real Successes | Failures | Incomplete | 
| Total | 
417361488 | 
2027920 | 
0 | 
0 | 
| T3 | 
2604 | 
100 | 
0 | 
0 | 
| T4 | 
2417 | 
0 | 
0 | 
0 | 
| T5 | 
3001 | 
41 | 
0 | 
0 | 
| T6 | 
9435 | 
832 | 
0 | 
0 | 
| T7 | 
9250 | 
832 | 
0 | 
0 | 
| T8 | 
14054 | 
832 | 
0 | 
0 | 
| T9 | 
48313 | 
0 | 
0 | 
0 | 
| T10 | 
8193 | 
0 | 
0 | 
0 | 
| T11 | 
10853 | 
832 | 
0 | 
0 | 
| T12 | 
1455 | 
0 | 
0 | 
0 | 
| T13 | 
0 | 
5 | 
0 | 
0 | 
| T15 | 
0 | 
832 | 
0 | 
0 | 
| T25 | 
0 | 
1038 | 
0 | 
0 | 
| T38 | 
0 | 
100 | 
0 | 
0 | 
gen_wmask[2].MaskCheckPortB_A
| Name | Attempts | Real Successes | Failures | Incomplete | 
| Total | 
147321941 | 
1242583 | 
0 | 
0 | 
| T5 | 
5136 | 
175 | 
0 | 
0 | 
| T6 | 
2064 | 
0 | 
0 | 
0 | 
| T7 | 
2600 | 
0 | 
0 | 
0 | 
| T8 | 
10486 | 
0 | 
0 | 
0 | 
| T9 | 
119480 | 
0 | 
0 | 
0 | 
| T11 | 
15764 | 
0 | 
0 | 
0 | 
| T13 | 
216 | 
0 | 
0 | 
0 | 
| T14 | 
1745 | 
0 | 
0 | 
0 | 
| T15 | 
125589 | 
1554 | 
0 | 
0 | 
| T25 | 
298405 | 
2427 | 
0 | 
0 | 
| T27 | 
0 | 
999 | 
0 | 
0 | 
| T30 | 
0 | 
226 | 
0 | 
0 | 
| T43 | 
0 | 
321 | 
0 | 
0 | 
| T44 | 
0 | 
3452 | 
0 | 
0 | 
| T48 | 
0 | 
514 | 
0 | 
0 | 
| T69 | 
0 | 
2041 | 
0 | 
0 | 
| T70 | 
0 | 
115 | 
0 | 
0 | 
gen_wmask[3].MaskCheckPortA_A
| Name | Attempts | Real Successes | Failures | Incomplete | 
| Total | 
417361488 | 
2027920 | 
0 | 
0 | 
| T3 | 
2604 | 
100 | 
0 | 
0 | 
| T4 | 
2417 | 
0 | 
0 | 
0 | 
| T5 | 
3001 | 
41 | 
0 | 
0 | 
| T6 | 
9435 | 
832 | 
0 | 
0 | 
| T7 | 
9250 | 
832 | 
0 | 
0 | 
| T8 | 
14054 | 
832 | 
0 | 
0 | 
| T9 | 
48313 | 
0 | 
0 | 
0 | 
| T10 | 
8193 | 
0 | 
0 | 
0 | 
| T11 | 
10853 | 
832 | 
0 | 
0 | 
| T12 | 
1455 | 
0 | 
0 | 
0 | 
| T13 | 
0 | 
5 | 
0 | 
0 | 
| T15 | 
0 | 
832 | 
0 | 
0 | 
| T25 | 
0 | 
1038 | 
0 | 
0 | 
| T38 | 
0 | 
100 | 
0 | 
0 | 
gen_wmask[3].MaskCheckPortB_A
| Name | Attempts | Real Successes | Failures | Incomplete | 
| Total | 
147321941 | 
1242583 | 
0 | 
0 | 
| T5 | 
5136 | 
175 | 
0 | 
0 | 
| T6 | 
2064 | 
0 | 
0 | 
0 | 
| T7 | 
2600 | 
0 | 
0 | 
0 | 
| T8 | 
10486 | 
0 | 
0 | 
0 | 
| T9 | 
119480 | 
0 | 
0 | 
0 | 
| T11 | 
15764 | 
0 | 
0 | 
0 | 
| T13 | 
216 | 
0 | 
0 | 
0 | 
| T14 | 
1745 | 
0 | 
0 | 
0 | 
| T15 | 
125589 | 
1554 | 
0 | 
0 | 
| T25 | 
298405 | 
2427 | 
0 | 
0 | 
| T27 | 
0 | 
999 | 
0 | 
0 | 
| T30 | 
0 | 
226 | 
0 | 
0 | 
| T43 | 
0 | 
321 | 
0 | 
0 | 
| T44 | 
0 | 
3452 | 
0 | 
0 | 
| T48 | 
0 | 
514 | 
0 | 
0 | 
| T69 | 
0 | 
2041 | 
0 | 
0 | 
| T70 | 
0 | 
115 | 
0 | 
0 |