Module Definition
dashboard | hierarchy | modlist | groups | tests | asserts

Module : sha3
SCORELINECONDTOGGLEFSMBRANCHASSERT
92.32 97.56 88.89 81.82 93.33 100.00

Source File(s) :
/workspaces/repo/scratch/os_regression_2024_08_22/kmac_unmasked-sim-vcs/default/sim-vcs/../src/lowrisc_ip_sha3_0.1/rtl/sha3.sv

Module self-instances :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
tb.dut.u_sha3 95.96 97.56 88.89 100.00 93.33 100.00



Module Instance : tb.dut.u_sha3

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
95.96 97.56 88.89 100.00 93.33 100.00


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
92.16 91.91 88.51 100.00 80.56 92.00 100.00


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
97.24 96.27 93.33 100.00 100.00 93.85 100.00 dut


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
u_keccak 81.47 81.77 88.24 100.00 40.00 78.79 100.00
u_pad 96.28 99.42 88.37 100.00 94.12 95.79 100.00
u_state_regs 100.00 100.00 100.00 100.00

Line Coverage for Module : sha3
Line No.TotalCoveredPercent
TOTAL828097.56
CONT_ASSIGN13811100.00
CONT_ASSIGN14411100.00
CONT_ASSIGN14811100.00
CONT_ASSIGN17211100.00
CONT_ASSIGN17311100.00
CONT_ASSIGN17811100.00
CONT_ASSIGN17911100.00
ALWAYS18455100.00
ALWAYS19833100.00
CONT_ASSIGN20311100.00
ALWAYS20766100.00
CONT_ASSIGN21411100.00
CONT_ASSIGN21711100.00
CONT_ASSIGN21811100.00
CONT_ASSIGN22011100.00
ALWAYS22733100.00
ALWAYS2373838100.00
ALWAYS33233100.00
ALWAYS349121083.33

