Line Coverage for Module : 
prim_subreg_shadow
 | Line No. | Total | Covered | Percent | 
| TOTAL |  | 16 | 16 | 100.00 | 
| CONT_ASSIGN | 94 | 1 | 1 | 100.00 | 
| ALWAYS | 100 | 6 | 6 | 100.00 | 
| CONT_ASSIGN | 113 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 114 | 0 | 0 |  | 
| CONT_ASSIGN | 138 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 139 | 0 | 0 |  | 
| CONT_ASSIGN | 160 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 161 | 0 | 0 |  | 
| CONT_ASSIGN | 180 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 183 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 184 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 187 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 188 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 189 | 1 | 1 | 100.00 | 
93                        // - In case of RO, SW should not interfere with update process.
94         1/1            assign phase_clear = (SwAccess == SwAccessRO) ? 1'b0 : re;
           Tests:       T77 T78 T79 
95                      
96                        // Phase tracker:
97                        // - Reads from SW clear the phase back to 0.
98                        // - Writes have priority (can come from SW or HW).
99                        always_ff @(posedge clk_i or negedge rst_ni) begin : phase_reg
100        1/1              if (!rst_ni) begin
           Tests:       T1 T2 T3 
101        1/1                phase_q <= 1'b0;
           Tests:       T1 T2 T3 
102        1/1              end else if (wr_en && !err_storage) begin
           Tests:       T1 T2 T3 
103        1/1                phase_q <= ~phase_q;
           Tests:       T3 T15 T18 
104        1/1              end else if (phase_clear || err_storage) begin
           Tests:       T1 T2 T3 
105        1/1                phase_q <= 1'b0;
           Tests:       T78 T79 T80 
106                         end
                        MISSING_ELSE
107                       end
108                     
109                       // The staged register:
110                       // - Holds the 1's complement value.
111                       // - Written in Phase 0.
112                       // - Once storage error occurs, do not allow any further update until reset
113        1/1            assign staged_we = we & ~phase_q & ~err_storage;
           Tests:       T1 T2 T3 
114        unreachable    assign staged_de = de & ~phase_q & ~err_storage;
115                       prim_subreg #(
116                         .DW       ( DW             ),
117                         .SwAccess ( StagedSwAccess ),
118                         .RESVAL   ( ~RESVAL        )
119                       ) staged_reg (
120                         .clk_i    ( clk_i     ),
121                         .rst_ni   ( rst_ni    ),
122                         .we       ( staged_we ),
123                         .wd       ( ~wr_data  ),
124                         .de       ( staged_de ),
125                         .d        ( ~d        ),
126                         .qe       (           ),
127                         .q        ( staged_q  ),
128                         .ds       (           ),
129                         .qs       (           )
130                       );
131                     
132                       // The shadow register:
133                       // - Holds the 1's complement value.
134                       // - Written in Phase 1.
135                       // - Writes are ignored in case of update errors.
136                       // - Gets the value from the staged register.
137                       // - Once storage error occurs, do not allow any further update until reset
138        1/1            assign shadow_we = we & phase_q & ~err_update & ~err_storage;
           Tests:       T1 T2 T3 
139        unreachable    assign shadow_de = de & phase_q & ~err_update & ~err_storage;
140                       prim_subreg #(
141                         .DW       ( DW               ),
142                         .SwAccess ( InvertedSwAccess ),
143                         .RESVAL   ( ~RESVAL          )
144                       ) shadow_reg (
145                         .clk_i    ( clk_i           ),
146                         .rst_ni   ( rst_shadowed_ni ),
147                         .we       ( shadow_we       ),
148                         .wd       ( staged_q        ),
149                         .de       ( shadow_de       ),
150                         .d        ( staged_q        ),
151                         .qe       (                 ),
152                         .q        ( shadow_q        ),
153                         .ds       (                 ),
154                         .qs       (                 )
155                       );
156                     
157                       // The committed register:
158                       // - Written in Phase 1.
159                       // - Writes are ignored in case of update errors.
160        1/1            assign committed_we = shadow_we;
           Tests:       T3 T15 T18 
161        unreachable    assign committed_de = shadow_de;
162                       prim_subreg #(
163                         .DW       ( DW       ),
164                         .SwAccess ( SwAccess ),
165                         .RESVAL   ( RESVAL   )
166                       ) committed_reg (
167                         .clk_i    ( clk_i        ),
168                         .rst_ni   ( rst_ni       ),
169                         .we       ( committed_we ),
170                         .wd       ( wr_data      ),
171                         .de       ( committed_de ),
172                         .d        ( d            ),
173                         .qe       ( committed_qe ),
174                         .q        ( committed_q  ),
175                         .ds       ( ds           ),
176                         .qs       ( committed_qs )
177                       );
178                     
179                       // Output phase for hwext.
180        1/1            assign phase = phase_q;
           Tests:       T1 T2 T3 
