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



Module Instance : tb.dut.u_eflash.gen_flash_cores[1].u_core

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
96.74 100.00 85.85 100.00 97.83 100.00


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
97.16 97.07 92.64 96.90 100.00 99.29 97.06


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
95.22 97.67 88.00 100.00 u_eflash


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
gen_prog_data.u_prog 98.65 100.00 96.92 95.00 100.00 100.00 100.00
u_disable_buf 100.00 100.00 100.00
u_erase 97.22 100.00 88.89 100.00 100.00
u_host_arb 93.98 75.93 100.00 100.00 100.00
u_host_outstanding_cnt 100.00 100.00
u_rd 96.93 97.64 92.83 100.00 99.37 94.83
u_state_regs 100.00 100.00 100.00 100.00



Module Instance : tb.dut.u_eflash.gen_flash_cores[0].u_core

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
98.87 100.00 94.34 100.00 100.00 100.00


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
97.83 97.07 93.19 100.00 100.00 99.65 97.06


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
95.22 97.67 88.00 100.00 u_eflash


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
gen_prog_data.u_prog 99.74 100.00 98.46 100.00 100.00 100.00 100.00
u_disable_buf 100.00 100.00 100.00
u_erase 97.22 100.00 88.89 100.00 100.00
u_host_arb 91.95 75.93 91.89 100.00 100.00
u_host_outstanding_cnt 100.00 100.00
u_rd 96.95 97.64 92.91 100.00 99.37 94.83
u_state_regs 100.00 100.00 100.00 100.00

Line Coverage for Module : flash_phy_core
Line No.TotalCoveredPercent
TOTAL8989100.00
ALWAYS15266100.00
ALWAYS16533100.00
CONT_ASSIGN19611100.00
CONT_ASSIGN20011100.00
ALWAYS20344100.00
ALWAYS21566100.00
ALWAYS22966100.00
CONT_ASSIGN27711100.00
CONT_ASSIGN28011100.00
CONT_ASSIGN28111100.00
CONT_ASSIGN28211100.00
CONT_ASSIGN28711100.00
CONT_ASSIGN31711100.00
CONT_ASSIGN32111100.00
ALWAYS3252929100.00
CONT_ASSIGN38811100.00
CONT_ASSIGN39211100.00
CONT_ASSIGN39311100.00
CONT_ASSIGN39411100.00
CONT_ASSIGN39511100.00
CONT_ASSIGN39611100.00
CONT_ASSIGN39711100.00
CONT_ASSIGN39811100.00
CONT_ASSIGN41511100.00
CONT_ASSIGN42811100.00
CONT_ASSIGN52311100.00
CONT_ASSIGN55011100.00
CONT_ASSIGN55111100.00
CONT_ASSIGN55211100.00
CONT_ASSIGN55311100.00
CONT_ASSIGN55511100.00
CONT_ASSIGN55611100.00
CONT_ASSIGN55711100.00
CONT_ASSIGN55811100.00
CONT_ASSIGN55911100.00
CONT_ASSIGN56011100.00
CONT_ASSIGN56111100.00
CONT_ASSIGN56811100.00
CONT_ASSIGN58511100.00
CONT_ASSIGN58611100.00
CONT_ASSIGN58711100.00

151 always_ff @(posedge clk_i or negedge rst_ni) begin 152 1/1 if (!rst_ni) begin Tests: T1 T2 T3  153 1/1 arb_cnt <= '0; Tests: T1 T2 T3  154 1/1 end else if (ctrl_rsp_vld) begin Tests: T1 T2 T3  155 1/1 arb_cnt <= '0; Tests: T1 T2 T3  156 1/1 end else if (inc_arb_cnt) begin Tests: T1 T2 T3  157 1/1 arb_cnt <= arb_cnt + 1'b1; Tests: T15 T10 T58  158 end MISSING_ELSE 159 end 160 161 import prim_mubi_pkg::mubi4_test_false_strict; 162 import prim_mubi_pkg::mubi4_test_true_loose; 163 164 // SEC_CM: PHY.FSM.SPARSE 165 3/3 `PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, StIdle) Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3 
PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, StIdle): 165.1 `ifdef SIMULATION 165.2 prim_sparse_fsm_flop #( 165.3 .StateEnumT(state_e), 165.4 .Width($bits(state_e)), 165.5 .ResetValue($bits(state_e)'(StIdle)), 165.6 .EnableAlertTriggerSVA(1), 165.7 .CustomForceName("state_q") 165.8 ) u_state_regs ( 165.9 .clk_i ( clk_i ), 165.10 .rst_ni ( rst_ni ), 165.11 .state_i ( state_d ), 165.12 .state_o ( ) 165.13 ); 165.14 always_ff @(posedge clk_i or negedge rst_ni) begin 165.15 1/1 if (!rst_ni) begin Tests: T1 T2 T3  165.16 1/1 state_q <= StIdle; Tests: T1 T2 T3  165.17 end else begin 165.18 1/1 state_q <= state_d; Tests: T1 T2 T3  165.19 end 165.20 end 165.21 u_state_regs_A: assert property (@(posedge clk_i) disable iff ((!rst_ni) !== '0) (state_q === u_state_regs.state_o)) 165.22 else begin 165.23 `ifdef UVM 165.24 uvm_pkg::uvm_report_error("ASSERT FAILED", "u_state_regs_A", uvm_pkg::UVM_NONE, 165.25 "../src/lowrisc_opentitan_top_earlgrey_flash_ctrl_0.1/rtl/flash_phy_core.sv", 165, "", 1); 165.26 `else 165.27 $error("%0t: (%0s:%0d) [%m] [ASSERT FAILED] %0s", $time, `__FILE__, `__LINE__, 165.28 `PRIM_STRINGIFY(u_state_regs_A)); 165.29 `endif 165.30 end 165.31 `else 165.32 prim_sparse_fsm_flop #( 165.33 .StateEnumT(state_e), 165.34 .Width($bits(state_e)), 165.35 .ResetValue($bits(state_e)'(StIdle)), 165.36 .EnableAlertTriggerSVA(1) 165.37 ) u_state_regs ( 165.38 .clk_i ( `PRIM_FLOP_CLK ), 165.39 .rst_ni ( `PRIM_FLOP_RST ), 165.40 .state_i ( state_d ), 165.41 .state_o ( state_q ) 165.42 ); 165.43 `endif166 167 typedef enum logic [2:0] { 168 HostDisableIdx, 169 CtrlDisableIdx, 170 FsmDisableIdx, 171 ProgFsmDisableIdx, 172 LastDisableIdx 173 } phy_core_disable_e; 174 175 prim_mubi_pkg::mubi4_t [LastDisableIdx-1:0] flash_disable; 176 prim_mubi4_sync #( 177 .NumCopies(int'(LastDisableIdx)), 178 .AsyncOn(0) 179 ) u_disable_buf ( 180 .clk_i, 181 .rst_ni, 182 .mubi_i(flash_disable_i), 183 .mubi_o(flash_disable) 184 ); 185 186 // Oustanding width is slightly larger to ensure a faulty increment is able to reach 187 // the higher value. For example if RspOrderDepth were 3, a clog2 of 3 would still be 2 188 // and not allow the counter to increment to 4. 189 localparam int OutstandingRdWidth = $clog2(RspOrderDepth+2); 190 logic [OutstandingRdWidth-1:0] host_outstanding; 191 logic ctrl_fsm_idle; 192 logic host_req; 193 // SEC_CM: PHY_HOST_GRANT.CTRL.CONSISTENCY 194 // A host transaction was granted to the muxed partition, this is illegal 195 logic host_gnt_err_event; 196 1/1 assign host_gnt_err_event = (host_gnt && muxed_part != flash_ctrl_pkg::FlashPartData); Tests: T1 T2 T3  197 // Controller fsm became non idle when there are pending host transactions, this is 198 // illegal. 199 logic host_outstanding_err_event; 200 1/1 assign host_outstanding_err_event = |host_outstanding & !ctrl_fsm_idle; Tests: T1 T2 T3  201 202 always_ff @(posedge clk_i or negedge rst_ni) begin 203 1/1 if (!rst_ni) begin Tests: T1 T2 T3  204 1/1 host_gnt_err_o <= '0; Tests: T1 T2 T3  205 1/1 end else if (host_gnt_err_event | host_outstanding_err_event) begin Tests: T1 T2 T3  206 1/1 host_gnt_err_o <= 1'b1; Tests: T10 T180 T228  207 end MISSING_ELSE 208 end 209 210 // When host grant errors occur, also create in band error responses. 211 // The error condition is held until all existing host transactions are 212 // processed. 213 logic host_gnt_rd_err; 214 always_ff @(posedge clk_i or negedge rst_ni) begin 215 1/1 if (!rst_ni) begin Tests: T1 T2 T3  216 1/1 host_gnt_rd_err <= '0; Tests: T1 T2 T3  217 1/1 end else if (host_outstanding == '0) begin Tests: T1 T2 T3  218 1/1 host_gnt_rd_err <= '0; Tests: T1 T2 T3  219 1/1 end else if (host_gnt_err_event) begin Tests: T2 T3 T20  220 1/1 host_gnt_rd_err <= 1'b1; Tests: T10 T228 T11  221 end MISSING_ELSE 222 end 223 224 // When host outstanding errors occur, also create in band error responses. 225 // The error condition is held until all existing host and controller 226 // transactions are processed. 227 logic host_outstanding_rd_err; 228 always_ff @(posedge clk_i or negedge rst_ni) begin 229 1/1 if (!rst_ni) begin Tests: T1 T2 T3  230 1/1 host_outstanding_rd_err <= '0; Tests: T1 T2 T3  231 1/1 end else if (host_outstanding == '0 && ctrl_fsm_idle) begin Tests: T1 T2 T3  232 1/1 host_outstanding_rd_err <= '0; Tests: T1 T2 T3  233 1/1 end else if (host_outstanding_err_event) begin Tests: T1 T2 T3  234 1/1 host_outstanding_rd_err <= 1'b1; Tests: T10 T11  235 end MISSING_ELSE 236 end 237 238 // SEC_CM: PHY_HOST_GRANT.CTRL.CONSISTENCY 239 prim_count #( 240 .Width(OutstandingRdWidth), 241 .ResetValue('0) 242 ) u_host_outstanding_cnt ( 243 .clk_i, 244 .rst_ni, 245 .clr_i('0), 246 .set_i('0), 247 .set_cnt_i('0), 248 .incr_en_i(host_gnt && !host_req_done_o && (host_outstanding <= RspOrderDepth)), 249 .decr_en_i(!host_gnt && host_req_done_o && |host_outstanding), 250 .step_i(OutstandingRdWidth'(1'b1)), 251 .commit_i(1'b1), 252 .cnt_o(host_outstanding), 253 .cnt_after_commit_o(), 254 .err_o(cnt_err_o) 255 ); 256 257 // If host_outstanding is non-zero, the controller fsm must be idle.. 258 // This assertion needs to be disabled for sec_cm testing 259 `ASSERT(HostTransIdleChk_A, |host_outstanding |-> ctrl_fsm_idle) 260 261 //always_ff @(posedge clk_i or negedge rst_ni) begin 262 // if (!rst_ni) begin 263 // host_outstanding <= '0; 264 // end else if (host_gnt && !host_req_done_o && (host_outstanding <= RspOrderDepth)) begin 265 // host_outstanding <= host_outstanding + 1'b1; 266 // end else if (!host_gnt && host_req_done_o && |host_outstanding) begin 267 // host_outstanding <= host_outstanding - 1'b1; 268 // end 269 //end 270 271 `ASSERT(RdTxnCheck_A, host_outstanding <= RspOrderDepth) 272 273 // The host request is suppressed under a variety of conditions: 274 // 1. If a controller transaction is already ongoing. 275 // 2. If a grant or outstanding error has already been observed but not yet 276 // fully processed. 277 1/1 assign host_req = host_req_i & (arb_cnt < ArbCnt[CntWidth-1:0]) & ctrl_fsm_idle & Tests: T1 T2 T3  278 !host_gnt_rd_err & !host_outstanding_rd_err & 279 mubi4_test_false_strict(flash_disable[HostDisableIdx]); 280 1/1 assign host_sel = host_req; Tests: T1 T2 T3  281 1/1 assign host_gnt = host_req & host_req_rdy_o; Tests: T1 T2 T3  282 1/1 assign host_req_done_o = |host_outstanding & rd_stage_data_valid; Tests: T1 T2 T3  283 284 // controller request can only win after the entire read pipeline 285 // clears 286 logic ctrl_req; 287 1/1 assign ctrl_req = req_i & rd_stage_idle & Tests: T1 T2 T3  288 !host_gnt_rd_err & !host_outstanding_rd_err & 289 mubi4_test_false_strict(flash_disable[CtrlDisableIdx]); 290 291 logic [1:0] data_tie_off [2]; 292 assign data_tie_off = '{default: '0}; 293 294 // SEC_CM: PHY_ARBITER.CTRL.REDUN 295 logic phy_req; 296 logic phy_rdy; 297 298 prim_arbiter_tree_dup #( 299 .N(2), 300 .DW(2), 301 .EnDataPort('0), 302 .FixedArb(1) 303 ) u_host_arb ( 304 .clk_i, 305 .rst_ni, 306 .req_chk_i('0), 307 .req_i({ctrl_req, host_req}), 308 .data_i(data_tie_off), 309 .gnt_o({ctrl_gnt, host_req_rdy_o}), 310 .idx_o(), 311 .valid_o(phy_req), 312 .data_o(), 313 .ready_i(phy_rdy), 314 .err_o(arb_err_o) 315 ); 316 317 1/1 assign phy_rdy = phy_req & host_req ? rd_stage_rdy : rd_stage_idle; Tests: T1 T2 T3  318 319 320 // if request happens at the same time as a host grant, increment count 321 1/1 assign inc_arb_cnt = req_i & host_gnt; Tests: T1 T2 T3  322 323 logic fsm_err; 324 always_comb begin 325 1/1 state_d = state_q; Tests: T1 T2 T3  326 1/1 reqs = '0; Tests: T1 T2 T3  327 1/1 ctrl_rsp_vld = '0; Tests: T1 T2 T3  328 1/1 fsm_err = '0; Tests: T1 T2 T3  329 1/1 ctrl_fsm_idle = '0; Tests: T1 T2 T3  330 331 1/1 unique case (state_q) Tests: T1 T2 T3  332 StIdle: begin 333 1/1 ctrl_fsm_idle = 1'b1; Tests: T1 T2 T3  334 1/1 if (mubi4_test_true_loose(flash_disable[FsmDisableIdx])) begin Tests: T1 T2 T3  335 1/1 state_d = StDisable; Tests: T7 T8 T9  336 1/1 end else if (ctrl_gnt && rd_i) begin Tests: T1 T2 T3  337 1/1 state_d = StCtrlRead; Tests: T1 T2 T3  338 1/1 end else if (ctrl_gnt && prog_i) begin Tests: T1 T2 T3  339 1/1 state_d = StCtrlProg; Tests: T1 T12 T20  340 1/1 end else if (ctrl_gnt) begin Tests: T1 T2 T3  341 1/1 state_d = StCtrl; Tests: T12 T23 T14  342 end MISSING_ELSE 343 end 344 345 // Controller reads are very slow. 346 StCtrlRead: begin 347 1/1 if (rd_stage_data_valid) begin Tests: T1 T2 T3  348 1/1 ctrl_rsp_vld = 1'b1; Tests: T1 T2 T3  349 1/1 state_d = StIdle; Tests: T1 T2 T3  350 end MISSING_ELSE 351 end 352 353 // Controller program data may be packed based on 354 // address alignment 355 StCtrlProg: begin 356 1/1 reqs[PhyProg] = 1'b1; Tests: T1 T12 T20  357 1/1 if (prog_ack) begin Tests: T1 T12 T20  358 1/1 ctrl_rsp_vld = 1'b1; Tests: T1 T12 T20  359 1/1 state_d = StIdle; Tests: T1 T12 T20  360 end MISSING_ELSE 361 end 362 363 // other controller operations directly interface with flash 364 StCtrl: begin 365 1/1 reqs[PhyPgErase] = pg_erase_i; Tests: T12 T23 T14  366 1/1 reqs[PhyBkErase] = bk_erase_i; Tests: T12 T23 T14  367 1/1 if (erase_ack) begin Tests: T12 T23 T14  368 1/1 ctrl_rsp_vld = 1'b1; Tests: T12 T23 T14  369 1/1 state_d = StIdle; Tests: T12 T23 T14  370 end MISSING_ELSE 371 end 372 373 StDisable: begin 374 1/1 ctrl_fsm_idle = 1'b1; Tests: T7 T8 T9  375 1/1 state_d = StDisable; Tests: T7 T8 T9  376 end 377 378 default: begin 379 ctrl_fsm_idle = 1'b1; 380 fsm_err = 1'b1; 381 end 382 383 endcase // unique case (state_q) 384 end // always_comb 385 386 // determine spurious acks 387 // SEC_CM: PHY_ACK.CTRL.CONSISTENCY 388 1/1 assign spurious_ack_o = (ctrl_fsm_idle & ctrl_rsp_vld) | Tests: T1 T2 T3  389 ((host_outstanding == '0) & host_req_done_o); 390 391 // transactions coming from flash controller are always data type 392 1/1 assign muxed_addr = host_sel ? host_addr_i : addr_i; Tests: T1 T2 T3  393 1/1 assign muxed_part = host_sel ? flash_ctrl_pkg::FlashPartData : part_i; Tests: T1 T2 T3  394 1/1 assign muxed_scramble_en = host_sel ? host_scramble_en_i : scramble_en_i; Tests: T1 T2 T3  395 1/1 assign muxed_ecc_en = host_sel ? host_ecc_en_i : ecc_en_i; Tests: T1 T2 T3  396 1/1 assign rd_done_o = ctrl_rsp_vld & rd_i; Tests: T1 T2 T3  397 1/1 assign prog_done_o = ctrl_rsp_vld & prog_i; Tests: T1 T2 T3  398 1/1 assign erase_done_o = ctrl_rsp_vld & (pg_erase_i | bk_erase_i); Tests: T1 T2 T3  399 400 //////////////////////// 401 // read pipeline 402 //////////////////////// 403 404 logic flash_rd_req; 405 logic [FullDataWidth-1:0] flash_rdata; 406 logic rd_calc_req; 407 logic [BankAddrW-1:0] rd_calc_addr; 408 logic rd_op_req; 409 logic [DataWidth-1:0] rd_scrambled_data; 410 logic [DataWidth-1:0] rd_descrambled_data; 411 412 // if host grant is encountered, transactions return in-band 413 // error until all transactions are flushed. 414 logic phy_rd_err; 415 1/1 assign rd_err_o = phy_rd_err; Tests: T1 T2 T3  416 417 418 // After host_gnt_rd_err asserts, no more host requests 419 // are granted until all transactions are flushed. This means 420 // the last outstanding transaction is by definition the "error". 421 // 422 // If ctrl_fsm_idle inexplicably goes low while there are host transactions 423 // the transaction handling may be irreversibly broken. 424 // The host_oustanding_rd_err makes a best effort attempt to cleanly 425 // recover. It responds with in-band error controller transactions until the 426 // all pending transactions are flushed. 427 logic arb_host_gnt_err; 428 1/1 assign arb_host_gnt_err = (host_gnt_rd_err & host_outstanding == 1'b1) | Tests: T1 T2 T3  429 (host_outstanding_rd_err); 430 431 flash_phy_rd u_rd ( 432 .clk_i, 433 .rst_ni, 434 .buf_en_i(rd_buf_en_i), 435 //.req_i(reqs[PhyRead] | host_req), 436 .req_i(phy_req & (rd_i | host_req)), 437 .descramble_i(muxed_scramble_en), 438 .ecc_i(muxed_ecc_en), 439 .prog_i(reqs[PhyProg]), 440 .pg_erase_i(reqs[PhyPgErase]), 441 .bk_erase_i(reqs[PhyBkErase]), 442 .addr_i(muxed_addr), 443 .part_i(muxed_part), 444 // info select cannot be generated by the host 445 .info_sel_i(info_sel_i), 446 .rdy_o(rd_stage_rdy), 447 .data_valid_o(rd_stage_data_valid), 448 .data_err_o(phy_rd_err), 449 .data_host_o(rd_data_host_o), 450 .data_ctrl_o(rd_data_ctrl_o), 451 .idle_o(rd_stage_idle), 452 // a catastrophic arbitration error has been observed, just dump 453 // dump returns until all transactions are flushed. 454 .arb_err_i(arb_host_gnt_err), 455 .req_o(flash_rd_req), 456 .ack_i(ack), 457 .done_i(done), 458 .data_i(arb_host_gnt_err ? {FullDataWidth{1'b1}} : flash_rdata), 459 //scramble unit interface 460 .calc_req_o(rd_calc_req), 461 .calc_addr_o(rd_calc_addr), 462 .descramble_req_o(rd_op_req), 463 .scrambled_data_o(rd_scrambled_data), 464 .calc_ack_i(calc_ack), 465 .descramble_ack_i(op_ack), 466 .mask_i(scramble_mask), 467 .descrambled_data_i(rd_descrambled_data), 468 .ecc_single_err_o, 469 .ecc_addr_o, 470 .relbl_ecc_err_o, 471 .intg_ecc_err_o, 472 .fifo_err_o 473 ); 474 475 //////////////////////// 476 // program pipeline 477 //////////////////////// 478 479 logic [FullDataWidth-1:0] prog_full_data; 480 logic [DataWidth-1:0] prog_scrambled_data; 481 logic [DataWidth-1:0] prog_data; 482 logic prog_last; 483 logic flash_prog_req; 484 logic prog_calc_req; 485 logic prog_op_req; 486 logic prog_fsm_err; 487 488 if (WidthMultiple == 1) begin : gen_single_prog_data 489 assign flash_prog_req = reqs[PhyProg]; 490 assign prog_data = prog_data_i[BusWidth-1:0]; 491 assign prog_fsm_err = '0; 492 end else begin : gen_prog_data 493 494 // SEC_CM: MEM.INTEGRITY 495 flash_phy_prog u_prog ( 496 .clk_i, 497 .rst_ni, 498 .req_i(reqs[PhyProg]), 499 .disable_i(flash_disable[ProgFsmDisableIdx]), 500 .scramble_i(muxed_scramble_en), 501 .ecc_i(muxed_ecc_en), 502 .sel_i(addr_i[0 +: WordSelW]), 503 .data_i(prog_data_i), 504 .last_i(prog_last_i), 505 .ack_i(ack), 506 .done_i(done), 507 .calc_ack_i(calc_ack), 508 .scramble_ack_i(op_ack), 509 .mask_i(scramble_mask), 510 .scrambled_data_i(prog_scrambled_data), 511 .calc_req_o(prog_calc_req), 512 .scramble_req_o(prog_op_req), 513 .req_o(flash_prog_req), 514 .last_o(prog_last), 515 .ack_o(prog_ack), 516 .block_data_o(prog_data), 517 .data_o(prog_full_data), 518 .fsm_err_o(prog_fsm_err), 519 .intg_err_o(prog_intg_err_o) 520 ); 521 end 522 523 1/1 assign fsm_err_o = fsm_err | prog_fsm_err; Tests: T1 T2 T3  524 525 //////////////////////// 526 // erase pipeline 527 //////////////////////// 528 529 logic flash_pg_erase_req; 530 logic flash_bk_erase_req; 531 logic erase_suspend_req; 532 flash_phy_erase u_erase ( 533 .clk_i, 534 .rst_ni, 535 .pg_erase_req_i(reqs[PhyPgErase]), 536 .bk_erase_req_i(reqs[PhyBkErase]), 537 .suspend_req_i(erase_suspend_req_i), 538 .ack_o(erase_ack), 539 .pg_erase_req_o(flash_pg_erase_req), 540 .bk_erase_req_o(flash_bk_erase_req), 541 .suspend_req_o(erase_suspend_req), 542 .ack_i(ack), 543 .done_i(done) 544 ); 545 546 //////////////////////// 547 // bundle data to send to shared scrambling module 548 //////////////////////// 549 550 1/1 assign scramble_req_o.calc_req = prog_calc_req | rd_calc_req; Tests: T1 T2 T3  551 1/1 assign scramble_req_o.op_req = prog_op_req | rd_op_req; Tests: T1 T2 T3  552 1/1 assign scramble_req_o.op_type = prog_op_req ? ScrambleOp : DeScrambleOp; Tests: T1 T2 T3  553 1/1 assign scramble_req_o.addr = prog_calc_req ? muxed_addr[BusBankAddrW-1:LsbAddrBit] : Tests: T1 T2 T3  554 rd_calc_addr; 555 1/1 assign scramble_req_o.plain_data = prog_data; Tests: T1 T2 T3  556 1/1 assign scramble_req_o.scrambled_data = rd_scrambled_data; Tests: T1 T2 T3  557 1/1 assign calc_ack = scramble_rsp_i.calc_ack; Tests: T1 T2 T3  558 1/1 assign op_ack = scramble_rsp_i.op_ack; Tests: T1 T2 T3  559 1/1 assign scramble_mask = scramble_rsp_i.mask; Tests: T1 T2 T3  560 1/1 assign rd_descrambled_data = scramble_rsp_i.plain_data; Tests: T1 T2 T3  561 1/1 assign prog_scrambled_data = scramble_rsp_i.scrambled_data; Tests: T1 T2 T3  562 563 //////////////////////// 564 // Actual connection to flash phy 565 //////////////////////// 566 567 // Connections to the actual flash macro wrapper 568 1/1 assign prim_flash_req_o = '{ Tests: T1 T2 T3  569 rd_req: flash_rd_req, 570 prog_req: flash_prog_req, 571 prog_last: prog_last, 572 prog_type: prog_type_i, 573 pg_erase_req: flash_pg_erase_req, 574 bk_erase_req: flash_bk_erase_req, 575 erase_suspend_req: erase_suspend_req, 576 // high endurance enable does not cause changes to 577 // transaction protocol and is forwarded directly to the wrapper 578 he: he_en_i, 579 addr: muxed_addr[BusBankAddrW-1:LsbAddrBit], 580 part: muxed_part, 581 info_sel: info_sel_i, 582 prog_full_data: prog_full_data 583 }; 584 585 1/1 assign ack = prim_flash_rsp_i.ack; Tests: T1 T2 T3  586 1/1 assign done = prim_flash_rsp_i.done; Tests: T1 T2 T3  587 1/1 assign flash_rdata = prim_flash_rsp_i.rdata; Tests: T1 T2 T3 