137 logic round_count_error, msg_count_error; 138 1/1 assign count_error_o = round_count_error | msg_count_error; Tests: T1 T2 T3  139 140 logic sha3_state_error; 141 logic keccak_round_state_error; 142 logic sha3pad_state_error; 143 144 1/1 assign sparse_fsm_error_o = sha3_state_error | keccak_round_state_error | sha3pad_state_error; Tests: T1 T2 T3  145 146 // Keccak rst_storage is asserted unexpectedly 147 logic keccak_storage_rst_error; 148 1/1 assign keccak_storage_rst_error_o = keccak_storage_rst_error; Tests: T1 T2 T3  149 150 ///////////////// 151 // Connections // 152 ///////////////// 153 154 logic keccak_valid; 155 logic [KeccakMsgAddrW-1:0] keccak_addr; 156 logic [MsgWidth-1:0] keccak_data [Share]; 157 logic keccak_ready; 158 159 // Keccak round run signal can be controlled by sha3pad and also by software 160 // after all message feeding is done. it is mainly used for sponge squeezing 161 // operation after absorbing is completed when output length is longer than 162 // the block size. 163 logic keccak_run, sha3pad_keccak_run, sw_keccak_run; 164 logic keccak_run_req_d, keccak_run_req_q; 165 logic keccak_triggered_d, keccak_triggered_q; 166 logic keccak_complete; 167 168 // Announce that we want to run the Keccak core and tell other blocks to go 169 // quiet. Keep holding the REQ until the Keccak core is done with the 170 // processing. The keccak_complete signal is received once the Keccak core 171 // is back in the Idle state and again susceptible to keccak_run. 172 1/1 assign run_req_o = keccak_run_req_d; Tests: T1 T2 T3  173 1/1 assign keccak_run_req_d = Tests: T1 T2 T3  174 sha3pad_keccak_run || sw_keccak_run ? 1'b 1 : 175 keccak_complete ? 1'b 0 : keccak_run_req_q; 176 177 // Trigger the Keccak engine with a single pulse upon receiving the ACK. 178 1/1 assign keccak_run = run_req_o & run_ack_i & ~keccak_triggered_q; Tests: T1 T2 T3  179 1/1 assign keccak_triggered_d = Tests: T1 T2 T3  180 keccak_run ? 1'b 1 : 181 keccak_complete ? 1'b 0 : keccak_triggered_q; 182 183 always_ff @(posedge clk_i or negedge rst_ni) begin 184 1/1 if (!rst_ni) begin Tests: T1 T2 T3  185 1/1 keccak_run_req_q <= 1'b 0; Tests: T1 T2 T3  186 1/1 keccak_triggered_q <= 1'b 0; Tests: T1 T2 T3  187 end else begin 188 1/1 keccak_run_req_q <= keccak_run_req_d; Tests: T1 T2 T3  189 1/1 keccak_triggered_q <= keccak_triggered_d; Tests: T1 T2 T3  190 end 191 end 192 193 // Absorb pulse output : used to generate interrupts 194 // Latch absorbed signal as kmac_keymgr asserts `CmdDone` when it sees 195 // `absorbed` signal. When this signal goes out, the state is still in 196 // `StAbsorb`. Next state is `StSqueeze`. 197 always_ff @(posedge clk_i or negedge rst_ni) begin 198 2/2 if (!rst_ni) absorbed_o <= prim_mubi_pkg::MuBi4False; Tests: T1 T2 T3  | T1 T2 T3  199 1/1 else absorbed_o <= absorbed; Tests: T1 T2 T3  200 end 201 202 // Squeezing output 203 1/1 assign squeezing_o = squeezing; Tests: T1 T2 T3  204 205 // processing 206 always_ff @(posedge clk_i or negedge rst_ni) begin 207 2/2 if (!rst_ni) processing <= 1'b 0; Tests: T1 T2 T3  | T1 T2 T3  208 2/2 else if (process_i) processing <= 1'b 1; Tests: T1 T2 T3  | T1 T2 T4  209 1/1 else if (prim_mubi_pkg::mubi4_test_true_strict(absorbed)) begin Tests: T1 T2 T3  210 1/1 processing <= 1'b 0; Tests: T1 T2 T4  211 end MISSING_ELSE 212 end 213 214 1/1 assign block_processed_o = keccak_complete; Tests: T1 T2 T3  215 216 // State connection 217 1/1 assign state_valid_o = state_valid; Tests: T1 T2 T3  218 1/1 assign state_o = state_guarded; Tests: T1 T2 T3  219 220 1/1 assign sha3_fsm_o = sparse2logic(st); Tests: T1 T2 T3  221 222 /////////////////// 223 // State Machine // 224 /////////////////// 225 226 // State Register 227 3/3 `PRIM_FLOP_SPARSE_FSM(u_state_regs, st_d, st, sha3_st_sparse_e, StIdle_sparse) Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3 
PRIM_FLOP_SPARSE_FSM(u_state_regs, st_d, st, sha3_st_sparse_e, StIdle_sparse): 227.1 `ifdef SIMULATION 227.2 prim_sparse_fsm_flop #( 227.3 .StateEnumT(sha3_st_sparse_e), 227.4 .Width($bits(sha3_st_sparse_e)), 227.5 .ResetValue($bits(sha3_st_sparse_e)'(StIdle_sparse)), 227.6 .EnableAlertTriggerSVA(1), 227.7 .CustomForceName("st") 227.8 ) u_state_regs ( 227.9 .clk_i ( clk_i ), 227.10 .rst_ni ( rst_ni ), 227.11 .state_i ( st_d ), 227.12 .state_o ( ) 227.13 ); 227.14 always_ff @(posedge clk_i or negedge rst_ni) begin 227.15 1/1 if (!rst_ni) begin Tests: T1 T2 T3  227.16 1/1 st <= StIdle_sparse; Tests: T1 T2 T3  227.17 end else begin 227.18 1/1 st <= st_d; Tests: T1 T2 T3  227.19 end 227.20 end 227.21 u_state_regs_A: assert property (@(posedge clk_i) disable iff ((!rst_ni) !== '0) (st === u_state_regs.state_o)) 227.22 else begin 227.23 `ifdef UVM 227.24 uvm_pkg::uvm_report_error("ASSERT FAILED", "u_state_regs_A", uvm_pkg::UVM_NONE, 227.25 "../src/lowrisc_ip_sha3_0.1/rtl/sha3.sv", 227, "", 1); 227.26 `else 227.27 $error("%0t: (%0s:%0d) [%m] [ASSERT FAILED] %0s", $time, `__FILE__, `__LINE__, 227.28 `PRIM_STRINGIFY(u_state_regs_A)); 227.29 `endif 227.30 end 227.31 `else 227.32 prim_sparse_fsm_flop #( 227.33 .StateEnumT(sha3_st_sparse_e), 227.34 .Width($bits(sha3_st_sparse_e)), 227.35 .ResetValue($bits(sha3_st_sparse_e)'(StIdle_sparse)), 227.36 .EnableAlertTriggerSVA(1) 227.37 ) u_state_regs ( 227.38 .clk_i ( `PRIM_FLOP_CLK ), 227.39 .rst_ni ( `PRIM_FLOP_RST ), 227.40 .state_i ( st_d ), 227.41 .state_o ( st ) 227.42 ); 227.43 `endif228 229 230 // Next State and Output Logic 231 // Mainly the FSM controls the input signal access 232 // StIdle: only start_i signal is allowed 233 // StAbsorb: only process_i signal is allowed 234 // StSqueeze: only run_i, done_i signal is allowed 235 236 always_comb begin 237 1/1 st_d = st; Tests: T1 T2 T3  238 239 // default output values 240 1/1 keccak_start = 1'b 0; Tests: T1 T2 T3  241 1/1 keccak_process = 1'b 0; Tests: T1 T2 T3  242 1/1 sw_keccak_run = 1'b 0; Tests: T1 T2 T3  243 1/1 keccak_done = prim_mubi_pkg::MuBi4False; Tests: T1 T2 T3  244 245 1/1 squeezing = 1'b 0; Tests: T1 T2 T3  246 247 1/1 state_valid = 1'b 0; Tests: T1 T2 T3  248 1/1 mux_sel = MuxGuard ; Tests: T1 T2 T3  249 250 1/1 sha3_state_error = 1'b 0; Tests: T1 T2 T3  251 252 1/1 unique case (st) Tests: T1 T2 T3  253 StIdle_sparse: begin 254 1/1 if (start_i) begin Tests: T1 T2 T3  255 1/1 st_d = StAbsorb_sparse; Tests: T1 T2 T3  256 257 1/1 keccak_start = 1'b 1; Tests: T1 T2 T3  258 end else begin 259 1/1 st_d = StIdle_sparse; Tests: T1 T2 T3  260 end 261 end 262 263 StAbsorb_sparse: begin 264 1/1 if (process_i && !processing) begin Tests: T1 T2 T3  265 1/1 st_d = StAbsorb_sparse; Tests: T1 T2 T4  266 267 1/1 keccak_process = 1'b 1; Tests: T1 T2 T4  268 1/1 end else if (prim_mubi_pkg::mubi4_test_true_strict(absorbed)) begin Tests: T1 T2 T3  269 1/1 st_d = StSqueeze_sparse; Tests: T1 T2 T4  270 end else begin 271 1/1 st_d = StAbsorb_sparse; Tests: T1 T2 T3  272 end 273 end 274 275 StSqueeze_sparse: begin 276 1/1 state_valid = 1'b 1; Tests: T1 T2 T4  277 1/1 mux_sel = MuxRelease; // Expose state to register interface Tests: T1 T2 T4  278 279 1/1 squeezing = 1'b 1; Tests: T1 T2 T4  280 281 1/1 if (run_i) begin Tests: T1 T2 T4  282 1/1 st_d = StManualRun_sparse; Tests: T15 T16 T29  283 284 1/1 sw_keccak_run = 1'b 1; Tests: T15 T16 T29  285 1/1 end else if (prim_mubi_pkg::mubi4_test_true_strict(done_i)) begin Tests: T1 T2 T4  286 1/1 st_d = StFlush_sparse; Tests: T1 T2 T4  287 288 1/1 keccak_done = done_i; Tests: T1 T2 T4  289 end else begin 290 1/1 st_d = StSqueeze_sparse; Tests: T1 T2 T13  291 end 292 end 293 294 StManualRun_sparse: begin 295 1/1 if (keccak_complete) begin Tests: T15 T16 T29  296 1/1 st_d = StSqueeze_sparse; Tests: T15 T16 T29  297 end else begin 298 1/1 st_d = StManualRun_sparse; Tests: T15 T16 T29  299 end 300 end 301 302 StFlush_sparse: begin 303 1/1 st_d = StIdle_sparse; Tests: T1 T2 T4  304 end 305 306 StTerminalError_sparse: begin 307 //this state is terminal 308 1/1 st_d = StTerminalError_sparse; Tests: T3 T5 T6  309 1/1 sha3_state_error = 1'b 1; Tests: T3 T5 T6  310 end 311 312 default: begin 313 st_d = StTerminalError_sparse; 314 sha3_state_error = 1'b 1; 315 end 316 endcase 317 318 // SEC_CM: FSM.GLOBAL_ESC, FSM.LOCAL_ESC 319 // Unconditionally jump into the terminal error state 320 // if the life cycle controller triggers an escalation. 321 1/1 if (lc_ctrl_pkg::lc_tx_test_true_loose(lc_escalate_en_i)) begin Tests: T1 T2 T3  322 1/1 st_d = StTerminalError_sparse; Tests: T3 T5 T6  323 end MISSING_ELSE 324 end 325 326 ////////////// 327 // Datapath // 328 ////////////// 329 330 // State --> Digest output 331 always_comb begin : state_guarded_mux 332 1/1 unique case (mux_sel) Tests: T1 T2 T3  333 1/1 MuxGuard: state_guarded = '{default: '0}; Tests: T1 T2 T3  334 1/1 MuxRelease: state_guarded = state; Tests: T1 T2 T4  335 default: state_guarded = '{default: '0}; // a valid, safe output 336 endcase 337 end 338 339 340 // Error Detecting 341 // ErrSha3SwControl: 342 // info[ 0]: start_i set 343 // info[ 1]: process_i set 344 // info[ 2]: run_i set 345 // info[ 3]: done_i set 346 // - Sw set process_i, run_i, done_i without start_i 347 348 always_comb begin 349 1/1 error_o = '{valid: 1'b0, code: ErrNone, info: '0}; Tests: T1 T2 T3  350 351 1/1 unique case (st) Tests: T1 T2 T3  352 StIdle_sparse: begin 353 1/1 if (process_i || run_i || Tests: T1 T2 T3  354 prim_mubi_pkg::mubi4_test_true_loose(done_i)) begin 355 1/1 error_o = '{ Tests: T36 T37 T38  356 valid: 1'b 1, 357 code: ErrSha3SwControl, 358 info: 24'({done_i, run_i, process_i, start_i}) 359 }; 360 end MISSING_ELSE 361 end 362 363 StAbsorb_sparse: begin 364 1/1 if (start_i || run_i || prim_mubi_pkg::mubi4_test_true_loose(done_i) Tests: T1 T2 T3  365 || (process_i && processing)) begin 366 1/1 error_o = '{ Tests: T36 T37 T38  367 valid: 1'b 1, 368 code: ErrSha3SwControl, 369 info: 24'({done_i, run_i, process_i, start_i}) 370 }; 371 end MISSING_ELSE 372 end 373 374 StSqueeze_sparse: begin 375 1/1 if (start_i || process_i) begin Tests: T1 T2 T4  376 0/1 ==> error_o = '{ 377 valid: 1'b 1, 378 code: ErrSha3SwControl, 379 info: 24'({done_i, run_i, process_i, start_i}) 380 }; 381 end MISSING_ELSE 382 end 383 384 StManualRun_sparse: begin 385 1/1 if (start_i || process_i || run_i || Tests: T15 T16 T29  386 prim_mubi_pkg::mubi4_test_true_loose(done_i)) begin 387 1/1 error_o = '{ Tests: T36 T37 T38  388 valid: 1'b 1, 389 code: ErrSha3SwControl, 390 info: 24'({done_i, run_i, process_i, start_i}) 391 }; 392 end MISSING_ELSE 393 end 394 395 StFlush_sparse: begin 396 1/1 if (start_i || process_i || run_i || Tests: T1 T2 T4  397 prim_mubi_pkg::mubi4_test_true_loose(done_i)) begin 398 0/1 ==> error_o = '{ 399 valid: 1'b 1, 400 code: ErrSha3SwControl, 401 info: 24'({done_i, run_i, process_i, start_i}) 402 }; 403 end MISSING_ELSE