181                     
182                       // Error detection - all bits must match.
183        1/1            assign err_update  = (~staged_q != wr_data) ? phase_q & wr_en : 1'b0;
           Tests:       T1 T2 T3 
184        1/1            assign err_storage = (~shadow_q != committed_q);
           Tests:       T1 T2 T3 
185                     
186                       // Remaining output assignments
187        1/1            assign qe = committed_qe;
           Tests:       T3 T15 T18 
188        1/1            assign q  = committed_q;
           Tests:       T1 T2 T3 
189        1/1            assign qs = committed_qs;
           Tests:       T1 T2 T3 
Cond Coverage for Module : 
prim_subreg_shadow
 | Total | Covered | Percent | 
| Conditions | 26 | 19 | 73.08 | 
| Logical | 26 | 19 | 73.08 | 
| Non-Logical | 0 | 0 |  | 
| Event | 0 | 0 |  | 
 LINE       102
 EXPRESSION (wr_en && ((!err_storage)))
             --1--    --------2-------
| -1- | -2- | Status | Tests | 
| 0 | 1 | Covered | T1,T2,T3 | 
| 1 | 0 | Not Covered |  | 
| 1 | 1 | Covered | T3,T15,T18 | 
 LINE       104
 EXPRESSION (phase_clear || err_storage)
             -----1-----    -----2-----
| -1- | -2- | Status | Tests | 
| 0 | 0 | Covered | T1,T2,T3 | 
| 0 | 1 | Not Covered |  | 
| 1 | 0 | Covered | T78,T79,T80 | 
 LINE       113
 EXPRESSION (we & ((~phase_q)) & ((~err_storage)))
             -1   ------2-----   --------3-------
| -1- | -2- | -3- | Status | Tests | 
| 0 | 1 | 1 | Covered | T1,T2,T3 | 
| 1 | 0 | 1 | Covered | T3,T15,T18 | 
| 1 | 1 | 0 | Not Covered |  | 
| 1 | 1 | 1 | Covered | T3,T15,T18 | 
 LINE       114
 EXPRESSION (de & ((~phase_q)) & ((~err_storage)))
             -1   ------2-----   --------3-------
| -1- | -2- | -3- | Status | Tests | 
| 0 | 1 | 1 | Covered | T1,T2,T3 | 
| 1 | 0 | 1 | Unreachable |  | 
| 1 | 1 | 0 | Unreachable |  | 
| 1 | 1 | 1 | Unreachable |  | 
 LINE       138
 EXPRESSION (we & phase_q & ((~err_update)) & ((~err_storage)))
             -1   ---2---   -------3-------   --------4-------
| -1- | -2- | -3- | -4- | Status | Tests | 
| 0 | 1 | 1 | 1 | Covered | T3,T15,T18 | 
| 1 | 0 | 1 | 1 | Covered | T3,T15,T18 | 
| 1 | 1 | 0 | 1 | Not Covered |  | 
| 1 | 1 | 1 | 0 | Not Covered |  | 
| 1 | 1 | 1 | 1 | Covered | T3,T15,T18 | 
 LINE       139
 EXPRESSION (de & phase_q & ((~err_update)) & ((~err_storage)))
             -1   ---2---   -------3-------   --------4-------