Cond Coverage for Module : flash_phy_core
TotalCoveredPercent
Conditions10610296.23
Logical10610296.23
Non-Logical00
Event00

 LINE       196
 EXPRESSION (host_gnt && (muxed_part != FlashPartData))
             ----1---    --------------2--------------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT2,T3,T20
11CoveredT10,T180,T228

 LINE       196
 SUB-EXPRESSION (muxed_part != FlashPartData)
                --------------1--------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       200
 EXPRESSION (((|host_outstanding)) & ((!ctrl_fsm_idle)))
             ----------1----------   ---------2--------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT2,T3,T20
11Not Covered

 LINE       205
 EXPRESSION (host_gnt_err_event | host_outstanding_err_event)
             ---------1--------   -------------2------------
-1--2-StatusTests
00CoveredT1,T2,T3
01Not Covered
10CoveredT10,T180,T228

 LINE       217
 EXPRESSION (host_outstanding == '0)
            ------------1-----------
-1-StatusTests
0CoveredT2,T3,T20
1CoveredT1,T2,T3

 LINE       231
 EXPRESSION ((host_outstanding == '0) && ctrl_fsm_idle)
             ------------1-----------    ------2------
-1--2-StatusTests
01CoveredT2,T3,T20
10CoveredT1,T2,T3
11CoveredT1,T2,T3

 LINE       231
 SUB-EXPRESSION (host_outstanding == '0)
                ------------1-----------
-1-StatusTests
0CoveredT2,T3,T20
1CoveredT1,T2,T3

 LINE       242
 EXPRESSION (host_gnt && ((!host_req_done_o)) && (host_outstanding <= flash_phy_pkg::RspOrderDepth))
             ----1---    ----------2---------    -------------------------3------------------------
-1--2--3-StatusTests
011CoveredT1,T2,T3
101CoveredT2,T3,T15
110Not Covered
111CoveredT2,T3,T20

 LINE       242
 EXPRESSION (((!host_gnt)) && host_req_done_o && ((|host_outstanding)))
             ------1------    -------2-------    ----------3----------
-1--2--3-StatusTests
011CoveredT2,T3,T15
101CoveredT2,T3,T20
110CoveredT58,T62,T63
111CoveredT2,T3,T20

 LINE       281
 EXPRESSION (host_req & host_req_rdy_o)
             ----1---   -------2------
-1--2-StatusTests
01CoveredT15,T129,T127
10CoveredT20,T23,T13
11CoveredT2,T3,T20

 LINE       282
 EXPRESSION (((|host_outstanding)) & rd_stage_data_valid)
             ----------1----------   ---------2---------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT2,T3,T20
11CoveredT2,T3,T20

 LINE       317
 EXPRESSION ((phy_req & host_req) ? rd_stage_rdy : rd_stage_idle)
             ----------1---------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT2,T3,T20

 LINE       317
 SUB-EXPRESSION (phy_req & host_req)
                 ---1---   ----2---
-1--2-StatusTests
01CoveredT238
10CoveredT1,T2,T3
11CoveredT2,T3,T20

 LINE       321
 EXPRESSION (req_i & host_gnt)
             --1--   ----2---
-1--2-StatusTests
01CoveredT2,T3,T20
10CoveredT1,T2,T3
11CoveredT15,T10,T58

 LINE       336
 EXPRESSION (ctrl_gnt && rd_i)
             ----1---    --2-
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT1,T12,T20
11CoveredT1,T2,T3

 LINE       338
 EXPRESSION (ctrl_gnt && prog_i)
             ----1---    ---2--
-1--2-StatusTests
01CoveredT1,T12,T20
10CoveredT12,T23,T14
11CoveredT1,T12,T20

 LINE       388
 EXPRESSION ((ctrl_fsm_idle & ctrl_rsp_vld) | ((host_outstanding == '0) & host_req_done_o))
             ---------------1--------------   ----------------------2---------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT58,T62,T63
10CoveredT239

 LINE       388
 SUB-EXPRESSION (ctrl_fsm_idle & ctrl_rsp_vld)
                 ------1------   ------2-----
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT1,T2,T3
11CoveredT239

 LINE       388
 SUB-EXPRESSION ((host_outstanding == '0) & host_req_done_o)
                 ------------1-----------   -------2-------
-1--2-StatusTests
01CoveredT2,T3,T20
10CoveredT1,T2,T3
11CoveredT58,T62,T63

 LINE       388
 SUB-EXPRESSION (host_outstanding == '0)
                ------------1-----------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       392
 EXPRESSION (host_sel ? host_addr_i : addr_i)
             ----1---
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT2,T3,T20

 LINE       393
 EXPRESSION (host_sel ? FlashPartData : part_i)
             ----1---
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT2,T3,T20

 LINE       394
 EXPRESSION (host_sel ? host_scramble_en_i : scramble_en_i)
             ----1---
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT2,T3,T20

 LINE       395
 EXPRESSION (host_sel ? host_ecc_en_i : ecc_en_i)
             ----1---
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT2,T3,T20

 LINE       396
 EXPRESSION (ctrl_rsp_vld & rd_i)
             ------1-----   --2-
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT1,T12,T20
11CoveredT1,T2,T3

 LINE       397
 EXPRESSION (ctrl_rsp_vld & prog_i)
             ------1-----   ---2--
-1--2-StatusTests
01CoveredT1,T12,T20
10CoveredT1,T2,T3
11CoveredT1,T12,T20

 LINE       398
 EXPRESSION (ctrl_rsp_vld & (pg_erase_i | bk_erase_i))
             ------1-----   ------------2------------
-1--2-StatusTests
01CoveredT12,T23,T14
10CoveredT1,T2,T3
11CoveredT12,T23,T14

 LINE       398
 SUB-EXPRESSION (pg_erase_i | bk_erase_i)
                 -----1----   -----2----
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT74,T25,T65
10CoveredT12,T23,T14

 LINE       428
 EXPRESSION ((host_gnt_rd_err & (host_outstanding == 1'b1)) | host_outstanding_rd_err)
             -----------------------1----------------------   -----------2-----------
-1--2-StatusTests
00CoveredT1,T2,T3
01Not Covered
10CoveredT228

 LINE       428
 SUB-EXPRESSION (host_gnt_rd_err & (host_outstanding == 1'b1))
                 -------1-------   -------------2------------
-1--2-StatusTests
01CoveredT2,T3,T20
10CoveredT228
11CoveredT228

 LINE       428
 SUB-EXPRESSION (host_outstanding == 1'b1)
                -------------1------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT2,T3,T20

 LINE       431
 EXPRESSION (phy_req & (rd_i | host_req))
             ---1---   --------2--------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT1,T12,T20
11CoveredT1,T2,T3

 LINE       431
 SUB-EXPRESSION (rd_i | host_req)
                 --1-   ----2---
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT2,T3,T20
10CoveredT1,T2,T3

 LINE       431
 EXPRESSION (arb_host_gnt_err ? ({flash_phy_pkg::FullDataWidth {1'b1}}) : flash_rdata)
             --------1-------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT228

 LINE       523
 EXPRESSION (fsm_err | prog_fsm_err)
             ---1---   ------2-----
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT16,T43,T44
10CoveredT16,T43,T44

 LINE       550
 EXPRESSION (prog_calc_req | rd_calc_req)
             ------1------   -----2-----
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT1,T2,T3
10CoveredT13,T14,T8

 LINE       551
 EXPRESSION (prog_op_req | rd_op_req)
             -----1-----   ----2----
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT1,T2,T3
10CoveredT13,T14,T8

 LINE       552
 EXPRESSION (prog_op_req ? ScrambleOp : DeScrambleOp)
             -----1-----
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT13,T14,T8

 LINE       553
 EXPRESSION (prog_calc_req ? muxed_addr[(flash_phy_pkg::BusBankAddrW - 1):flash_phy_pkg::LsbAddrBit] : rd_calc_addr)
             ------1------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT13,T14,T8

FSM Coverage for Module : flash_phy_core
Summary for FSM :: state_q
TotalCoveredPercent
States 5 5 100.00 (Not included in score)
Transitions 7 7 100.00
Sequences 0 0

State, Transition and Sequence Details for FSM :: state_q
states   Line No.   Covered   Tests   
StCtrl 341 Covered T12,T23,T14
StCtrlProg 339 Covered T1,T12,T20
StCtrlRead 337 Covered T1,T2,T3
StDisable 335 Covered T7,T8,T9
StIdle 349 Covered T1,T2,T3


transitions   Line No.   Covered   Tests   
StCtrl->StIdle 369 Covered T12,T23,T14
StCtrlProg->StIdle 359 Covered T1,T12,T20
StCtrlRead->StIdle 349 Covered T1,T2,T3
StIdle->StCtrl 341 Covered T12,T23,T14
StIdle->StCtrlProg 339 Covered T1,T12,T20
StIdle->StCtrlRead 337 Covered T1,T2,T3
StIdle->StDisable 335 Covered T7,T8,T9



Branch Coverage for Module : flash_phy_core
Line No.TotalCoveredPercent
Branches 46 46 100.00
TERNARY 317 2 2 100.00
TERNARY 392 2 2 100.00
TERNARY 393 2 2 100.00
TERNARY 394 2 2 100.00
TERNARY 395 2 2 100.00
TERNARY 552 2 2 100.00
TERNARY 553 2 2 100.00
TERNARY 431 2 2 100.00
IF 152 4 4 100.00
IF 165 2 2 100.00
IF 203 3 3 100.00
IF 215 4 4 100.00
IF 229 4 4 100.00
CASE 331 13 13 100.00


317 assign phy_rdy = phy_req & host_req ? rd_stage_rdy : rd_stage_idle; -1- ==> ==>

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


392 assign muxed_addr = host_sel ? host_addr_i : addr_i; -1- ==> ==>

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


393 assign muxed_part = host_sel ? flash_ctrl_pkg::FlashPartData : part_i; -1- ==> ==>

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


394 assign muxed_scramble_en = host_sel ? host_scramble_en_i : scramble_en_i; -1- ==> ==>

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


395 assign muxed_ecc_en = host_sel ? host_ecc_en_i : ecc_en_i; -1- ==> ==>

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


552 assign scramble_req_o.op_type = prog_op_req ? ScrambleOp : DeScrambleOp; -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T13,T14,T8
0 Covered T1,T2,T3


553 assign scramble_req_o.addr = prog_calc_req ? muxed_addr[BusBankAddrW-1:LsbAddrBit] : -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T13,T14,T8
0 Covered T1,T2,T3


431 flash_phy_rd u_rd ( 432 .clk_i, 433 .rst_ni, 434 .buf_en_i(rd_buf_en_i), 435 //.req_i(reqs[PhyRead] | host_req), 436 .req_i(phy_req & (rd_i | host_req)), 437 .descramble_i(muxed_scramble_en), 438 .ecc_i(muxed_ecc_en), 439 .prog_i(reqs[PhyProg]), 440 .pg_erase_i(reqs[PhyPgErase]), 441 .bk_erase_i(reqs[PhyBkErase]), 442 .addr_i(muxed_addr), 443 .part_i(muxed_part), 444 // info select cannot be generated by the host 445 .info_sel_i(info_sel_i), 446 .rdy_o(rd_stage_rdy), 447 .data_valid_o(rd_stage_data_valid), 448 .data_err_o(phy_rd_err), 449 .data_host_o(rd_data_host_o), 450 .data_ctrl_o(rd_data_ctrl_o), 451 .idle_o(rd_stage_idle), 452 // a catastrophic arbitration error has been observed, just dump 453 // dump returns until all transactions are flushed. 454 .arb_err_i(arb_host_gnt_err), 455 .req_o(flash_rd_req), 456 .ack_i(ack), 457 .done_i(done), 458 .data_i(arb_host_gnt_err ? {FullDataWidth{1'b1}} : flash_rdata), -1- ==> ==>

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


152 if (!rst_ni) begin -1- 153 arb_cnt <= '0; ==> 154 end else if (ctrl_rsp_vld) begin -2- 155 arb_cnt <= '0; ==> 156 end else if (inc_arb_cnt) begin -3- 157 arb_cnt <= arb_cnt + 1'b1; ==> 158 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
1 - - Covered T1,T2,T3
0 1 - Covered T1,T2,T3
0 0 1 Covered T15,T10,T58
0 0 0 Covered T1,T2,T3


165 `PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, StIdle) -1- ==> ==>

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


203 if (!rst_ni) begin -1- 204 host_gnt_err_o <= '0; ==> 205 end else if (host_gnt_err_event | host_outstanding_err_event) begin -2- 206 host_gnt_err_o <= 1'b1; ==> 207 end MISSING_ELSE ==>

Branches:
-1--2-StatusTests
1 - Covered T1,T2,T3
0 1 Covered T10,T180,T228
0 0 Covered T1,T2,T3


215 if (!rst_ni) begin -1- 216 host_gnt_rd_err <= '0; ==> 217 end else if (host_outstanding == '0) begin -2- 218 host_gnt_rd_err <= '0; ==> 219 end else if (host_gnt_err_event) begin -3- 220 host_gnt_rd_err <= 1'b1; ==> 221 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
1 - - Covered T1,T2,T3
0 1 - Covered T1,T2,T3
0 0 1 Covered T10,T228,T11
0 0 0 Covered T2,T3,T20


229 if (!rst_ni) begin -1- 230 host_outstanding_rd_err <= '0; ==> 231 end else if (host_outstanding == '0 && ctrl_fsm_idle) begin -2- 232 host_outstanding_rd_err <= '0; ==> 233 end else if (host_outstanding_err_event) begin -3- 234 host_outstanding_rd_err <= 1'b1; ==> 235 end MISSING_ELSE ==>

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


331 unique case (state_q) -1- 332 StIdle: begin 333 ctrl_fsm_idle = 1'b1; 334 if (mubi4_test_true_loose(flash_disable[FsmDisableIdx])) begin -2- 335 state_d = StDisable; ==> 336 end else if (ctrl_gnt && rd_i) begin -3- 337 state_d = StCtrlRead; ==> 338 end else if (ctrl_gnt && prog_i) begin -4- 339 state_d = StCtrlProg; ==> 340 end else if (ctrl_gnt) begin -5- 341 state_d = StCtrl; ==> 342 end MISSING_ELSE ==> 343 end 344 345 // Controller reads are very slow. 346 StCtrlRead: begin 347 if (rd_stage_data_valid) begin -6- 348 ctrl_rsp_vld = 1'b1; ==> 349 state_d = StIdle; 350 end MISSING_ELSE ==> 351 end 352 353 // Controller program data may be packed based on 354 // address alignment 355 StCtrlProg: begin 356 reqs[PhyProg] = 1'b1; 357 if (prog_ack) begin -7- 358 ctrl_rsp_vld = 1'b1; ==> 359 state_d = StIdle; 360 end MISSING_ELSE ==> 361 end 362 363 // other controller operations directly interface with flash 364 StCtrl: begin 365 reqs[PhyPgErase] = pg_erase_i; 366 reqs[PhyBkErase] = bk_erase_i; 367 if (erase_ack) begin -8- 368 ctrl_rsp_vld = 1'b1; ==> 369 state_d = StIdle; 370 end MISSING_ELSE ==> 371 end 372 373 StDisable: begin 374 ctrl_fsm_idle = 1'b1; ==> 375 state_d = StDisable; 376 end 377 378 default: begin 379 ctrl_fsm_idle = 1'b1; ==>

Branches:
-1--2--3--4--5--6--7--8-StatusTests
StIdle 1 - - - - - - Covered T7,T8,T9
StIdle 0 1 - - - - - Covered T1,T2,T3
StIdle 0 0 1 - - - - Covered T1,T12,T20
StIdle 0 0 0 1 - - - Covered T12,T23,T14
StIdle 0 0 0 0 - - - Covered T1,T2,T3
StCtrlRead - - - - 1 - - Covered T1,T2,T3
StCtrlRead - - - - 0 - - Covered T1,T2,T3
StCtrlProg - - - - - 1 - Covered T1,T12,T20
StCtrlProg - - - - - 0 - Covered T1,T12,T20
StCtrl - - - - - - 1 Covered T12,T23,T14
StCtrl - - - - - - 0 Covered T12,T23,T14
StDisable - - - - - - - Covered T7,T8,T9
default - - - - - - - Covered T10,T11,T16


Assert Coverage for Module : flash_phy_core
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 8 8 100.00 8 100.00
Cover properties 0 0 0
Cover sequences 0 0 0
Total 8 8 100.00 8 100.00




Assertion Details

Name   Attempts   Real Successes   Failures   Incomplete   
ArbCntMax_A 776511532 3093942 0 0
CtrlPrio_A 776511532 3093942 0 0
HostTransIdleChk_A 776511532 43921679 0 0
NoRemainder_A 2114 2114 0 0
OneHotReqs_A 776511532 774831282 0 0
Pow2Multiple_A 2114 2114 0 0
RdTxnCheck_A 776186580 774506330 0 0
u_state_regs_A 776511532 774831282 0 0


ArbCntMax_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 776511532 3093942 0 0
T10 1038 5 0 0
T15 59020 74 0 0
T27 451178 0 0 0
T36 0 4770 0 0
T39 0 234 0 0
T41 0 4530 0 0
T47 0 2396 0 0
T48 0 3307 0 0
T51 324582 0 0 0
T54 10472 0 0 0
T55 0 2466 0 0
T58 3052 0 0 0
T59 6970 0 0 0
T64 4336 0 0 0
T66 0 5 0 0
T98 119544 0 0 0
T99 0 10445 0 0
T110 2254 0 0 0
T130 0 4416 0 0
T217 0 2849 0 0

CtrlPrio_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 776511532 3093942 0 0
T10 1038 5 0 0
T15 59020 74 0 0
T27 451178 0 0 0
T36 0 4770 0 0
T39 0 234 0 0
T41 0 4530 0 0
T47 0 2396 0 0
T48 0 3307 0 0
T51 324582 0 0 0
T54 10472 0 0 0
T55 0 2466 0 0
T58 3052 0 0 0
T59 6970 0 0 0
T64 4336 0 0 0
T66 0 5 0 0
T98 119544 0 0 0
T99 0 10445 0 0
T110 2254 0 0 0
T130 0 4416 0 0
T217 0 2849 0 0

HostTransIdleChk_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 776511532 43921679 0 0
T2 21696 408 0 0
T3 2448 15 0 0
T4 1780 0 0 0
T7 1944 0 0 0
T10 0 32 0 0
T12 4004 0 0 0
T13 0 40 0 0
T15 0 685 0 0
T17 3088 0 0 0
T18 3900 0 0 0
T19 4606 0 0 0
T20 2946 24 0 0
T23 14598 76 0 0
T39 0 591 0 0
T54 0 881 0 0
T58 0 20 0 0
T59 0 151 0 0

NoRemainder_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 2114 2114 0 0
T1 2 2 0 0
T2 2 2 0 0
T3 2 2 0 0
T4 2 2 0 0
T7 2 2 0 0
T12 2 2 0 0
T17 2 2 0 0
T18 2 2 0 0
T19 2 2 0 0
T20 2 2 0 0

OneHotReqs_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 776511532 774831282 0 0
T1 7812 7706 0 0
T2 21696 21556 0 0
T3 2448 2334 0 0
T4 1780 1680 0 0
T7 1944 1844 0 0
T12 4004 3888 0 0
T17 3088 2978 0 0
T18 3900 3732 0 0
T19 4606 4422 0 0
T20 2946 2676 0 0

Pow2Multiple_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 2114 2114 0 0
T1 2 2 0 0
T2 2 2 0 0
T3 2 2 0 0
T4 2 2 0 0
T7 2 2 0 0
T12 2 2 0 0
T17 2 2 0 0
T18 2 2 0 0
T19 2 2 0 0
T20 2 2 0 0

RdTxnCheck_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 776186580 774506330 0 0
T1 7812 7706 0 0
T2 21696 21556 0 0
T3 2448 2334 0 0
T4 1780 1680 0 0
T7 1944 1844 0 0
T12 4004 3888 0 0
T17 3088 2978 0 0
T18 3900 3732 0 0
T19 4606 4422 0 0
T20 2946 2676 0 0

u_state_regs_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 776511532 774831282 0 0
T1 7812 7706 0 0
T2 21696 21556 0 0
T3 2448 2334 0 0
T4 1780 1680 0 0
T7 1944 1844 0 0
T12 4004 3888 0 0
T17 3088 2978 0 0
T18 3900 3732 0 0
T19 4606 4422 0 0
T20 2946 2676 0 0

Line Coverage for Instance : tb.dut.u_eflash.gen_flash_cores[1].u_core
Line No.TotalCoveredPercent
TOTAL8989100.00
ALWAYS15266100.00
ALWAYS16533100.00
CONT_ASSIGN19611100.00
CONT_ASSIGN20011100.00
ALWAYS20344100.00
ALWAYS21566100.00
ALWAYS22966100.00
CONT_ASSIGN27711100.00
CONT_ASSIGN28011100.00
CONT_ASSIGN28111100.00
CONT_ASSIGN28211100.00
CONT_ASSIGN28711100.00
CONT_ASSIGN31711100.00
CONT_ASSIGN32111100.00
ALWAYS3252929100.00
CONT_ASSIGN38811100.00
CONT_ASSIGN39211100.00
CONT_ASSIGN39311100.00
CONT_ASSIGN39411100.00
CONT_ASSIGN39511100.00
CONT_ASSIGN39611100.00
CONT_ASSIGN39711100.00
CONT_ASSIGN39811100.00
CONT_ASSIGN41511100.00
CONT_ASSIGN42811100.00
CONT_ASSIGN52311100.00
CONT_ASSIGN55011100.00
CONT_ASSIGN55111100.00
CONT_ASSIGN55211100.00
CONT_ASSIGN55311100.00
CONT_ASSIGN55511100.00
CONT_ASSIGN55611100.00
CONT_ASSIGN55711100.00
CONT_ASSIGN55811100.00
CONT_ASSIGN55911100.00
CONT_ASSIGN56011100.00
CONT_ASSIGN56111100.00
CONT_ASSIGN56811100.00
CONT_ASSIGN58511100.00
CONT_ASSIGN58611100.00
CONT_ASSIGN58711100.00

151 always_ff @(posedge clk_i or negedge rst_ni) begin 152 1/1 if (!rst_ni) begin Tests: T1 T2 T3  153 1/1 arb_cnt <= '0; Tests: T1 T2 T3  154 1/1 end else if (ctrl_rsp_vld) begin Tests: T1 T2 T3  155 1/1 arb_cnt <= '0; Tests: T1 T2 T18  156 1/1 end else if (inc_arb_cnt) begin Tests: T1 T2 T3  157 1/1 arb_cnt <= arb_cnt + 1'b1; Tests: T15 T10 T39  158 end MISSING_ELSE 159 end 160 161 import prim_mubi_pkg::mubi4_test_false_strict; 162 import prim_mubi_pkg::mubi4_test_true_loose; 163 164 // SEC_CM: PHY.FSM.SPARSE 165 3/3 `PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, StIdle) Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3 
PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, StIdle): 165.1 `ifdef SIMULATION 165.2 prim_sparse_fsm_flop #( 165.3 .StateEnumT(state_e), 165.4 .Width($bits(state_e)), 165.5 .ResetValue($bits(state_e)'(StIdle)), 165.6 .EnableAlertTriggerSVA(1), 165.7 .CustomForceName("state_q") 165.8 ) u_state_regs ( 165.9 .clk_i ( clk_i ), 165.10 .rst_ni ( rst_ni ), 165.11 .state_i ( state_d ), 165.12 .state_o ( ) 165.13 ); 165.14 always_ff @(posedge clk_i or negedge rst_ni) begin 165.15 1/1 if (!rst_ni) begin Tests: T1 T2 T3  165.16 1/1 state_q <= StIdle; Tests: T1 T2 T3  165.17 end else begin 165.18 1/1 state_q <= state_d; Tests: T1 T2 T3  165.19 end 165.20 end 165.21 u_state_regs_A: assert property (@(posedge clk_i) disable iff ((!rst_ni) !== '0) (state_q === u_state_regs.state_o)) 165.22 else begin 165.23 `ifdef UVM 165.24 uvm_pkg::uvm_report_error("ASSERT FAILED", "u_state_regs_A", uvm_pkg::UVM_NONE, 165.25 "../src/lowrisc_opentitan_top_earlgrey_flash_ctrl_0.1/rtl/flash_phy_core.sv", 165, "", 1); 165.26 `else 165.27 $error("%0t: (%0s:%0d) [%m] [ASSERT FAILED] %0s", $time, `__FILE__, `__LINE__, 165.28 `PRIM_STRINGIFY(u_state_regs_A)); 165.29 `endif 165.30 end 165.31 `else 165.32 prim_sparse_fsm_flop #( 165.33 .StateEnumT(state_e), 165.34 .Width($bits(state_e)), 165.35 .ResetValue($bits(state_e)'(StIdle)), 165.36 .EnableAlertTriggerSVA(1) 165.37 ) u_state_regs ( 165.38 .clk_i ( `PRIM_FLOP_CLK ), 165.39 .rst_ni ( `PRIM_FLOP_RST ), 165.40 .state_i ( state_d ), 165.41 .state_o ( state_q ) 165.42 ); 165.43 `endif166 167 typedef enum logic [2:0] { 168 HostDisableIdx, 169 CtrlDisableIdx, 170 FsmDisableIdx, 171 ProgFsmDisableIdx, 172 LastDisableIdx 173 } phy_core_disable_e; 174 175 prim_mubi_pkg::mubi4_t [LastDisableIdx-1:0] flash_disable; 176 prim_mubi4_sync #( 177 .NumCopies(int'(LastDisableIdx)), 178 .AsyncOn(0) 179 ) u_disable_buf ( 180 .clk_i, 181 .rst_ni, 182 .mubi_i(flash_disable_i), 183 .mubi_o(flash_disable) 184 ); 185 186 // Oustanding width is slightly larger to ensure a faulty increment is able to reach 187 // the higher value. For example if RspOrderDepth were 3, a clog2 of 3 would still be 2 188 // and not allow the counter to increment to 4. 189 localparam int OutstandingRdWidth = $clog2(RspOrderDepth+2); 190 logic [OutstandingRdWidth-1:0] host_outstanding; 191 logic ctrl_fsm_idle; 192 logic host_req; 193 // SEC_CM: PHY_HOST_GRANT.CTRL.CONSISTENCY 194 // A host transaction was granted to the muxed partition, this is illegal 195 logic host_gnt_err_event; 196 1/1 assign host_gnt_err_event = (host_gnt && muxed_part != flash_ctrl_pkg::FlashPartData); Tests: T1 T2 T3  197 // Controller fsm became non idle when there are pending host transactions, this is 198 // illegal. 199 logic host_outstanding_err_event; 200 1/1 assign host_outstanding_err_event = |host_outstanding & !ctrl_fsm_idle; Tests: T1 T2 T3  201 202 always_ff @(posedge clk_i or negedge rst_ni) begin 203 1/1 if (!rst_ni) begin Tests: T1 T2 T3  204 1/1 host_gnt_err_o <= '0; Tests: T1 T2 T3  205 1/1 end else if (host_gnt_err_event | host_outstanding_err_event) begin Tests: T1 T2 T3  206 1/1 host_gnt_err_o <= 1'b1; Tests: T10  207 end MISSING_ELSE 208 end 209 210 // When host grant errors occur, also create in band error responses. 211 // The error condition is held until all existing host transactions are 212 // processed. 213 logic host_gnt_rd_err; 214 always_ff @(posedge clk_i or negedge rst_ni) begin 215 1/1 if (!rst_ni) begin Tests: T1 T2 T3  216 1/1 host_gnt_rd_err <= '0; Tests: T1 T2 T3  217 1/1 end else if (host_outstanding == '0) begin Tests: T1 T2 T3  218 1/1 host_gnt_rd_err <= '0; Tests: T1 T2 T3  219 1/1 end else if (host_gnt_err_event) begin Tests: T2 T20 T23  220 1/1 host_gnt_rd_err <= 1'b1; Tests: T10  221 end MISSING_ELSE 222 end 223 224 // When host outstanding errors occur, also create in band error responses. 225 // The error condition is held until all existing host and controller 226 // transactions are processed. 227 logic host_outstanding_rd_err; 228 always_ff @(posedge clk_i or negedge rst_ni) begin 229 1/1 if (!rst_ni) begin Tests: T1 T2 T3  230 1/1 host_outstanding_rd_err <= '0; Tests: T1 T2 T3  231 1/1 end else if (host_outstanding == '0 && ctrl_fsm_idle) begin Tests: T1 T2 T3  232 1/1 host_outstanding_rd_err <= '0; Tests: T1 T2 T3  233 1/1 end else if (host_outstanding_err_event) begin Tests: T1 T2 T18  234 1/1 host_outstanding_rd_err <= 1'b1; Tests: T10  235 end MISSING_ELSE 236 end 237 238 // SEC_CM: PHY_HOST_GRANT.CTRL.CONSISTENCY 239 prim_count #( 240 .Width(OutstandingRdWidth), 241 .ResetValue('0) 242 ) u_host_outstanding_cnt ( 243 .clk_i, 244 .rst_ni, 245 .clr_i('0), 246 .set_i('0), 247 .set_cnt_i('0), 248 .incr_en_i(host_gnt && !host_req_done_o && (host_outstanding <= RspOrderDepth)), 249 .decr_en_i(!host_gnt && host_req_done_o && |host_outstanding), 250 .step_i(OutstandingRdWidth'(1'b1)), 251 .commit_i(1'b1), 252 .cnt_o(host_outstanding), 253 .cnt_after_commit_o(), 254 .err_o(cnt_err_o) 255 ); 256 257 // If host_outstanding is non-zero, the controller fsm must be idle.. 258 // This assertion needs to be disabled for sec_cm testing 259 `ASSERT(HostTransIdleChk_A, |host_outstanding |-> ctrl_fsm_idle) 260 261 //always_ff @(posedge clk_i or negedge rst_ni) begin 262 // if (!rst_ni) begin 263 // host_outstanding <= '0; 264 // end else if (host_gnt && !host_req_done_o && (host_outstanding <= RspOrderDepth)) begin 265 // host_outstanding <= host_outstanding + 1'b1; 266 // end else if (!host_gnt && host_req_done_o && |host_outstanding) begin 267 // host_outstanding <= host_outstanding - 1'b1; 268 // end 269 //end 270 271 `ASSERT(RdTxnCheck_A, host_outstanding <= RspOrderDepth) 272 273 // The host request is suppressed under a variety of conditions: 274 // 1. If a controller transaction is already ongoing. 275 // 2. If a grant or outstanding error has already been observed but not yet 276 // fully processed. 277 1/1 assign host_req = host_req_i & (arb_cnt < ArbCnt[CntWidth-1:0]) & ctrl_fsm_idle & Tests: T1 T2 T3  278 !host_gnt_rd_err & !host_outstanding_rd_err & 279 mubi4_test_false_strict(flash_disable[HostDisableIdx]); 280 1/1 assign host_sel = host_req; Tests: T1 T2 T3  281 1/1 assign host_gnt = host_req & host_req_rdy_o; Tests: T1 T2 T3  282 1/1 assign host_req_done_o = |host_outstanding & rd_stage_data_valid; Tests: T1 T2 T3  283 284 // controller request can only win after the entire read pipeline 285 // clears 286 logic ctrl_req; 287 1/1 assign ctrl_req = req_i & rd_stage_idle & Tests: T1 T2 T3  288 !host_gnt_rd_err & !host_outstanding_rd_err & 289 mubi4_test_false_strict(flash_disable[CtrlDisableIdx]); 290 291 logic [1:0] data_tie_off [2]; 292 assign data_tie_off = '{default: '0}; 293 294 // SEC_CM: PHY_ARBITER.CTRL.REDUN 295 logic phy_req; 296 logic phy_rdy; 297 298 prim_arbiter_tree_dup #( 299 .N(2), 300 .DW(2), 301 .EnDataPort('0), 302 .FixedArb(1) 303 ) u_host_arb ( 304 .clk_i, 305 .rst_ni, 306 .req_chk_i('0), 307 .req_i({ctrl_req, host_req}), 308 .data_i(data_tie_off), 309 .gnt_o({ctrl_gnt, host_req_rdy_o}), 310 .idx_o(), 311 .valid_o(phy_req), 312 .data_o(), 313 .ready_i(phy_rdy), 314 .err_o(arb_err_o) 315 ); 316 317 1/1 assign phy_rdy = phy_req & host_req ? rd_stage_rdy : rd_stage_idle; Tests: T1 T2 T3  318 319 320 // if request happens at the same time as a host grant, increment count 321 1/1 assign inc_arb_cnt = req_i & host_gnt; Tests: T1 T2 T3  322 323 logic fsm_err; 324 always_comb begin 325 1/1 state_d = state_q; Tests: T1 T2 T3  326 1/1 reqs = '0; Tests: T1 T2 T3  327 1/1 ctrl_rsp_vld = '0; Tests: T1 T2 T3  328 1/1 fsm_err = '0; Tests: T1 T2 T3  329 1/1 ctrl_fsm_idle = '0; Tests: T1 T2 T3  330 331 1/1 unique case (state_q) Tests: T1 T2 T3  332 StIdle: begin 333 1/1 ctrl_fsm_idle = 1'b1; Tests: T1 T2 T3  334 1/1 if (mubi4_test_true_loose(flash_disable[FsmDisableIdx])) begin Tests: T1 T2 T3  335 1/1 state_d = StDisable; Tests: T7 T8 T9  336 1/1 end else if (ctrl_gnt && rd_i) begin Tests: T1 T2 T3  337 1/1 state_d = StCtrlRead; Tests: T2 T18 T20  338 1/1 end else if (ctrl_gnt && prog_i) begin Tests: T1 T2 T3  339 1/1 state_d = StCtrlProg; Tests: T1 T8 T9  340 1/1 end else if (ctrl_gnt) begin Tests: T1 T2 T3  341 1/1 state_d = StCtrl; Tests: T23 T51 T10  342 end MISSING_ELSE 343 end 344 345 // Controller reads are very slow. 346 StCtrlRead: begin 347 1/1 if (rd_stage_data_valid) begin Tests: T2 T18 T20  348 1/1 ctrl_rsp_vld = 1'b1; Tests: T2 T18 T20  349 1/1 state_d = StIdle; Tests: T2 T18 T20  350 end MISSING_ELSE 351 end 352 353 // Controller program data may be packed based on 354 // address alignment 355 StCtrlProg: begin 356 1/1 reqs[PhyProg] = 1'b1; Tests: T1 T8 T9  357 1/1 if (prog_ack) begin Tests: T1 T8 T9  358 1/1 ctrl_rsp_vld = 1'b1; Tests: T1 T8 T9  359 1/1 state_d = StIdle; Tests: T1 T8 T9  360 end MISSING_ELSE 361 end 362 363 // other controller operations directly interface with flash 364 StCtrl: begin 365 1/1 reqs[PhyPgErase] = pg_erase_i; Tests: T23 T51 T10  366 1/1 reqs[PhyBkErase] = bk_erase_i; Tests: T23 T51 T10  367 1/1 if (erase_ack) begin Tests: T23 T51 T10  368 1/1 ctrl_rsp_vld = 1'b1; Tests: T23 T51 T10  369 1/1 state_d = StIdle; Tests: T23 T51 T10  370 end MISSING_ELSE 371 end 372 373 StDisable: begin 374 1/1 ctrl_fsm_idle = 1'b1; Tests: T7 T8 T9  375 1/1 state_d = StDisable; Tests: T7 T8 T9  376 end 377 378 default: begin 379 ctrl_fsm_idle = 1'b1; 380 fsm_err = 1'b1; 381 end 382 383 endcase // unique case (state_q) 384 end // always_comb 385 386 // determine spurious acks 387 // SEC_CM: PHY_ACK.CTRL.CONSISTENCY 388 1/1 assign spurious_ack_o = (ctrl_fsm_idle & ctrl_rsp_vld) | Tests: T1 T2 T3  389 ((host_outstanding == '0) & host_req_done_o); 390 391 // transactions coming from flash controller are always data type 392 1/1 assign muxed_addr = host_sel ? host_addr_i : addr_i; Tests: T1 T2 T3  393 1/1 assign muxed_part = host_sel ? flash_ctrl_pkg::FlashPartData : part_i; Tests: T1 T2 T3  394 1/1 assign muxed_scramble_en = host_sel ? host_scramble_en_i : scramble_en_i; Tests: T1 T2 T3  395 1/1 assign muxed_ecc_en = host_sel ? host_ecc_en_i : ecc_en_i; Tests: T1 T2 T3  396 1/1 assign rd_done_o = ctrl_rsp_vld & rd_i; Tests: T1 T2 T3  397 1/1 assign prog_done_o = ctrl_rsp_vld & prog_i; Tests: T1 T2 T3  398 1/1 assign erase_done_o = ctrl_rsp_vld & (pg_erase_i | bk_erase_i); Tests: T1 T2 T3  399 400 //////////////////////// 401 // read pipeline 402 //////////////////////// 403 404 logic flash_rd_req; 405 logic [FullDataWidth-1:0] flash_rdata; 406 logic rd_calc_req; 407 logic [BankAddrW-1:0] rd_calc_addr; 408 logic rd_op_req; 409 logic [DataWidth-1:0] rd_scrambled_data; 410 logic [DataWidth-1:0] rd_descrambled_data; 411 412 // if host grant is encountered, transactions return in-band 413 // error until all transactions are flushed. 414 logic phy_rd_err; 415 1/1 assign rd_err_o = phy_rd_err; Tests: T1 T2 T3  416 417 418 // After host_gnt_rd_err asserts, no more host requests 419 // are granted until all transactions are flushed. This means 420 // the last outstanding transaction is by definition the "error". 421 // 422 // If ctrl_fsm_idle inexplicably goes low while there are host transactions 423 // the transaction handling may be irreversibly broken. 424 // The host_oustanding_rd_err makes a best effort attempt to cleanly 425 // recover. It responds with in-band error controller transactions until the 426 // all pending transactions are flushed. 427 logic arb_host_gnt_err; 428 1/1 assign arb_host_gnt_err = (host_gnt_rd_err & host_outstanding == 1'b1) | Tests: T1 T2 T3  429 (host_outstanding_rd_err); 430 431 flash_phy_rd u_rd ( 432 .clk_i, 433 .rst_ni, 434 .buf_en_i(rd_buf_en_i), 435 //.req_i(reqs[PhyRead] | host_req), 436 .req_i(phy_req & (rd_i | host_req)), 437 .descramble_i(muxed_scramble_en), 438 .ecc_i(muxed_ecc_en), 439 .prog_i(reqs[PhyProg]), 440 .pg_erase_i(reqs[PhyPgErase]), 441 .bk_erase_i(reqs[PhyBkErase]), 442 .addr_i(muxed_addr), 443 .part_i(muxed_part), 444 // info select cannot be generated by the host 445 .info_sel_i(info_sel_i), 446 .rdy_o(rd_stage_rdy), 447 .data_valid_o(rd_stage_data_valid), 448 .data_err_o(phy_rd_err), 449 .data_host_o(rd_data_host_o), 450 .data_ctrl_o(rd_data_ctrl_o), 451 .idle_o(rd_stage_idle), 452 // a catastrophic arbitration error has been observed, just dump 453 // dump returns until all transactions are flushed. 454 .arb_err_i(arb_host_gnt_err), 455 .req_o(flash_rd_req), 456 .ack_i(ack), 457 .done_i(done), 458 .data_i(arb_host_gnt_err ? {FullDataWidth{1'b1}} : flash_rdata), 459 //scramble unit interface 460 .calc_req_o(rd_calc_req), 461 .calc_addr_o(rd_calc_addr), 462 .descramble_req_o(rd_op_req), 463 .scrambled_data_o(rd_scrambled_data), 464 .calc_ack_i(calc_ack), 465 .descramble_ack_i(op_ack), 466 .mask_i(scramble_mask), 467 .descrambled_data_i(rd_descrambled_data), 468 .ecc_single_err_o, 469 .ecc_addr_o, 470 .relbl_ecc_err_o, 471 .intg_ecc_err_o, 472 .fifo_err_o 473 ); 474 475 //////////////////////// 476 // program pipeline 477 //////////////////////// 478 479 logic [FullDataWidth-1:0] prog_full_data; 480 logic [DataWidth-1:0] prog_scrambled_data; 481 logic [DataWidth-1:0] prog_data; 482 logic prog_last; 483 logic flash_prog_req; 484 logic prog_calc_req; 485 logic prog_op_req; 486 logic prog_fsm_err; 487 488 if (WidthMultiple == 1) begin : gen_single_prog_data 489 assign flash_prog_req = reqs[PhyProg]; 490 assign prog_data = prog_data_i[BusWidth-1:0]; 491 assign prog_fsm_err = '0; 492 end else begin : gen_prog_data 493 494 // SEC_CM: MEM.INTEGRITY 495 flash_phy_prog u_prog ( 496 .clk_i, 497 .rst_ni, 498 .req_i(reqs[PhyProg]), 499 .disable_i(flash_disable[ProgFsmDisableIdx]), 500 .scramble_i(muxed_scramble_en), 501 .ecc_i(muxed_ecc_en), 502 .sel_i(addr_i[0 +: WordSelW]), 503 .data_i(prog_data_i), 504 .last_i(prog_last_i), 505 .ack_i(ack), 506 .done_i(done), 507 .calc_ack_i(calc_ack), 508 .scramble_ack_i(op_ack), 509 .mask_i(scramble_mask), 510 .scrambled_data_i(prog_scrambled_data), 511 .calc_req_o(prog_calc_req), 512 .scramble_req_o(prog_op_req), 513 .req_o(flash_prog_req), 514 .last_o(prog_last), 515 .ack_o(prog_ack), 516 .block_data_o(prog_data), 517 .data_o(prog_full_data), 518 .fsm_err_o(prog_fsm_err), 519 .intg_err_o(prog_intg_err_o) 520 ); 521 end 522 523 1/1 assign fsm_err_o = fsm_err | prog_fsm_err; Tests: T1 T2 T3  524 525 //////////////////////// 526 // erase pipeline 527 //////////////////////// 528 529 logic flash_pg_erase_req; 530 logic flash_bk_erase_req; 531 logic erase_suspend_req; 532 flash_phy_erase u_erase ( 533 .clk_i, 534 .rst_ni, 535 .pg_erase_req_i(reqs[PhyPgErase]), 536 .bk_erase_req_i(reqs[PhyBkErase]), 537 .suspend_req_i(erase_suspend_req_i), 538 .ack_o(erase_ack), 539 .pg_erase_req_o(flash_pg_erase_req), 540 .bk_erase_req_o(flash_bk_erase_req), 541 .suspend_req_o(erase_suspend_req), 542 .ack_i(ack), 543 .done_i(done) 544 ); 545 546 //////////////////////// 547 // bundle data to send to shared scrambling module 548 //////////////////////// 549 550 1/1 assign scramble_req_o.calc_req = prog_calc_req | rd_calc_req; Tests: T1 T2 T3  551 1/1 assign scramble_req_o.op_req = prog_op_req | rd_op_req; Tests: T1 T2 T3  552 1/1 assign scramble_req_o.op_type = prog_op_req ? ScrambleOp : DeScrambleOp; Tests: T1 T2 T3  553 1/1 assign scramble_req_o.addr = prog_calc_req ? muxed_addr[BusBankAddrW-1:LsbAddrBit] : Tests: T1 T2 T3  554 rd_calc_addr; 555 1/1 assign scramble_req_o.plain_data = prog_data; Tests: T1 T2 T3  556 1/1 assign scramble_req_o.scrambled_data = rd_scrambled_data; Tests: T1 T2 T3  557 1/1 assign calc_ack = scramble_rsp_i.calc_ack; Tests: T20 T23 T13  558 1/1 assign op_ack = scramble_rsp_i.op_ack; Tests: T1 T2 T3  559 1/1 assign scramble_mask = scramble_rsp_i.mask; Tests: T1 T2 T3  560 1/1 assign rd_descrambled_data = scramble_rsp_i.plain_data; Tests: T1 T2 T3  561 1/1 assign prog_scrambled_data = scramble_rsp_i.scrambled_data; Tests: T1 T2 T3  562 563 //////////////////////// 564 // Actual connection to flash phy 565 //////////////////////// 566 567 // Connections to the actual flash macro wrapper 568 1/1 assign prim_flash_req_o = '{ Tests: T1 T2 T3  569 rd_req: flash_rd_req, 570 prog_req: flash_prog_req, 571 prog_last: prog_last, 572 prog_type: prog_type_i, 573 pg_erase_req: flash_pg_erase_req, 574 bk_erase_req: flash_bk_erase_req, 575 erase_suspend_req: erase_suspend_req, 576 // high endurance enable does not cause changes to 577 // transaction protocol and is forwarded directly to the wrapper 578 he: he_en_i, 579 addr: muxed_addr[BusBankAddrW-1:LsbAddrBit], 580 part: muxed_part, 581 info_sel: info_sel_i, 582 prog_full_data: prog_full_data 583 }; 584 585 1/1 assign ack = prim_flash_rsp_i.ack; Tests: T1 T2 T3  586 1/1 assign done = prim_flash_rsp_i.done; Tests: T1 T2 T3  587 1/1 assign flash_rdata = prim_flash_rsp_i.rdata; Tests: T1 T2 T18 

Cond Coverage for Instance : tb.dut.u_eflash.gen_flash_cores[1].u_core
TotalCoveredPercent
Conditions1069185.85
Logical1069185.85
Non-Logical00
Event00

 LINE       196
 EXPRESSION (host_gnt && (muxed_part != FlashPartData))
             ----1---    --------------2--------------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT2,T20,T23
11Not Covered

 LINE       196
 SUB-EXPRESSION (muxed_part != FlashPartData)
                --------------1--------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       200
 EXPRESSION (((|host_outstanding)) & ((!ctrl_fsm_idle)))
             ----------1----------   ---------2--------
-1--2-StatusTests
01CoveredT1,T2,T18
10CoveredT2,T20,T23
11Not Covered

 LINE       205
 EXPRESSION (host_gnt_err_event | host_outstanding_err_event)
             ---------1--------   -------------2------------
-1--2-StatusTests
00CoveredT1,T2,T3
01Not Covered
10Not Covered

 LINE       217
 EXPRESSION (host_outstanding == '0)
            ------------1-----------
-1-StatusTests
0CoveredT2,T20,T23
1CoveredT1,T2,T3

 LINE       231
 EXPRESSION ((host_outstanding == '0) && ctrl_fsm_idle)
             ------------1-----------    ------2------
-1--2-StatusTests
01CoveredT2,T20,T23
10CoveredT1,T2,T18
11CoveredT1,T2,T3

 LINE       231
 SUB-EXPRESSION (host_outstanding == '0)
                ------------1-----------
-1-StatusTests
0CoveredT2,T20,T23
1CoveredT1,T2,T3

 LINE       242
 EXPRESSION (host_gnt && ((!host_req_done_o)) && (host_outstanding <= flash_phy_pkg::RspOrderDepth))
             ----1---    ----------2---------    -------------------------3------------------------
-1--2--3-StatusTests
011CoveredT1,T2,T3
101CoveredT2,T15,T54
110Not Covered
111CoveredT2,T20,T23

 LINE       242
 EXPRESSION (((!host_gnt)) && host_req_done_o && ((|host_outstanding)))
             ------1------    -------2-------    ----------3----------
-1--2--3-StatusTests
011CoveredT2,T15,T54
101CoveredT2,T20,T23
110Not Covered
111CoveredT2,T20,T23

 LINE       281
 EXPRESSION (host_req & host_req_rdy_o)
             ----1---   -------2------
-1--2-StatusTests
01CoveredT15,T129,T127
10CoveredT20,T23,T13
11CoveredT2,T20,T23

 LINE       282
 EXPRESSION (((|host_outstanding)) & rd_stage_data_valid)
             ----------1----------   ---------2---------
-1--2-StatusTests
01CoveredT2,T18,T20
10CoveredT2,T20,T23
11CoveredT2,T20,T23

 LINE       317
 EXPRESSION ((phy_req & host_req) ? rd_stage_rdy : rd_stage_idle)
             ----------1---------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT2,T20,T23

 LINE       317
 SUB-EXPRESSION (phy_req & host_req)
                 ---1---   ----2---
-1--2-StatusTests
01CoveredT238
10CoveredT1,T2,T18
11CoveredT2,T20,T23

 LINE       321
 EXPRESSION (req_i & host_gnt)
             --1--   ----2---
-1--2-StatusTests
01CoveredT2,T20,T23
10CoveredT1,T2,T18
11CoveredT15,T39,T47

 LINE       336
 EXPRESSION (ctrl_gnt && rd_i)
             ----1---    --2-
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT1,T23,T8
11CoveredT2,T18,T20

 LINE       338
 EXPRESSION (ctrl_gnt && prog_i)
             ----1---    ---2--
-1--2-StatusTests
01CoveredT12,T20,T13
10CoveredT23,T51,T46
11CoveredT1,T8,T9

 LINE       388
 EXPRESSION ((ctrl_fsm_idle & ctrl_rsp_vld) | ((host_outstanding == '0) & host_req_done_o))
             ---------------1--------------   ----------------------2---------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01Not Covered
10Not Covered

 LINE       388
 SUB-EXPRESSION (ctrl_fsm_idle & ctrl_rsp_vld)
                 ------1------   ------2-----
-1--2-StatusTests
01CoveredT1,T2,T18
10CoveredT1,T2,T3
11Not Covered

 LINE       388
 SUB-EXPRESSION ((host_outstanding == '0) & host_req_done_o)
                 ------------1-----------   -------2-------
-1--2-StatusTests
01CoveredT2,T20,T23
10CoveredT1,T2,T3
11Not Covered

 LINE       388
 SUB-EXPRESSION (host_outstanding == '0)
                ------------1-----------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       392
 EXPRESSION (host_sel ? host_addr_i : addr_i)
             ----1---
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT2,T20,T23

 LINE       393
 EXPRESSION (host_sel ? FlashPartData : part_i)
             ----1---
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT2,T20,T23

 LINE       394
 EXPRESSION (host_sel ? host_scramble_en_i : scramble_en_i)
             ----1---
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT2,T20,T23

 LINE       395
 EXPRESSION (host_sel ? host_ecc_en_i : ecc_en_i)
             ----1---
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT2,T20,T23

 LINE       396
 EXPRESSION (ctrl_rsp_vld & rd_i)
             ------1-----   --2-
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT1,T23,T8
11CoveredT2,T18,T20

 LINE       397
 EXPRESSION (ctrl_rsp_vld & prog_i)
             ------1-----   ---2--
-1--2-StatusTests
01CoveredT1,T12,T20
10CoveredT2,T18,T20
11CoveredT1,T8,T9

 LINE       398
 EXPRESSION (ctrl_rsp_vld & (pg_erase_i | bk_erase_i))
             ------1-----   ------------2------------
-1--2-StatusTests
01CoveredT12,T23,T14
10CoveredT1,T2,T18
11CoveredT23,T51,T46

 LINE       398
 SUB-EXPRESSION (pg_erase_i | bk_erase_i)
                 -----1----   -----2----
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT74,T25,T65
10CoveredT12,T23,T14

 LINE       428
 EXPRESSION ((host_gnt_rd_err & (host_outstanding == 1'b1)) | host_outstanding_rd_err)
             -----------------------1----------------------   -----------2-----------
-1--2-StatusTests
00CoveredT1,T2,T3
01Not Covered
10Not Covered

 LINE       428
 SUB-EXPRESSION (host_gnt_rd_err & (host_outstanding == 1'b1))
                 -------1-------   -------------2------------
-1--2-StatusTests
01CoveredT2,T20,T23
10Not Covered
11Not Covered

 LINE       428
 SUB-EXPRESSION (host_outstanding == 1'b1)
                -------------1------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT2,T20,T23

 LINE       431
 EXPRESSION (phy_req & (rd_i | host_req))
             ---1---   --------2--------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT1,T23,T8
11CoveredT2,T18,T20

 LINE       431
 SUB-EXPRESSION (rd_i | host_req)
                 --1-   ----2---
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT2,T20,T23
10CoveredT1,T2,T3

 LINE       431
 EXPRESSION (arb_host_gnt_err ? ({flash_phy_pkg::FullDataWidth {1'b1}}) : flash_rdata)
             --------1-------
-1-StatusTests
0CoveredT1,T2,T3
1Not Covered

 LINE       523
 EXPRESSION (fsm_err | prog_fsm_err)
             ---1---   ------2-----
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT16,T43,T44
10CoveredT16,T43,T44

 LINE       550
 EXPRESSION (prog_calc_req | rd_calc_req)
             ------1------   -----2-----
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT20,T23,T13
10CoveredT8,T9,T27

 LINE       551
 EXPRESSION (prog_op_req | rd_op_req)
             -----1-----   ----2----
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT20,T23,T13
10CoveredT8,T9,T27

 LINE       552
 EXPRESSION (prog_op_req ? ScrambleOp : DeScrambleOp)
             -----1-----
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT8,T9,T27

 LINE       553
 EXPRESSION (prog_calc_req ? muxed_addr[(flash_phy_pkg::BusBankAddrW - 1):flash_phy_pkg::LsbAddrBit] : rd_calc_addr)
             ------1------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT8,T9,T27

FSM Coverage for Instance : tb.dut.u_eflash.gen_flash_cores[1].u_core
Summary for FSM :: state_q
TotalCoveredPercent
States 5 5 100.00 (Not included in score)
Transitions 7 7 100.00
Sequences 0 0

State, Transition and Sequence Details for FSM :: state_q
states   Line No.   Covered   Tests   
StCtrl 341 Covered T23,T51,T46
StCtrlProg 339 Covered T1,T8,T9
StCtrlRead 337 Covered T2,T18,T20
StDisable 335 Covered T7,T8,T9
StIdle 349 Covered T1,T2,T3


transitions   Line No.   Covered   Tests   
StCtrl->StIdle 369 Covered T23,T51,T46
StCtrlProg->StIdle 359 Covered T1,T8,T9
StCtrlRead->StIdle 349 Covered T2,T18,T20
StIdle->StCtrl 341 Covered T23,T51,T46
StIdle->StCtrlProg 339 Covered T1,T8,T9
StIdle->StCtrlRead 337 Covered T2,T18,T20
StIdle->StDisable 335 Covered T7,T8,T9



Branch Coverage for Instance : tb.dut.u_eflash.gen_flash_cores[1].u_core
Line No.TotalCoveredPercent
Branches 46 45 97.83
TERNARY 317 2 2 100.00
TERNARY 392 2 2 100.00
TERNARY 393 2 2 100.00
TERNARY 394 2 2 100.00
TERNARY 395 2 2 100.00
TERNARY 552 2 2 100.00
TERNARY 553 2 2 100.00
TERNARY 431 2 1 50.00
IF 152 4 4 100.00
IF 165 2 2 100.00
IF 203 3 3 100.00
IF 215 4 4 100.00
IF 229 4 4 100.00
CASE 331 13 13 100.00


317 assign phy_rdy = phy_req & host_req ? rd_stage_rdy : rd_stage_idle; -1- ==> ==>

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


392 assign muxed_addr = host_sel ? host_addr_i : addr_i; -1- ==> ==>

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


393 assign muxed_part = host_sel ? flash_ctrl_pkg::FlashPartData : part_i; -1- ==> ==>

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


394 assign muxed_scramble_en = host_sel ? host_scramble_en_i : scramble_en_i; -1- ==> ==>

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


395 assign muxed_ecc_en = host_sel ? host_ecc_en_i : ecc_en_i; -1- ==> ==>

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


552 assign scramble_req_o.op_type = prog_op_req ? ScrambleOp : DeScrambleOp; -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T8,T9,T27
0 Covered T1,T2,T3


553 assign scramble_req_o.addr = prog_calc_req ? muxed_addr[BusBankAddrW-1:LsbAddrBit] : -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T8,T9,T27
0 Covered T1,T2,T3


431 flash_phy_rd u_rd ( 432 .clk_i, 433 .rst_ni, 434 .buf_en_i(rd_buf_en_i), 435 //.req_i(reqs[PhyRead] | host_req), 436 .req_i(phy_req & (rd_i | host_req)), 437 .descramble_i(muxed_scramble_en), 438 .ecc_i(muxed_ecc_en), 439 .prog_i(reqs[PhyProg]), 440 .pg_erase_i(reqs[PhyPgErase]), 441 .bk_erase_i(reqs[PhyBkErase]), 442 .addr_i(muxed_addr), 443 .part_i(muxed_part), 444 // info select cannot be generated by the host 445 .info_sel_i(info_sel_i), 446 .rdy_o(rd_stage_rdy), 447 .data_valid_o(rd_stage_data_valid), 448 .data_err_o(phy_rd_err), 449 .data_host_o(rd_data_host_o), 450 .data_ctrl_o(rd_data_ctrl_o), 451 .idle_o(rd_stage_idle), 452 // a catastrophic arbitration error has been observed, just dump 453 // dump returns until all transactions are flushed. 454 .arb_err_i(arb_host_gnt_err), 455 .req_o(flash_rd_req), 456 .ack_i(ack), 457 .done_i(done), 458 .data_i(arb_host_gnt_err ? {FullDataWidth{1'b1}} : flash_rdata), -1- ==> ==>

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


152 if (!rst_ni) begin -1- 153 arb_cnt <= '0; ==> 154 end else if (ctrl_rsp_vld) begin -2- 155 arb_cnt <= '0; ==> 156 end else if (inc_arb_cnt) begin -3- 157 arb_cnt <= arb_cnt + 1'b1; ==> 158 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
1 - - Covered T1,T2,T3
0 1 - Covered T1,T2,T18
0 0 1 Covered T15,T10,T39
0 0 0 Covered T1,T2,T3


165 `PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, StIdle) -1- ==> ==>

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


203 if (!rst_ni) begin -1- 204 host_gnt_err_o <= '0; ==> 205 end else if (host_gnt_err_event | host_outstanding_err_event) begin -2- 206 host_gnt_err_o <= 1'b1; ==> 207 end MISSING_ELSE ==>

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


215 if (!rst_ni) begin -1- 216 host_gnt_rd_err <= '0; ==> 217 end else if (host_outstanding == '0) begin -2- 218 host_gnt_rd_err <= '0; ==> 219 end else if (host_gnt_err_event) begin -3- 220 host_gnt_rd_err <= 1'b1; ==> 221 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
1 - - Covered T1,T2,T3
0 1 - Covered T1,T2,T3
0 0 1 Covered T10
0 0 0 Covered T2,T20,T23


229 if (!rst_ni) begin -1- 230 host_outstanding_rd_err <= '0; ==> 231 end else if (host_outstanding == '0 && ctrl_fsm_idle) begin -2- 232 host_outstanding_rd_err <= '0; ==> 233 end else if (host_outstanding_err_event) begin -3- 234 host_outstanding_rd_err <= 1'b1; ==> 235 end MISSING_ELSE ==>

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


331 unique case (state_q) -1- 332 StIdle: begin 333 ctrl_fsm_idle = 1'b1; 334 if (mubi4_test_true_loose(flash_disable[FsmDisableIdx])) begin -2- 335 state_d = StDisable; ==> 336 end else if (ctrl_gnt && rd_i) begin -3- 337 state_d = StCtrlRead; ==> 338 end else if (ctrl_gnt && prog_i) begin -4- 339 state_d = StCtrlProg; ==> 340 end else if (ctrl_gnt) begin -5- 341 state_d = StCtrl; ==> 342 end MISSING_ELSE ==> 343 end 344 345 // Controller reads are very slow. 346 StCtrlRead: begin 347 if (rd_stage_data_valid) begin -6- 348 ctrl_rsp_vld = 1'b1; ==> 349 state_d = StIdle; 350 end MISSING_ELSE ==> 351 end 352 353 // Controller program data may be packed based on 354 // address alignment 355 StCtrlProg: begin 356 reqs[PhyProg] = 1'b1; 357 if (prog_ack) begin -7- 358 ctrl_rsp_vld = 1'b1; ==> 359 state_d = StIdle; 360 end MISSING_ELSE ==> 361 end 362 363 // other controller operations directly interface with flash 364 StCtrl: begin 365 reqs[PhyPgErase] = pg_erase_i; 366 reqs[PhyBkErase] = bk_erase_i; 367 if (erase_ack) begin -8- 368 ctrl_rsp_vld = 1'b1; ==> 369 state_d = StIdle; 370 end MISSING_ELSE ==> 371 end 372 373 StDisable: begin 374 ctrl_fsm_idle = 1'b1; ==> 375 state_d = StDisable; 376 end 377 378 default: begin 379 ctrl_fsm_idle = 1'b1; ==>

Branches:
-1--2--3--4--5--6--7--8-StatusTests
StIdle 1 - - - - - - Covered T7,T8,T9
StIdle 0 1 - - - - - Covered T2,T18,T20
StIdle 0 0 1 - - - - Covered T1,T8,T9
StIdle 0 0 0 1 - - - Covered T23,T51,T10
StIdle 0 0 0 0 - - - Covered T1,T2,T3
StCtrlRead - - - - 1 - - Covered T2,T18,T20
StCtrlRead - - - - 0 - - Covered T2,T18,T20
StCtrlProg - - - - - 1 - Covered T1,T8,T9
StCtrlProg - - - - - 0 - Covered T1,T8,T9
StCtrl - - - - - - 1 Covered T23,T51,T10
StCtrl - - - - - - 0 Covered T23,T51,T10
StDisable - - - - - - - Covered T7,T8,T9
default - - - - - - - Covered T10,T16,T43


Assert Coverage for Instance : tb.dut.u_eflash.gen_flash_cores[1].u_core
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 8 8 100.00 8 100.00
Cover properties 0 0 0
Cover sequences 0 0 0
Total 8 8 100.00 8 100.00




Assertion Details

Name   Attempts   Real Successes   Failures   Incomplete   
ArbCntMax_A 388255766 1448076 0 0
CtrlPrio_A 388255766 1448076 0 0
HostTransIdleChk_A 388255766 21987616 0 0
NoRemainder_A 1057 1057 0 0
OneHotReqs_A 388255766 387415641 0 0
Pow2Multiple_A 1057 1057 0 0
RdTxnCheck_A 388093290 387253165 0 0
u_state_regs_A 388255766 387415641 0 0


ArbCntMax_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 388255766 1448076 0 0
T10 519 0 0 0
T15 29510 5 0 0
T27 225589 0 0 0
T39 0 234 0 0
T41 0 1269 0 0
T47 0 1181 0 0
T48 0 1193 0 0
T51 162291 0 0 0
T54 5236 0 0 0
T55 0 1405 0 0
T58 1526 0 0 0
T59 3485 0 0 0
T64 2168 0 0 0
T66 0 5 0 0
T98 59772 0 0 0
T99 0 7213 0 0
T110 1127 0 0 0
T130 0 1326 0 0
T217 0 1390 0 0

CtrlPrio_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 388255766 1448076 0 0
T10 519 0 0 0
T15 29510 5 0 0
T27 225589 0 0 0
T39 0 234 0 0
T41 0 1269 0 0
T47 0 1181 0 0
T48 0 1193 0 0
T51 162291 0 0 0
T54 5236 0 0 0
T55 0 1405 0 0
T58 1526 0 0 0
T59 3485 0 0 0
T64 2168 0 0 0
T66 0 5 0 0
T98 59772 0 0 0
T99 0 7213 0 0
T110 1127 0 0 0
T130 0 1326 0 0
T217 0 1390 0 0

HostTransIdleChk_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 388255766 21987616 0 0
T2 10848 216 0 0
T3 1224 0 0 0
T4 890 0 0 0
T7 972 0 0 0
T10 0 12 0 0
T12 2002 0 0 0
T13 0 20 0 0
T15 0 154 0 0
T17 1544 0 0 0
T18 1950 0 0 0
T19 2303 0 0 0
T20 1473 8 0 0
T23 7299 34 0 0
T39 0 510 0 0
T54 0 350 0 0
T58 0 10 0 0
T59 0 151 0 0

NoRemainder_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1057 1057 0 0
T1 1 1 0 0
T2 1 1 0 0
T3 1 1 0 0
T4 1 1 0 0
T7 1 1 0 0
T12 1 1 0 0
T17 1 1 0 0
T18 1 1 0 0
T19 1 1 0 0
T20 1 1 0 0

OneHotReqs_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 388255766 387415641 0 0
T1 3906 3853 0 0
T2 10848 10778 0 0
T3 1224 1167 0 0
T4 890 840 0 0
T7 972 922 0 0
T12 2002 1944 0 0
T17 1544 1489 0 0
T18 1950 1866 0 0
T19 2303 2211 0 0
T20 1473 1338 0 0

Pow2Multiple_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1057 1057 0 0
T1 1 1 0 0
T2 1 1 0 0
T3 1 1 0 0
T4 1 1 0 0
T7 1 1 0 0
T12 1 1 0 0
T17 1 1 0 0
T18 1 1 0 0
T19 1 1 0 0
T20 1 1 0 0

RdTxnCheck_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 388093290 387253165 0 0
T1 3906 3853 0 0
T2 10848 10778 0 0
T3 1224 1167 0 0
T4 890 840 0 0
T7 972 922 0 0
T12 2002 1944 0 0
T17 1544 1489 0 0
T18 1950 1866 0 0
T19 2303 2211 0 0
T20 1473 1338 0 0

u_state_regs_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 388255766 387415641 0 0
T1 3906 3853 0 0
T2 10848 10778 0 0
T3 1224 1167 0 0
T4 890 840 0 0
T7 972 922 0 0
T12 2002 1944 0 0
T17 1544 1489 0 0
T18 1950 1866 0 0
T19 2303 2211 0 0
T20 1473 1338 0 0

Line Coverage for Instance : tb.dut.u_eflash.gen_flash_cores[0].u_core
Line No.TotalCoveredPercent
TOTAL8989100.00
ALWAYS15266100.00
ALWAYS16533100.00
CONT_ASSIGN19611100.00
CONT_ASSIGN20011100.00
ALWAYS20344100.00
ALWAYS21566100.00
ALWAYS22966100.00
CONT_ASSIGN27711100.00
CONT_ASSIGN28011100.00
CONT_ASSIGN28111100.00
CONT_ASSIGN28211100.00
CONT_ASSIGN28711100.00
CONT_ASSIGN31711100.00
CONT_ASSIGN32111100.00
ALWAYS3252929100.00
CONT_ASSIGN38811100.00
CONT_ASSIGN39211100.00
CONT_ASSIGN39311100.00
CONT_ASSIGN39411100.00
CONT_ASSIGN39511100.00
CONT_ASSIGN39611100.00
CONT_ASSIGN39711100.00
CONT_ASSIGN39811100.00
CONT_ASSIGN41511100.00
CONT_ASSIGN42811100.00
CONT_ASSIGN52311100.00
CONT_ASSIGN55011100.00
CONT_ASSIGN55111100.00
CONT_ASSIGN55211100.00
CONT_ASSIGN55311100.00
CONT_ASSIGN55511100.00
CONT_ASSIGN55611100.00
CONT_ASSIGN55711100.00
CONT_ASSIGN55811100.00
CONT_ASSIGN55911100.00
CONT_ASSIGN56011100.00
CONT_ASSIGN56111100.00
CONT_ASSIGN56811100.00
CONT_ASSIGN58511100.00
CONT_ASSIGN58611100.00
CONT_ASSIGN58711100.00

151 always_ff @(posedge clk_i or negedge rst_ni) begin 152 1/1 if (!rst_ni) begin Tests: T1 T2 T3  153 1/1 arb_cnt <= '0; Tests: T1 T2 T3  154 1/1 end else if (ctrl_rsp_vld) begin Tests: T1 T2 T3  155 1/1 arb_cnt <= '0; Tests: T1 T2 T3  156 1/1 end else if (inc_arb_cnt) begin Tests: T1 T2 T3  157 1/1 arb_cnt <= arb_cnt + 1'b1; Tests: T15 T10 T58  158 end MISSING_ELSE 159 end 160 161 import prim_mubi_pkg::mubi4_test_false_strict; 162 import prim_mubi_pkg::mubi4_test_true_loose; 163 164 // SEC_CM: PHY.FSM.SPARSE 165 3/3 `PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, StIdle) Tests: T1 T2 T3  | T1 T2 T3  | T1 T2 T3 
PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, StIdle): 165.1 `ifdef SIMULATION 165.2 prim_sparse_fsm_flop #( 165.3 .StateEnumT(state_e), 165.4 .Width($bits(state_e)), 165.5 .ResetValue($bits(state_e)'(StIdle)), 165.6 .EnableAlertTriggerSVA(1), 165.7 .CustomForceName("state_q") 165.8 ) u_state_regs ( 165.9 .clk_i ( clk_i ), 165.10 .rst_ni ( rst_ni ), 165.11 .state_i ( state_d ), 165.12 .state_o ( ) 165.13 ); 165.14 always_ff @(posedge clk_i or negedge rst_ni) begin 165.15 1/1 if (!rst_ni) begin Tests: T1 T2 T3  165.16 1/1 state_q <= StIdle; Tests: T1 T2 T3  165.17 end else begin 165.18 1/1 state_q <= state_d; Tests: T1 T2 T3  165.19 end 165.20 end 165.21 u_state_regs_A: assert property (@(posedge clk_i) disable iff ((!rst_ni) !== '0) (state_q === u_state_regs.state_o)) 165.22 else begin 165.23 `ifdef UVM 165.24 uvm_pkg::uvm_report_error("ASSERT FAILED", "u_state_regs_A", uvm_pkg::UVM_NONE, 165.25 "../src/lowrisc_opentitan_top_earlgrey_flash_ctrl_0.1/rtl/flash_phy_core.sv", 165, "", 1); 165.26 `else 165.27 $error("%0t: (%0s:%0d) [%m] [ASSERT FAILED] %0s", $time, `__FILE__, `__LINE__, 165.28 `PRIM_STRINGIFY(u_state_regs_A)); 165.29 `endif 165.30 end 165.31 `else 165.32 prim_sparse_fsm_flop #( 165.33 .StateEnumT(state_e), 165.34 .Width($bits(state_e)), 165.35 .ResetValue($bits(state_e)'(StIdle)), 165.36 .EnableAlertTriggerSVA(1) 165.37 ) u_state_regs ( 165.38 .clk_i ( `PRIM_FLOP_CLK ), 165.39 .rst_ni ( `PRIM_FLOP_RST ), 165.40 .state_i ( state_d ), 165.41 .state_o ( state_q ) 165.42 ); 165.43 `endif166 167 typedef enum logic [2:0] { 168 HostDisableIdx, 169 CtrlDisableIdx, 170 FsmDisableIdx, 171 ProgFsmDisableIdx, 172 LastDisableIdx 173 } phy_core_disable_e; 174 175 prim_mubi_pkg::mubi4_t [LastDisableIdx-1:0] flash_disable; 176 prim_mubi4_sync #( 177 .NumCopies(int'(LastDisableIdx)), 178 .AsyncOn(0) 179 ) u_disable_buf ( 180 .clk_i, 181 .rst_ni, 182 .mubi_i(flash_disable_i), 183 .mubi_o(flash_disable) 184 ); 185 186 // Oustanding width is slightly larger to ensure a faulty increment is able to reach 187 // the higher value. For example if RspOrderDepth were 3, a clog2 of 3 would still be 2 188 // and not allow the counter to increment to 4. 189 localparam int OutstandingRdWidth = $clog2(RspOrderDepth+2); 190 logic [OutstandingRdWidth-1:0] host_outstanding; 191 logic ctrl_fsm_idle; 192 logic host_req; 193 // SEC_CM: PHY_HOST_GRANT.CTRL.CONSISTENCY 194 // A host transaction was granted to the muxed partition, this is illegal 195 logic host_gnt_err_event; 196 1/1 assign host_gnt_err_event = (host_gnt && muxed_part != flash_ctrl_pkg::FlashPartData); Tests: T1 T2 T3  197 // Controller fsm became non idle when there are pending host transactions, this is 198 // illegal. 199 logic host_outstanding_err_event; 200 1/1 assign host_outstanding_err_event = |host_outstanding & !ctrl_fsm_idle; Tests: T1 T2 T3  201 202 always_ff @(posedge clk_i or negedge rst_ni) begin 203 1/1 if (!rst_ni) begin Tests: T1 T2 T3  204 1/1 host_gnt_err_o <= '0; Tests: T1 T2 T3  205 1/1 end else if (host_gnt_err_event | host_outstanding_err_event) begin Tests: T1 T2 T3  206 1/1 host_gnt_err_o <= 1'b1; Tests: T10 T180 T228  207 end MISSING_ELSE 208 end 209 210 // When host grant errors occur, also create in band error responses. 211 // The error condition is held until all existing host transactions are 212 // processed. 213 logic host_gnt_rd_err; 214 always_ff @(posedge clk_i or negedge rst_ni) begin 215 1/1 if (!rst_ni) begin Tests: T1 T2 T3  216 1/1 host_gnt_rd_err <= '0; Tests: T1 T2 T3  217 1/1 end else if (host_outstanding == '0) begin Tests: T1 T2 T3  218 1/1 host_gnt_rd_err <= '0; Tests: T1 T2 T3  219 1/1 end else if (host_gnt_err_event) begin Tests: T2 T3 T20  220 1/1 host_gnt_rd_err <= 1'b1; Tests: T10 T228 T11  221 end MISSING_ELSE 222 end 223 224 // When host outstanding errors occur, also create in band error responses. 225 // The error condition is held until all existing host and controller 226 // transactions are processed. 227 logic host_outstanding_rd_err; 228 always_ff @(posedge clk_i or negedge rst_ni) begin 229 1/1 if (!rst_ni) begin Tests: T1 T2 T3  230 1/1 host_outstanding_rd_err <= '0; Tests: T1 T2 T3  231 1/1 end else if (host_outstanding == '0 && ctrl_fsm_idle) begin Tests: T1 T2 T3  232 1/1 host_outstanding_rd_err <= '0; Tests: T1 T2 T3  233 1/1 end else if (host_outstanding_err_event) begin Tests: T1 T2 T3  234 1/1 host_outstanding_rd_err <= 1'b1; Tests: T10 T11  235 end MISSING_ELSE 236 end 237 238 // SEC_CM: PHY_HOST_GRANT.CTRL.CONSISTENCY 239 prim_count #( 240 .Width(OutstandingRdWidth), 241 .ResetValue('0) 242 ) u_host_outstanding_cnt ( 243 .clk_i, 244 .rst_ni, 245 .clr_i('0), 246 .set_i('0), 247 .set_cnt_i('0), 248 .incr_en_i(host_gnt && !host_req_done_o && (host_outstanding <= RspOrderDepth)), 249 .decr_en_i(!host_gnt && host_req_done_o && |host_outstanding), 250 .step_i(OutstandingRdWidth'(1'b1)), 251 .commit_i(1'b1), 252 .cnt_o(host_outstanding), 253 .cnt_after_commit_o(), 254 .err_o(cnt_err_o) 255 ); 256 257 // If host_outstanding is non-zero, the controller fsm must be idle.. 258 // This assertion needs to be disabled for sec_cm testing 259 `ASSERT(HostTransIdleChk_A, |host_outstanding |-> ctrl_fsm_idle) 260 261 //always_ff @(posedge clk_i or negedge rst_ni) begin 262 // if (!rst_ni) begin 263 // host_outstanding <= '0; 264 // end else if (host_gnt && !host_req_done_o && (host_outstanding <= RspOrderDepth)) begin 265 // host_outstanding <= host_outstanding + 1'b1; 266 // end else if (!host_gnt && host_req_done_o && |host_outstanding) begin 267 // host_outstanding <= host_outstanding - 1'b1; 268 // end 269 //end 270 271 `ASSERT(RdTxnCheck_A, host_outstanding <= RspOrderDepth) 272 273 // The host request is suppressed under a variety of conditions: 274 // 1. If a controller transaction is already ongoing. 275 // 2. If a grant or outstanding error has already been observed but not yet 276 // fully processed. 277 1/1 assign host_req = host_req_i & (arb_cnt < ArbCnt[CntWidth-1:0]) & ctrl_fsm_idle & Tests: T1 T2 T3  278 !host_gnt_rd_err & !host_outstanding_rd_err & 279 mubi4_test_false_strict(flash_disable[HostDisableIdx]); 280 1/1 assign host_sel = host_req; Tests: T1 T2 T3  281 1/1 assign host_gnt = host_req & host_req_rdy_o; Tests: T1 T2 T3  282 1/1 assign host_req_done_o = |host_outstanding & rd_stage_data_valid; Tests: T1 T2 T3  283 284 // controller request can only win after the entire read pipeline 285 // clears 286 logic ctrl_req; 287 1/1 assign ctrl_req = req_i & rd_stage_idle & Tests: T1 T2 T3  288 !host_gnt_rd_err & !host_outstanding_rd_err & 289 mubi4_test_false_strict(flash_disable[CtrlDisableIdx]); 290 291 logic [1:0] data_tie_off [2]; 292 assign data_tie_off = '{default: '0}; 293 294 // SEC_CM: PHY_ARBITER.CTRL.REDUN 295 logic phy_req; 296 logic phy_rdy; 297 298 prim_arbiter_tree_dup #( 299 .N(2), 300 .DW(2), 301 .EnDataPort('0), 302 .FixedArb(1) 303 ) u_host_arb ( 304 .clk_i, 305 .rst_ni, 306 .req_chk_i('0), 307 .req_i({ctrl_req, host_req}), 308 .data_i(data_tie_off), 309 .gnt_o({ctrl_gnt, host_req_rdy_o}), 310 .idx_o(), 311 .valid_o(phy_req), 312 .data_o(), 313 .ready_i(phy_rdy), 314 .err_o(arb_err_o) 315 ); 316 317 1/1 assign phy_rdy = phy_req & host_req ? rd_stage_rdy : rd_stage_idle; Tests: T1 T2 T3  318 319 320 // if request happens at the same time as a host grant, increment count 321 1/1 assign inc_arb_cnt = req_i & host_gnt; Tests: T1 T2 T3  322 323 logic fsm_err; 324 always_comb begin 325 1/1 state_d = state_q; Tests: T1 T2 T3  326 1/1 reqs = '0; Tests: T1 T2 T3  327 1/1 ctrl_rsp_vld = '0; Tests: T1 T2 T3  328 1/1 fsm_err = '0; Tests: T1 T2 T3  329 1/1 ctrl_fsm_idle = '0; Tests: T1 T2 T3  330 331 1/1 unique case (state_q) Tests: T1 T2 T3  332 StIdle: begin 333 1/1 ctrl_fsm_idle = 1'b1; Tests: T1 T2 T3  334 1/1 if (mubi4_test_true_loose(flash_disable[FsmDisableIdx])) begin Tests: T1 T2 T3  335 1/1 state_d = StDisable; Tests: T7 T8 T9  336 1/1 end else if (ctrl_gnt && rd_i) begin Tests: T1 T2 T3  337 1/1 state_d = StCtrlRead; Tests: T1 T2 T3  338 1/1 end else if (ctrl_gnt && prog_i) begin Tests: T1 T2 T3  339 1/1 state_d = StCtrlProg; Tests: T12 T20 T13  340 1/1 end else if (ctrl_gnt) begin Tests: T1 T2 T3  341 1/1 state_d = StCtrl; Tests: T12 T23 T14  342 end MISSING_ELSE 343 end 344 345 // Controller reads are very slow. 346 StCtrlRead: begin 347 1/1 if (rd_stage_data_valid) begin Tests: T1 T2 T3  348 1/1 ctrl_rsp_vld = 1'b1; Tests: T1 T2 T3  349 1/1 state_d = StIdle; Tests: T1 T2 T3  350 end MISSING_ELSE 351 end 352 353 // Controller program data may be packed based on 354 // address alignment 355 StCtrlProg: begin 356 1/1 reqs[PhyProg] = 1'b1; Tests: T12 T20 T13  357 1/1 if (prog_ack) begin Tests: T12 T20 T13  358 1/1 ctrl_rsp_vld = 1'b1; Tests: T12 T20 T13  359 1/1 state_d = StIdle; Tests: T12 T20 T13  360 end MISSING_ELSE 361 end 362 363 // other controller operations directly interface with flash 364 StCtrl: begin 365 1/1 reqs[PhyPgErase] = pg_erase_i; Tests: T12 T23 T14  366 1/1 reqs[PhyBkErase] = bk_erase_i; Tests: T12 T23 T14  367 1/1 if (erase_ack) begin Tests: T12 T23 T14  368 1/1 ctrl_rsp_vld = 1'b1; Tests: T12 T23 T14  369 1/1 state_d = StIdle; Tests: T12 T23 T14  370 end MISSING_ELSE 371 end 372 373 StDisable: begin 374 1/1 ctrl_fsm_idle = 1'b1; Tests: T7 T8 T9  375 1/1 state_d = StDisable; Tests: T7 T8 T9  376 end 377 378 default: begin 379 ctrl_fsm_idle = 1'b1; 380 fsm_err = 1'b1; 381 end 382 383 endcase // unique case (state_q) 384 end // always_comb 385 386 // determine spurious acks 387 // SEC_CM: PHY_ACK.CTRL.CONSISTENCY 388 1/1 assign spurious_ack_o = (ctrl_fsm_idle & ctrl_rsp_vld) | Tests: T1 T2 T3  389 ((host_outstanding == '0) & host_req_done_o); 390 391 // transactions coming from flash controller are always data type 392 1/1 assign muxed_addr = host_sel ? host_addr_i : addr_i; Tests: T1 T2 T3  393 1/1 assign muxed_part = host_sel ? flash_ctrl_pkg::FlashPartData : part_i; Tests: T1 T2 T3  394 1/1 assign muxed_scramble_en = host_sel ? host_scramble_en_i : scramble_en_i; Tests: T1 T2 T3  395 1/1 assign muxed_ecc_en = host_sel ? host_ecc_en_i : ecc_en_i; Tests: T1 T2 T3  396 1/1 assign rd_done_o = ctrl_rsp_vld & rd_i; Tests: T1 T2 T3  397 1/1 assign prog_done_o = ctrl_rsp_vld & prog_i; Tests: T1 T2 T3  398 1/1 assign erase_done_o = ctrl_rsp_vld & (pg_erase_i | bk_erase_i); Tests: T1 T2 T3  399 400 //////////////////////// 401 // read pipeline 402 //////////////////////// 403 404 logic flash_rd_req; 405 logic [FullDataWidth-1:0] flash_rdata; 406 logic rd_calc_req; 407 logic [BankAddrW-1:0] rd_calc_addr; 408 logic rd_op_req; 409 logic [DataWidth-1:0] rd_scrambled_data; 410 logic [DataWidth-1:0] rd_descrambled_data; 411 412 // if host grant is encountered, transactions return in-band 413 // error until all transactions are flushed. 414 logic phy_rd_err; 415 1/1 assign rd_err_o = phy_rd_err; Tests: T1 T2 T3  416 417 418 // After host_gnt_rd_err asserts, no more host requests 419 // are granted until all transactions are flushed. This means 420 // the last outstanding transaction is by definition the "error". 421 // 422 // If ctrl_fsm_idle inexplicably goes low while there are host transactions 423 // the transaction handling may be irreversibly broken. 424 // The host_oustanding_rd_err makes a best effort attempt to cleanly 425 // recover. It responds with in-band error controller transactions until the 426 // all pending transactions are flushed. 427 logic arb_host_gnt_err; 428 1/1 assign arb_host_gnt_err = (host_gnt_rd_err & host_outstanding == 1'b1) | Tests: T1 T2 T3  429 (host_outstanding_rd_err); 430 431 flash_phy_rd u_rd ( 432 .clk_i, 433 .rst_ni, 434 .buf_en_i(rd_buf_en_i), 435 //.req_i(reqs[PhyRead] | host_req), 436 .req_i(phy_req & (rd_i | host_req)), 437 .descramble_i(muxed_scramble_en), 438 .ecc_i(muxed_ecc_en), 439 .prog_i(reqs[PhyProg]), 440 .pg_erase_i(reqs[PhyPgErase]), 441 .bk_erase_i(reqs[PhyBkErase]), 442 .addr_i(muxed_addr), 443 .part_i(muxed_part), 444 // info select cannot be generated by the host 445 .info_sel_i(info_sel_i), 446 .rdy_o(rd_stage_rdy), 447 .data_valid_o(rd_stage_data_valid), 448 .data_err_o(phy_rd_err), 449 .data_host_o(rd_data_host_o), 450 .data_ctrl_o(rd_data_ctrl_o), 451 .idle_o(rd_stage_idle), 452 // a catastrophic arbitration error has been observed, just dump 453 // dump returns until all transactions are flushed. 454 .arb_err_i(arb_host_gnt_err), 455 .req_o(flash_rd_req), 456 .ack_i(ack), 457 .done_i(done), 458 .data_i(arb_host_gnt_err ? {FullDataWidth{1'b1}} : flash_rdata), 459 //scramble unit interface 460 .calc_req_o(rd_calc_req), 461 .calc_addr_o(rd_calc_addr), 462 .descramble_req_o(rd_op_req), 463 .scrambled_data_o(rd_scrambled_data), 464 .calc_ack_i(calc_ack), 465 .descramble_ack_i(op_ack), 466 .mask_i(scramble_mask), 467 .descrambled_data_i(rd_descrambled_data), 468 .ecc_single_err_o, 469 .ecc_addr_o, 470 .relbl_ecc_err_o, 471 .intg_ecc_err_o, 472 .fifo_err_o 473 ); 474 475 //////////////////////// 476 // program pipeline 477 //////////////////////// 478 479 logic [FullDataWidth-1:0] prog_full_data; 480 logic [DataWidth-1:0] prog_scrambled_data; 481 logic [DataWidth-1:0] prog_data; 482 logic prog_last; 483 logic flash_prog_req; 484 logic prog_calc_req; 485 logic prog_op_req; 486 logic prog_fsm_err; 487 488 if (WidthMultiple == 1) begin : gen_single_prog_data 489 assign flash_prog_req = reqs[PhyProg]; 490 assign prog_data = prog_data_i[BusWidth-1:0]; 491 assign prog_fsm_err = '0; 492 end else begin : gen_prog_data 493 494 // SEC_CM: MEM.INTEGRITY 495 flash_phy_prog u_prog ( 496 .clk_i, 497 .rst_ni, 498 .req_i(reqs[PhyProg]), 499 .disable_i(flash_disable[ProgFsmDisableIdx]), 500 .scramble_i(muxed_scramble_en), 501 .ecc_i(muxed_ecc_en), 502 .sel_i(addr_i[0 +: WordSelW]), 503 .data_i(prog_data_i), 504 .last_i(prog_last_i), 505 .ack_i(ack), 506 .done_i(done), 507 .calc_ack_i(calc_ack), 508 .scramble_ack_i(op_ack), 509 .mask_i(scramble_mask), 510 .scrambled_data_i(prog_scrambled_data), 511 .calc_req_o(prog_calc_req), 512 .scramble_req_o(prog_op_req), 513 .req_o(flash_prog_req), 514 .last_o(prog_last), 515 .ack_o(prog_ack), 516 .block_data_o(prog_data), 517 .data_o(prog_full_data), 518 .fsm_err_o(prog_fsm_err), 519 .intg_err_o(prog_intg_err_o) 520 ); 521 end 522 523 1/1 assign fsm_err_o = fsm_err | prog_fsm_err; Tests: T1 T2 T3  524 525 //////////////////////// 526 // erase pipeline 527 //////////////////////// 528 529 logic flash_pg_erase_req; 530 logic flash_bk_erase_req; 531 logic erase_suspend_req; 532 flash_phy_erase u_erase ( 533 .clk_i, 534 .rst_ni, 535 .pg_erase_req_i(reqs[PhyPgErase]), 536 .bk_erase_req_i(reqs[PhyBkErase]), 537 .suspend_req_i(erase_suspend_req_i), 538 .ack_o(erase_ack), 539 .pg_erase_req_o(flash_pg_erase_req), 540 .bk_erase_req_o(flash_bk_erase_req), 541 .suspend_req_o(erase_suspend_req), 542 .ack_i(ack), 543 .done_i(done) 544 ); 545 546 //////////////////////// 547 // bundle data to send to shared scrambling module 548 //////////////////////// 549 550 1/1 assign scramble_req_o.calc_req = prog_calc_req | rd_calc_req; Tests: T1 T2 T3  551 1/1 assign scramble_req_o.op_req = prog_op_req | rd_op_req; Tests: T1 T2 T3  552 1/1 assign scramble_req_o.op_type = prog_op_req ? ScrambleOp : DeScrambleOp; Tests: T1 T2 T3  553 1/1 assign scramble_req_o.addr = prog_calc_req ? muxed_addr[BusBankAddrW-1:LsbAddrBit] : Tests: T1 T2 T3  554 rd_calc_addr; 555 1/1 assign scramble_req_o.plain_data = prog_data; Tests: T1 T2 T3  556 1/1 assign scramble_req_o.scrambled_data = rd_scrambled_data; Tests: T1 T2 T3  557 1/1 assign calc_ack = scramble_rsp_i.calc_ack; Tests: T1 T2 T3  558 1/1 assign op_ack = scramble_rsp_i.op_ack; Tests: T1 T2 T3  559 1/1 assign scramble_mask = scramble_rsp_i.mask; Tests: T1 T2 T3  560 1/1 assign rd_descrambled_data = scramble_rsp_i.plain_data; Tests: T1 T2 T3  561 1/1 assign prog_scrambled_data = scramble_rsp_i.scrambled_data; Tests: T1 T2 T3  562 563 //////////////////////// 564 // Actual connection to flash phy 565 //////////////////////// 566 567 // Connections to the actual flash macro wrapper 568 1/1 assign prim_flash_req_o = '{ Tests: T1 T2 T3  569 rd_req: flash_rd_req, 570 prog_req: flash_prog_req, 571 prog_last: prog_last, 572 prog_type: prog_type_i, 573 pg_erase_req: flash_pg_erase_req, 574 bk_erase_req: flash_bk_erase_req, 575 erase_suspend_req: erase_suspend_req, 576 // high endurance enable does not cause changes to 577 // transaction protocol and is forwarded directly to the wrapper 578 he: he_en_i, 579 addr: muxed_addr[BusBankAddrW-1:LsbAddrBit], 580 part: muxed_part, 581 info_sel: info_sel_i, 582 prog_full_data: prog_full_data 583 }; 584 585 1/1 assign ack = prim_flash_rsp_i.ack; Tests: T1 T2 T3  586 1/1 assign done = prim_flash_rsp_i.done; Tests: T1 T2 T3  587 1/1 assign flash_rdata = prim_flash_rsp_i.rdata; Tests: T1 T2 T3 

Cond Coverage for Instance : tb.dut.u_eflash.gen_flash_cores[0].u_core
TotalCoveredPercent
Conditions10610094.34
Logical10610094.34
Non-Logical00
Event00

 LINE       196
 EXPRESSION (host_gnt && (muxed_part != FlashPartData))
             ----1---    --------------2--------------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT2,T3,T20
11CoveredT10,T180,T228

 LINE       196
 SUB-EXPRESSION (muxed_part != FlashPartData)
                --------------1--------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       200
 EXPRESSION (((|host_outstanding)) & ((!ctrl_fsm_idle)))
             ----------1----------   ---------2--------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT2,T3,T20
11Not Covered

 LINE       205
 EXPRESSION (host_gnt_err_event | host_outstanding_err_event)
             ---------1--------   -------------2------------
-1--2-StatusTests
00CoveredT1,T2,T3
01Not Covered
10CoveredT10,T180,T228

 LINE       217
 EXPRESSION (host_outstanding == '0)
            ------------1-----------
-1-StatusTests
0CoveredT2,T3,T20
1CoveredT1,T2,T3

 LINE       231
 EXPRESSION ((host_outstanding == '0) && ctrl_fsm_idle)
             ------------1-----------    ------2------
-1--2-StatusTests
01CoveredT2,T3,T20
10CoveredT1,T2,T3
11CoveredT1,T2,T3

 LINE       231
 SUB-EXPRESSION (host_outstanding == '0)
                ------------1-----------
-1-StatusTests
0CoveredT2,T3,T20
1CoveredT1,T2,T3

 LINE       242
 EXPRESSION (host_gnt && ((!host_req_done_o)) && (host_outstanding <= flash_phy_pkg::RspOrderDepth))
             ----1---    ----------2---------    -------------------------3------------------------
-1--2--3-StatusTests
011CoveredT1,T2,T3
101CoveredT2,T3,T15
110Not Covered
111CoveredT2,T3,T20

 LINE       242
 EXPRESSION (((!host_gnt)) && host_req_done_o && ((|host_outstanding)))
             ------1------    -------2-------    ----------3----------
-1--2--3-StatusTests
011CoveredT2,T3,T15
101CoveredT2,T3,T20
110CoveredT58,T62,T63
111CoveredT2,T3,T20

 LINE       281
 EXPRESSION (host_req & host_req_rdy_o)
             ----1---   -------2------
-1--2-StatusTests
01Not Covered
10CoveredT20,T23,T13
11CoveredT2,T3,T20

 LINE       282
 EXPRESSION (((|host_outstanding)) & rd_stage_data_valid)
             ----------1----------   ---------2---------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT2,T3,T20
11CoveredT2,T3,T20

 LINE       317
 EXPRESSION ((phy_req & host_req) ? rd_stage_rdy : rd_stage_idle)
             ----------1---------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT2,T3,T20

 LINE       317
 SUB-EXPRESSION (phy_req & host_req)
                 ---1---   ----2---
-1--2-StatusTests
01Not Covered
10CoveredT1,T2,T3
11CoveredT2,T3,T20

 LINE       321
 EXPRESSION (req_i & host_gnt)
             --1--   ----2---
-1--2-StatusTests
01CoveredT2,T3,T20
10CoveredT1,T2,T3
11CoveredT15,T10,T58

 LINE       336
 EXPRESSION (ctrl_gnt && rd_i)
             ----1---    --2-
-1--2-StatusTests
01CoveredT2,T18,T20
10CoveredT12,T20,T23
11CoveredT1,T2,T3

 LINE       338
 EXPRESSION (ctrl_gnt && prog_i)
             ----1---    ---2--
-1--2-StatusTests
01CoveredT1,T8,T9
10CoveredT12,T23,T14
11CoveredT12,T20,T13

 LINE       388
 EXPRESSION ((ctrl_fsm_idle & ctrl_rsp_vld) | ((host_outstanding == '0) & host_req_done_o))
             ---------------1--------------   ----------------------2---------------------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT58,T62,T63
10CoveredT239

 LINE       388
 SUB-EXPRESSION (ctrl_fsm_idle & ctrl_rsp_vld)
                 ------1------   ------2-----
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT1,T2,T3
11CoveredT239

 LINE       388
 SUB-EXPRESSION ((host_outstanding == '0) & host_req_done_o)
                 ------------1-----------   -------2-------
-1--2-StatusTests
01CoveredT2,T3,T20
10CoveredT1,T2,T3
11CoveredT58,T62,T63

 LINE       388
 SUB-EXPRESSION (host_outstanding == '0)
                ------------1-----------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       392
 EXPRESSION (host_sel ? host_addr_i : addr_i)
             ----1---
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT2,T3,T20

 LINE       393
 EXPRESSION (host_sel ? FlashPartData : part_i)
             ----1---
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT2,T3,T20

 LINE       394
 EXPRESSION (host_sel ? host_scramble_en_i : scramble_en_i)
             ----1---
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT2,T3,T20

 LINE       395
 EXPRESSION (host_sel ? host_ecc_en_i : ecc_en_i)
             ----1---
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT2,T3,T20

 LINE       396
 EXPRESSION (ctrl_rsp_vld & rd_i)
             ------1-----   --2-
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT12,T20,T23
11CoveredT1,T2,T3

 LINE       397
 EXPRESSION (ctrl_rsp_vld & prog_i)
             ------1-----   ---2--
-1--2-StatusTests
01CoveredT1,T12,T20
10CoveredT1,T2,T3
11CoveredT12,T20,T13

 LINE       398
 EXPRESSION (ctrl_rsp_vld & (pg_erase_i | bk_erase_i))
             ------1-----   ------------2------------
-1--2-StatusTests
01CoveredT12,T23,T14
10CoveredT1,T2,T3
11CoveredT12,T23,T14

 LINE       398
 SUB-EXPRESSION (pg_erase_i | bk_erase_i)
                 -----1----   -----2----
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT74,T25,T65
10CoveredT12,T23,T14

 LINE       428
 EXPRESSION ((host_gnt_rd_err & (host_outstanding == 1'b1)) | host_outstanding_rd_err)
             -----------------------1----------------------   -----------2-----------
-1--2-StatusTests
00CoveredT1,T2,T3
01Not Covered
10CoveredT228

 LINE       428
 SUB-EXPRESSION (host_gnt_rd_err & (host_outstanding == 1'b1))
                 -------1-------   -------------2------------
-1--2-StatusTests
01CoveredT2,T3,T20
10CoveredT228
11CoveredT228

 LINE       428
 SUB-EXPRESSION (host_outstanding == 1'b1)
                -------------1------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT2,T3,T20

 LINE       431
 EXPRESSION (phy_req & (rd_i | host_req))
             ---1---   --------2--------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT12,T20,T23
11CoveredT1,T2,T3

 LINE       431
 SUB-EXPRESSION (rd_i | host_req)
                 --1-   ----2---
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT2,T3,T20
10CoveredT1,T2,T3

 LINE       431
 EXPRESSION (arb_host_gnt_err ? ({flash_phy_pkg::FullDataWidth {1'b1}}) : flash_rdata)
             --------1-------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT228

 LINE       523
 EXPRESSION (fsm_err | prog_fsm_err)
             ---1---   ------2-----
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT16,T43,T44
10CoveredT16,T43,T44

 LINE       550
 EXPRESSION (prog_calc_req | rd_calc_req)
             ------1------   -----2-----
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT1,T2,T3
10CoveredT13,T14,T8

 LINE       551
 EXPRESSION (prog_op_req | rd_op_req)
             -----1-----   ----2----
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT1,T2,T3
10CoveredT13,T14,T8

 LINE       552
 EXPRESSION (prog_op_req ? ScrambleOp : DeScrambleOp)
             -----1-----
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT13,T14,T8

 LINE       553
 EXPRESSION (prog_calc_req ? muxed_addr[(flash_phy_pkg::BusBankAddrW - 1):flash_phy_pkg::LsbAddrBit] : rd_calc_addr)
             ------1------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT13,T14,T8

FSM Coverage for Instance : tb.dut.u_eflash.gen_flash_cores[0].u_core
Summary for FSM :: state_q
TotalCoveredPercent
States 5 5 100.00 (Not included in score)
Transitions 7 7 100.00
Sequences 0 0

State, Transition and Sequence Details for FSM :: state_q
states   Line No.   Covered   Tests   
StCtrl 341 Covered T12,T23,T14
StCtrlProg 339 Covered T12,T20,T13
StCtrlRead 337 Covered T1,T2,T3
StDisable 335 Covered T7,T8,T9
StIdle 349 Covered T1,T2,T3


transitions   Line No.   Covered   Tests   
StCtrl->StIdle 369 Covered T12,T23,T14
StCtrlProg->StIdle 359 Covered T12,T20,T13
StCtrlRead->StIdle 349 Covered T1,T2,T3
StIdle->StCtrl 341 Covered T12,T23,T14
StIdle->StCtrlProg 339 Covered T12,T20,T13
StIdle->StCtrlRead 337 Covered T1,T2,T3
StIdle->StDisable 335 Covered T7,T8,T9



Branch Coverage for Instance : tb.dut.u_eflash.gen_flash_cores[0].u_core
Line No.TotalCoveredPercent
Branches 46 46 100.00
TERNARY 317 2 2 100.00
TERNARY 392 2 2 100.00
TERNARY 393 2 2 100.00
TERNARY 394 2 2 100.00
TERNARY 395 2 2 100.00
TERNARY 552 2 2 100.00
TERNARY 553 2 2 100.00
TERNARY 431 2 2 100.00
IF 152 4 4 100.00
IF 165 2 2 100.00
IF 203 3 3 100.00
IF 215 4 4 100.00
IF 229 4 4 100.00
CASE 331 13 13 100.00


317 assign phy_rdy = phy_req & host_req ? rd_stage_rdy : rd_stage_idle; -1- ==> ==>

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


392 assign muxed_addr = host_sel ? host_addr_i : addr_i; -1- ==> ==>

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


393 assign muxed_part = host_sel ? flash_ctrl_pkg::FlashPartData : part_i; -1- ==> ==>

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


394 assign muxed_scramble_en = host_sel ? host_scramble_en_i : scramble_en_i; -1- ==> ==>

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


395 assign muxed_ecc_en = host_sel ? host_ecc_en_i : ecc_en_i; -1- ==> ==>

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


552 assign scramble_req_o.op_type = prog_op_req ? ScrambleOp : DeScrambleOp; -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T13,T14,T8
0 Covered T1,T2,T3


553 assign scramble_req_o.addr = prog_calc_req ? muxed_addr[BusBankAddrW-1:LsbAddrBit] : -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T13,T14,T8
0 Covered T1,T2,T3


431 flash_phy_rd u_rd ( 432 .clk_i, 433 .rst_ni, 434 .buf_en_i(rd_buf_en_i), 435 //.req_i(reqs[PhyRead] | host_req), 436 .req_i(phy_req & (rd_i | host_req)), 437 .descramble_i(muxed_scramble_en), 438 .ecc_i(muxed_ecc_en), 439 .prog_i(reqs[PhyProg]), 440 .pg_erase_i(reqs[PhyPgErase]), 441 .bk_erase_i(reqs[PhyBkErase]), 442 .addr_i(muxed_addr), 443 .part_i(muxed_part), 444 // info select cannot be generated by the host 445 .info_sel_i(info_sel_i), 446 .rdy_o(rd_stage_rdy), 447 .data_valid_o(rd_stage_data_valid), 448 .data_err_o(phy_rd_err), 449 .data_host_o(rd_data_host_o), 450 .data_ctrl_o(rd_data_ctrl_o), 451 .idle_o(rd_stage_idle), 452 // a catastrophic arbitration error has been observed, just dump 453 // dump returns until all transactions are flushed. 454 .arb_err_i(arb_host_gnt_err), 455 .req_o(flash_rd_req), 456 .ack_i(ack), 457 .done_i(done), 458 .data_i(arb_host_gnt_err ? {FullDataWidth{1'b1}} : flash_rdata), -1- ==> ==>

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


152 if (!rst_ni) begin -1- 153 arb_cnt <= '0; ==> 154 end else if (ctrl_rsp_vld) begin -2- 155 arb_cnt <= '0; ==> 156 end else if (inc_arb_cnt) begin -3- 157 arb_cnt <= arb_cnt + 1'b1; ==> 158 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
1 - - Covered T1,T2,T3
0 1 - Covered T1,T2,T3
0 0 1 Covered T15,T10,T58
0 0 0 Covered T1,T2,T3


165 `PRIM_FLOP_SPARSE_FSM(u_state_regs, state_d, state_q, state_e, StIdle) -1- ==> ==>

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


203 if (!rst_ni) begin -1- 204 host_gnt_err_o <= '0; ==> 205 end else if (host_gnt_err_event | host_outstanding_err_event) begin -2- 206 host_gnt_err_o <= 1'b1; ==> 207 end MISSING_ELSE ==>

Branches:
-1--2-StatusTests
1 - Covered T1,T2,T3
0 1 Covered T10,T180,T228
0 0 Covered T1,T2,T3


215 if (!rst_ni) begin -1- 216 host_gnt_rd_err <= '0; ==> 217 end else if (host_outstanding == '0) begin -2- 218 host_gnt_rd_err <= '0; ==> 219 end else if (host_gnt_err_event) begin -3- 220 host_gnt_rd_err <= 1'b1; ==> 221 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
1 - - Covered T1,T2,T3
0 1 - Covered T1,T2,T3
0 0 1 Covered T10,T228,T11
0 0 0 Covered T2,T3,T20


229 if (!rst_ni) begin -1- 230 host_outstanding_rd_err <= '0; ==> 231 end else if (host_outstanding == '0 && ctrl_fsm_idle) begin -2- 232 host_outstanding_rd_err <= '0; ==> 233 end else if (host_outstanding_err_event) begin -3- 234 host_outstanding_rd_err <= 1'b1; ==> 235 end MISSING_ELSE ==>

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


331 unique case (state_q) -1- 332 StIdle: begin 333 ctrl_fsm_idle = 1'b1; 334 if (mubi4_test_true_loose(flash_disable[FsmDisableIdx])) begin -2- 335 state_d = StDisable; ==> 336 end else if (ctrl_gnt && rd_i) begin -3- 337 state_d = StCtrlRead; ==> 338 end else if (ctrl_gnt && prog_i) begin -4- 339 state_d = StCtrlProg; ==> 340 end else if (ctrl_gnt) begin -5- 341 state_d = StCtrl; ==> 342 end MISSING_ELSE ==> 343 end 344 345 // Controller reads are very slow. 346 StCtrlRead: begin 347 if (rd_stage_data_valid) begin -6- 348 ctrl_rsp_vld = 1'b1; ==> 349 state_d = StIdle; 350 end MISSING_ELSE ==> 351 end 352 353 // Controller program data may be packed based on 354 // address alignment 355 StCtrlProg: begin 356 reqs[PhyProg] = 1'b1; 357 if (prog_ack) begin -7- 358 ctrl_rsp_vld = 1'b1; ==> 359 state_d = StIdle; 360 end MISSING_ELSE ==> 361 end 362 363 // other controller operations directly interface with flash 364 StCtrl: begin 365 reqs[PhyPgErase] = pg_erase_i; 366 reqs[PhyBkErase] = bk_erase_i; 367 if (erase_ack) begin -8- 368 ctrl_rsp_vld = 1'b1; ==> 369 state_d = StIdle; 370 end MISSING_ELSE ==> 371 end 372 373 StDisable: begin 374 ctrl_fsm_idle = 1'b1; ==> 375 state_d = StDisable; 376 end 377 378 default: begin 379 ctrl_fsm_idle = 1'b1; ==>

Branches:
-1--2--3--4--5--6--7--8-StatusTests
StIdle 1 - - - - - - Covered T7,T8,T9
StIdle 0 1 - - - - - Covered T1,T2,T3
StIdle 0 0 1 - - - - Covered T12,T20,T13
StIdle 0 0 0 1 - - - Covered T12,T23,T14
StIdle 0 0 0 0 - - - Covered T1,T2,T3
StCtrlRead - - - - 1 - - Covered T1,T2,T3
StCtrlRead - - - - 0 - - Covered T1,T2,T3
StCtrlProg - - - - - 1 - Covered T12,T20,T13
StCtrlProg - - - - - 0 - Covered T12,T20,T13
StCtrl - - - - - - 1 Covered T12,T23,T14
StCtrl - - - - - - 0 Covered T12,T23,T14
StDisable - - - - - - - Covered T7,T8,T9
default - - - - - - - Covered T10,T11,T16


Assert Coverage for Instance : tb.dut.u_eflash.gen_flash_cores[0].u_core
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 8 8 100.00 8 100.00
Cover properties 0 0 0
Cover sequences 0 0 0
Total 8 8 100.00 8 100.00




Assertion Details

Name   Attempts   Real Successes   Failures   Incomplete   
ArbCntMax_A 388255766 1645866 0 0
CtrlPrio_A 388255766 1645866 0 0
HostTransIdleChk_A 388255766 21934063 0 0
NoRemainder_A 1057 1057 0 0
OneHotReqs_A 388255766 387415641 0 0
Pow2Multiple_A 1057 1057 0 0
RdTxnCheck_A 388093290 387253165 0 0
u_state_regs_A 388255766 387415641 0 0


ArbCntMax_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 388255766 1645866 0 0
T10 519 5 0 0
T15 29510 69 0 0
T27 225589 0 0 0
T36 0 4770 0 0
T41 0 3261 0 0
T47 0 1215 0 0
T48 0 2114 0 0
T51 162291 0 0 0
T54 5236 0 0 0
T55 0 1061 0 0
T58 1526 0 0 0
T59 3485 0 0 0
T64 2168 0 0 0
T98 59772 0 0 0
T99 0 3232 0 0
T110 1127 0 0 0
T130 0 3090 0 0
T217 0 1459 0 0

CtrlPrio_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 388255766 1645866 0 0
T10 519 5 0 0
T15 29510 69 0 0
T27 225589 0 0 0
T36 0 4770 0 0
T41 0 3261 0 0
T47 0 1215 0 0
T48 0 2114 0 0
T51 162291 0 0 0
T54 5236 0 0 0
T55 0 1061 0 0
T58 1526 0 0 0
T59 3485 0 0 0
T64 2168 0 0 0
T98 59772 0 0 0
T99 0 3232 0 0
T110 1127 0 0 0
T130 0 3090 0 0
T217 0 1459 0 0

HostTransIdleChk_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 388255766 21934063 0 0
T2 10848 192 0 0
T3 1224 15 0 0
T4 890 0 0 0
T7 972 0 0 0
T10 0 20 0 0
T12 2002 0 0 0
T13 0 20 0 0
T15 0 531 0 0
T17 1544 0 0 0
T18 1950 0 0 0
T19 2303 0 0 0
T20 1473 16 0 0
T23 7299 42 0 0
T39 0 81 0 0
T54 0 531 0 0
T58 0 10 0 0

NoRemainder_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1057 1057 0 0
T1 1 1 0 0
T2 1 1 0 0
T3 1 1 0 0
T4 1 1 0 0
T7 1 1 0 0
T12 1 1 0 0
T17 1 1 0 0
T18 1 1 0 0
T19 1 1 0 0
T20 1 1 0 0

OneHotReqs_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 388255766 387415641 0 0
T1 3906 3853 0 0
T2 10848 10778 0 0
T3 1224 1167 0 0
T4 890 840 0 0
T7 972 922 0 0
T12 2002 1944 0 0
T17 1544 1489 0 0
T18 1950 1866 0 0
T19 2303 2211 0 0
T20 1473 1338 0 0

Pow2Multiple_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1057 1057 0 0
T1 1 1 0 0
T2 1 1 0 0
T3 1 1 0 0
T4 1 1 0 0
T7 1 1 0 0
T12 1 1 0 0
T17 1 1 0 0
T18 1 1 0 0
T19 1 1 0 0
T20 1 1 0 0

RdTxnCheck_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 388093290 387253165 0 0
T1 3906 3853 0 0
T2 10848 10778 0 0
T3 1224 1167 0 0
T4 890 840 0 0
T7 972 922 0 0
T12 2002 1944 0 0
T17 1544 1489 0 0
T18 1950 1866 0 0
T19 2303 2211 0 0
T20 1473 1338 0 0

u_state_regs_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 388255766 387415641 0 0
T1 3906 3853 0 0
T2 10848 10778 0 0
T3 1224 1167 0 0
T4 890 840 0 0
T7 972 922 0 0
T12 2002 1944 0 0
T17 1544 1489 0 0
T18 1950 1866 0 0
T19 2303 2211 0 0
T20 1473 1338 0 0