Cond Coverage for Module : sha3
TotalCoveredPercent
Conditions272488.89
Logical272488.89
Non-Logical00
Event00

 LINE       138
 EXPRESSION (round_count_error | msg_count_error)
             --------1--------   -------2-------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT6,T10,T11
10CoveredT6,T10,T11

 LINE       144
 EXPRESSION (sha3_state_error | keccak_round_state_error | sha3pad_state_error)
             --------1-------   ------------2-----------   ---------3---------
-1--2--3-StatusTests
000CoveredT1,T2,T3
001CoveredT6,T10,T11
010CoveredT6,T10,T11
100CoveredT6,T10,T11

 LINE       173
 EXPRESSION ((sha3pad_keccak_run || sw_keccak_run) ? 1'b1 : (keccak_complete ? 1'b0 : keccak_run_req_q))
             ------------------1------------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T4

 LINE       173
 SUB-EXPRESSION (sha3pad_keccak_run || sw_keccak_run)
                 ---------1--------    ------2------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT15,T16,T29
10CoveredT1,T2,T4

 LINE       173
 SUB-EXPRESSION (keccak_complete ? 1'b0 : keccak_run_req_q)
                 -------1-------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T4

 LINE       178
 EXPRESSION (run_req_o & run_ack_i & ((~keccak_triggered_q)))
             ----1----   ----2----   -----------3-----------
-1--2--3-StatusTests
011CoveredT1,T2,T3
101Unreachable
110CoveredT1,T2,T4
111CoveredT1,T2,T4

 LINE       179
 EXPRESSION (keccak_run ? 1'b1 : (keccak_complete ? 1'b0 : keccak_triggered_q))
             -----1----
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T4

 LINE       179
 SUB-EXPRESSION (keccak_complete ? 1'b0 : keccak_triggered_q)
                 -------1-------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T4

 LINE       264
 EXPRESSION (process_i && ((!processing)))
             ----1----    -------2-------
-1--2-StatusTests
01CoveredT1,T2,T3
10Not Covered
11CoveredT1,T2,T4

 LINE       375
 EXPRESSION (start_i || process_i)
             ---1---    ----2----
-1--2-StatusTests
00CoveredT1,T2,T4
01Not Covered
10Not Covered

FSM Coverage for Module : sha3
Summary for FSM :: st
TotalCoveredPercent
States 6 6 100.00 (Not included in score)
Transitions 11 9 81.82
Sequences 0 0

State, Transition and Sequence Details for FSM :: st
statesLine No.CoveredTests
StAbsorb_sparse 255 Covered T1,T2,T3
StFlush_sparse 286 Covered T1,T2,T4
StIdle_sparse 259 Covered T1,T2,T3
StManualRun_sparse 282 Covered T15,T16,T29
StSqueeze_sparse 269 Covered T1,T2,T4
StTerminalError_sparse 308 Covered T3,T5,T6


transitionsLine No.CoveredTests
StAbsorb_sparse->StSqueeze_sparse 269 Covered T1,T2,T4
StAbsorb_sparse->StTerminalError_sparse 322 Covered T3,T5,T47
StFlush_sparse->StIdle_sparse 303 Covered T1,T2,T4
StFlush_sparse->StTerminalError_sparse 322 Not Covered
StIdle_sparse->StAbsorb_sparse 255 Covered T1,T2,T3
StIdle_sparse->StTerminalError_sparse 322 Covered T6,T10,T11
StManualRun_sparse->StSqueeze_sparse 296 Covered T15,T16,T29
StManualRun_sparse->StTerminalError_sparse 322 Not Covered
StSqueeze_sparse->StFlush_sparse 286 Covered T1,T2,T4
StSqueeze_sparse->StManualRun_sparse 282 Covered T15,T16,T29
StSqueeze_sparse->StTerminalError_sparse 322 Covered T63,T64



Branch Coverage for Module : sha3
Line No.TotalCoveredPercent
Branches 45 42 93.33
TERNARY 173 3 3 100.00
TERNARY 179 3 3 100.00
IF 184 2 2 100.00
IF 198 2 2 100.00
IF 207 4 4 100.00
IF 227 2 2 100.00
CASE 252 13 13 100.00
IF 321 2 2 100.00
CASE 332 3 2 66.67
CASE 351 11 9 81.82


173 assign keccak_run_req_d = 174 sha3pad_keccak_run || sw_keccak_run ? 1'b 1 : -1- ==> 175 keccak_complete ? 1'b 0 : keccak_run_req_q; -2- ==> ==>

Branches:
-1--2-StatusTests
1 - Covered T1,T2,T4
0 1 Covered T1,T2,T4
0 0 Covered T1,T2,T3


179 assign keccak_triggered_d = 180 keccak_run ? 1'b 1 : -1- ==> 181 keccak_complete ? 1'b 0 : keccak_triggered_q; -2- ==> ==>

Branches:
-1--2-StatusTests
1 - Covered T1,T2,T4
0 1 Covered T1,T2,T4
0 0 Covered T1,T2,T3


184 if (!rst_ni) begin -1- 185 keccak_run_req_q <= 1'b 0; ==> 186 keccak_triggered_q <= 1'b 0; 187 end else begin 188 keccak_run_req_q <= keccak_run_req_d; ==>

Branches:
-1-StatusTests
1 Covered T1,T2,T3
0 Covered T1,T2,T3


198 if (!rst_ni) absorbed_o <= prim_mubi_pkg::MuBi4False; -1- ==> 199 else absorbed_o <= absorbed; ==>

Branches:
-1-StatusTests
1 Covered T1,T2,T3
0 Covered T1,T2,T3


207 if (!rst_ni) processing <= 1'b 0; -1- ==> 208 else if (process_i) processing <= 1'b 1; -2- ==> 209 else if (prim_mubi_pkg::mubi4_test_true_strict(absorbed)) begin -3- 210 processing <= 1'b 0; ==> 211 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
1 - - Covered T1,T2,T3
0 1 - Covered T1,T2,T4
0 0 1 Covered T1,T2,T4
0 0 0 Covered T1,T2,T3


227 `PRIM_FLOP_SPARSE_FSM(u_state_regs, st_d, st, sha3_st_sparse_e, StIdle_sparse) -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T1,T2,T3
0 Covered T1,T2,T3


252 unique case (st) -1- 253 StIdle_sparse: begin 254 if (start_i) begin -2- 255 st_d = StAbsorb_sparse; ==> 256 257 keccak_start = 1'b 1; 258 end else begin 259 st_d = StIdle_sparse; ==> 260 end 261 end 262 263 StAbsorb_sparse: begin 264 if (process_i && !processing) begin -3- 265 st_d = StAbsorb_sparse; ==> 266 267 keccak_process = 1'b 1; 268 end else if (prim_mubi_pkg::mubi4_test_true_strict(absorbed)) begin -4- 269 st_d = StSqueeze_sparse; ==> 270 end else begin 271 st_d = StAbsorb_sparse; ==> 272 end 273 end 274 275 StSqueeze_sparse: begin 276 state_valid = 1'b 1; 277 mux_sel = MuxRelease; // Expose state to register interface 278 279 squeezing = 1'b 1; 280 281 if (run_i) begin -5- 282 st_d = StManualRun_sparse; ==> 283 284 sw_keccak_run = 1'b 1; 285 end else if (prim_mubi_pkg::mubi4_test_true_strict(done_i)) begin -6- 286 st_d = StFlush_sparse; ==> 287 288 keccak_done = done_i; 289 end else begin 290 st_d = StSqueeze_sparse; ==> 291 end 292 end 293 294 StManualRun_sparse: begin 295 if (keccak_complete) begin -7- 296 st_d = StSqueeze_sparse; ==> 297 end else begin 298 st_d = StManualRun_sparse; ==> 299 end 300 end 301 302 StFlush_sparse: begin 303 st_d = StIdle_sparse; ==> 304 end 305 306 StTerminalError_sparse: begin 307 //this state is terminal 308 st_d = StTerminalError_sparse; ==> 309 sha3_state_error = 1'b 1; 310 end 311 312 default: begin 313 st_d = StTerminalError_sparse; ==>

Branches:
-1--2--3--4--5--6--7-StatusTests
StIdle_sparse 1 - - - - - Covered T1,T2,T3
StIdle_sparse 0 - - - - - Covered T1,T2,T3
StAbsorb_sparse - 1 - - - - Covered T1,T2,T4
StAbsorb_sparse - 0 1 - - - Covered T1,T2,T4
StAbsorb_sparse - 0 0 - - - Covered T1,T2,T3
StSqueeze_sparse - - - 1 - - Covered T15,T16,T29
StSqueeze_sparse - - - 0 1 - Covered T1,T2,T4
StSqueeze_sparse - - - 0 0 - Covered T1,T2,T13
StManualRun_sparse - - - - - 1 Covered T15,T16,T29
StManualRun_sparse - - - - - 0 Covered T15,T16,T29
StFlush_sparse - - - - - - Covered T1,T2,T4
StTerminalError_sparse - - - - - - Covered T3,T5,T6
default - - - - - - Covered T6,T10,T11


321 if (lc_ctrl_pkg::lc_tx_test_true_loose(lc_escalate_en_i)) begin -1- 322 st_d = StTerminalError_sparse; ==> 323 end MISSING_ELSE ==>

Branches:
-1-StatusTests
1 Covered T3,T5,T6
0 Covered T1,T2,T3


332 unique case (mux_sel) -1- 333 MuxGuard: state_guarded = '{default: '0}; ==> 334 MuxRelease: state_guarded = state; ==> 335 default: state_guarded = '{default: '0}; // a valid, safe output ==>

Branches:
-1-StatusTests
MuxGuard Covered T1,T2,T3
MuxRelease Covered T1,T2,T4
default Not Covered


351 unique case (st) -1- 352 StIdle_sparse: begin 353 if (process_i || run_i || -2- 354 prim_mubi_pkg::mubi4_test_true_loose(done_i)) begin 355 error_o = '{ ==> 356 valid: 1'b 1, 357 code: ErrSha3SwControl, 358 info: 24'({done_i, run_i, process_i, start_i}) 359 }; 360 end MISSING_ELSE ==> 361 end 362 363 StAbsorb_sparse: begin 364 if (start_i || run_i || prim_mubi_pkg::mubi4_test_true_loose(done_i) -3- 365 || (process_i && processing)) begin 366 error_o = '{ ==> 367 valid: 1'b 1, 368 code: ErrSha3SwControl, 369 info: 24'({done_i, run_i, process_i, start_i}) 370 }; 371 end MISSING_ELSE ==> 372 end 373 374 StSqueeze_sparse: begin 375 if (start_i || process_i) begin -4- 376 error_o = '{ ==> 377 valid: 1'b 1, 378 code: ErrSha3SwControl, 379 info: 24'({done_i, run_i, process_i, start_i}) 380 }; 381 end MISSING_ELSE ==> 382 end 383 384 StManualRun_sparse: begin 385 if (start_i || process_i || run_i || -5- 386 prim_mubi_pkg::mubi4_test_true_loose(done_i)) begin 387 error_o = '{ ==> 388 valid: 1'b 1, 389 code: ErrSha3SwControl, 390 info: 24'({done_i, run_i, process_i, start_i}) 391 }; 392 end MISSING_ELSE ==> 393 end 394 395 StFlush_sparse: begin 396 if (start_i || process_i || run_i || -6- 397 prim_mubi_pkg::mubi4_test_true_loose(done_i)) begin 398 error_o = '{ ==> 399 valid: 1'b 1, 400 code: ErrSha3SwControl, 401 info: 24'({done_i, run_i, process_i, start_i}) 402 }; 403 end MISSING_ELSE ==> 404 end 405 406 default: begin ==>

Branches:
-1--2--3--4--5--6-StatusTests
StIdle_sparse 1 - - - - Covered T36,T37,T38
StIdle_sparse 0 - - - - Covered T1,T2,T3
StAbsorb_sparse - 1 - - - Covered T36,T37,T38
StAbsorb_sparse - 0 - - - Covered T1,T2,T3
StSqueeze_sparse - - 1 - - Not Covered
StSqueeze_sparse - - 0 - - Covered T1,T2,T4
StManualRun_sparse - - - 1 - Covered T36,T37,T38
StManualRun_sparse - - - 0 - Covered T15,T16,T29
StFlush_sparse - - - - 1 Not Covered
StFlush_sparse - - - - 0 Covered T1,T2,T4
default - - - - - Covered T3,T5,T6


Assert Coverage for Module : sha3
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 7 7 100.00 7 100.00
Cover properties 0 0 0
Cover sequences 0 0 0
Total 7 7 100.00 7 100.00




Assertion Details

NameAttemptsReal SuccessesFailuresIncomplete
ErrDetection_A 545688588 7895966 0 0
FsmKnown_A 545499022 545366807 0 0
KeccakIdleWhenNoRunHs_A 545688588 20033381 0 0
MuxSelKnown_A 545688588 545550700 0 0
SwRunInSqueezing_a 545688588 121306 0 0
gen_chk_digest_unmasked.StateZeroInvalid_A 545688588 455526803 0 0
u_state_regs_A 545688588 545550700 0 0


ErrDetection_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 545688588 7895966 0 0
T21 88329 0 0 0
T23 621971 0 0 0
T24 500493 0 0 0
T25 481366 0 0 0
T36 630649 370071 0 0
T37 892084 537830 0 0
T38 0 374202 0 0
T47 3764 0 0 0
T49 369932 0 0 0
T50 268931 0 0 0
T82 0 283639 0 0
T83 0 144777 0 0
T84 0 12106 0 0
T85 0 311687 0 0
T86 0 477882 0 0
T87 0 256020 0 0
T88 0 674725 0 0
T89 485099 0 0 0

FsmKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 545499022 545366807 0 0
T1 5551 5451 0 0
T2 7522 7455 0 0
T3 2198 2037 0 0
T4 30536 30445 0 0
T12 100742 100689 0 0
T13 26152 26054 0 0
T14 25189 25135 0 0
T15 22379 22306 0 0
T16 39318 39112 0 0
T19 890 809 0 0

KeccakIdleWhenNoRunHs_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 545688588 20033381 0 0
T1 5551 240 0 0
T2 7522 240 0 0
T3 2198 0 0 0
T4 30536 288 0 0
T12 100742 3360 0 0
T13 26152 1776 0 0
T14 25189 840 0 0
T15 22379 1704 0 0
T16 39318 2592 0 0
T17 0 264 0 0
T18 0 264 0 0
T19 890 0 0 0

MuxSelKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 545688588 545550700 0 0
T1 5551 5451 0 0
T2 7522 7455 0 0
T3 2198 2037 0 0
T4 30536 30445 0 0
T12 100742 100689 0 0
T13 26152 26054 0 0
T14 25189 25135 0 0
T15 22379 22306 0 0
T16 39318 39112 0 0
T19 890 809 0 0

SwRunInSqueezing_a
NameAttemptsReal SuccessesFailuresIncomplete
Total 545688588 121306 0 0
T15 22379 28 0 0
T16 39318 45 0 0
T17 9402 0 0 0
T18 2907 0 0 0
T20 135961 0 0 0
T22 72312 33 0 0
T29 102078 54 0 0
T30 0 156 0 0
T32 0 39 0 0
T35 0 49 0 0
T36 0 183 0 0
T49 0 294 0 0
T56 0 45 0 0
T62 243298 0 0 0
T90 27405 0 0 0
T91 39939 0 0 0

gen_chk_digest_unmasked.StateZeroInvalid_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 545688588 455526803 0 0
T1 5551 4004 0 0
T2 7522 5402 0 0
T3 2198 2037 0 0
T4 30536 30441 0 0
T12 100742 100663 0 0
T13 26152 11820 0 0
T14 25189 15383 0 0
T15 22379 15499 0 0
T16 39318 28817 0 0
T19 890 809 0 0

u_state_regs_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 545688588 545550700 0 0
T1 5551 5451 0 0
T2 7522 7455 0 0
T3 2198 2037 0 0
T4 30536 30445 0 0
T12 100742 100689 0 0
T13 26152 26054 0 0
T14 25189 25135 0 0
T15 22379 22306 0 0
T16 39318 39112 0 0
T19 890 809 0 0

Line Coverage for Instance : tb.dut.u_sha3
Line No.TotalCoveredPercent
TOTAL828097.56
CONT_ASSIGN13811100.00
CONT_ASSIGN14411100.00
CONT_ASSIGN14811100.00
CONT_ASSIGN17211100.00
CONT_ASSIGN17311100.00
CONT_ASSIGN17811100.00
CONT_ASSIGN17911100.00
ALWAYS18455100.00
ALWAYS19833100.00
CONT_ASSIGN20311100.00
ALWAYS20766100.00
CONT_ASSIGN21411100.00
CONT_ASSIGN21711100.00
CONT_ASSIGN21811100.00
CONT_ASSIGN22011100.00
ALWAYS22733100.00
ALWAYS2373838100.00
ALWAYS33233100.00
ALWAYS349121083.33

137 logic round_count_error, msg_count_error; 138 1/1 assign count_error_o = round_count_error | msg_count_error; Tests: T1 T2 T3  139 140 logic sha3_state_error; 141 logic keccak_round_state_error; 142 logic sha3pad_state_error; 143 144 1/1 assign sparse_fsm_error_o = sha3_state_error | keccak_round_state_error | sha3pad_state_error; Tests: T1 T2 T3  145 146 // Keccak rst_storage is asserted unexpectedly 147 logic keccak_storage_rst_error; 148 1/1 assign keccak_storage_rst_error_o = keccak_storage_rst_error; Tests: T1 T2 T3  149 150 ///////////////// 151 // Connections // 152 ///////////////// 153 154 logic keccak_valid; 155 logic [KeccakMsgAddrW-1:0] keccak_addr; 156 logic [MsgWidth-1:0] keccak_data [Share]; 157 logic keccak_ready; 158 159 // Keccak round run signal can be controlled by sha3pad and also by software 160 // after all message feeding is done. it is mainly used for sponge squeezing 161 // operation after absorbing is completed when output length is longer than 162 // the block size. 163 logic keccak_run, sha3pad_keccak_run, sw_keccak_run; 164 logic keccak_run_req_d, keccak_run_req_q; 165 logic keccak_triggered_d, keccak_triggered_q; 166 logic keccak_complete; 167 168 // Announce that we want to run the Keccak core and tell other blocks to go 169 // quiet. Keep holding the REQ until the Keccak core is done with the 170 // processing. The keccak_complete signal is received once the Keccak core 171 // is back in the Idle state and again susceptible to keccak_run. 172 1/1 assign run_req_o = keccak_run_req_d; Tests: T1 T2 T3  173 1/1 assign keccak_run_req_d = Tests: T1 T2 T3  174 sha3pad_keccak_run || sw_keccak_run ? 1'b 1 : 175 keccak_complete ? 1'b 0 : keccak_run_req_q; 176 177 // Trigger the Keccak engine with a single pulse upon receiving the ACK. 178 1/1 assign keccak_run = run_req_o & run_ack_i & ~keccak_triggered_q; Tests: T1 T2 T3  179 1/1 assign keccak_triggered_d = Tests: T1 T2 T3  180 keccak_run ? 1'b 1 : 181 keccak_complete ? 1'b 0 : keccak_triggered_q; 182 183 always_ff @(posedge clk_i or negedge rst_ni) begin 184 1/1 if (!rst_ni) begin Tests: T1 T2 T3  185 1/1 keccak_run_req_q <= 1'b 0; Tests: T1 T2 T3  186 1/1 keccak_triggered_q <= 1'b 0; Tests: T1 T2 T3  187 end else begin 188 1/1 keccak_run_req_q <= keccak_run_req_d; Tests: T1 T2 T3  189 1/1 keccak_triggered_q <= keccak_triggered_d; Tests: T1 T2 T3  190 end 191 end 192 193 // Absorb pulse output : used to generate interrupts 194 // Latch absorbed signal as kmac_keymgr asserts `CmdDone` when it sees 195 // `absorbed` signal. When this signal goes out, the state is still in 196 // `StAbsorb`. Next state is `StSqueeze`. 197 always_ff @(posedge clk_i or negedge rst_ni) begin 198 2/2 if (!rst_ni) absorbed_o <= prim_mubi_pkg::MuBi4False; Tests: T1 T2 T3  | T1 T2 T3  199 1/1 else absorbed_o <= absorbed; Tests: T1 T2 T3  200 end 201 202 // Squeezing output 203 1/1 assign squeezing_o = squeezing; Tests: T1 T2 T3  204 205 // processing 206 always_ff @(posedge clk_i or negedge rst_ni) begin 207 2/2 if (!rst_ni) processing <= 1'b 0; Tests: T1 T2 T3  | T1 T2 T3  208 2/2 else if (process_i) processing <= 1'b 1; Tests: T1 T2 T3  | T1 T2 T4  209 1/1 else if (prim_mubi_pkg::mubi4_test_true_strict(absorbed)) begin Tests: T1 T2 T3  210 1/1 processing <= 1'b 0; Tests: T1 T2 T4  211 end MISSING_ELSE 212 end 213 214 1/1 assign block_processed_o = keccak_complete; Tests: T1 T2 T3  215 216 // State connection 217 1/1 assign state_valid_o = state_valid; Tests: T1 T2 T3  218 1/1 assign state_o = state_guarded; Tests: T1 T2 T3  219 220 1/1 assign sha3_fsm_o = sparse2logic(st); Tests: T1 T2 T3  221 222 /////////////////// 223 // State Machine // 224 /////////////////// 225 226 // State Register 227 3/3 `PRIM_FLOP_SPARSE_FSM(u_state_regs, st_d, st, sha3_st_sparse_e, StIdle_sparse) Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3 
PRIM_FLOP_SPARSE_FSM(u_state_regs, st_d, st, sha3_st_sparse_e, StIdle_sparse): 227.1 `ifdef SIMULATION 227.2 prim_sparse_fsm_flop #( 227.3 .StateEnumT(sha3_st_sparse_e), 227.4 .Width($bits(sha3_st_sparse_e)), 227.5 .ResetValue($bits(sha3_st_sparse_e)'(StIdle_sparse)), 227.6 .EnableAlertTriggerSVA(1), 227.7 .CustomForceName("st") 227.8 ) u_state_regs ( 227.9 .clk_i ( clk_i ), 227.10 .rst_ni ( rst_ni ), 227.11 .state_i ( st_d ), 227.12 .state_o ( ) 227.13 ); 227.14 always_ff @(posedge clk_i or negedge rst_ni) begin 227.15 1/1 if (!rst_ni) begin Tests: T1 T2 T3  227.16 1/1 st <= StIdle_sparse; Tests: T1 T2 T3  227.17 end else begin 227.18 1/1 st <= st_d; Tests: T1 T2 T3  227.19 end 227.20 end 227.21 u_state_regs_A: assert property (@(posedge clk_i) disable iff ((!rst_ni) !== '0) (st === u_state_regs.state_o)) 227.22 else begin 227.23 `ifdef UVM 227.24 uvm_pkg::uvm_report_error("ASSERT FAILED", "u_state_regs_A", uvm_pkg::UVM_NONE, 227.25 "../src/lowrisc_ip_sha3_0.1/rtl/sha3.sv", 227, "", 1); 227.26 `else 227.27 $error("%0t: (%0s:%0d) [%m] [ASSERT FAILED] %0s", $time, `__FILE__, `__LINE__, 227.28 `PRIM_STRINGIFY(u_state_regs_A)); 227.29 `endif 227.30 end 227.31 `else 227.32 prim_sparse_fsm_flop #( 227.33 .StateEnumT(sha3_st_sparse_e), 227.34 .Width($bits(sha3_st_sparse_e)), 227.35 .ResetValue($bits(sha3_st_sparse_e)'(StIdle_sparse)), 227.36 .EnableAlertTriggerSVA(1) 227.37 ) u_state_regs ( 227.38 .clk_i ( `PRIM_FLOP_CLK ), 227.39 .rst_ni ( `PRIM_FLOP_RST ), 227.40 .state_i ( st_d ), 227.41 .state_o ( st ) 227.42 ); 227.43 `endif228 229 230 // Next State and Output Logic 231 // Mainly the FSM controls the input signal access 232 // StIdle: only start_i signal is allowed 233 // StAbsorb: only process_i signal is allowed 234 // StSqueeze: only run_i, done_i signal is allowed 235 236 always_comb begin 237 1/1 st_d = st; Tests: T1 T2 T3  238 239 // default output values 240 1/1 keccak_start = 1'b 0; Tests: T1 T2 T3  241 1/1 keccak_process = 1'b 0; Tests: T1 T2 T3  242 1/1 sw_keccak_run = 1'b 0; Tests: T1 T2 T3  243 1/1 keccak_done = prim_mubi_pkg::MuBi4False; Tests: T1 T2 T3  244 245 1/1 squeezing = 1'b 0; Tests: T1 T2 T3  246 247 1/1 state_valid = 1'b 0; Tests: T1 T2 T3  248 1/1 mux_sel = MuxGuard ; Tests: T1 T2 T3  249 250 1/1 sha3_state_error = 1'b 0; Tests: T1 T2 T3  251 252 1/1 unique case (st) Tests: T1 T2 T3  253 StIdle_sparse: begin 254 1/1 if (start_i) begin Tests: T1 T2 T3  255 1/1 st_d = StAbsorb_sparse; Tests: T1 T2 T3  256 257 1/1 keccak_start = 1'b 1; Tests: T1 T2 T3  258 end else begin 259 1/1 st_d = StIdle_sparse; Tests: T1 T2 T3  260 end 261 end 262 263 StAbsorb_sparse: begin 264 1/1 if (process_i && !processing) begin Tests: T1 T2 T3  265 1/1 st_d = StAbsorb_sparse; Tests: T1 T2 T4  266 267 1/1 keccak_process = 1'b 1; Tests: T1 T2 T4  268 1/1 end else if (prim_mubi_pkg::mubi4_test_true_strict(absorbed)) begin Tests: T1 T2 T3  269 1/1 st_d = StSqueeze_sparse; Tests: T1 T2 T4  270 end else begin 271 1/1 st_d = StAbsorb_sparse; Tests: T1 T2 T3  272 end 273 end 274 275 StSqueeze_sparse: begin 276 1/1 state_valid = 1'b 1; Tests: T1 T2 T4  277 1/1 mux_sel = MuxRelease; // Expose state to register interface Tests: T1 T2 T4  278 279 1/1 squeezing = 1'b 1; Tests: T1 T2 T4  280 281 1/1 if (run_i) begin Tests: T1 T2 T4  282 1/1 st_d = StManualRun_sparse; Tests: T15 T16 T29  283 284 1/1 sw_keccak_run = 1'b 1; Tests: T15 T16 T29  285 1/1 end else if (prim_mubi_pkg::mubi4_test_true_strict(done_i)) begin Tests: T1 T2 T4  286 1/1 st_d = StFlush_sparse; Tests: T1 T2 T4  287 288 1/1 keccak_done = done_i; Tests: T1 T2 T4  289 end else begin 290 1/1 st_d = StSqueeze_sparse; Tests: T1 T2 T13  291 end 292 end 293 294 StManualRun_sparse: begin 295 1/1 if (keccak_complete) begin Tests: T15 T16 T29  296 1/1 st_d = StSqueeze_sparse; Tests: T15 T16 T29  297 end else begin 298 1/1 st_d = StManualRun_sparse; Tests: T15 T16 T29  299 end 300 end 301 302 StFlush_sparse: begin 303 1/1 st_d = StIdle_sparse; Tests: T1 T2 T4  304 end 305 306 StTerminalError_sparse: begin 307 //this state is terminal 308 1/1 st_d = StTerminalError_sparse; Tests: T3 T5 T6  309 1/1 sha3_state_error = 1'b 1; Tests: T3 T5 T6  310 end 311 312 default: begin 313 st_d = StTerminalError_sparse; 314 sha3_state_error = 1'b 1; 315 end 316 endcase 317 318 // SEC_CM: FSM.GLOBAL_ESC, FSM.LOCAL_ESC 319 // Unconditionally jump into the terminal error state 320 // if the life cycle controller triggers an escalation. 321 1/1 if (lc_ctrl_pkg::lc_tx_test_true_loose(lc_escalate_en_i)) begin Tests: T1 T2 T3  322 1/1 st_d = StTerminalError_sparse; Tests: T3 T5 T6  323 end MISSING_ELSE 324 end 325 326 ////////////// 327 // Datapath // 328 ////////////// 329 330 // State --> Digest output 331 always_comb begin : state_guarded_mux 332 1/1 unique case (mux_sel) Tests: T1 T2 T3  333 1/1 MuxGuard: state_guarded = '{default: '0}; Tests: T1 T2 T3  334 1/1 MuxRelease: state_guarded = state; Tests: T1 T2 T4  335 default: state_guarded = '{default: '0}; // a valid, safe output 336 endcase 337 end 338 339 340 // Error Detecting 341 // ErrSha3SwControl: 342 // info[ 0]: start_i set 343 // info[ 1]: process_i set 344 // info[ 2]: run_i set 345 // info[ 3]: done_i set 346 // - Sw set process_i, run_i, done_i without start_i 347 348 always_comb begin 349 1/1 error_o = '{valid: 1'b0, code: ErrNone, info: '0}; Tests: T1 T2 T3  350 351 1/1 unique case (st) Tests: T1 T2 T3  352 StIdle_sparse: begin 353 1/1 if (process_i || run_i || Tests: T1 T2 T3  354 prim_mubi_pkg::mubi4_test_true_loose(done_i)) begin 355 1/1 error_o = '{ Tests: T36 T37 T38  356 valid: 1'b 1, 357 code: ErrSha3SwControl, 358 info: 24'({done_i, run_i, process_i, start_i}) 359 }; 360 end MISSING_ELSE 361 end 362 363 StAbsorb_sparse: begin 364 1/1 if (start_i || run_i || prim_mubi_pkg::mubi4_test_true_loose(done_i) Tests: T1 T2 T3  365 || (process_i && processing)) begin 366 1/1 error_o = '{ Tests: T36 T37 T38  367 valid: 1'b 1, 368 code: ErrSha3SwControl, 369 info: 24'({done_i, run_i, process_i, start_i}) 370 }; 371 end MISSING_ELSE 372 end 373 374 StSqueeze_sparse: begin 375 1/1 if (start_i || process_i) begin Tests: T1 T2 T4  376 0/1 ==> error_o = '{ 377 valid: 1'b 1, 378 code: ErrSha3SwControl, 379 info: 24'({done_i, run_i, process_i, start_i}) 380 }; 381 end MISSING_ELSE 382 end 383 384 StManualRun_sparse: begin 385 1/1 if (start_i || process_i || run_i || Tests: T15 T16 T29  386 prim_mubi_pkg::mubi4_test_true_loose(done_i)) begin 387 1/1 error_o = '{ Tests: T36 T37 T38  388 valid: 1'b 1, 389 code: ErrSha3SwControl, 390 info: 24'({done_i, run_i, process_i, start_i}) 391 }; 392 end MISSING_ELSE 393 end 394 395 StFlush_sparse: begin 396 1/1 if (start_i || process_i || run_i || Tests: T1 T2 T4  397 prim_mubi_pkg::mubi4_test_true_loose(done_i)) begin 398 0/1 ==> error_o = '{ 399 valid: 1'b 1, 400 code: ErrSha3SwControl, 401 info: 24'({done_i, run_i, process_i, start_i}) 402 }; 403 end MISSING_ELSE