| -1- | -2- | -3- | -4- | Status | Tests | 
| 0 | 1 | 1 | 1 | Covered | T3,T15,T18 | 
| 1 | 0 | 1 | 1 | Unreachable |  | 
| 1 | 1 | 0 | 1 | Unreachable |  | 
| 1 | 1 | 1 | 0 | Unreachable |  | 
| 1 | 1 | 1 | 1 | Unreachable |  | 
 LINE       183
 EXPRESSION (((~staged_q) != wr_data) ? (phase_q & wr_en) : 1'b0)
             ------------1-----------
| -1- | Status | Tests | 
| 0 | Covered | T1,T2,T3 | 
| 1 | Covered | T3,T15,T18 | 
 LINE       183
 SUB-EXPRESSION ((~staged_q) != wr_data)
                ------------1-----------
| -1- | Status | Tests | 
| 0 | Covered | T1,T2,T3 | 
| 1 | Covered | T3,T15,T18 | 
 LINE       183
 SUB-EXPRESSION (phase_q & wr_en)
                 ---1---   --2--
| -1- | -2- | Status | Tests | 
| 0 | 1 | Covered | T3,T15,T18 | 
| 1 | 0 | Covered | T3,T15,T18 | 
| 1 | 1 | Not Covered |  | 
 LINE       184
 EXPRESSION ((~shadow_q) != committed_q)
            --------------1-------------
| -1- | Status | Tests | 
| 0 | Covered | T1,T2,T3 | 
| 1 | Not Covered |  | 
Branch Coverage for Module : 
prim_subreg_shadow
 | Line No. | Total | Covered | Percent | 
| Branches | 
 | 
6 | 
6 | 
100.00 | 
| TERNARY | 
183 | 
2 | 
2 | 
100.00 | 
| IF | 
100 | 
4 | 
4 | 
100.00 | 
183          assign err_update  = (~staged_q != wr_data) ? phase_q & wr_en : 1'b0;
                                                         -1-  
                                                         ==>  
                                                         ==>  
Branches:
| -1- | Status | Tests | 
| 1 | 
Covered | 
T3,T15,T18 | 
| 0 | 
Covered | 
T1,T2,T3 | 
100            if (!rst_ni) begin
               -1-  
101              phase_q <= 1'b0;
                 ==>
102            end else if (wr_en && !err_storage) begin
                        -2-  
103              phase_q <= ~phase_q;
                 ==>
104            end else if (phase_clear || err_storage) begin
                        -3-  
105              phase_q <= 1'b0;
                 ==>
106            end
               MISSING_ELSE
               ==>
Branches:
| -1- | -2- | -3- | Status | Tests | 
| 1 | 
- | 
- | 
Covered | 
T1,T2,T3 | 
| 0 | 
1 | 
- | 
Covered | 
T3,T15,T18 | 
| 0 | 
0 | 
1 | 
Covered | 
T78,T79,T80 | 
| 0 | 
0 | 
0 | 
Covered | 
T1,T2,T3 | 
Assert Coverage for Module : 
prim_subreg_shadow
Assertion Details
CheckSwAccessIsLegal_A
| Name | Attempts | Real Successes | Failures | Incomplete | 
| Total | 
2526 | 
2526 | 
0 | 
0 | 
| T1 | 
2 | 
2 | 
0 | 
0 | 
| T2 | 
2 | 
2 | 
0 | 
0 | 
| T3 | 
2 | 
2 | 
0 | 
0 | 
| T4 | 
2 | 
2 | 
0 | 
0 | 
| T9 | 
2 | 
2 | 
0 | 
0 | 
| T10 | 
2 | 
2 | 
0 | 
0 | 
| T15 | 
2 | 
2 | 
0 | 
0 | 
| T16 | 
2 | 
2 | 
0 | 
0 | 
| T17 | 
2 | 
2 | 
0 | 
0 | 
| T18 | 
2 | 
2 | 
0 | 
0 | 
MubiIsNotYetSupported_A
| Name | Attempts | Real Successes | Failures | Incomplete | 
| Total | 
729193330 | 
727282142 | 
0 | 
0 | 
| T1 | 
3154 | 
3028 | 
0 | 
0 | 
| T2 | 
3832 | 
3644 | 
0 | 
0 | 
| T3 | 
66200 | 
66078 | 
0 | 
0 | 
| T4 | 
8436 | 
7024 | 
0 | 
0 | 
| T9 | 
8070 | 
7952 | 
0 | 
0 | 
| T10 | 
12554 | 
12412 | 
0 | 
0 | 
| T15 | 
2910 | 
2762 | 
0 | 
0 | 
| T16 | 
4062 | 
3950 | 
0 | 
0 | 
| T17 | 
3738 | 
3550 | 
0 | 
0 | 
| T18 | 
391038 | 
390910 | 
0 | 
0 | 
 
Line Coverage for Instance : tb.dut.u_reg_core.u_mp_bank_cfg_shadowed_erase_en_0
 | Line No. | Total | Covered | Percent | 
| TOTAL |  | 16 | 16 | 100.00 | 
| CONT_ASSIGN | 94 | 1 | 1 | 100.00 | 
| ALWAYS | 100 | 6 | 6 | 100.00 | 
| CONT_ASSIGN | 113 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 114 | 0 | 0 |  | 
| CONT_ASSIGN | 138 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 139 | 0 | 0 |  | 
| CONT_ASSIGN | 160 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 161 | 0 | 0 |  | 
| CONT_ASSIGN | 180 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 183 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 184 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 187 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 188 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 189 | 1 | 1 | 100.00 | 
93                        // - In case of RO, SW should not interfere with update process.
94         1/1            assign phase_clear = (SwAccess == SwAccessRO) ? 1'b0 : re;
           Tests:       T77 T78 T79 
95                      
96                        // Phase tracker:
97                        // - Reads from SW clear the phase back to 0.
98                        // - Writes have priority (can come from SW or HW).
99                        always_ff @(posedge clk_i or negedge rst_ni) begin : phase_reg
100        1/1              if (!rst_ni) begin
           Tests:       T1 T2 T3 
101        1/1                phase_q <= 1'b0;
           Tests:       T1 T2 T3 
102        1/1              end else if (wr_en && !err_storage) begin
           Tests:       T1 T2 T3 
103        1/1                phase_q <= ~phase_q;
           Tests:       T3 T15 T18 
104        1/1              end else if (phase_clear || err_storage) begin
           Tests:       T1 T2 T3 
105        1/1                phase_q <= 1'b0;
           Tests:       T78 T79 T80 
106                         end
                        MISSING_ELSE
107                       end
108                     
109                       // The staged register:
110                       // - Holds the 1's complement value.
111                       // - Written in Phase 0.
112                       // - Once storage error occurs, do not allow any further update until reset
113        1/1            assign staged_we = we & ~phase_q & ~err_storage;
           Tests:       T1 T2 T3 
114        unreachable    assign staged_de = de & ~phase_q & ~err_storage;
115                       prim_subreg #(
116                         .DW       ( DW             ),
117                         .SwAccess ( StagedSwAccess ),
118                         .RESVAL   ( ~RESVAL        )
119                       ) staged_reg (
120                         .clk_i    ( clk_i     ),
121                         .rst_ni   ( rst_ni    ),
122                         .we       ( staged_we ),
123                         .wd       ( ~wr_data  ),
124                         .de       ( staged_de ),
125                         .d        ( ~d        ),
126                         .qe       (           ),
127                         .q        ( staged_q  ),
128                         .ds       (           ),
129                         .qs       (           )
130                       );
131                     
132                       // The shadow register:
133                       // - Holds the 1's complement value.
134                       // - Written in Phase 1.
135                       // - Writes are ignored in case of update errors.
136                       // - Gets the value from the staged register.
137                       // - Once storage error occurs, do not allow any further update until reset
138        1/1            assign shadow_we = we & phase_q & ~err_update & ~err_storage;
           Tests:       T1 T2 T3 