Cond Coverage for Instance : tb.dut.u_sha3
TotalCoveredPercent
Conditions272488.89
Logical272488.89
Non-Logical00
Event00

 LINE       138
 EXPRESSION (round_count_error | msg_count_error)
             --------1--------   -------2-------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT6,T10,T11
10CoveredT6,T10,T11

 LINE       144
 EXPRESSION (sha3_state_error | keccak_round_state_error | sha3pad_state_error)
             --------1-------   ------------2-----------   ---------3---------
-1--2--3-StatusTests
000CoveredT1,T2,T3
001CoveredT6,T10,T11
010CoveredT6,T10,T11
100CoveredT6,T10,T11

 LINE       173
 EXPRESSION ((sha3pad_keccak_run || sw_keccak_run) ? 1'b1 : (keccak_complete ? 1'b0 : keccak_run_req_q))
             ------------------1------------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T4

 LINE       173
 SUB-EXPRESSION (sha3pad_keccak_run || sw_keccak_run)
                 ---------1--------    ------2------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT15,T16,T29
10CoveredT1,T2,T4

 LINE       173
 SUB-EXPRESSION (keccak_complete ? 1'b0 : keccak_run_req_q)
                 -------1-------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T4

 LINE       178
 EXPRESSION (run_req_o & run_ack_i & ((~keccak_triggered_q)))
             ----1----   ----2----   -----------3-----------
-1--2--3-StatusTests
011CoveredT1,T2,T3
101Unreachable
110CoveredT1,T2,T4
111CoveredT1,T2,T4

 LINE       179
 EXPRESSION (keccak_run ? 1'b1 : (keccak_complete ? 1'b0 : keccak_triggered_q))
             -----1----
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T4

 LINE       179
 SUB-EXPRESSION (keccak_complete ? 1'b0 : keccak_triggered_q)
                 -------1-------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T4

 LINE       264
 EXPRESSION (process_i && ((!processing)))
             ----1----    -------2-------
-1--2-StatusTests
01CoveredT1,T2,T3
10Not Covered
11CoveredT1,T2,T4

 LINE       375
 EXPRESSION (start_i || process_i)
             ---1---    ----2----
-1--2-StatusTests
00CoveredT1,T2,T4
01Not Covered
10Not Covered

FSM Coverage for Instance : tb.dut.u_sha3
Summary for FSM :: st
TotalCoveredPercent
States 6 6 100.00 (Not included in score)
Transitions 9 9 100.00
Sequences 0 0

State, Transition and Sequence Details for FSM :: st
statesLine No.CoveredTests
StAbsorb_sparse 255 Covered T1,T2,T3
StFlush_sparse 286 Covered T1,T2,T4
StIdle_sparse 259 Covered T1,T2,T3
StManualRun_sparse 282 Covered T15,T16,T29
StSqueeze_sparse 269 Covered T1,T2,T4
StTerminalError_sparse 308 Covered T3,T5,T6


transitionsLine No.CoveredTestsExclude Annotation
StAbsorb_sparse->StSqueeze_sparse 269 Covered T1,T2,T4
StAbsorb_sparse->StTerminalError_sparse 322 Covered T3,T5,T47
StFlush_sparse->StIdle_sparse 303 Covered T1,T2,T4
StFlush_sparse->StTerminalError_sparse 322 Excluded [LOW_RISK] The transition from any state to error_terminal state is fully verified in FPV.
StIdle_sparse->StAbsorb_sparse 255 Covered T1,T2,T3
StIdle_sparse->StTerminalError_sparse 322 Covered T6,T10,T11
StManualRun_sparse->StSqueeze_sparse 296 Covered T15,T16,T29
StManualRun_sparse->StTerminalError_sparse 322 Excluded [LOW_RISK] The transition from any state to error_terminal state is fully verified in FPV.
StSqueeze_sparse->StFlush_sparse 286 Covered T1,T2,T4
StSqueeze_sparse->StManualRun_sparse 282 Covered T15,T16,T29
StSqueeze_sparse->StTerminalError_sparse 322 Covered T63,T64



Branch Coverage for Instance : tb.dut.u_sha3
Line No.TotalCoveredPercent
Branches 45 42 93.33
TERNARY 173 3 3 100.00
TERNARY 179 3 3 100.00
IF 184 2 2 100.00
IF 198 2 2 100.00
IF 207 4 4 100.00
IF 227 2 2 100.00
CASE 252 13 13 100.00
IF 321 2 2 100.00
CASE 332 3 2 66.67
CASE 351 11 9 81.82


173 assign keccak_run_req_d = 174 sha3pad_keccak_run || sw_keccak_run ? 1'b 1 : -1- ==> 175 keccak_complete ? 1'b 0 : keccak_run_req_q; -2- ==> ==>

Branches:
-1--2-StatusTests
1 - Covered T1,T2,T4
0 1 Covered T1,T2,T4
0 0 Covered T1,T2,T3


179 assign keccak_triggered_d = 180 keccak_run ? 1'b 1 : -1- ==> 181 keccak_complete ? 1'b 0 : keccak_triggered_q; -2- ==> ==>

Branches:
-1--2-StatusTests
1 - Covered T1,T2,T4
0 1 Covered T1,T2,T4
0 0 Covered T1,T2,T3


184 if (!rst_ni) begin -1- 185 keccak_run_req_q <= 1'b 0; ==> 186 keccak_triggered_q <= 1'b 0; 187 end else begin 188 keccak_run_req_q <= keccak_run_req_d; ==>

Branches:
-1-StatusTests
1 Covered T1,T2,T3
0 Covered T1,T2,T3


198 if (!rst_ni) absorbed_o <= prim_mubi_pkg::MuBi4False; -1- ==> 199 else absorbed_o <= absorbed; ==>

Branches:
-1-StatusTests
1 Covered T1,T2,T3
0 Covered T1,T2,T3


207 if (!rst_ni) processing <= 1'b 0; -1- ==> 208 else if (process_i) processing <= 1'b 1; -2- ==> 209 else if (prim_mubi_pkg::mubi4_test_true_strict(absorbed)) begin -3- 210 processing <= 1'b 0; ==> 211 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
1 - - Covered T1,T2,T3
0 1 - Covered T1,T2,T4
0 0 1 Covered T1,T2,T4
0 0 0 Covered T1,T2,T3


227 `PRIM_FLOP_SPARSE_FSM(u_state_regs, st_d, st, sha3_st_sparse_e, StIdle_sparse) -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T1,T2,T3
0 Covered T1,T2,T3


252 unique case (st) -1- 253 StIdle_sparse: begin 254 if (start_i) begin -2- 255 st_d = StAbsorb_sparse; ==> 256 257 keccak_start = 1'b 1; 258 end else begin 259 st_d = StIdle_sparse; ==> 260 end 261 end 262 263 StAbsorb_sparse: begin 264 if (process_i && !processing) begin -3- 265 st_d = StAbsorb_sparse; ==> 266 267 keccak_process = 1'b 1; 268 end else if (prim_mubi_pkg::mubi4_test_true_strict(absorbed)) begin -4- 269 st_d = StSqueeze_sparse; ==> 270 end else begin 271 st_d = StAbsorb_sparse; ==> 272 end 273 end 274 275 StSqueeze_sparse: begin 276 state_valid = 1'b 1; 277 mux_sel = MuxRelease; // Expose state to register interface 278 279 squeezing = 1'b 1; 280 281 if (run_i) begin -5- 282 st_d = StManualRun_sparse; ==> 283 284 sw_keccak_run = 1'b 1; 285 end else if (prim_mubi_pkg::mubi4_test_true_strict(done_i)) begin -6- 286 st_d = StFlush_sparse; ==> 287 288 keccak_done = done_i; 289 end else begin 290 st_d = StSqueeze_sparse; ==> 291 end 292 end 293 294 StManualRun_sparse: begin 295 if (keccak_complete) begin -7- 296 st_d = StSqueeze_sparse; ==> 297 end else begin 298 st_d = StManualRun_sparse; ==> 299 end 300 end 301 302 StFlush_sparse: begin 303 st_d = StIdle_sparse; ==> 304 end 305 306 StTerminalError_sparse: begin 307 //this state is terminal 308 st_d = StTerminalError_sparse; ==> 309 sha3_state_error = 1'b 1; 310 end 311 312 default: begin 313 st_d = StTerminalError_sparse; ==>

Branches:
-1--2--3--4--5--6--7-StatusTests
StIdle_sparse 1 - - - - - Covered T1,T2,T3
StIdle_sparse 0 - - - - - Covered T1,T2,T3
StAbsorb_sparse - 1 - - - - Covered T1,T2,T4
StAbsorb_sparse - 0 1 - - - Covered T1,T2,T4
StAbsorb_sparse - 0 0 - - - Covered T1,T2,T3
StSqueeze_sparse - - - 1 - - Covered T15,T16,T29
StSqueeze_sparse - - - 0 1 - Covered T1,T2,T4
StSqueeze_sparse - - - 0 0 - Covered T1,T2,T13
StManualRun_sparse - - - - - 1 Covered T15,T16,T29
StManualRun_sparse - - - - - 0 Covered T15,T16,T29
StFlush_sparse - - - - - - Covered T1,T2,T4
StTerminalError_sparse - - - - - - Covered T3,T5,T6
default - - - - - - Covered T6,T10,T11


321 if (lc_ctrl_pkg::lc_tx_test_true_loose(lc_escalate_en_i)) begin -1- 322 st_d = StTerminalError_sparse; ==> 323 end MISSING_ELSE ==>

Branches:
-1-StatusTests
1 Covered T3,T5,T6
0 Covered T1,T2,T3


332 unique case (mux_sel) -1- 333 MuxGuard: state_guarded = '{default: '0}; ==> 334 MuxRelease: state_guarded = state; ==> 335 default: state_guarded = '{default: '0}; // a valid, safe output ==>

Branches:
-1-StatusTests
MuxGuard Covered T1,T2,T3
MuxRelease Covered T1,T2,T4
default Not Covered


351 unique case (st) -1- 352 StIdle_sparse: begin 353 if (process_i || run_i || -2- 354 prim_mubi_pkg::mubi4_test_true_loose(done_i)) begin 355 error_o = '{ ==> 356 valid: 1'b 1, 357 code: ErrSha3SwControl, 358 info: 24'({done_i, run_i, process_i, start_i}) 359 }; 360 end MISSING_ELSE ==> 361 end 362 363 StAbsorb_sparse: begin 364 if (start_i || run_i || prim_mubi_pkg::mubi4_test_true_loose(done_i) -3- 365 || (process_i && processing)) begin 366 error_o = '{ ==> 367 valid: 1'b 1, 368 code: ErrSha3SwControl, 369 info: 24'({done_i, run_i, process_i, start_i}) 370 }; 371 end MISSING_ELSE ==> 372 end 373 374 StSqueeze_sparse: begin 375 if (start_i || process_i) begin -4- 376 error_o = '{ ==> 377 valid: 1'b 1, 378 code: ErrSha3SwControl, 379 info: 24'({done_i, run_i, process_i, start_i}) 380 }; 381 end MISSING_ELSE ==> 382 end 383 384 StManualRun_sparse: begin 385 if (start_i || process_i || run_i || -5- 386 prim_mubi_pkg::mubi4_test_true_loose(done_i)) begin 387 error_o = '{ ==> 388 valid: 1'b 1, 389 code: ErrSha3SwControl, 390 info: 24'({done_i, run_i, process_i, start_i}) 391 }; 392 end MISSING_ELSE ==> 393 end 394 395 StFlush_sparse: begin 396 if (start_i || process_i || run_i || -6- 397 prim_mubi_pkg::mubi4_test_true_loose(done_i)) begin 398 error_o = '{ ==> 399 valid: 1'b 1, 400 code: ErrSha3SwControl, 401 info: 24'({done_i, run_i, process_i, start_i}) 402 }; 403 end MISSING_ELSE ==> 404 end 405 406 default: begin ==>

Branches:
-1--2--3--4--5--6-StatusTests
StIdle_sparse 1 - - - - Covered T36,T37,T38
StIdle_sparse 0 - - - - Covered T1,T2,T3
StAbsorb_sparse - 1 - - - Covered T36,T37,T38
StAbsorb_sparse - 0 - - - Covered T1,T2,T3
StSqueeze_sparse - - 1 - - Not Covered
StSqueeze_sparse - - 0 - - Covered T1,T2,T4
StManualRun_sparse - - - 1 - Covered T36,T37,T38
StManualRun_sparse - - - 0 - Covered T15,T16,T29
StFlush_sparse - - - - 1 Not Covered
StFlush_sparse - - - - 0 Covered T1,T2,T4
default - - - - - Covered T3,T5,T6


Assert Coverage for Instance : tb.dut.u_sha3
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 7 7 100.00 7 100.00
Cover properties 0 0 0
Cover sequences 0 0 0
Total 7 7 100.00 7 100.00




Assertion Details

NameAttemptsReal SuccessesFailuresIncomplete
ErrDetection_A 545688588 7895966 0 0
FsmKnown_A 545499022 545366807 0 0
KeccakIdleWhenNoRunHs_A 545688588 20033381 0 0
MuxSelKnown_A 545688588 545550700 0 0
SwRunInSqueezing_a 545688588 121306 0 0
gen_chk_digest_unmasked.StateZeroInvalid_A 545688588 455526803 0 0
u_state_regs_A 545688588 545550700 0 0


ErrDetection_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 545688588 7895966 0 0
T21 88329 0 0 0
T23 621971 0 0 0
T24 500493 0 0 0
T25 481366 0 0 0
T36 630649 370071 0 0
T37 892084 537830 0 0
T38 0 374202 0 0
T47 3764 0 0 0
T49 369932 0 0 0
T50 268931 0 0 0
T82 0 283639 0 0
T83 0 144777 0 0
T84 0 12106 0 0
T85 0 311687 0 0
T86 0 477882 0 0
T87 0 256020 0 0
T88 0 674725 0 0
T89 485099 0 0 0

FsmKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 545499022 545366807 0 0
T1 5551 5451 0 0
T2 7522 7455 0 0
T3 2198 2037 0 0
T4 30536 30445 0 0
T12 100742 100689 0 0
T13 26152 26054 0 0
T14 25189 25135 0 0
T15 22379 22306 0 0
T16 39318 39112 0 0
T19 890 809 0 0

KeccakIdleWhenNoRunHs_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 545688588 20033381 0 0
T1 5551 240 0 0
T2 7522 240 0 0
T3 2198 0 0 0
T4 30536 288 0 0
T12 100742 3360 0 0
T13 26152 1776 0 0
T14 25189 840 0 0
T15 22379 1704 0 0
T16 39318 2592 0 0
T17 0 264 0 0
T18 0 264 0 0
T19 890 0 0 0

MuxSelKnown_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 545688588 545550700 0 0
T1 5551 5451 0 0
T2 7522 7455 0 0
T3 2198 2037 0 0
T4 30536 30445 0 0
T12 100742 100689 0 0
T13 26152 26054 0 0
T14 25189 25135 0 0
T15 22379 22306 0 0
T16 39318 39112 0 0
T19 890 809 0 0

SwRunInSqueezing_a
NameAttemptsReal SuccessesFailuresIncomplete
Total 545688588 121306 0 0
T15 22379 28 0 0
T16 39318 45 0 0
T17 9402 0 0 0
T18 2907 0 0 0
T20 135961 0 0 0
T22 72312 33 0 0
T29 102078 54 0 0
T30 0 156 0 0
T32 0 39 0 0
T35 0 49 0 0
T36 0 183 0 0
T49 0 294 0 0
T56 0 45 0 0
T62 243298 0 0 0
T90 27405 0 0 0
T91 39939 0 0 0

gen_chk_digest_unmasked.StateZeroInvalid_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 545688588 455526803 0 0
T1 5551 4004 0 0
T2 7522 5402 0 0
T3 2198 2037 0 0
T4 30536 30441 0 0
T12 100742 100663 0 0
T13 26152 11820 0 0
T14 25189 15383 0 0
T15 22379 15499 0 0
T16 39318 28817 0 0
T19 890 809 0 0

u_state_regs_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 545688588 545550700 0 0
T1 5551 5451 0 0
T2 7522 7455 0 0
T3 2198 2037 0 0
T4 30536 30445 0 0
T12 100742 100689 0 0
T13 26152 26054 0 0
T14 25189 25135 0 0
T15 22379 22306 0 0
T16 39318 39112 0 0
T19 890 809 0 0

0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%