139        unreachable    assign shadow_de = de & phase_q & ~err_update & ~err_storage;
140                       prim_subreg #(
141                         .DW       ( DW               ),
142                         .SwAccess ( InvertedSwAccess ),
143                         .RESVAL   ( ~RESVAL          )
144                       ) shadow_reg (
145                         .clk_i    ( clk_i           ),
146                         .rst_ni   ( rst_shadowed_ni ),
147                         .we       ( shadow_we       ),
148                         .wd       ( staged_q        ),
149                         .de       ( shadow_de       ),
150                         .d        ( staged_q        ),
151                         .qe       (                 ),
152                         .q        ( shadow_q        ),
153                         .ds       (                 ),
154                         .qs       (                 )
155                       );
156                     
157                       // The committed register:
158                       // - Written in Phase 1.
159                       // - Writes are ignored in case of update errors.
160        1/1            assign committed_we = shadow_we;
           Tests:       T3 T15 T18 
161        unreachable    assign committed_de = shadow_de;
162                       prim_subreg #(
163                         .DW       ( DW       ),
164                         .SwAccess ( SwAccess ),
165                         .RESVAL   ( RESVAL   )
166                       ) committed_reg (
167                         .clk_i    ( clk_i        ),
168                         .rst_ni   ( rst_ni       ),
169                         .we       ( committed_we ),
170                         .wd       ( wr_data      ),
171                         .de       ( committed_de ),
172                         .d        ( d            ),
173                         .qe       ( committed_qe ),
174                         .q        ( committed_q  ),
175                         .ds       ( ds           ),
176                         .qs       ( committed_qs )
177                       );
178                     
179                       // Output phase for hwext.
180        1/1            assign phase = phase_q;
           Tests:       T1 T2 T3 
181                     
182                       // Error detection - all bits must match.
183        1/1            assign err_update  = (~staged_q != wr_data) ? phase_q & wr_en : 1'b0;
           Tests:       T1 T2 T3 
184        1/1            assign err_storage = (~shadow_q != committed_q);
           Tests:       T1 T2 T3 
185                     
186                       // Remaining output assignments
187        1/1            assign qe = committed_qe;
           Tests:       T3 T15 T18 
188        1/1            assign q  = committed_q;
           Tests:       T1 T2 T3 
189        1/1            assign qs = committed_qs;
           Tests:       T1 T2 T3 
Cond Coverage for Instance : tb.dut.u_reg_core.u_mp_bank_cfg_shadowed_erase_en_0
 | Total | Covered | Percent | 
| Conditions | 26 | 19 | 73.08 | 
| Logical | 26 | 19 | 73.08 | 
| Non-Logical | 0 | 0 |  | 
| Event | 0 | 0 |  | 
 LINE       102
 EXPRESSION (wr_en && ((!err_storage)))
             --1--    --------2-------
| -1- | -2- | Status | Tests | 
| 0 | 1 | Covered | T1,T2,T3 | 
| 1 | 0 | Not Covered |  | 
| 1 | 1 | Covered | T3,T15,T18 | 
 LINE       104
 EXPRESSION (phase_clear || err_storage)
             -----1-----    -----2-----
| -1- | -2- | Status | Tests | 
| 0 | 0 | Covered | T1,T2,T3 | 
| 0 | 1 | Not Covered |  | 
| 1 | 0 | Covered | T78,T79,T80 | 
 LINE       113
 EXPRESSION (we & ((~phase_q)) & ((~err_storage)))
             -1   ------2-----   --------3-------
| -1- | -2- | -3- | Status | Tests | 
| 0 | 1 | 1 | Covered | T1,T2,T3 | 
| 1 | 0 | 1 | Covered | T3,T15,T18 | 
| 1 | 1 | 0 | Not Covered |  | 
| 1 | 1 | 1 | Covered | T3,T15,T18 | 
 LINE       114
 EXPRESSION (de & ((~phase_q)) & ((~err_storage)))
             -1   ------2-----   --------3-------
| -1- | -2- | -3- | Status | Tests | 
| 0 | 1 | 1 | Covered | T1,T2,T3 | 
| 1 | 0 | 1 | Unreachable |  | 
| 1 | 1 | 0 | Unreachable |  | 
| 1 | 1 | 1 | Unreachable |  | 
 LINE       138
 EXPRESSION (we & phase_q & ((~err_update)) & ((~err_storage)))
             -1   ---2---   -------3-------   --------4-------
| -1- | -2- | -3- | -4- | Status | Tests | 
| 0 | 1 | 1 | 1 | Covered | T3,T15,T18 | 
| 1 | 0 | 1 | 1 | Covered | T3,T15,T18 | 
| 1 | 1 | 0 | 1 | Not Covered |  | 
| 1 | 1 | 1 | 0 | Not Covered |  | 
| 1 | 1 | 1 | 1 | Covered | T3,T15,T18 | 
 LINE       139
 EXPRESSION (de & phase_q & ((~err_update)) & ((~err_storage)))
             -1   ---2---   -------3-------   --------4-------
| -1- | -2- | -3- | -4- | Status | Tests | 
| 0 | 1 | 1 | 1 | Covered | T3,T15,T18 | 
| 1 | 0 | 1 | 1 | Unreachable |  | 
| 1 | 1 | 0 | 1 | Unreachable |  | 
| 1 | 1 | 1 | 0 | Unreachable |  | 
| 1 | 1 | 1 | 1 | Unreachable |  | 
 LINE       183
 EXPRESSION (((~staged_q) != wr_data) ? (phase_q & wr_en) : 1'b0)
             ------------1-----------
| -1- | Status | Tests | 
| 0 | Covered | T1,T2,T3 | 
| 1 | Covered | T3,T15,T18 | 
 LINE       183
 SUB-EXPRESSION ((~staged_q) != wr_data)
                ------------1-----------
| -1- | Status | Tests | 
| 0 | Covered | T1,T2,T3 | 
| 1 | Covered | T3,T15,T18 | 
 LINE       183
 SUB-EXPRESSION (phase_q & wr_en)
                 ---1---   --2--
| -1- | -2- | Status | Tests | 
| 0 | 1 | Covered | T3,T15,T18 | 
| 1 | 0 | Covered | T3,T15,T18 | 
| 1 | 1 | Not Covered |  | 
 LINE       184
 EXPRESSION ((~shadow_q) != committed_q)
            --------------1-------------
| -1- | Status | Tests | 
| 0 | Covered | T1,T2,T3 | 
| 1 | Not Covered |  | 
Branch Coverage for Instance : tb.dut.u_reg_core.u_mp_bank_cfg_shadowed_erase_en_0
 | Line No. | Total | Covered | Percent | 
| Branches | 
 | 
6 | 
6 | 
100.00 | 
| TERNARY | 
183 | 
2 | 
2 | 
100.00 | 
| IF | 
100 | 
4 | 
4 | 
100.00 | 
183          assign err_update  = (~staged_q != wr_data) ? phase_q & wr_en : 1'b0;
                                                         -1-  
                                                         ==>  
                                                         ==>  
Branches:
| -1- | Status | Tests | 
| 1 | 
Covered | 
T3,T15,T18 | 
| 0 | 
Covered | 
T1,T2,T3 | 
100            if (!rst_ni) begin
               -1-  
101              phase_q <= 1'b0;
                 ==>
102            end else if (wr_en && !err_storage) begin
                        -2-  
103              phase_q <= ~phase_q;
                 ==>
104            end else if (phase_clear || err_storage) begin
                        -3-  
105              phase_q <= 1'b0;
                 ==>
106            end
               MISSING_ELSE
               ==>
Branches:
| -1- | -2- | -3- | Status | Tests | 
| 1 | 
- | 
- | 
Covered | 
T1,T2,T3 | 
| 0 | 
1 | 
- | 
Covered | 
T3,T15,T18 | 
| 0 | 
0 | 
1 | 
Covered | 
T78,T79,T80 | 
| 0 | 
0 | 
0 | 
Covered | 
T1,T2,T3 | 
Assert Coverage for Instance : tb.dut.u_reg_core.u_mp_bank_cfg_shadowed_erase_en_0
Assertion Details
CheckSwAccessIsLegal_A
| Name | Attempts | Real Successes | Failures | Incomplete | 
| Total | 
1263 | 
1263 | 
0 | 
0 | 
| T1 | 
1 | 
1 | 
0 | 
0 | 
| T2 | 
1 | 
1 | 
0 | 
0 | 
| T3 | 
1 | 
1 | 
0 | 
0 | 
| T4 | 
1 | 
1 | 
0 | 
0 | 
| T9 | 
1 | 
1 | 
0 | 
0 | 
| T10 | 
1 | 
1 | 
0 | 
0 | 
| T15 | 
1 | 
1 | 
0 | 
0 | 
| T16 | 
1 | 
1 | 
0 | 
0 | 
| T17 | 
1 | 
1 | 
0 | 
0 | 
| T18 | 
1 | 
1 | 
0 | 
0 | 
MubiIsNotYetSupported_A
| Name | Attempts | Real Successes | Failures | Incomplete | 
| Total | 
364596665 | 
363641071 | 
0 | 
0 | 
| T1 | 
1577 | 
1514 | 
0 | 
0 | 
| T2 | 
1916 | 
1822 | 
0 | 
0 | 
| T3 | 
33100 | 
33039 | 
0 | 
0 | 
| T4 | 
4218 | 
3512 | 
0 | 
0 | 
| T9 | 
4035 | 
3976 | 
0 | 
0 | 
| T10 | 
6277 | 
6206 | 
0 | 
0 | 
| T15 | 
1455 | 
1381 | 
0 | 
0 | 
| T16 | 
2031 | 
1975 | 
0 | 
0 | 
| T17 | 
1869 | 
1775 | 
0 | 
0 | 
| T18 | 
195519 | 
195455 | 
0 | 
0 | 
 
Line Coverage for Instance : tb.dut.u_reg_core.u_mp_bank_cfg_shadowed_erase_en_1
 | Line No. | Total | Covered | Percent | 
| TOTAL |  | 16 | 16 | 100.00 | 
| CONT_ASSIGN | 94 | 1 | 1 | 100.00 | 
| ALWAYS | 100 | 6 | 6 | 100.00 | 
| CONT_ASSIGN | 113 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 114 | 0 | 0 |  | 
| CONT_ASSIGN | 138 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 139 | 0 | 0 |  | 
| CONT_ASSIGN | 160 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 161 | 0 | 0 |  | 
| CONT_ASSIGN | 180 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 183 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 184 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 187 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 188 | 1 | 1 | 100.00 | 
| CONT_ASSIGN | 189 | 1 | 1 | 100.00 | 
93                        // - In case of RO, SW should not interfere with update process.
94         1/1            assign phase_clear = (SwAccess == SwAccessRO) ? 1'b0 : re;
           Tests:       T77 T78 T79 
95                      
96                        // Phase tracker:
97                        // - Reads from SW clear the phase back to 0.
98                        // - Writes have priority (can come from SW or HW).
99                        always_ff @(posedge clk_i or negedge rst_ni) begin : phase_reg
100        1/1              if (!rst_ni) begin
           Tests:       T1 T2 T3 
101        1/1                phase_q <= 1'b0;
           Tests:       T1 T2 T3 
102        1/1              end else if (wr_en && !err_storage) begin
           Tests:       T1 T2 T3 
103        1/1                phase_q <= ~phase_q;
           Tests:       T3 T15 T18 
104        1/1              end else if (phase_clear || err_storage) begin
           Tests:       T1 T2 T3 
105        1/1                phase_q <= 1'b0;
           Tests:       T78 T79 T80 
106                         end
                        MISSING_ELSE
107                       end
108                     
109                       // The staged register:
110                       // - Holds the 1's complement value.
111                       // - Written in Phase 0.
112                       // - Once storage error occurs, do not allow any further update until reset
113        1/1            assign staged_we = we & ~phase_q & ~err_storage;
           Tests:       T1 T2 T3 
114        unreachable    assign staged_de = de & ~phase_q & ~err_storage;
115                       prim_subreg #(
116                         .DW       ( DW             ),
117                         .SwAccess ( StagedSwAccess ),
118                         .RESVAL   ( ~RESVAL        )
119                       ) staged_reg (
120                         .clk_i    ( clk_i     ),
121                         .rst_ni   ( rst_ni    ),
122                         .we       ( staged_we ),
123                         .wd       ( ~wr_data  ),
124                         .de       ( staged_de ),
125                         .d        ( ~d        ),
126                         .qe       (           ),
127                         .q        ( staged_q  ),
128                         .ds       (           ),
129                         .qs       (           )
130                       );
131                     
132                       // The shadow register:
133                       // - Holds the 1's complement value.
134                       // - Written in Phase 1.
135                       // - Writes are ignored in case of update errors.
136                       // - Gets the value from the staged register.
137                       // - Once storage error occurs, do not allow any further update until reset
138        1/1            assign shadow_we = we & phase_q & ~err_update & ~err_storage;
           Tests:       T1 T2 T3 
139        unreachable    assign shadow_de = de & phase_q & ~err_update & ~err_storage;
140                       prim_subreg #(
141                         .DW       ( DW               ),
142                         .SwAccess ( InvertedSwAccess ),
143                         .RESVAL   ( ~RESVAL          )
144                       ) shadow_reg (
145                         .clk_i    ( clk_i           ),
146                         .rst_ni   ( rst_shadowed_ni ),
147                         .we       ( shadow_we       ),
148                         .wd       ( staged_q        ),
149                         .de       ( shadow_de       ),
150                         .d        ( staged_q        ),
151                         .qe       (                 ),
152                         .q        ( shadow_q        ),
153                         .ds       (                 ),
154                         .qs       (                 )
155                       );
156                     
157                       // The committed register:
158                       // - Written in Phase 1.
159                       // - Writes are ignored in case of update errors.
160        1/1            assign committed_we = shadow_we;
           Tests:       T3 T15 T18 
161        unreachable    assign committed_de = shadow_de;
162                       prim_subreg #(
163                         .DW       ( DW       ),
164                         .SwAccess ( SwAccess ),
165                         .RESVAL   ( RESVAL   )
166                       ) committed_reg (
167                         .clk_i    ( clk_i        ),
168                         .rst_ni   ( rst_ni       ),
169                         .we       ( committed_we ),
170                         .wd       ( wr_data      ),
171                         .de       ( committed_de ),
172                         .d        ( d            ),
173                         .qe       ( committed_qe ),
174                         .q        ( committed_q  ),
175                         .ds       ( ds           ),
176                         .qs       ( committed_qs )
177                       );
178                     
179                       // Output phase for hwext.
180        1/1            assign phase = phase_q;
           Tests:       T1 T2 T3 
181                     
182                       // Error detection - all bits must match.
183        1/1            assign err_update  = (~staged_q != wr_data) ? phase_q & wr_en : 1'b0;
           Tests:       T1 T2 T3 
184        1/1            assign err_storage = (~shadow_q != committed_q);
           Tests:       T1 T2 T3 
185                     
186                       // Remaining output assignments
187        1/1            assign qe = committed_qe;
           Tests:       T3 T15 T18 
188        1/1            assign q  = committed_q;
           Tests:       T1 T2 T3 
189        1/1            assign qs = committed_qs;
           Tests:       T1 T2 T3 
Cond Coverage for Instance : tb.dut.u_reg_core.u_mp_bank_cfg_shadowed_erase_en_1
 | Total | Covered | Percent | 
| Conditions | 26 | 19 | 73.08 | 
| Logical | 26 | 19 | 73.08 | 
| Non-Logical | 0 | 0 |  | 
| Event | 0 | 0 |  | 
 LINE       102
 EXPRESSION (wr_en && ((!err_storage)))
             --1--    --------2-------
| -1- | -2- | Status | Tests | 
| 0 | 1 | Covered | T1,T2,T3 | 
| 1 | 0 | Not Covered |  | 
| 1 | 1 | Covered | T3,T15,T18 | 
 LINE       104
 EXPRESSION (phase_clear || err_storage)
             -----1-----    -----2-----
| -1- | -2- | Status | Tests | 
| 0 | 0 | Covered | T1,T2,T3 | 
| 0 | 1 | Not Covered |  | 
| 1 | 0 | Covered | T78,T79,T80 | 
 LINE       113
 EXPRESSION (we & ((~phase_q)) & ((~err_storage)))
             -1   ------2-----   --------3-------
| -1- | -2- | -3- | Status | Tests | 
| 0 | 1 | 1 | Covered | T1,T2,T3 | 
| 1 | 0 | 1 | Covered | T3,T15,T18 | 
| 1 | 1 | 0 | Not Covered |  | 
| 1 | 1 | 1 | Covered | T3,T15,T18 | 
 LINE       114
 EXPRESSION (de & ((~phase_q)) & ((~err_storage)))
             -1   ------2-----   --------3-------
| -1- | -2- | -3- | Status | Tests | 
| 0 | 1 | 1 | Covered | T1,T2,T3 | 
| 1 | 0 | 1 | Unreachable |  | 
| 1 | 1 | 0 | Unreachable |  | 
| 1 | 1 | 1 | Unreachable |  | 
 LINE       138
 EXPRESSION (we & phase_q & ((~err_update)) & ((~err_storage)))
             -1   ---2---   -------3-------   --------4-------
| -1- | -2- | -3- | -4- | Status | Tests | 
| 0 | 1 | 1 | 1 | Covered | T3,T15,T18 | 
| 1 | 0 | 1 | 1 | Covered | T3,T15,T18 | 
| 1 | 1 | 0 | 1 | Not Covered |  | 
| 1 | 1 | 1 | 0 | Not Covered |  | 
| 1 | 1 | 1 | 1 | Covered | T3,T15,T18 | 
 LINE       139
 EXPRESSION (de & phase_q & ((~err_update)) & ((~err_storage)))
             -1   ---2---   -------3-------   --------4-------
| -1- | -2- | -3- | -4- | Status | Tests | 
| 0 | 1 | 1 | 1 | Covered | T3,T15,T18 | 
| 1 | 0 | 1 | 1 | Unreachable |  | 
| 1 | 1 | 0 | 1 | Unreachable |  | 
| 1 | 1 | 1 | 0 | Unreachable |  | 
| 1 | 1 | 1 | 1 | Unreachable |  | 
 LINE       183
 EXPRESSION (((~staged_q) != wr_data) ? (phase_q & wr_en) : 1'b0)
             ------------1-----------
| -1- | Status | Tests | 
| 0 | Covered | T1,T2,T3 | 
| 1 | Covered | T3,T15,T18 | 
 LINE       183
 SUB-EXPRESSION ((~staged_q) != wr_data)
                ------------1-----------
| -1- | Status | Tests | 
| 0 | Covered | T1,T2,T3 | 
| 1 | Covered | T3,T15,T18 | 
 LINE       183
 SUB-EXPRESSION (phase_q & wr_en)
                 ---1---   --2--
| -1- | -2- | Status | Tests | 
| 0 | 1 | Covered | T3,T15,T18 | 
| 1 | 0 | Covered | T3,T15,T18 | 
| 1 | 1 | Not Covered |  | 
 LINE       184
 EXPRESSION ((~shadow_q) != committed_q)
            --------------1-------------
| -1- | Status | Tests | 
| 0 | Covered | T1,T2,T3 | 
| 1 | Not Covered |  | 
Branch Coverage for Instance : tb.dut.u_reg_core.u_mp_bank_cfg_shadowed_erase_en_1
 | Line No. | Total | Covered | Percent | 
| Branches | 
 | 
6 | 
6 | 
100.00 | 
| TERNARY | 
183 | 
2 | 
2 | 
100.00 | 
| IF | 
100 | 
4 | 
4 | 
100.00 | 
183          assign err_update  = (~staged_q != wr_data) ? phase_q & wr_en : 1'b0;
                                                         -1-  
                                                         ==>  
                                                         ==>  
Branches:
| -1- | Status | Tests | 
| 1 | 
Covered | 
T3,T15,T18 | 
| 0 | 
Covered | 
T1,T2,T3 | 
100            if (!rst_ni) begin
               -1-  
101              phase_q <= 1'b0;
                 ==>
102            end else if (wr_en && !err_storage) begin
                        -2-  
103              phase_q <= ~phase_q;
                 ==>
104            end else if (phase_clear || err_storage) begin
                        -3-  
105              phase_q <= 1'b0;
                 ==>
106            end
               MISSING_ELSE
               ==>
Branches:
| -1- | -2- | -3- | Status | Tests | 
| 1 | 
- | 
- | 
Covered | 
T1,T2,T3 | 
| 0 | 
1 | 
- | 
Covered | 
T3,T15,T18 | 
| 0 | 
0 | 
1 | 
Covered | 
T78,T79,T80 | 
| 0 | 
0 | 
0 | 
Covered | 
T1,T2,T3 | 
Assert Coverage for Instance : tb.dut.u_reg_core.u_mp_bank_cfg_shadowed_erase_en_1
Assertion Details
CheckSwAccessIsLegal_A
| Name | Attempts | Real Successes | Failures | Incomplete | 
| Total | 
1263 | 
1263 | 
0 | 
0 | 
| T1 | 
1 | 
1 | 
0 | 
0 | 
| T2 | 
1 | 
1 | 
0 | 
0 | 
| T3 | 
1 | 
1 | 
0 | 
0 | 
| T4 | 
1 | 
1 | 
0 | 
0 | 
| T9 | 
1 | 
1 | 
0 | 
0 | 
| T10 | 
1 | 
1 | 
0 | 
0 | 
| T15 | 
1 | 
1 | 
0 | 
0 | 
| T16 | 
1 | 
1 | 
0 | 
0 | 
| T17 | 
1 | 
1 | 
0 | 
0 | 
| T18 | 
1 | 
1 | 
0 | 
0 | 
MubiIsNotYetSupported_A
| Name | Attempts | Real Successes | Failures | Incomplete | 
| Total | 
364596665 | 
363641071 | 
0 | 
0 | 
| T1 | 
1577 | 
1514 | 
0 | 
0 | 
| T2 | 
1916 | 
1822 | 
0 | 
0 | 
| T3 | 
33100 | 
33039 | 
0 | 
0 | 
| T4 | 
4218 | 
3512 | 
0 | 
0 | 
| T9 | 
4035 | 
3976 | 
0 | 
0 | 
| T10 | 
6277 | 
6206 | 
0 | 
0 | 
| T15 | 
1455 | 
1381 | 
0 | 
0 | 
| T16 | 
2031 | 
1975 | 
0 | 
0 | 
| T17 | 
1869 | 
1775 | 
0 | 
0 | 
| T18 | 
195519 | 
195455 | 
0 | 
0 |