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



Module Instance : tb.dut.top_earlgrey.u_rv_core_ibex

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
90.27 94.12 89.29 99.75 100.00 68.18


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
96.53 97.42 95.86 98.06 98.66 92.67


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
93.94 92.47 89.34 100.00 top_earlgrey


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
fifo_d 100.00 100.00 100.00 100.00 100.00
fifo_i 93.75 75.00 100.00 100.00 100.00
gen_alert_senders[0].u_alert_sender 100.00 100.00
gen_alert_senders[1].u_alert_sender 75.00 75.00
gen_alert_senders[2].u_alert_sender 100.00 100.00
gen_alert_senders[3].u_alert_sender 75.00 75.00
tl_adapter_host_d_ibex 91.79 95.35 81.82 90.00 100.00
tl_adapter_host_i_ibex 87.90 90.48 72.22 88.89 100.00
u_alert_nmi_sync 100.00 100.00 100.00
u_core 95.91 95.91
u_core_sleeping_buf 100.00 100.00
u_dbus_trans 96.36 100.00 92.59 100.00 92.86
u_edn_if 89.08 100.00 86.44 94.87 75.00
u_ibus_trans 96.36 100.00 92.59 100.00 92.86
u_intr_timer_sync 100.00 100.00 100.00
u_lc_sync 100.00 100.00 100.00 100.00
u_prim_buf_irq 100.00 100.00
u_prim_esc_receiver 100.00 100.00
u_prim_lc_sender 100.00 100.00 100.00
u_prim_sync_reqack_data 91.67 100.00 66.67 100.00 100.00
u_pwrmgr_sync 100.00 100.00 100.00 100.00
u_reg_cfg 99.24 98.69 98.69 99.58 100.00
u_sim_win_rsp 89.32 77.27 80.00 100.00 100.00
u_tlul_req_buf 100.00 100.00
u_tlul_rsp_buf 100.00 100.00
u_wdog_nmi_sync 100.00 100.00 100.00

Line Coverage for Module : rv_core_ibex
Line No.TotalCoveredPercent
TOTAL858094.12
CONT_ASSIGN20211100.00
CONT_ASSIGN20311100.00
CONT_ASSIGN21611100.00
CONT_ASSIGN21711100.00
CONT_ASSIGN21811100.00
CONT_ASSIGN22511100.00
CONT_ASSIGN26311100.00
CONT_ASSIGN26511100.00
CONT_ASSIGN26811100.00
CONT_ASSIGN34211100.00
CONT_ASSIGN34811100.00
CONT_ASSIGN36311100.00
ALWAYS49233100.00
CONT_ASSIGN51211100.00
CONT_ASSIGN51311100.00
CONT_ASSIGN51411100.00
CONT_ASSIGN51511100.00
ALWAYS51888100.00
CONT_ASSIGN70411100.00
CONT_ASSIGN70411100.00
CONT_ASSIGN70511100.00
CONT_ASSIGN70511100.00
CONT_ASSIGN70611100.00
CONT_ASSIGN70611100.00
CONT_ASSIGN71011100.00
CONT_ASSIGN71011100.00
CONT_ASSIGN71111100.00
CONT_ASSIGN71111100.00
CONT_ASSIGN71211100.00
CONT_ASSIGN71211100.00
CONT_ASSIGN71911100.00
CONT_ASSIGN72011100.00
CONT_ASSIGN72111100.00
CONT_ASSIGN72411100.00
CONT_ASSIGN72611100.00
CONT_ASSIGN72811100.00
CONT_ASSIGN73011100.00
CONT_ASSIGN73711100.00
CONT_ASSIGN73911100.00
CONT_ASSIGN74111100.00
CONT_ASSIGN74311100.00
CONT_ASSIGN75311100.00
CONT_ASSIGN754100.00
CONT_ASSIGN75511100.00
CONT_ASSIGN75611100.00
CONT_ASSIGN75911100.00
CONT_ASSIGN762100.00
ALWAYS7941111100.00
ALWAYS81077100.00
CONT_ASSIGN82111100.00
CONT_ASSIGN84011100.00
CONT_ASSIGN84111100.00
CONT_ASSIGN84211100.00
CONT_ASSIGN845100.00
CONT_ASSIGN84900
CONT_ASSIGN88811100.00
ALWAYS94700
CONT_ASSIGN988100.00
CONT_ASSIGN990100.00
CONT_ASSIGN99211100.00
CONT_ASSIGN99411100.00
CONT_ASSIGN99611100.00

201 logic addr_trans_rst_ni; 202 1/1 assign ibex_top_clk_i = clk_i; Tests: T1 T2 T3  203 1/1 assign addr_trans_rst_ni = rst_ni; Tests: T1 T2 T3  204 205 // errors and core alert events 206 logic ibus_intg_err, dbus_intg_err; 207 logic alert_minor, alert_major_internal, alert_major_bus; 208 logic double_fault; 209 logic fatal_intg_err, fatal_core_err, recov_core_err; 210 211 // alert events to peripheral module 212 logic fatal_intg_event; 213 logic fatal_core_event; 214 logic recov_core_event; 215 // SEC_CM: BUS.INTEGRITY 216 1/1 assign fatal_intg_event = ibus_intg_err | dbus_intg_err | alert_major_bus; Tests: T1 T2 T3  217 1/1 assign fatal_core_event = alert_major_internal | double_fault; Tests: T1 T2 T3  218 1/1 assign recov_core_event = alert_minor; Tests: T2 T4 T5  219 220 // configurations for address translation 221 region_cfg_t [NumRegions-1:0] ibus_region_cfg; 222 region_cfg_t [NumRegions-1:0] dbus_region_cfg; 223 224 // Reset feedback to clkmgr 225 1/1 assign rst_cpu_n_o = rst_ni; Tests: T1 T2 T3  226 227 // Escalation receiver that converts differential 228 // protocol into single ended signal. 229 logic esc_irq_nm; 230 prim_esc_receiver #( 231 .N_ESC_SEV (alert_handler_reg_pkg::N_ESC_SEV), 232 .PING_CNT_DW (alert_handler_reg_pkg::PING_CNT_DW) 233 ) u_prim_esc_receiver ( 234 .clk_i ( clk_esc_i ), 235 .rst_ni ( rst_esc_ni ), 236 .esc_req_o ( esc_irq_nm ), 237 .esc_rx_o, 238 .esc_tx_i 239 ); 240 241 // Synchronize to fast Ibex clock domain. 242 logic alert_irq_nm; 243 prim_flop_2sync #( 244 .Width(1) 245 ) u_alert_nmi_sync ( 246 .clk_i, 247 .rst_ni, 248 .d_i(esc_irq_nm), 249 .q_o(alert_irq_nm) 250 ); 251 252 logic wdog_irq_nm; 253 prim_flop_2sync #( 254 .Width(1) 255 ) u_wdog_nmi_sync ( 256 .clk_i, 257 .rst_ni, 258 .d_i(nmi_wdog_i), 259 .q_o(wdog_irq_nm) 260 ); 261 262 assign hw2reg.nmi_state.alert.d = 1'b1; 263 1/1 assign hw2reg.nmi_state.alert.de = alert_irq_nm; Tests: T43 T81 T83  264 assign hw2reg.nmi_state.wdog.d = 1'b1; 265 1/1 assign hw2reg.nmi_state.wdog.de = wdog_irq_nm; Tests: T264 T265 T138  266 267 logic irq_nm; 268 1/1 assign irq_nm = |(reg2hw.nmi_state & reg2hw.nmi_enable); Tests: T264 T43 T81  269 270 lc_ctrl_pkg::lc_tx_t [0:0] lc_cpu_en; 271 prim_lc_sync u_lc_sync ( 272 .clk_i, 273 .rst_ni, 274 .lc_en_i(lc_cpu_en_i), 275 .lc_en_o(lc_cpu_en) 276 ); 277 278 lc_ctrl_pkg::lc_tx_t [0:0] pwrmgr_cpu_en; 279 prim_lc_sync u_pwrmgr_sync ( 280 .clk_i, 281 .rst_ni, 282 .lc_en_i(pwrmgr_cpu_en_i), 283 .lc_en_o(pwrmgr_cpu_en) 284 ); 285 286 // timer interrupts do not come from 287 // rv_plic and may not be synchronous to the ibex core 288 logic irq_timer_sync; 289 prim_flop_2sync #( 290 .Width(1) 291 ) u_intr_timer_sync ( 292 .clk_i, 293 .rst_ni, 294 .d_i(irq_timer_i), 295 .q_o(irq_timer_sync) 296 ); 297 298 299 logic irq_software; 300 logic irq_timer; 301 logic irq_external; 302 303 prim_sec_anchor_buf #( 304 .Width(3) 305 ) u_prim_buf_irq ( 306 .in_i({irq_software_i, 307 irq_timer_sync, 308 irq_external_i}), 309 .out_o({irq_software, 310 irq_timer, 311 irq_external}) 312 ); 313 314 315 logic key_req, key_ack; 316 logic [ibex_pkg::SCRAMBLE_KEY_W-1:0] key; 317 logic [ibex_pkg::SCRAMBLE_NONCE_W-1:0] nonce; 318 logic unused_seed_valid; 319 localparam int PayLoadW = ibex_pkg::SCRAMBLE_KEY_W + ibex_pkg::SCRAMBLE_NONCE_W + 1; 320 prim_sync_reqack_data #( 321 .Width(PayLoadW), 322 .DataSrc2Dst(1'b0) 323 ) u_prim_sync_reqack_data ( 324 .clk_src_i ( clk_i ), 325 .rst_src_ni ( rst_ni ), 326 .clk_dst_i ( clk_otp_i ), 327 .rst_dst_ni ( rst_otp_ni ), 328 .req_chk_i ( 1'b1 ), 329 .src_req_i ( key_req ), 330 .src_ack_o ( key_ack ), 331 .dst_req_o ( icache_otp_key_o.req ), 332 .dst_ack_i ( icache_otp_key_i.ack ), 333 .data_i ( {icache_otp_key_i.key, 334 icache_otp_key_i.nonce[ibex_pkg::SCRAMBLE_NONCE_W-1:0], 335 icache_otp_key_i.seed_valid} ), 336 .data_o ( {key, 337 nonce, 338 unused_seed_valid} ) 339 ); 340 341 logic unused_nonce; 342 1/1 assign unused_nonce = |icache_otp_key_i.nonce; Tests: T2 T3 T4  343 344 // Local fetch enable control. 345 // Whenever a fatal core error is seen disable local fetch enable. 346 lc_ctrl_pkg::lc_tx_t local_fetch_enable_d, local_fetch_enable_q; 347 348 1/1 assign local_fetch_enable_d = fatal_core_err ? lc_ctrl_pkg::Off : local_fetch_enable_q; Tests: T1 T2 T3  349 350 prim_lc_sender #( 351 .AsyncOn(1), // this instantiates a register 352 .ResetValueIsOn(1) 353 ) u_prim_lc_sender ( 354 .clk_i, 355 .rst_ni, 356 .lc_en_i(local_fetch_enable_d), 357 .lc_en_o(local_fetch_enable_q) 358 ); 359 360 // Multibit AND computation for fetch enable. Fetch is only enabled when local fetch enable, 361 // lifecycle CPU enable and power manager CPU enable are all enabled. 362 lc_ctrl_pkg::lc_tx_t fetch_enable; 363 1/1 assign fetch_enable = lc_ctrl_pkg::lc_tx_and_hi(local_fetch_enable_q, Tests: T1 T2 T3  364 lc_ctrl_pkg::lc_tx_and_hi(lc_cpu_en[0], 365 pwrmgr_cpu_en[0])); 366 367 ibex_pkg::crash_dump_t crash_dump; 368 ibex_top #( 369 .PMPEnable ( PMPEnable ), 370 .PMPGranularity ( PMPGranularity ), 371 .PMPNumRegions ( PMPNumRegions ), 372 .MHPMCounterNum ( MHPMCounterNum ), 373 .MHPMCounterWidth ( MHPMCounterWidth ), 374 .RV32E ( RV32E ), 375 .RV32M ( RV32M ), 376 .RV32B ( RV32B ), 377 .RegFile ( RegFile ), 378 .BranchTargetALU ( BranchTargetALU ), 379 .WritebackStage ( WritebackStage ), 380 .ICache ( ICache ), 381 // Our automatic SEC_CM label check doesn't look at vendored code so the SEC_CM labels need 382 // to be mentioned here. The real locations can be found by grepping the vendored code. 383 // TODO(#10071): this should be fixed. 384 // SEC_CM: ICACHE.MEM.INTEGRITY 385 .ICacheECC ( ICacheECC ), 386 // SEC_CM: ICACHE.MEM.SCRAMBLE, SCRAMBLE.KEY.SIDELOAD 387 .ICacheScramble ( ICacheScramble ), 388 // Reduce the number of PRINCE half rounds to 2 (5 effective rounds) to ease timing. This is 389 // acceptable for the instruction cache, whereas 3 half rounds (7 effective rounds) are used 390 // elsewhere in the design. 391 .ICacheScrNumPrinceRoundsHalf( 2 ), 392 .BranchPredictor ( BranchPredictor ), 393 .DbgTriggerEn ( DbgTriggerEn ), 394 .DbgHwBreakNum ( DbgHwBreakNum ), 395 // SEC_CM: LOGIC.SHADOW 396 // SEC_CM: PC.CTRL_FLOW.CONSISTENCY, CTRL_FLOW.UNPREDICTABLE, CORE.DATA_REG_SW.SCA 397 // SEC_CM: EXCEPTION.CTRL_FLOW.GLOBAL_ESC, EXCEPTION.CTRL_FLOW.LOCAL_ESC 398 // SEC_CM: DATA_REG_SW.INTEGRITY, DATA_REG_SW.GLITCH_DETECT 399 .SecureIbex ( SecureIbex ), 400 .RndCnstLfsrSeed ( RndCnstLfsrSeed ), 401 .RndCnstLfsrPerm ( RndCnstLfsrPerm ), 402 .RndCnstIbexKey ( RndCnstIbexKeyDefault ), 403 .RndCnstIbexNonce ( RndCnstIbexNonceDefault ), 404 .DmHaltAddr ( DmHaltAddr ), 405 .DmExceptionAddr ( DmExceptionAddr ) 406 ) u_core ( 407 .clk_i (ibex_top_clk_i), 408 .rst_ni, 409 410 411 .test_en_i (prim_mubi_pkg::mubi4_test_true_strict(scanmode_i)), 412 .scan_rst_ni, 413 414 .ram_cfg_i, 415 416 .hart_id_i, 417 .boot_addr_i, 418 419 .instr_req_o ( instr_req ), 420 .instr_gnt_i ( instr_gnt ), 421 .instr_rvalid_i ( instr_rvalid ), 422 .instr_addr_o ( instr_addr ), 423 .instr_rdata_i ( instr_rdata ), 424 .instr_rdata_intg_i ( instr_rdata_intg ), 425 .instr_err_i ( instr_err ), 426 427 .data_req_o ( data_req ), 428 .data_gnt_i ( data_gnt ), 429 .data_rvalid_i ( data_rvalid ), 430 .data_we_o ( data_we ), 431 .data_be_o ( data_be ), 432 .data_addr_o ( data_addr ), 433 .data_wdata_o ( data_wdata ), 434 .data_wdata_intg_o ( data_wdata_intg ), 435 .data_rdata_i ( data_rdata ), 436 .data_rdata_intg_i ( data_rdata_intg ), 437 .data_err_i ( data_err ), 438 439 .irq_software_i ( irq_software ), 440 .irq_timer_i ( irq_timer ), 441 .irq_external_i ( irq_external ), 442 .irq_fast_i ( '0 ), 443 .irq_nm_i ( irq_nm ), 444 445 .debug_req_i, 446 .crash_dump_o ( crash_dump ), 447 448 // icache scramble interface 449 .scramble_key_valid_i (key_ack), 450 .scramble_key_i (key), 451 .scramble_nonce_i (nonce), 452 .scramble_req_o (key_req), 453 454 // double fault 455 .double_fault_seen_o (double_fault), 456 457 `ifdef RVFI 458 .rvfi_valid, 459 .rvfi_order, 460 .rvfi_insn, 461 .rvfi_trap, 462 .rvfi_halt, 463 .rvfi_intr, 464 .rvfi_mode, 465 .rvfi_ixl, 466 .rvfi_rs1_addr, 467 .rvfi_rs2_addr, 468 .rvfi_rs3_addr, 469 .rvfi_rs1_rdata, 470 .rvfi_rs2_rdata, 471 .rvfi_rs3_rdata, 472 .rvfi_rd_addr, 473 .rvfi_rd_wdata, 474 .rvfi_pc_rdata, 475 .rvfi_pc_wdata, 476 .rvfi_mem_addr, 477 .rvfi_mem_rmask, 478 .rvfi_mem_wmask, 479 .rvfi_mem_rdata, 480 .rvfi_mem_wdata, 481 `endif 482 // SEC_CM: FETCH.CTRL.LC_GATED 483 .fetch_enable_i (fetch_enable), 484 .alert_minor_o (alert_minor), 485 .alert_major_internal_o (alert_major_internal), 486 .alert_major_bus_o (alert_major_bus), 487 .core_sleep_o (core_sleep) 488 ); 489 490 logic core_sleep_q; 491 always_ff @(posedge clk_i or negedge rst_ni) begin 492 1/1 if (!rst_ni) begin Tests: T1 T2 T3  493 1/1 core_sleep_q <= '0; Tests: T1 T2 T3  494 end else begin 495 1/1 core_sleep_q <= core_sleep; Tests: T1 T2 T3  496 end 497 end 498 499 prim_buf #( 500 .Width(1) 501 ) u_core_sleeping_buf ( 502 .in_i(core_sleep_q), 503 .out_o(pwrmgr_o.core_sleeping) 504 ); 505 506 507 508 logic prev_valid; 509 logic [31:0] prev_exception_pc; 510 logic [31:0] prev_exception_addr; 511 512 1/1 assign crash_dump_o.current = crash_dump; Tests: T1 T2 T3  513 1/1 assign crash_dump_o.prev_valid = prev_valid; Tests: T246 T266 T267  514 1/1 assign crash_dump_o.prev_exception_pc = prev_exception_pc; Tests: T246 T266 T267  515 1/1 assign crash_dump_o.prev_exception_addr = prev_exception_addr; Tests: T246 T266 T267  516 517 always_ff @(posedge clk_i or negedge rst_ni) begin 518 1/1 if (!rst_ni) begin Tests: T1 T2 T3  519 1/1 prev_valid <= '0; Tests: T1 T2 T3  520 1/1 prev_exception_pc <= '0; Tests: T1 T2 T3  521 1/1 prev_exception_addr <= '0; Tests: T1 T2 T3  522 1/1 end else if (double_fault) begin Tests: T1 T2 T3  523 1/1 prev_valid <= 1'b1; Tests: T246 T266 T267  524 1/1 prev_exception_pc <= crash_dump.exception_pc; Tests: T246 T266 T267  525 1/1 prev_exception_addr <= crash_dump.exception_addr; Tests: T246 T266 T267  526 end MISSING_ELSE 527 end 528 529 530 // 531 // Convert ibex data/instruction bus to TL-UL 532 // 533 logic [31:0] instr_addr_trans; 534 rv_core_addr_trans #( 535 .AddrWidth(32), 536 .NumRegions(NumRegions) 537 ) u_ibus_trans ( 538 .clk_i, 539 .rst_ni(addr_trans_rst_ni), 540 .region_cfg_i(ibus_region_cfg), 541 .addr_i(instr_addr), 542 .addr_o(instr_addr_trans) 543 ); 544 545 logic [6:0] instr_wdata_intg; 546 logic [top_pkg::TL_DW-1:0] unused_data; 547 // tl_adapter_host_i_ibex only reads instruction. a_data is always 0 548 assign {instr_wdata_intg, unused_data} = prim_secded_pkg::prim_secded_inv_39_32_enc('0); 549 // SEC_CM: BUS.INTEGRITY 550 tlul_adapter_host #( 551 .MAX_REQS(NumOutstandingReqs), 552 // if secure ibex is not set, data integrity is not generated 553 // from ibex, therefore generate it in the gasket instead. 554 .EnableDataIntgGen(~SecureIbex) 555 ) tl_adapter_host_i_ibex ( 556 .clk_i, 557 .rst_ni, 558 .req_i (instr_req), 559 .instr_type_i (prim_mubi_pkg::MuBi4True), 560 .gnt_o (instr_gnt), 561 .addr_i (instr_addr_trans), 562 .we_i (1'b0), 563 .wdata_i (32'b0), 564 .wdata_intg_i (instr_wdata_intg), 565 .be_i (4'hF), 566 .user_rsvd_i ('0), 567 .valid_o (instr_rvalid), 568 .rdata_o (instr_rdata), 569 .rdata_intg_o (instr_rdata_intg), 570 .err_o (instr_err), 571 .intg_err_o (ibus_intg_err), 572 .tl_o (tl_i_ibex2fifo), 573 .tl_i (tl_i_fifo2ibex) 574 ); 575 576 tlul_fifo_sync #( 577 .ReqPass(FifoPass), 578 .RspPass(FifoPass), 579 .ReqDepth(FifoDepth), 580 .RspDepth(FifoDepth) 581 ) fifo_i ( 582 .clk_i, 583 .rst_ni, 584 .tl_h_i (tl_i_ibex2fifo), 585 .tl_h_o (tl_i_fifo2ibex), 586 .tl_d_o (corei_tl_h_o), 587 .tl_d_i (corei_tl_h_i), 588 .spare_req_i (1'b0), 589 .spare_req_o (), 590 .spare_rsp_i (1'b0), 591 .spare_rsp_o ()); 592 593 logic [31:0] data_addr_trans; 594 rv_core_addr_trans #( 595 .AddrWidth(32), 596 .NumRegions(NumRegions) 597 ) u_dbus_trans ( 598 .clk_i, 599 .rst_ni(addr_trans_rst_ni), 600 .region_cfg_i(dbus_region_cfg), 601 .addr_i(data_addr), 602 .addr_o(data_addr_trans) 603 ); 604 605 // SEC_CM: BUS.INTEGRITY 606 tlul_adapter_host #( 607 .MAX_REQS(2), 608 .EnableDataIntgGen(~SecureIbex) 609 ) tl_adapter_host_d_ibex ( 610 .clk_i, 611 .rst_ni, 612 .req_i (data_req), 613 .instr_type_i (prim_mubi_pkg::MuBi4False), 614 .gnt_o (data_gnt), 615 .addr_i (data_addr_trans), 616 .we_i (data_we), 617 .wdata_i (data_wdata), 618 .wdata_intg_i (data_wdata_intg), 619 .be_i (data_be), 620 .user_rsvd_i ('0), 621 .valid_o (data_rvalid), 622 .rdata_o (data_rdata), 623 .rdata_intg_o (data_rdata_intg), 624 .err_o (data_err), 625 .intg_err_o (dbus_intg_err), 626 .tl_o (tl_d_ibex2fifo), 627 .tl_i (tl_d_fifo2ibex) 628 ); 629 630 tlul_fifo_sync #( 631 .ReqPass(FifoPass), 632 .RspPass(FifoPass), 633 .ReqDepth(FifoDepth), 634 .RspDepth(FifoDepth) 635 ) fifo_d ( 636 .clk_i, 637 .rst_ni, 638 .tl_h_i (tl_d_ibex2fifo), 639 .tl_h_o (tl_d_fifo2ibex), 640 .tl_d_o (cored_tl_h_o), 641 .tl_d_i (cored_tl_h_i), 642 .spare_req_i (1'b0), 643 .spare_req_o (), 644 .spare_rsp_i (1'b0), 645 .spare_rsp_o ()); 646 647 `ifdef RVFI 648 ibex_tracer ibex_tracer_i ( 649 .clk_i, 650 .rst_ni, 651 652 .hart_id_i, 653 654 .rvfi_valid, 655 .rvfi_order, 656 .rvfi_insn, 657 .rvfi_trap, 658 .rvfi_halt, 659 .rvfi_intr, 660 .rvfi_mode, 661 .rvfi_ixl, 662 .rvfi_rs1_addr, 663 .rvfi_rs2_addr, 664 .rvfi_rs3_addr, 665 .rvfi_rs1_rdata, 666 .rvfi_rs2_rdata, 667 .rvfi_rs3_rdata, 668 .rvfi_rd_addr, 669 .rvfi_rd_wdata, 670 .rvfi_pc_rdata, 671 .rvfi_pc_wdata, 672 .rvfi_mem_addr, 673 .rvfi_mem_rmask, 674 .rvfi_mem_wmask, 675 .rvfi_mem_rdata, 676 .rvfi_mem_wdata 677 ); 678 `endif 679 680 ////////////////////////////////// 681 // Peripheral functions 682 ////////////////////////////////// 683 684 logic intg_err; 685 tlul_pkg::tl_h2d_t tl_win_h2d; 686 tlul_pkg::tl_d2h_t tl_win_d2h; 687 rv_core_ibex_cfg_reg_top u_reg_cfg ( 688 .clk_i, 689 .rst_ni, 690 .tl_i(cfg_tl_d_i), 691 .tl_o(cfg_tl_d_o), 692 .reg2hw, 693 .hw2reg, 694 .intg_err_o (intg_err), 695 .tl_win_o(tl_win_h2d), 696 .tl_win_i(tl_win_d2h) 697 ); 698 699 /////////////////////// 700 // Region assignments 701 /////////////////////// 702 703 for(genvar i = 0; i < NumRegions; i++) begin : gen_ibus_region_cfgs 704 2/2 assign ibus_region_cfg[i].en = reg2hw.ibus_addr_en[i]; Tests: T214 T268 T269  | T214 T268 T269  705 2/2 assign ibus_region_cfg[i].matching_region = reg2hw.ibus_addr_matching[i]; Tests: T214 T268 T269  | T214 T268 T269  706 2/2 assign ibus_region_cfg[i].remap_addr = reg2hw.ibus_remap_addr[i]; Tests: T214 T268 T269  | T214 T268 T269  707 end 708 709 for(genvar i = 0; i < NumRegions; i++) begin : gen_dbus_region_cfgs 710 2/2 assign dbus_region_cfg[i].en = reg2hw.dbus_addr_en[i]; Tests: T214 T268 T269  | T214 T268 T269  711 2/2 assign dbus_region_cfg[i].matching_region = reg2hw.dbus_addr_matching[i]; Tests: T214 T268 T269  | T214 T268 T269  712 2/2 assign dbus_region_cfg[i].remap_addr = reg2hw.dbus_remap_addr[i]; Tests: T214 T268 T269  | T214 T268 T269  713 end 714 715 /////////////////////// 716 // Error assignment 717 /////////////////////// 718 719 1/1 assign fatal_intg_err = fatal_intg_event; Tests: T1 T2 T3  720 1/1 assign fatal_core_err = fatal_core_event; Tests: T1 T2 T3  721 1/1 assign recov_core_err = recov_core_event; Tests: T2 T4 T5  722 723 assign hw2reg.err_status.reg_intg_err.d = 1'b1; 724 1/1 assign hw2reg.err_status.reg_intg_err.de = intg_err; Tests: T1 T2 T3  725 assign hw2reg.err_status.fatal_intg_err.d = 1'b1; 726 1/1 assign hw2reg.err_status.fatal_intg_err.de = fatal_intg_err; Tests: T1 T2 T3  727 assign hw2reg.err_status.fatal_core_err.d = 1'b1; 728 1/1 assign hw2reg.err_status.fatal_core_err.de = fatal_core_err; Tests: T1 T2 T3  729 assign hw2reg.err_status.recov_core_err.d = 1'b1; 730 1/1 assign hw2reg.err_status.recov_core_err.de = recov_core_err; Tests: T2 T4 T5  731 732 /////////////////////// 733 // Alert generation 734 /////////////////////// 735 736 logic [NumAlerts-1:0] alert_test; 737 1/1 assign alert_test[0] = reg2hw.alert_test.fatal_sw_err.q & Tests: T1 T2 T3  738 reg2hw.alert_test.fatal_sw_err.qe; 739 1/1 assign alert_test[1] = reg2hw.alert_test.recov_sw_err.q & Tests: T1 T2 T3  740 reg2hw.alert_test.recov_sw_err.qe; 741 1/1 assign alert_test[2] = reg2hw.alert_test.fatal_hw_err.q & Tests: T1 T2 T3  742 reg2hw.alert_test.fatal_hw_err.qe; 743 1/1 assign alert_test[3] = reg2hw.alert_test.recov_hw_err.q & Tests: T1 T2 T3  744 reg2hw.alert_test.recov_hw_err.qe; 745 746 localparam bit [NumAlerts-1:0] AlertFatal = '{1'b0, 1'b1, 1'b0, 1'b1}; 747 748 logic [NumAlerts-1:0] alert_events; 749 logic [NumAlerts-1:0] alert_acks; 750 751 import prim_mubi_pkg::mubi4_test_true_loose; 752 import prim_mubi_pkg::mubi4_t; 753 1/1 assign alert_events[0] = mubi4_test_true_loose(mubi4_t'(reg2hw.sw_fatal_err.q)); Tests: T270  754 0/1 ==> assign alert_events[1] = mubi4_test_true_loose(mubi4_t'(reg2hw.sw_recov_err.q)); 755 1/1 assign alert_events[2] = intg_err | fatal_intg_err | fatal_core_err; Tests: T1 T2 T3  756 1/1 assign alert_events[3] = recov_core_err; Tests: T2 T4 T5  757 758 logic unused_alert_acks; 759 1/1 assign unused_alert_acks = |alert_acks; Tests: T229 T246 T217  760 761 // recoverable alerts are sent once and silenced until activated again. 762 0/1 ==> assign hw2reg.sw_recov_err.de = alert_acks[1]; 763 assign hw2reg.sw_recov_err.d = prim_mubi_pkg::MuBi4False; 764 765 for (genvar i = 0; i < NumAlerts; i++) begin : gen_alert_senders 766 prim_alert_sender #( 767 .AsyncOn(AlertAsyncOn[0]), 768 .IsFatal(AlertFatal[i]) 769 ) u_alert_sender ( 770 .clk_i, 771 .rst_ni, 772 .alert_test_i(alert_test[i]), 773 .alert_req_i(alert_events[i]), 774 .alert_ack_o(alert_acks[i]), 775 .alert_state_o(), 776 .alert_rx_i(alert_rx_i[i]), 777 .alert_tx_o(alert_tx_o[i]) 778 ); 779 end 780 781 ////////////// 782 // RND Data // 783 ////////////// 784 785 logic [31:0] rnd_data_q, rnd_data_d; 786 logic rnd_valid_q, rnd_valid_d; 787 logic rnd_fips_q, rnd_fips_d; 788 logic edn_req; 789 logic [31:0] edn_data; 790 logic edn_ack; 791 logic edn_fips; 792 793 always_comb begin 794 1/1 rnd_valid_d = rnd_valid_q; Tests: T2 T3 T4  795 1/1 rnd_data_d = rnd_data_q; Tests: T2 T3 T4  796 1/1 rnd_fips_d = rnd_fips_q; Tests: T2 T3 T4  797 798 1/1 if (reg2hw.rnd_data.re) begin Tests: T2 T3 T4  799 1/1 rnd_valid_d = '0; Tests: T2 T3 T5  800 1/1 rnd_data_d = '0; Tests: T2 T3 T5  801 1/1 rnd_fips_d = '0; Tests: T2 T3 T5  802 1/1 end else if (edn_req && edn_ack) begin Tests: T2 T3 T4  803 1/1 rnd_valid_d = 1'b1; Tests: T2 T3 T4  804 1/1 rnd_data_d = edn_data; Tests: T2 T3 T4  805 1/1 rnd_fips_d = edn_fips; Tests: T2 T3 T4  806 end MISSING_ELSE 807 end 808 809 always_ff @(posedge clk_i or negedge rst_ni) begin 810 1/1 if (!rst_ni) begin Tests: T1 T2 T3  811 1/1 rnd_valid_q <= '0; Tests: T1 T2 T3  812 1/1 rnd_data_q <= '0; Tests: T1 T2 T3  813 1/1 rnd_fips_q <= '0; Tests: T1 T2 T3  814 end else begin 815 1/1 rnd_valid_q <= rnd_valid_d; Tests: T1 T2 T3  816 1/1 rnd_data_q <= rnd_data_d; Tests: T1 T2 T3  817 1/1 rnd_fips_q <= rnd_fips_d; Tests: T1 T2 T3  818 end 819 end 820 821 1/1 assign edn_req = ~rnd_valid_q; Tests: T2 T3 T4  822 823 prim_edn_req #( 824 .OutWidth(32) 825 ) u_edn_if ( 826 .clk_i, 827 .rst_ni, 828 .req_chk_i(1'b1), 829 .req_i(edn_req), 830 .ack_o(edn_ack), 831 .data_o(edn_data), 832 .fips_o(edn_fips), 833 .err_o(), 834 .clk_edn_i, 835 .rst_edn_ni, 836 .edn_o, 837 .edn_i 838 ); 839 840 1/1 assign hw2reg.rnd_data.d = rnd_data_q; Tests: T2 T3 T4  841 1/1 assign hw2reg.rnd_status.rnd_data_valid.d = rnd_valid_q; Tests: T2 T3 T4  842 1/1 assign hw2reg.rnd_status.rnd_data_fips.d = rnd_fips_q; Tests: T157 T271 T272  843 844 logic unused_reg2hw; 845 0/1 ==> assign unused_reg2hw = |reg2hw.rnd_data.q; 846 847 848 // fpga build info hook-up 849 unreachable assign hw2reg.fpga_info.d = fpga_info_i; 850 851 ///////////////////////////////////// 852 // The carved out space is for DV emulation purposes only 853 ///////////////////////////////////// 854 855 import tlul_pkg::tl_h2d_t; 856 import tlul_pkg::tl_d2h_t; 857 localparam int TlH2DWidth = $bits(tl_h2d_t); 858 localparam int TlD2HWidth = $bits(tl_d2h_t); 859 860 logic [TlH2DWidth-1:0] tl_win_h2d_int; 861 logic [TlD2HWidth-1:0] tl_win_d2h_int; 862 tl_d2h_t tl_win_d2h_err_rsp; 863 864 prim_buf #( 865 .Width(TlH2DWidth) 866 ) u_tlul_req_buf ( 867 .in_i(tl_win_h2d), 868 .out_o(tl_win_h2d_int) 869 ); 870 871 prim_buf #( 872 .Width(TlD2HWidth) 873 ) u_tlul_rsp_buf ( 874 .in_i(tl_win_d2h_err_rsp), 875 .out_o(tl_win_d2h_int) 876 ); 877 878 // Interception point for connecting simulation SRAM by disconnecting the tl_d output. The 879 // disconnection is done only if `SYNTHESIS is NOT defined AND `RV_CORE_IBEX_SIM_SRAM is 880 // defined. 881 // This define is used only for verilator as verilator does not support forces. 882 `ifdef RV_CORE_IBEX_SIM_SRAM 883 `ifdef SYNTHESIS 884 // Induce a compilation error by instantiating a non-existent module. 885 illegal_preprocessor_branch_taken u_illegal_preprocessor_branch_taken(); 886 `endif 887 `else 888 1/1 assign tl_win_d2h = tl_d2h_t'(tl_win_d2h_int); Tests: T1 T2 T3  889 `endif 890 891 tlul_err_resp u_sim_win_rsp ( 892 .clk_i, 893 .rst_ni, 894 .tl_h_i(tl_h2d_t'(tl_win_h2d_int)), 895 .tl_h_o(tl_win_d2h_err_rsp) 896 ); 897 898 // Assertions for CPU enable 899 // Allow 2 or 3 cycles for input to enable due to synchronizers 900 `ASSERT(FpvSecCmIbexFetchEnable0_A, 901 fatal_core_err 902 |=> 903 lc_ctrl_pkg::lc_tx_test_false_loose(fetch_enable)) 904 `ASSERT(FpvSecCmIbexFetchEnable1_A, 905 lc_ctrl_pkg::lc_tx_test_false_loose(lc_cpu_en_i) 906 |-> 907 ##[2:3] lc_ctrl_pkg::lc_tx_test_false_loose(fetch_enable)) 908 `ASSERT(FpvSecCmIbexFetchEnable2_A, 909 lc_ctrl_pkg::lc_tx_test_false_loose(pwrmgr_cpu_en_i) 910 |-> 911 ##[2:3] lc_ctrl_pkg::lc_tx_test_false_loose(fetch_enable)) 912 `ASSERT(FpvSecCmIbexFetchEnable3_A, 913 lc_ctrl_pkg::lc_tx_test_true_strict(lc_cpu_en_i) && 914 lc_ctrl_pkg::lc_tx_test_true_strict(pwrmgr_cpu_en_i) ##1 915 lc_ctrl_pkg::lc_tx_test_true_strict(local_fetch_enable_q) && 916 !fatal_core_err 917 |=> 918 ##[0:1] lc_ctrl_pkg::lc_tx_test_true_strict(fetch_enable)) 919 `ASSERT(FpvSecCmIbexFetchEnable3Rev_A, 920 ##2 lc_ctrl_pkg::lc_tx_test_true_strict(fetch_enable) 921 |-> 922 ($past(lc_ctrl_pkg::lc_tx_test_true_strict(lc_cpu_en_i), 2) || 923 $past(lc_ctrl_pkg::lc_tx_test_true_strict(lc_cpu_en_i), 3)) && 924 ($past(lc_ctrl_pkg::lc_tx_test_true_strict(pwrmgr_cpu_en_i), 2) || 925 $past(lc_ctrl_pkg::lc_tx_test_true_strict(pwrmgr_cpu_en_i), 3)) && 926 $past(!fatal_core_err)) 927 928 // Alert assertions for reg_we onehot check 929 `ASSERT_PRIM_REG_WE_ONEHOT_ERROR_TRIGGER_ALERT(RegWeOnehotCheck_A, u_reg_cfg, alert_tx_o[2]) 930 `ASSERT_PRIM_ONEHOT_ERROR_TRIGGER_ALERT(RvCoreRegWeOnehotCheck_A, 931 u_core.gen_regfile_ff.register_file_i.gen_wren_check.u_prim_onehot_check, alert_tx_o[2]) 932 `ASSERT_PRIM_ONEHOT_ERROR_TRIGGER_ALERT(RvCoreRegWeOnehotCheckRAddrA_A, 933 u_core.gen_regfile_ff.register_file_i.gen_rdata_mux_check.u_prim_onehot_check_raddr_a, 934 alert_tx_o[2]) 935 `ASSERT_PRIM_ONEHOT_ERROR_TRIGGER_ALERT(RvCoreRegWeOnehotCheckRAddrB_A, 936 u_core.gen_regfile_ff.register_file_i.gen_rdata_mux_check.u_prim_onehot_check_raddr_b, 937 alert_tx_o[2]) 938 939 `ifdef INC_ASSERT 940 if (ICache && ICacheScramble) begin : gen_icache_scramble_asserts 941 942 // Sample icache scramble key for use in assertions below. 943 // pragma coverage off 944 //VCS coverage off 945 logic [otp_ctrl_pkg::FlashKeyWidth-1:0] icache_otp_key_q; 946 always_ff @(posedge clk_i, negedge rst_ni) begin 947 unreachable if (!rst_ni) begin 948 unreachable icache_otp_key_q <= '0; 949 unreachable end else if (icache_otp_key_i.ack) begin 950 unreachable icache_otp_key_q <= icache_otp_key_i.key; 951 end ==> MISSING_ELSE 952 end 953 //VCS coverage on 954 // pragma coverage on 955 956 // Ensure that when a scramble key is received, it is correctly forwarded to the core. The core 957 // will then internally ensure that the key is correctly applied to the icache scrambled 958 // memory primitives. 959 `ASSERT(IbexIcacheScrambleKeyForwardedToCore_A, 960 icache_otp_key_i.ack 961 |-> ##[0:10] // upper bound is not exact, but it should not take more than 10 cycles 962 u_core.scramble_key_valid_i && (u_core.scramble_key_i == icache_otp_key_q) 963 ) 964 965 // Ensure that when a FENCE.I is executed, a new icache scramble key is requested. 966 `ASSERT(IbexIcacheScrambleKeyRequestAfterFenceI_A, 967 u_core.u_ibex_core.id_stage_i.instr_valid_i 968 && u_core.u_ibex_core.id_stage_i.decoder_i.opcode == ibex_pkg::OPCODE_MISC_MEM 969 && u_core.u_ibex_core.id_stage_i.decoder_i.instr[14:12] == 3'b001 // FENCE.I 970 |-> ##[0:14] // upper bound is not exact, but it should not take more than a few cycles 971 icache_otp_key_o.req 972 ) 973 974 end 975 976 `define ASSERT_IBEX_CORE_ERROR_TRIGGER_ALERT(__assert_name, __alert_name, _hier, __error_name) \ 977 if (1) begin : g_``__error_name``_assert_signals \ 978 logic __error_name; \ 979 assign __error_name = u_core._hier``.__error_name; \ 980 \ 981 logic unused_assert_connected; \ 982 `ASSERT_INIT_NET(AssertConnected_A, unused_assert_connected === 1'b1) \ 983 end \ 984 `ASSERT_ERROR_TRIGGER_ALERT(__assert_name, g_``__error_name``_assert_signals, __alert_name, 0, \ 985 30, // MAX_CYCLES_, use a large value as ibex clock is 4x faster than clk in alert_handler \ 986 __error_name) 987 988 0/1 ==> `ASSERT_IBEX_CORE_ERROR_TRIGGER_ALERT(IbexPcMismatchCheck_A, alert_tx_o[2],
ASSERT_IBEX_CORE_ERROR_TRIGGER_ALERT(IbexPcMism: 988.1 if (1) begin : g_pc_mismatch_alert_o_assert_signals 988.2 logic pc_mismatch_alert_o; 988.3 0/1 ==> assign pc_mismatch_alert_o = u_core.u_ibex_core.if_stage_i.pc_mismatch_alert_o; 988.4 988.5 logic unused_assert_connected; 988.6 initial begin 988.7 988.8 988.9 988.10 #1ps; 988.11 AssertConnected_A: assert (unused_assert_connected === 1'b1) 988.12 else begin 988.13 `ifdef UVM 988.14 uvm_pkg::uvm_report_error("ASSERT FAILED", "AssertConnected_A", uvm_pkg::UVM_NONE, 988.15 "../src/lowrisc_ip_rv_core_ibex_0.1/rtl/rv_core_ibex.sv", 988, "", 1); 988.16 `else 988.17 $error("%0t: (%0s:%0d) [%m] [ASSERT FAILED] %0s", $time, `__FILE__, `__LINE__, 988.18 `PRIM_STRINGIFY(AssertConnected_A)); 988.19 `endif 988.20 end 988.21 end 988.22 988.23 end 988.24 FpvSecCmIbexPcMismatchCheck_A: assert property (@(posedge clk_i) disable iff ((!rst_ni) !== '0) ($rose(g_pc_mismatch_alert_o_assert_signals.pc_mismatch_alert_o) && !(0) |-> ##[0:30] ((alert_tx_o[2].alert_p)))) 988.25 else begin 988.26 `ifdef UVM 988.27 uvm_pkg::uvm_report_error("ASSERT FAILED", "FpvSecCmIbexPcMismatchCheck_A", uvm_pkg::UVM_NONE, 988.28 "../src/lowrisc_ip_rv_core_ibex_0.1/rtl/rv_core_ibex.sv", 988, "", 1); 988.29 `else 988.30 $error("%0t: (%0s:%0d) [%m] [ASSERT FAILED] %0s", $time, `__FILE__, `__LINE__, 988.31 `PRIM_STRINGIFY(FpvSecCmIbexPcMismatchCheck_A)); 988.32 `endif 988.33 end 988.34 `ifdef INC_ASSERT 988.35 assign g_pc_mismatch_alert_o_assert_signals.unused_assert_connected = 1'b1; 988.36 `endif 988.37 `ifdef FPV_ON 988.38 `ASSUME(IbexPcMismatchCheck_ATriggerAfterAlertInit_S, $stable(rst_ni) == 0 |-> g_pc_mismatch_alert_o_assert_signals.pc_mismatch_alert_o == 0 [*10], `ASSERT_DEFAULT_CLK, `ASSERT_DEFAULT_RST) 988.39 `endif989 u_ibex_core.if_stage_i, pc_mismatch_alert_o) 990 0/1 ==> `ASSERT_IBEX_CORE_ERROR_TRIGGER_ALERT(IbexRfEccErrCheck_A, alert_tx_o[2], u_ibex_core,
ASSERT_IBEX_CORE_ER: 990.1 if (1) begin : g_rf_ecc_err_comb_assert_signals 990.2 logic rf_ecc_err_comb; 990.3 0/1 ==> assign rf_ecc_err_comb = u_core.u_ibex_core.rf_ecc_err_comb; 990.4 990.5 logic unused_assert_connected; 990.6 initial begin 990.7 990.8 990.9 990.10 #1ps; 990.11 AssertConnected_A: assert (unused_assert_connected === 1'b1) 990.12 else begin 990.13 `ifdef UVM 990.14 uvm_pkg::uvm_report_error("ASSERT FAILED", "AssertConnected_A", uvm_pkg::UVM_NONE, 990.15 "../src/lowrisc_ip_rv_core_ibex_0.1/rtl/rv_core_ibex.sv", 990, "", 1); 990.16 `else 990.17 $error("%0t: (%0s:%0d) [%m] [ASSERT FAILED] %0s", $time, `__FILE__, `__LINE__, 990.18 `PRIM_STRINGIFY(AssertConnected_A)); 990.19 `endif 990.20 end 990.21 end 990.22 990.23 end 990.24 FpvSecCmIbexRfEccErrCheck_A: assert property (@(posedge clk_i) disable iff ((!rst_ni) !== '0) ($rose(g_rf_ecc_err_comb_assert_signals.rf_ecc_err_comb) && !(0) |-> ##[0:30] ((alert_tx_o[2].alert_p)))) 990.25 else begin 990.26 `ifdef UVM 990.27 uvm_pkg::uvm_report_error("ASSERT FAILED", "FpvSecCmIbexRfEccErrCheck_A", uvm_pkg::UVM_NONE, 990.28 "../src/lowrisc_ip_rv_core_ibex_0.1/rtl/rv_core_ibex.sv", 990, "", 1); 990.29 `else 990.30 $error("%0t: (%0s:%0d) [%m] [ASSERT FAILED] %0s", $time, `__FILE__, `__LINE__, 990.31 `PRIM_STRINGIFY(FpvSecCmIbexRfEccErrCheck_A)); 990.32 `endif 990.33 end 990.34 `ifdef INC_ASSERT 990.35 assign g_rf_ecc_err_comb_assert_signals.unused_assert_connected = 1'b1; 990.36 `endif 990.37 `ifdef FPV_ON 990.38 `ASSUME(IbexRfEccErrCheck_ATriggerAfterAlertInit_S, $stable(rst_ni) == 0 |-> g_rf_ecc_err_comb_assert_signals.rf_ecc_err_comb == 0 [*10], `ASSERT_DEFAULT_CLK, `ASSERT_DEFAULT_RST) 990.39 `endif991 rf_ecc_err_comb) 992 1/1 `ASSERT_IBEX_CORE_ERROR_TRIGGER_ALERT(IbexLoadRespIntgErrCheck_A, alert_tx_o[2], u_ibex_core, Tests: T1 T2 T3 
ASSERT_IBEX_CORE_ERROR_TRI: 992.1 if (1) begin : g_lsu_load_resp_intg_err_assert_signals 992.2 logic lsu_load_resp_intg_err; 992.3 1/1 assign lsu_load_resp_intg_err = u_core.u_ibex_core.lsu_load_resp_intg_err; Tests: T1 T2 T3  992.4 992.5 logic unused_assert_connected; 992.6 initial begin 992.7 992.8 992.9 992.10 #1ps; 992.11 AssertConnected_A: assert (unused_assert_connected === 1'b1) 992.12 else begin 992.13 `ifdef UVM 992.14 uvm_pkg::uvm_report_error("ASSERT FAILED", "AssertConnected_A", uvm_pkg::UVM_NONE, 992.15 "../src/lowrisc_ip_rv_core_ibex_0.1/rtl/rv_core_ibex.sv", 992, "", 1); 992.16 `else 992.17 $error("%0t: (%0s:%0d) [%m] [ASSERT FAILED] %0s", $time, `__FILE__, `__LINE__, 992.18 `PRIM_STRINGIFY(AssertConnected_A)); 992.19 `endif 992.20 end 992.21 end 992.22 992.23 end 992.24 FpvSecCmIbexLoadRespIntgErrCheck_A: assert property (@(posedge clk_i) disable iff ((!rst_ni) !== '0) ($rose(g_lsu_load_resp_intg_err_assert_signals.lsu_load_resp_intg_err) && !(0) |-> ##[0:30] ((alert_tx_o[2].alert_p)))) 992.25 else begin 992.26 `ifdef UVM 992.27 uvm_pkg::uvm_report_error("ASSERT FAILED", "FpvSecCmIbexLoadRespIntgErrCheck_A", uvm_pkg::UVM_NONE, 992.28 "../src/lowrisc_ip_rv_core_ibex_0.1/rtl/rv_core_ibex.sv", 992, "", 1); 992.29 `else 992.30 $error("%0t: (%0s:%0d) [%m] [ASSERT FAILED] %0s", $time, `__FILE__, `__LINE__, 992.31 `PRIM_STRINGIFY(FpvSecCmIbexLoadRespIntgErrCheck_A)); 992.32 `endif 992.33 end 992.34 `ifdef INC_ASSERT 992.35 assign g_lsu_load_resp_intg_err_assert_signals.unused_assert_connected = 1'b1; 992.36 `endif 992.37 `ifdef FPV_ON 992.38 `ASSUME(IbexLoadRespIntgErrCheck_ATriggerAfterAlertInit_S, $stable(rst_ni) == 0 |-> g_lsu_load_resp_intg_err_assert_signals.lsu_load_resp_intg_err == 0 [*10], `ASSERT_DEFAULT_CLK, `ASSERT_DEFAULT_RST) 992.39 `endif993 lsu_load_resp_intg_err) 994 1/1 `ASSERT_IBEX_CORE_ERROR_TRIGGER_ALERT(IbexStoreRespIntgErrCheck_A, alert_tx_o[2], u_ibex_core, Tests: T1 T2 T3 
ASSERT_IBEX_CORE_ERROR_TRIG: 994.1 if (1) begin : g_lsu_store_resp_intg_err_assert_signals 994.2 logic lsu_store_resp_intg_err; 994.3 1/1 assign lsu_store_resp_intg_err = u_core.u_ibex_core.lsu_store_resp_intg_err; Tests: T1 T2 T3  994.4 994.5 logic unused_assert_connected; 994.6 initial begin 994.7 994.8 994.9 994.10 #1ps; 994.11 AssertConnected_A: assert (unused_assert_connected === 1'b1) 994.12 else begin 994.13 `ifdef UVM 994.14 uvm_pkg::uvm_report_error("ASSERT FAILED", "AssertConnected_A", uvm_pkg::UVM_NONE, 994.15 "../src/lowrisc_ip_rv_core_ibex_0.1/rtl/rv_core_ibex.sv", 994, "", 1); 994.16 `else 994.17 $error("%0t: (%0s:%0d) [%m] [ASSERT FAILED] %0s", $time, `__FILE__, `__LINE__, 994.18 `PRIM_STRINGIFY(AssertConnected_A)); 994.19 `endif 994.20 end 994.21 end 994.22 994.23 end 994.24 FpvSecCmIbexStoreRespIntgErrCheck_A: assert property (@(posedge clk_i) disable iff ((!rst_ni) !== '0) ($rose(g_lsu_store_resp_intg_err_assert_signals.lsu_store_resp_intg_err) && !(0) |-> ##[0:30] ((alert_tx_o[2].alert_p)))) 994.25 else begin 994.26 `ifdef UVM 994.27 uvm_pkg::uvm_report_error("ASSERT FAILED", "FpvSecCmIbexStoreRespIntgErrCheck_A", uvm_pkg::UVM_NONE, 994.28 "../src/lowrisc_ip_rv_core_ibex_0.1/rtl/rv_core_ibex.sv", 994, "", 1); 994.29 `else 994.30 $error("%0t: (%0s:%0d) [%m] [ASSERT FAILED] %0s", $time, `__FILE__, `__LINE__, 994.31 `PRIM_STRINGIFY(FpvSecCmIbexStoreRespIntgErrCheck_A)); 994.32 `endif 994.33 end 994.34 `ifdef INC_ASSERT 994.35 assign g_lsu_store_resp_intg_err_assert_signals.unused_assert_connected = 1'b1; 994.36 `endif 994.37 `ifdef FPV_ON 994.38 `ASSUME(IbexStoreRespIntgErrCheck_ATriggerAfterAlertInit_S, $stable(rst_ni) == 0 |-> g_lsu_store_resp_intg_err_assert_signals.lsu_store_resp_intg_err == 0 [*10], `ASSERT_DEFAULT_CLK, `ASSERT_DEFAULT_RST) 994.39 `endif995 lsu_store_resp_intg_err) 996 1/1 `ASSERT_IBEX_CORE_ERROR_TRIGGER_ALERT(IbexInstrIntgErrCheck_A, alert_tx_o[2], u_ibex_core, Tests: T1 T2 T3 
ASSERT_IBEX_CORE_E: 996.1 if (1) begin : g_instr_intg_err_assert_signals 996.2 logic instr_intg_err; 996.3 1/1 assign instr_intg_err = u_core.u_ibex_core.instr_intg_err; Tests: T1 T2 T3  996.4 996.5 logic unused_assert_connected; 996.6 initial begin 996.7 996.8 996.9 996.10 #1ps; 996.11 AssertConnected_A: assert (unused_assert_connected === 1'b1) 996.12 else begin 996.13 `ifdef UVM 996.14 uvm_pkg::uvm_report_error("ASSERT FAILED", "AssertConnected_A", uvm_pkg::UVM_NONE, 996.15 "../src/lowrisc_ip_rv_core_ibex_0.1/rtl/rv_core_ibex.sv", 996, "", 1); 996.16 `else 996.17 $error("%0t: (%0s:%0d) [%m] [ASSERT FAILED] %0s", $time, `__FILE__, `__LINE__, 996.18 `PRIM_STRINGIFY(AssertConnected_A)); 996.19 `endif 996.20 end 996.21 end 996.22 996.23 end 996.24 FpvSecCmIbexInstrIntgErrCheck_A: assert property (@(posedge clk_i) disable iff ((!rst_ni) !== '0) ($rose(g_instr_intg_err_assert_signals.instr_intg_err) && !(0) |-> ##[0:30] ((alert_tx_o[2].alert_p)))) 996.25 else begin 996.26 `ifdef UVM 996.27 uvm_pkg::uvm_report_error("ASSERT FAILED", "FpvSecCmIbexInstrIntgErrCheck_A", uvm_pkg::UVM_NONE, 996.28 "../src/lowrisc_ip_rv_core_ibex_0.1/rtl/rv_core_ibex.sv", 996, "", 1); 996.29 `else 996.30 $error("%0t: (%0s:%0d) [%m] [ASSERT FAILED] %0s", $time, `__FILE__, `__LINE__, 996.31 `PRIM_STRINGIFY(FpvSecCmIbexInstrIntgErrCheck_A)); 996.32 `endif 996.33 end 996.34 `ifdef INC_ASSERT 996.35 assign g_instr_intg_err_assert_signals.unused_assert_connected = 1'b1; 996.36 `endif 996.37 `ifdef FPV_ON 996.38 `ASSUME(IbexInstrIntgErrCheck_ATriggerAfterAlertInit_S, $stable(rst_ni) == 0 |-> g_instr_intg_err_assert_signals.instr_intg_err == 0 [*10], `ASSERT_DEFAULT_CLK, `ASSERT_DEFAULT_RST) 996.39 `endif

Cond Coverage for Module : rv_core_ibex
TotalCoveredPercent
Conditions282589.29
Logical282589.29
Non-Logical00
Event00

 LINE       216
 EXPRESSION (ibus_intg_err | dbus_intg_err | alert_major_bus)
             ------1------   ------2------   -------3-------
-1--2--3-StatusTests
000CoveredT1,T2,T3
001CoveredT229,T217,T151
010Not Covered
100Not Covered

 LINE       217
 EXPRESSION (alert_major_internal | double_fault)
             ----------1---------   ------2-----
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT246,T266,T267
10CoveredT163,T273,T227

 LINE       348
 EXPRESSION (fatal_core_err ? Off : local_fetch_enable_q)
             -------1------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT246,T163,T273

 LINE       737
 EXPRESSION (reg2hw.alert_test.fatal_sw_err.q & reg2hw.alert_test.fatal_sw_err.qe)
             ----------------1---------------   ----------------2----------------
-1--2-StatusTests
01CoveredT75,T227,T192
10CoveredT1,T2,T3
11CoveredT75,T76,T274

 LINE       739
 EXPRESSION (reg2hw.alert_test.recov_sw_err.q & reg2hw.alert_test.recov_sw_err.qe)
             ----------------1---------------   ----------------2----------------
-1--2-StatusTests
01CoveredT75,T76,T274
10CoveredT1,T2,T3
11CoveredT75,T227,T192

 LINE       741
 EXPRESSION (reg2hw.alert_test.fatal_hw_err.q & reg2hw.alert_test.fatal_hw_err.qe)
             ----------------1---------------   ----------------2----------------
-1--2-StatusTests
01CoveredT75,T227,T192
10CoveredT1,T2,T3
11CoveredT75,T76,T274

 LINE       743
 EXPRESSION (reg2hw.alert_test.recov_hw_err.q & reg2hw.alert_test.recov_hw_err.qe)
             ----------------1---------------   ----------------2----------------
-1--2-StatusTests
01CoveredT75,T227,T192
10CoveredT1,T2,T3
11CoveredT75,T76,T274

 LINE       755
 EXPRESSION (intg_err | fatal_intg_err | fatal_core_err)
             ----1---   -------2------   -------3------
-1--2--3-StatusTests
000CoveredT1,T2,T3
001CoveredT246,T163,T273
010CoveredT229,T217,T151
100CoveredT275,T276,T277

 LINE       802
 EXPRESSION (edn_req && edn_ack)
             ---1---    ---2---
-1--2-StatusTests
01Not Covered
10CoveredT2,T3,T5
11CoveredT2,T3,T4

Toggle Coverage for Module : rv_core_ibex
TotalCoveredPercent
Totals 123 117 95.12
Total Bits 1628 1604 98.53
Total Bits 0->1 814 802 98.53
Total Bits 1->0 814 802 98.53

Ports 123 117 95.12
Port Bits 1628 1604 98.53
Port Bits 0->1 814 802 98.53
Port Bits 1->0 814 802 98.53

Port Details
NameToggleToggle 1->0TestsToggle 0->1TestsDirection
clk_i Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
rst_ni Yes Yes T6,T29,T36 Yes T1,T2,T3 INPUT
clk_edn_i Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
rst_edn_ni Yes Yes T6,T29,T36 Yes T1,T2,T3 INPUT
clk_esc_i Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
rst_esc_ni Yes Yes T6,T29,T36 Yes T1,T2,T3 INPUT
rst_cpu_n_o Yes Yes T6,T29,T36 Yes T1,T2,T3 OUTPUT
ram_cfg_i.rf_cfg.cfg[3:0] No No No INPUT
ram_cfg_i.rf_cfg.cfg_en No No No INPUT
ram_cfg_i.rf_cfg.test No No No INPUT
ram_cfg_i.ram_cfg.cfg[3:0] No No No INPUT
ram_cfg_i.ram_cfg.cfg_en No No No INPUT
ram_cfg_i.ram_cfg.test No No No INPUT
hart_id_i[31:0] Unreachable Unreachable Unreachable INPUT
boot_addr_i[31:0] Unreachable Unreachable Unreachable INPUT
corei_tl_h_o.d_ready Yes Yes T278,T279,T280 Yes T94,T95,T96 OUTPUT
corei_tl_h_o.a_user.data_intg[6:0] Yes Yes T94,T95,T96 Yes T94,T95,T96 OUTPUT
corei_tl_h_o.a_user.cmd_intg[6:0] Yes Yes T1,T2,T3 Yes T1,T2,T3 OUTPUT
corei_tl_h_o.a_user.instr_type[3:0] Yes Yes T99,T278,T279 Yes T99,T278,T279 OUTPUT
corei_tl_h_o.a_user.rsvd[4:0] Unreachable Unreachable Unreachable OUTPUT
corei_tl_h_o.a_data[31:0] Yes Yes T94,T95,T96 Yes T94,T95,T96 OUTPUT
corei_tl_h_o.a_mask[3:0] Yes Yes T94,T95,T96 Yes T94,T95,T96 OUTPUT
corei_tl_h_o.a_address[31:0] Yes Yes T94,T95,T96 Yes T94,T95,T96 OUTPUT
corei_tl_h_o.a_source[5:0] Yes Yes *T1,*T2,*T3 Yes T1,T2,T3 OUTPUT
corei_tl_h_o.a_source[7:6] Unreachable Unreachable Unreachable OUTPUT
corei_tl_h_o.a_size[1:0] Yes Yes T94,T95,T96 Yes T94,T95,T96 OUTPUT
corei_tl_h_o.a_param[2:0] Unreachable Unreachable Unreachable OUTPUT
corei_tl_h_o.a_opcode[2:0] Yes Yes T94,T95,T96 Yes T94,T95,T96 OUTPUT
corei_tl_h_o.a_valid Yes Yes T1,T2,T3 Yes T1,T2,T3 OUTPUT
corei_tl_h_i.a_ready Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
corei_tl_h_i.d_error Yes Yes T192,T245,T213 Yes T192,T245,T213 INPUT
corei_tl_h_i.d_user.data_intg[6:0] Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
corei_tl_h_i.d_user.rsp_intg[6:0] Yes Yes T229,T192,T245 Yes T229,T192,T245 INPUT
corei_tl_h_i.d_data[31:0] Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
corei_tl_h_i.d_sink Yes Yes T94,T95,T96 Yes T94,T95,T96 INPUT
corei_tl_h_i.d_source[5:0] Yes Yes *T1,*T2,*T3 Yes T1,T2,T3 INPUT
corei_tl_h_i.d_source[7:6] Unreachable Unreachable Unreachable INPUT
corei_tl_h_i.d_size[1:0] Yes Yes T94,T95,T96 Yes T94,T95,T96 INPUT
corei_tl_h_i.d_param[2:0] Unreachable Unreachable Unreachable INPUT
corei_tl_h_i.d_opcode[0] Yes Yes *T1,*T2,*T3 Yes T1,T2,T3 INPUT
corei_tl_h_i.d_opcode[2:1] Unreachable Unreachable Unreachable INPUT
corei_tl_h_i.d_valid Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
cored_tl_h_o.d_ready Yes Yes T35,T97,T98 Yes T35,T97,T98 OUTPUT
cored_tl_h_o.a_user.data_intg[6:0] Yes Yes T1,T2,T3 Yes T1,T2,T3 OUTPUT
cored_tl_h_o.a_user.cmd_intg[6:0] Yes Yes T1,T2,T3 Yes T1,T2,T3 OUTPUT
cored_tl_h_o.a_user.instr_type[3:0] Yes Yes T181,T96,T278 Yes T181,T96,T278 OUTPUT
cored_tl_h_o.a_user.rsvd[4:0] Unreachable Unreachable Unreachable OUTPUT
cored_tl_h_o.a_data[31:0] Yes Yes T1,T2,T3 Yes T1,T2,T3 OUTPUT
cored_tl_h_o.a_mask[3:0] Yes Yes T1,T2,T3 Yes T1,T2,T3 OUTPUT
cored_tl_h_o.a_address[31:0] Yes Yes T181,T94,T95 Yes T181,T94,T95 OUTPUT
cored_tl_h_o.a_source[5:0] Yes Yes *T1,*T2,*T3 Yes T1,T2,T3 OUTPUT
cored_tl_h_o.a_source[7:6] Unreachable Unreachable Unreachable OUTPUT
cored_tl_h_o.a_size[1:0] Yes Yes T181,T94,T95 Yes T181,T94,T95 OUTPUT
cored_tl_h_o.a_param[2:0] Unreachable Unreachable Unreachable OUTPUT
cored_tl_h_o.a_opcode[2:0] Yes Yes T1,T2,T3 Yes T1,T2,T3 OUTPUT
cored_tl_h_o.a_valid Yes Yes T1,T2,T3 Yes T1,T2,T3 OUTPUT
cored_tl_h_i.a_ready Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
cored_tl_h_i.d_error Yes Yes T83,T229,T246 Yes T83,T229,T246 INPUT
cored_tl_h_i.d_user.data_intg[6:0] Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
cored_tl_h_i.d_user.rsp_intg[6:0] Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
cored_tl_h_i.d_data[31:0] Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
cored_tl_h_i.d_sink Yes Yes T94,T95,T96 Yes T94,T95,T96 INPUT
cored_tl_h_i.d_source[5:0] Yes Yes *T1,*T2,*T3 Yes T1,T2,T3 INPUT
cored_tl_h_i.d_source[7:6] Unreachable Unreachable Unreachable INPUT
cored_tl_h_i.d_size[1:0] Yes Yes T94,T95,T96 Yes T94,T95,T96 INPUT
cored_tl_h_i.d_param[2:0] Unreachable Unreachable Unreachable INPUT
cored_tl_h_i.d_opcode[0] Yes Yes *T1,*T2,*T3 Yes T1,T2,T3 INPUT
cored_tl_h_i.d_opcode[2:1] Unreachable Unreachable Unreachable INPUT
cored_tl_h_i.d_valid Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
irq_software_i Yes Yes T281,T70,T282 Yes T281,T70,T282 INPUT
irq_timer_i Yes Yes T126,T127,T128 Yes T126,T127,T128 INPUT
irq_external_i Yes Yes T2,T3,T5 Yes T2,T3,T5 INPUT
esc_tx_i.esc_n Yes Yes T43,T81,T83 Yes T43,T81,T83 INPUT
esc_tx_i.esc_p Yes Yes T43,T81,T83 Yes T43,T81,T83 INPUT
esc_rx_o.resp_n Yes Yes T43,T81,T83 Yes T43,T81,T83 OUTPUT
esc_rx_o.resp_p Yes Yes T43,T81,T83 Yes T43,T81,T83 OUTPUT
nmi_wdog_i Yes Yes T264,T265,T138 Yes T264,T265,T138 INPUT
debug_req_i Yes Yes T88,T54,T55 Yes T88,T54,T55 INPUT
crash_dump_o.current.exception_addr[31:0] Unreachable Unreachable Unreachable OUTPUT
crash_dump_o.current.exception_pc[31:0] Unreachable Unreachable Unreachable OUTPUT
crash_dump_o.current.last_data_addr[31:0] Unreachable Unreachable Unreachable OUTPUT
crash_dump_o.current.next_pc[31:0] Unreachable Unreachable Unreachable OUTPUT
crash_dump_o.current.current_pc[31:0] Unreachable Unreachable Unreachable OUTPUT
crash_dump_o.prev_exception_addr[31:0] Unreachable Unreachable Unreachable OUTPUT
crash_dump_o.prev_exception_pc[31:0] Unreachable Unreachable Unreachable OUTPUT
crash_dump_o.prev_valid Unreachable Unreachable Unreachable OUTPUT
lc_cpu_en_i[3:0] Yes Yes T6,T36,T42 Yes T1,T2,T3 INPUT
pwrmgr_cpu_en_i[3:0] Yes Yes T5,T6,T23 Yes T1,T2,T3 INPUT
pwrmgr_o.core_sleeping Yes Yes T1,T2,T3 Yes T1,T2,T3 OUTPUT
scan_rst_ni Unreachable Unreachable Unreachable INPUT
scanmode_i[3:0] Unreachable Unreachable Unreachable INPUT
cfg_tl_d_i.d_ready Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
cfg_tl_d_i.a_user.data_intg[6:0] Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
cfg_tl_d_i.a_user.cmd_intg[6:0] Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
cfg_tl_d_i.a_user.instr_type[3:0] Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
cfg_tl_d_i.a_user.rsvd[4:0] Unreachable Unreachable Unreachable INPUT
cfg_tl_d_i.a_data[31:0] Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
cfg_tl_d_i.a_mask[3:0] Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
cfg_tl_d_i.a_address[7:0] Yes Yes *T95,*T96,*T99 Yes T95,T96,T99 INPUT
cfg_tl_d_i.a_address[15:8] Unreachable Unreachable Unreachable INPUT
cfg_tl_d_i.a_address[20:16] Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
cfg_tl_d_i.a_address[23:21] Unreachable Unreachable Unreachable INPUT
cfg_tl_d_i.a_address[24] Yes Yes *T1,*T2,*T3 Yes T1,T2,T3 INPUT
cfg_tl_d_i.a_address[29:25] Unreachable Unreachable Unreachable INPUT
cfg_tl_d_i.a_address[30] Yes Yes *T1,*T2,*T3 Yes T1,T2,T3 INPUT
cfg_tl_d_i.a_address[31] Unreachable Unreachable Unreachable INPUT
cfg_tl_d_i.a_source[5:0] Yes Yes *T94,*T95,*T96 Yes T94,T95,T96 INPUT
cfg_tl_d_i.a_source[7:6] Unreachable Unreachable Unreachable INPUT
cfg_tl_d_i.a_size[1:0] Yes Yes T94,T95,T96 Yes T94,T95,T96 INPUT
cfg_tl_d_i.a_param[2:0] Unreachable Unreachable Unreachable INPUT
cfg_tl_d_i.a_opcode[2:0] Yes Yes T95,T96,T99 Yes T95,T96,T99 INPUT
cfg_tl_d_i.a_valid Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
cfg_tl_d_o.a_ready Yes Yes T1,T2,T3 Yes T1,T2,T3 OUTPUT
cfg_tl_d_o.d_error Yes Yes T94,T95,T96 Yes T94,T95,T96 OUTPUT
cfg_tl_d_o.d_user.data_intg[6:0] Yes Yes T2,T3,T5 Yes T2,T3,T5 OUTPUT
cfg_tl_d_o.d_user.rsp_intg[6:0] Yes Yes T2,T3,T4 Yes T1,T2,T3 OUTPUT
cfg_tl_d_o.d_data[31:0] Yes Yes T2,T3,T5 Yes T2,T3,T5 OUTPUT
cfg_tl_d_o.d_sink Yes Yes T94,T95,T96 Yes T94,T95,T96 OUTPUT
cfg_tl_d_o.d_source[5:0] Yes Yes *T94,*T96,*T99 Yes T94,T95,T96 OUTPUT
cfg_tl_d_o.d_source[7:6] Unreachable Unreachable Unreachable OUTPUT
cfg_tl_d_o.d_size[1:0] Yes Yes T94,T95,T96 Yes T94,T95,T96 OUTPUT
cfg_tl_d_o.d_param[2:0] Unreachable Unreachable Unreachable OUTPUT
cfg_tl_d_o.d_opcode[0] Yes Yes *T2,*T3,*T4 Yes T2,T3,T4 OUTPUT
cfg_tl_d_o.d_opcode[2:1] Unreachable Unreachable Unreachable OUTPUT
cfg_tl_d_o.d_valid Yes Yes T1,T2,T3 Yes T1,T2,T3 OUTPUT
edn_o.edn_req Yes Yes T2,T3,T4 Yes T1,T2,T3 OUTPUT
edn_i.edn_bus[31:0] Yes Yes T6,T26,T27 Yes T2,T30,T104 INPUT
edn_i.edn_fips Yes Yes T157,T272,T143 Yes T157,T271,T272 INPUT
edn_i.edn_ack Yes Yes T2,T3,T4 Yes T2,T3,T4 INPUT
clk_otp_i Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
rst_otp_ni Yes Yes T6,T29,T36 Yes T1,T2,T3 INPUT
icache_otp_key_o.req Yes Yes T213,T214,T215 Yes T213,T214,T215 OUTPUT
icache_otp_key_i.seed_valid Yes Yes T6,T36,T42 Yes T2,T4,T5 INPUT
icache_otp_key_i.nonce[127:0] Yes Yes T6,T11,T34 Yes T30,T104,T105 INPUT
icache_otp_key_i.key[127:0] Yes Yes T2,T3,T5 Yes T2,T5,T121 INPUT
icache_otp_key_i.ack Yes Yes T214,T215,T216 Yes T214,T215,T216 INPUT
fpga_info_i[31:0] Unreachable Unreachable Unreachable INPUT
alert_rx_i[0].ack_n Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
alert_rx_i[0].ack_p Yes Yes T75,T100,T101 Yes T75,T100,T101 INPUT
alert_rx_i[0].ping_n Yes Yes T100,T101,T102 Yes T100,T101,T102 INPUT
alert_rx_i[0].ping_p Yes Yes T100,T101,T102 Yes T100,T101,T102 INPUT
alert_rx_i[1].ack_n Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
alert_rx_i[1].ack_p Yes Yes T75,T100,T227 Yes T75,T100,T227 INPUT
alert_rx_i[1].ping_n Yes Yes T100,T101,T102 Yes T100,T101,T102 INPUT
alert_rx_i[1].ping_p Yes Yes T100,T101,T102 Yes T100,T101,T102 INPUT
alert_rx_i[2].ack_n Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
alert_rx_i[2].ack_p Yes Yes T229,T246,T217 Yes T229,T246,T217 INPUT
alert_rx_i[2].ping_n Yes Yes T100,T101,T102 Yes T101,T103,T283 INPUT
alert_rx_i[2].ping_p Yes Yes T101,T103,T283 Yes T100,T101,T102 INPUT
alert_rx_i[3].ack_n Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
alert_rx_i[3].ack_p Yes Yes T75,T100,T101 Yes T75,T100,T101 INPUT
alert_rx_i[3].ping_n Yes Yes T100,T101,T102 Yes T100,T101,T102 INPUT
alert_rx_i[3].ping_p Yes Yes T100,T101,T102 Yes T100,T101,T102 INPUT
alert_tx_o[0].alert_n Yes Yes T1,T2,T3 Yes T1,T2,T3 OUTPUT
alert_tx_o[0].alert_p Yes Yes T75,T100,T101 Yes T75,T100,T101 OUTPUT
alert_tx_o[1].alert_n Yes Yes T1,T2,T3 Yes T1,T2,T3 OUTPUT
alert_tx_o[1].alert_p Yes Yes T75,T100,T227 Yes T75,T100,T227 OUTPUT
alert_tx_o[2].alert_n Yes Yes T1,T2,T3 Yes T1,T2,T3 OUTPUT
alert_tx_o[2].alert_p Yes Yes T229,T246,T217 Yes T229,T246,T217 OUTPUT
alert_tx_o[3].alert_n Yes Yes T1,T2,T3 Yes T1,T2,T3 OUTPUT
alert_tx_o[3].alert_p Yes Yes T75,T100,T101 Yes T75,T100,T101 OUTPUT

*Tests covering at least one bit in the range

Branch Coverage for Module : rv_core_ibex
Line No.TotalCoveredPercent
Branches 12 12 100.00
TERNARY 348 2 2 100.00
IF 492 2 2 100.00
IF 518 3 3 100.00
IF 798 3 3 100.00
IF 810 2 2 100.00


348 assign local_fetch_enable_d = fatal_core_err ? lc_ctrl_pkg::Off : local_fetch_enable_q; -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T246,T163,T273
0 Covered T1,T2,T3


492 if (!rst_ni) begin -1- 493 core_sleep_q <= '0; ==> 494 end else begin 495 core_sleep_q <= core_sleep; ==>

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


518 if (!rst_ni) begin -1- 519 prev_valid <= '0; ==> 520 prev_exception_pc <= '0; 521 prev_exception_addr <= '0; 522 end else if (double_fault) begin -2- 523 prev_valid <= 1'b1; ==> 524 prev_exception_pc <= crash_dump.exception_pc; 525 prev_exception_addr <= crash_dump.exception_addr; 526 end MISSING_ELSE ==>

Branches:
-1--2-StatusTests
1 - Covered T1,T2,T3
0 1 Covered T246,T266,T267
0 0 Covered T1,T2,T3


798 if (reg2hw.rnd_data.re) begin -1- 799 rnd_valid_d = '0; ==> 800 rnd_data_d = '0; 801 rnd_fips_d = '0; 802 end else if (edn_req && edn_ack) begin -2- 803 rnd_valid_d = 1'b1; ==> 804 rnd_data_d = edn_data; 805 rnd_fips_d = edn_fips; 806 end MISSING_ELSE ==>

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


810 if (!rst_ni) begin -1- 811 rnd_valid_q <= '0; ==> 812 rnd_data_q <= '0; 813 rnd_fips_q <= '0; 814 end else begin 815 rnd_valid_q <= rnd_valid_d; ==>

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


Assert Coverage for Module : rv_core_ibex
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 22 22 100.00 15 68.18
Cover properties 0 0 0
Cover sequences 0 0 0
Total 22 22 100.00 15 68.18




Assertion Details

NameAttemptsReal SuccessesFailuresIncomplete
FpvSecCmIbexFetchEnable0_A 491226693 5 0 0
FpvSecCmIbexFetchEnable1_A 491226693 24416272 0 96
FpvSecCmIbexFetchEnable2_A 491226693 64195315 0 82
FpvSecCmIbexFetchEnable3Rev_A 491226693 422416327 0 1998
FpvSecCmIbexFetchEnable3_A 491226693 422418168 0 1895
FpvSecCmIbexInstrIntgErrCheck_A 491226693 307 0 0
FpvSecCmIbexLoadRespIntgErrCheck_A 491226693 586 0 0
FpvSecCmIbexLockstepResetCountAlertCheck_A 491226693 0 0 0
FpvSecCmIbexPcMismatchCheck_A 491226693 0 0 0
FpvSecCmIbexRfEccErrCheck_A 491226693 0 0 0
FpvSecCmIbexStoreRespIntgErrCheck_A 491226693 0 0 0
FpvSecCmRegWeOnehotCheck_A 491226693 3 0 0
FpvSecCmRvCoreRegWeOnehotCheckRAddrA_A 491226693 0 0 0
FpvSecCmRvCoreRegWeOnehotCheckRAddrB_A 491226693 0 0 0
FpvSecCmRvCoreRegWeOnehotCheck_A 491226693 0 0 0
g_instr_intg_err_assert_signals.AssertConnected_A 1010 1010 0 0
g_lsu_load_resp_intg_err_assert_signals.AssertConnected_A 1010 1010 0 0
g_lsu_store_resp_intg_err_assert_signals.AssertConnected_A 1010 1010 0 0
g_pc_mismatch_alert_o_assert_signals.AssertConnected_A 1010 1010 0 0
g_rf_ecc_err_comb_assert_signals.AssertConnected_A 1010 1010 0 0
gen_icache_scramble_asserts.IbexIcacheScrambleKeyForwardedToCore_A 491226693 169 0 0
gen_icache_scramble_asserts.IbexIcacheScrambleKeyRequestAfterFenceI_A 491226693 190 0 0


FpvSecCmIbexFetchEnable0_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 491226693 5 0 0
T126 97466 0 0 0
T149 356252 0 0 0
T150 353149 0 0 0
T155 154857 0 0 0
T163 186002 0 0 0
T199 404286 0 0 0
T207 433602 0 0 0
T246 223982 1 0 0
T266 0 1 0 0
T267 0 1 0 0
T284 0 1 0 0
T285 0 1 0 0
T286 370601 0 0 0
T287 88776 0 0 0

FpvSecCmIbexFetchEnable1_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 491226693 24416272 0 96
T1 42275 9931 0 0
T2 91152 9927 0 0
T3 115201 9923 0 0
T4 110863 9923 0 0
T5 83840 9923 0 0
T6 116117 9927 0 0
T29 0 0 0 2
T30 92780 9931 0 0
T35 0 0 0 2
T36 0 0 0 2
T37 0 0 0 2
T51 0 0 0 2
T57 0 0 0 2
T68 219320 9919 0 0
T82 0 0 0 2
T97 0 0 0 2
T104 98538 9919 0 0
T105 67890 9931 0 0
T201 0 0 0 2
T288 0 0 0 2

FpvSecCmIbexFetchEnable2_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 491226693 64195315 0 82
T1 42275 34775 0 0
T2 91152 34775 0 0
T3 115201 34775 0 0
T4 110863 34775 0 0
T5 83840 40329 0 0
T6 116117 34780 0 0
T29 0 0 0 2
T30 92780 34775 0 0
T35 0 0 0 2
T36 0 0 0 2
T37 0 0 0 2
T51 0 0 0 2
T53 0 0 0 2
T68 219320 34775 0 0
T97 0 0 0 2
T104 98538 34771 0 0
T105 67890 34775 0 0
T201 0 0 0 2
T289 0 0 0 2
T290 0 0 0 2

FpvSecCmIbexFetchEnable3Rev_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 491226693 422416327 0 1998
T1 42275 7435 0 2
T2 91152 56316 0 2
T3 115201 80368 0 2
T4 110863 76030 0 2
T5 83840 43455 0 2
T6 116117 81276 0 0
T23 0 0 0 2
T30 92780 57944 0 2
T68 219320 184491 0 2
T104 98538 63710 0 2
T105 67890 33054 0 2

FpvSecCmIbexFetchEnable3_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 491226693 422418168 0 1895
T1 42275 7436 0 2
T2 91152 56317 0 2
T3 115201 80369 0 2
T4 110863 76031 0 2
T5 83840 43458 0 2
T6 116117 81277 0 0
T23 0 0 0 2
T30 92780 57945 0 2
T68 219320 184492 0 2
T104 98538 63710 0 2
T105 67890 33055 0 2

FpvSecCmIbexInstrIntgErrCheck_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 491226693 307 0 0
T47 111561 0 0 0
T49 140712 0 0 0
T78 104023 0 0 0
T134 144507 0 0 0
T135 238063 0 0 0
T291 281714 76 0 0
T292 0 77 0 0
T293 0 77 0 0
T294 0 77 0 0
T295 400262 0 0 0
T296 217207 0 0 0
T297 210519 0 0 0
T298 137462 0 0 0

FpvSecCmIbexLoadRespIntgErrCheck_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 491226693 586 0 0
T126 97466 0 0 0
T149 356252 0 0 0
T151 0 30 0 0
T155 154857 0 0 0
T163 186002 0 0 0
T202 341500 0 0 0
T206 156405 0 0 0
T210 0 32 0 0
T211 0 32 0 0
T217 0 99 0 0
T229 296430 1 0 0
T246 223982 0 0 0
T286 370601 0 0 0
T299 0 100 0 0
T300 0 32 0 0
T301 0 31 0 0
T302 0 32 0 0
T303 0 100 0 0
T304 211759 0 0 0

FpvSecCmIbexLockstepResetCountAlertCheck_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 491226693 0 0 0

FpvSecCmIbexPcMismatchCheck_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 491226693 0 0 0

FpvSecCmIbexRfEccErrCheck_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 491226693 0 0 0

FpvSecCmIbexStoreRespIntgErrCheck_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 491226693 0 0 0

FpvSecCmRegWeOnehotCheck_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 491226693 3 0 0
T275 132307 1 0 0
T276 0 1 0 0
T277 0 1 0 0
T305 148261 0 0 0
T306 230894 0 0 0
T307 592002 0 0 0
T308 149747 0 0 0
T309 291722 0 0 0
T310 129293 0 0 0
T311 138699 0 0 0
T312 128279 0 0 0
T313 132709 0 0 0

FpvSecCmRvCoreRegWeOnehotCheckRAddrA_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 491226693 0 0 0

FpvSecCmRvCoreRegWeOnehotCheckRAddrB_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 491226693 0 0 0

FpvSecCmRvCoreRegWeOnehotCheck_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 491226693 0 0 0

g_instr_intg_err_assert_signals.AssertConnected_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1010 1010 0 0
T1 1 1 0 0
T2 1 1 0 0
T3 1 1 0 0
T4 1 1 0 0
T5 1 1 0 0
T6 1 1 0 0
T30 1 1 0 0
T68 1 1 0 0
T104 1 1 0 0
T105 1 1 0 0

g_lsu_load_resp_intg_err_assert_signals.AssertConnected_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1010 1010 0 0
T1 1 1 0 0
T2 1 1 0 0
T3 1 1 0 0
T4 1 1 0 0
T5 1 1 0 0
T6 1 1 0 0
T30 1 1 0 0
T68 1 1 0 0
T104 1 1 0 0
T105 1 1 0 0

g_lsu_store_resp_intg_err_assert_signals.AssertConnected_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1010 1010 0 0
T1 1 1 0 0
T2 1 1 0 0
T3 1 1 0 0
T4 1 1 0 0
T5 1 1 0 0
T6 1 1 0 0
T30 1 1 0 0
T68 1 1 0 0
T104 1 1 0 0
T105 1 1 0 0

g_pc_mismatch_alert_o_assert_signals.AssertConnected_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1010 1010 0 0
T1 1 1 0 0
T2 1 1 0 0
T3 1 1 0 0
T4 1 1 0 0
T5 1 1 0 0
T6 1 1 0 0
T30 1 1 0 0
T68 1 1 0 0
T104 1 1 0 0
T105 1 1 0 0

g_rf_ecc_err_comb_assert_signals.AssertConnected_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1010 1010 0 0
T1 1 1 0 0
T2 1 1 0 0
T3 1 1 0 0
T4 1 1 0 0
T5 1 1 0 0
T6 1 1 0 0
T30 1 1 0 0
T68 1 1 0 0
T104 1 1 0 0
T105 1 1 0 0

gen_icache_scramble_asserts.IbexIcacheScrambleKeyForwardedToCore_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 491226693 169 0 0
T89 213837 0 0 0
T203 243439 0 0 0
T214 84494 33 0 0
T215 79788 22 0 0
T216 0 9 0 0
T221 375124 0 0 0
T268 0 34 0 0
T269 0 33 0 0
T314 0 38 0 0
T315 161591 0 0 0
T316 559635 0 0 0
T317 98791 0 0 0
T318 675102 0 0 0
T319 224651 0 0 0

gen_icache_scramble_asserts.IbexIcacheScrambleKeyRequestAfterFenceI_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 491226693 190 0 0
T31 52858 0 0 0
T152 209522 0 0 0
T153 204244 0 0 0
T154 216331 0 0 0
T184 442017 0 0 0
T198 112543 0 0 0
T212 332778 0 0 0
T213 293234 16 0 0
T214 0 42 0 0
T215 0 5 0 0
T216 0 2 0 0
T268 0 42 0 0
T269 0 42 0 0
T314 0 9 0 0
T320 0 16 0 0
T321 0 16 0 0
T322 270922 0 0 0
T323 157352 0 0 0

Line Coverage for Instance : tb.dut.top_earlgrey.u_rv_core_ibex
Line No.TotalCoveredPercent
TOTAL858094.12
CONT_ASSIGN20211100.00
CONT_ASSIGN20311100.00
CONT_ASSIGN21611100.00
CONT_ASSIGN21711100.00
CONT_ASSIGN21811100.00
CONT_ASSIGN22511100.00
CONT_ASSIGN26311100.00
CONT_ASSIGN26511100.00
CONT_ASSIGN26811100.00
CONT_ASSIGN34211100.00
CONT_ASSIGN34811100.00
CONT_ASSIGN36311100.00
ALWAYS49233100.00
CONT_ASSIGN51211100.00
CONT_ASSIGN51311100.00
CONT_ASSIGN51411100.00
CONT_ASSIGN51511100.00
ALWAYS51888100.00
CONT_ASSIGN70411100.00
CONT_ASSIGN70411100.00
CONT_ASSIGN70511100.00
CONT_ASSIGN70511100.00
CONT_ASSIGN70611100.00
CONT_ASSIGN70611100.00
CONT_ASSIGN71011100.00
CONT_ASSIGN71011100.00
CONT_ASSIGN71111100.00
CONT_ASSIGN71111100.00
CONT_ASSIGN71211100.00
CONT_ASSIGN71211100.00
CONT_ASSIGN71911100.00
CONT_ASSIGN72011100.00
CONT_ASSIGN72111100.00
CONT_ASSIGN72411100.00
CONT_ASSIGN72611100.00
CONT_ASSIGN72811100.00
CONT_ASSIGN73011100.00
CONT_ASSIGN73711100.00
CONT_ASSIGN73911100.00
CONT_ASSIGN74111100.00
CONT_ASSIGN74311100.00
CONT_ASSIGN75311100.00
CONT_ASSIGN754100.00
CONT_ASSIGN75511100.00
CONT_ASSIGN75611100.00
CONT_ASSIGN75911100.00
CONT_ASSIGN762100.00
ALWAYS7941111100.00
ALWAYS81077100.00
CONT_ASSIGN82111100.00
CONT_ASSIGN84011100.00
CONT_ASSIGN84111100.00
CONT_ASSIGN84211100.00
CONT_ASSIGN845100.00
CONT_ASSIGN84900
CONT_ASSIGN88811100.00
ALWAYS94700
CONT_ASSIGN988100.00
CONT_ASSIGN990100.00
CONT_ASSIGN99211100.00
CONT_ASSIGN99411100.00
CONT_ASSIGN99611100.00

201 logic addr_trans_rst_ni; 202 1/1 assign ibex_top_clk_i = clk_i; Tests: T1 T2 T3  203 1/1 assign addr_trans_rst_ni = rst_ni; Tests: T1 T2 T3  204 205 // errors and core alert events 206 logic ibus_intg_err, dbus_intg_err; 207 logic alert_minor, alert_major_internal, alert_major_bus; 208 logic double_fault; 209 logic fatal_intg_err, fatal_core_err, recov_core_err; 210 211 // alert events to peripheral module 212 logic fatal_intg_event; 213 logic fatal_core_event; 214 logic recov_core_event; 215 // SEC_CM: BUS.INTEGRITY 216 1/1 assign fatal_intg_event = ibus_intg_err | dbus_intg_err | alert_major_bus; Tests: T1 T2 T3  217 1/1 assign fatal_core_event = alert_major_internal | double_fault; Tests: T1 T2 T3  218 1/1 assign recov_core_event = alert_minor; Tests: T2 T4 T5  219 220 // configurations for address translation 221 region_cfg_t [NumRegions-1:0] ibus_region_cfg; 222 region_cfg_t [NumRegions-1:0] dbus_region_cfg; 223 224 // Reset feedback to clkmgr 225 1/1 assign rst_cpu_n_o = rst_ni; Tests: T1 T2 T3  226 227 // Escalation receiver that converts differential 228 // protocol into single ended signal. 229 logic esc_irq_nm; 230 prim_esc_receiver #( 231 .N_ESC_SEV (alert_handler_reg_pkg::N_ESC_SEV), 232 .PING_CNT_DW (alert_handler_reg_pkg::PING_CNT_DW) 233 ) u_prim_esc_receiver ( 234 .clk_i ( clk_esc_i ), 235 .rst_ni ( rst_esc_ni ), 236 .esc_req_o ( esc_irq_nm ), 237 .esc_rx_o, 238 .esc_tx_i 239 ); 240 241 // Synchronize to fast Ibex clock domain. 242 logic alert_irq_nm; 243 prim_flop_2sync #( 244 .Width(1) 245 ) u_alert_nmi_sync ( 246 .clk_i, 247 .rst_ni, 248 .d_i(esc_irq_nm), 249 .q_o(alert_irq_nm) 250 ); 251 252 logic wdog_irq_nm; 253 prim_flop_2sync #( 254 .Width(1) 255 ) u_wdog_nmi_sync ( 256 .clk_i, 257 .rst_ni, 258 .d_i(nmi_wdog_i), 259 .q_o(wdog_irq_nm) 260 ); 261 262 assign hw2reg.nmi_state.alert.d = 1'b1; 263 1/1 assign hw2reg.nmi_state.alert.de = alert_irq_nm; Tests: T43 T81 T83  264 assign hw2reg.nmi_state.wdog.d = 1'b1; 265 1/1 assign hw2reg.nmi_state.wdog.de = wdog_irq_nm; Tests: T264 T265 T138  266 267 logic irq_nm; 268 1/1 assign irq_nm = |(reg2hw.nmi_state & reg2hw.nmi_enable); Tests: T264 T43 T81  269 270 lc_ctrl_pkg::lc_tx_t [0:0] lc_cpu_en; 271 prim_lc_sync u_lc_sync ( 272 .clk_i, 273 .rst_ni, 274 .lc_en_i(lc_cpu_en_i), 275 .lc_en_o(lc_cpu_en) 276 ); 277 278 lc_ctrl_pkg::lc_tx_t [0:0] pwrmgr_cpu_en; 279 prim_lc_sync u_pwrmgr_sync ( 280 .clk_i, 281 .rst_ni, 282 .lc_en_i(pwrmgr_cpu_en_i), 283 .lc_en_o(pwrmgr_cpu_en) 284 ); 285 286 // timer interrupts do not come from 287 // rv_plic and may not be synchronous to the ibex core 288 logic irq_timer_sync; 289 prim_flop_2sync #( 290 .Width(1) 291 ) u_intr_timer_sync ( 292 .clk_i, 293 .rst_ni, 294 .d_i(irq_timer_i), 295 .q_o(irq_timer_sync) 296 ); 297 298 299 logic irq_software; 300 logic irq_timer; 301 logic irq_external; 302 303 prim_sec_anchor_buf #( 304 .Width(3) 305 ) u_prim_buf_irq ( 306 .in_i({irq_software_i, 307 irq_timer_sync, 308 irq_external_i}), 309 .out_o({irq_software, 310 irq_timer, 311 irq_external}) 312 ); 313 314 315 logic key_req, key_ack; 316 logic [ibex_pkg::SCRAMBLE_KEY_W-1:0] key; 317 logic [ibex_pkg::SCRAMBLE_NONCE_W-1:0] nonce; 318 logic unused_seed_valid; 319 localparam int PayLoadW = ibex_pkg::SCRAMBLE_KEY_W + ibex_pkg::SCRAMBLE_NONCE_W + 1; 320 prim_sync_reqack_data #( 321 .Width(PayLoadW), 322 .DataSrc2Dst(1'b0) 323 ) u_prim_sync_reqack_data ( 324 .clk_src_i ( clk_i ), 325 .rst_src_ni ( rst_ni ), 326 .clk_dst_i ( clk_otp_i ), 327 .rst_dst_ni ( rst_otp_ni ), 328 .req_chk_i ( 1'b1 ), 329 .src_req_i ( key_req ), 330 .src_ack_o ( key_ack ), 331 .dst_req_o ( icache_otp_key_o.req ), 332 .dst_ack_i ( icache_otp_key_i.ack ), 333 .data_i ( {icache_otp_key_i.key, 334 icache_otp_key_i.nonce[ibex_pkg::SCRAMBLE_NONCE_W-1:0], 335 icache_otp_key_i.seed_valid} ), 336 .data_o ( {key, 337 nonce, 338 unused_seed_valid} ) 339 ); 340 341 logic unused_nonce; 342 1/1 assign unused_nonce = |icache_otp_key_i.nonce; Tests: T2 T3 T4  343 344 // Local fetch enable control. 345 // Whenever a fatal core error is seen disable local fetch enable. 346 lc_ctrl_pkg::lc_tx_t local_fetch_enable_d, local_fetch_enable_q; 347 348 1/1 assign local_fetch_enable_d = fatal_core_err ? lc_ctrl_pkg::Off : local_fetch_enable_q; Tests: T1 T2 T3  349 350 prim_lc_sender #( 351 .AsyncOn(1), // this instantiates a register 352 .ResetValueIsOn(1) 353 ) u_prim_lc_sender ( 354 .clk_i, 355 .rst_ni, 356 .lc_en_i(local_fetch_enable_d), 357 .lc_en_o(local_fetch_enable_q) 358 ); 359 360 // Multibit AND computation for fetch enable. Fetch is only enabled when local fetch enable, 361 // lifecycle CPU enable and power manager CPU enable are all enabled. 362 lc_ctrl_pkg::lc_tx_t fetch_enable; 363 1/1 assign fetch_enable = lc_ctrl_pkg::lc_tx_and_hi(local_fetch_enable_q, Tests: T1 T2 T3  364 lc_ctrl_pkg::lc_tx_and_hi(lc_cpu_en[0], 365 pwrmgr_cpu_en[0])); 366 367 ibex_pkg::crash_dump_t crash_dump; 368 ibex_top #( 369 .PMPEnable ( PMPEnable ), 370 .PMPGranularity ( PMPGranularity ), 371 .PMPNumRegions ( PMPNumRegions ), 372 .MHPMCounterNum ( MHPMCounterNum ), 373 .MHPMCounterWidth ( MHPMCounterWidth ), 374 .RV32E ( RV32E ), 375 .RV32M ( RV32M ), 376 .RV32B ( RV32B ), 377 .RegFile ( RegFile ), 378 .BranchTargetALU ( BranchTargetALU ), 379 .WritebackStage ( WritebackStage ), 380 .ICache ( ICache ), 381 // Our automatic SEC_CM label check doesn't look at vendored code so the SEC_CM labels need 382 // to be mentioned here. The real locations can be found by grepping the vendored code. 383 // TODO(#10071): this should be fixed. 384 // SEC_CM: ICACHE.MEM.INTEGRITY 385 .ICacheECC ( ICacheECC ), 386 // SEC_CM: ICACHE.MEM.SCRAMBLE, SCRAMBLE.KEY.SIDELOAD 387 .ICacheScramble ( ICacheScramble ), 388 // Reduce the number of PRINCE half rounds to 2 (5 effective rounds) to ease timing. This is 389 // acceptable for the instruction cache, whereas 3 half rounds (7 effective rounds) are used 390 // elsewhere in the design. 391 .ICacheScrNumPrinceRoundsHalf( 2 ), 392 .BranchPredictor ( BranchPredictor ), 393 .DbgTriggerEn ( DbgTriggerEn ), 394 .DbgHwBreakNum ( DbgHwBreakNum ), 395 // SEC_CM: LOGIC.SHADOW 396 // SEC_CM: PC.CTRL_FLOW.CONSISTENCY, CTRL_FLOW.UNPREDICTABLE, CORE.DATA_REG_SW.SCA 397 // SEC_CM: EXCEPTION.CTRL_FLOW.GLOBAL_ESC, EXCEPTION.CTRL_FLOW.LOCAL_ESC 398 // SEC_CM: DATA_REG_SW.INTEGRITY, DATA_REG_SW.GLITCH_DETECT 399 .SecureIbex ( SecureIbex ), 400 .RndCnstLfsrSeed ( RndCnstLfsrSeed ), 401 .RndCnstLfsrPerm ( RndCnstLfsrPerm ), 402 .RndCnstIbexKey ( RndCnstIbexKeyDefault ), 403 .RndCnstIbexNonce ( RndCnstIbexNonceDefault ), 404 .DmHaltAddr ( DmHaltAddr ), 405 .DmExceptionAddr ( DmExceptionAddr ) 406 ) u_core ( 407 .clk_i (ibex_top_clk_i), 408 .rst_ni, 409 410 411 .test_en_i (prim_mubi_pkg::mubi4_test_true_strict(scanmode_i)), 412 .scan_rst_ni, 413 414 .ram_cfg_i, 415 416 .hart_id_i, 417 .boot_addr_i, 418 419 .instr_req_o ( instr_req ), 420 .instr_gnt_i ( instr_gnt ), 421 .instr_rvalid_i ( instr_rvalid ), 422 .instr_addr_o ( instr_addr ), 423 .instr_rdata_i ( instr_rdata ), 424 .instr_rdata_intg_i ( instr_rdata_intg ), 425 .instr_err_i ( instr_err ), 426 427 .data_req_o ( data_req ), 428 .data_gnt_i ( data_gnt ), 429 .data_rvalid_i ( data_rvalid ), 430 .data_we_o ( data_we ), 431 .data_be_o ( data_be ), 432 .data_addr_o ( data_addr ), 433 .data_wdata_o ( data_wdata ), 434 .data_wdata_intg_o ( data_wdata_intg ), 435 .data_rdata_i ( data_rdata ), 436 .data_rdata_intg_i ( data_rdata_intg ), 437 .data_err_i ( data_err ), 438 439 .irq_software_i ( irq_software ), 440 .irq_timer_i ( irq_timer ), 441 .irq_external_i ( irq_external ), 442 .irq_fast_i ( '0 ), 443 .irq_nm_i ( irq_nm ), 444 445 .debug_req_i, 446 .crash_dump_o ( crash_dump ), 447 448 // icache scramble interface 449 .scramble_key_valid_i (key_ack), 450 .scramble_key_i (key), 451 .scramble_nonce_i (nonce), 452 .scramble_req_o (key_req), 453 454 // double fault 455 .double_fault_seen_o (double_fault), 456 457 `ifdef RVFI 458 .rvfi_valid, 459 .rvfi_order, 460 .rvfi_insn, 461 .rvfi_trap, 462 .rvfi_halt, 463 .rvfi_intr, 464 .rvfi_mode, 465 .rvfi_ixl, 466 .rvfi_rs1_addr, 467 .rvfi_rs2_addr, 468 .rvfi_rs3_addr, 469 .rvfi_rs1_rdata, 470 .rvfi_rs2_rdata, 471 .rvfi_rs3_rdata, 472 .rvfi_rd_addr, 473 .rvfi_rd_wdata, 474 .rvfi_pc_rdata, 475 .rvfi_pc_wdata, 476 .rvfi_mem_addr, 477 .rvfi_mem_rmask, 478 .rvfi_mem_wmask, 479 .rvfi_mem_rdata, 480 .rvfi_mem_wdata, 481 `endif 482 // SEC_CM: FETCH.CTRL.LC_GATED 483 .fetch_enable_i (fetch_enable), 484 .alert_minor_o (alert_minor), 485 .alert_major_internal_o (alert_major_internal), 486 .alert_major_bus_o (alert_major_bus), 487 .core_sleep_o (core_sleep) 488 ); 489 490 logic core_sleep_q; 491 always_ff @(posedge clk_i or negedge rst_ni) begin 492 1/1 if (!rst_ni) begin Tests: T1 T2 T3  493 1/1 core_sleep_q <= '0; Tests: T1 T2 T3  494 end else begin 495 1/1 core_sleep_q <= core_sleep; Tests: T1 T2 T3  496 end 497 end 498 499 prim_buf #( 500 .Width(1) 501 ) u_core_sleeping_buf ( 502 .in_i(core_sleep_q), 503 .out_o(pwrmgr_o.core_sleeping) 504 ); 505 506 507 508 logic prev_valid; 509 logic [31:0] prev_exception_pc; 510 logic [31:0] prev_exception_addr; 511 512 1/1 assign crash_dump_o.current = crash_dump; Tests: T1 T2 T3  513 1/1 assign crash_dump_o.prev_valid = prev_valid; Tests: T246 T266 T267  514 1/1 assign crash_dump_o.prev_exception_pc = prev_exception_pc; Tests: T246 T266 T267  515 1/1 assign crash_dump_o.prev_exception_addr = prev_exception_addr; Tests: T246 T266 T267  516 517 always_ff @(posedge clk_i or negedge rst_ni) begin 518 1/1 if (!rst_ni) begin Tests: T1 T2 T3  519 1/1 prev_valid <= '0; Tests: T1 T2 T3  520 1/1 prev_exception_pc <= '0; Tests: T1 T2 T3  521 1/1 prev_exception_addr <= '0; Tests: T1 T2 T3  522 1/1 end else if (double_fault) begin Tests: T1 T2 T3  523 1/1 prev_valid <= 1'b1; Tests: T246 T266 T267  524 1/1 prev_exception_pc <= crash_dump.exception_pc; Tests: T246 T266 T267  525 1/1 prev_exception_addr <= crash_dump.exception_addr; Tests: T246 T266 T267  526 end MISSING_ELSE 527 end 528 529 530 // 531 // Convert ibex data/instruction bus to TL-UL 532 // 533 logic [31:0] instr_addr_trans; 534 rv_core_addr_trans #( 535 .AddrWidth(32), 536 .NumRegions(NumRegions) 537 ) u_ibus_trans ( 538 .clk_i, 539 .rst_ni(addr_trans_rst_ni), 540 .region_cfg_i(ibus_region_cfg), 541 .addr_i(instr_addr), 542 .addr_o(instr_addr_trans) 543 ); 544 545 logic [6:0] instr_wdata_intg; 546 logic [top_pkg::TL_DW-1:0] unused_data; 547 // tl_adapter_host_i_ibex only reads instruction. a_data is always 0 548 assign {instr_wdata_intg, unused_data} = prim_secded_pkg::prim_secded_inv_39_32_enc('0); 549 // SEC_CM: BUS.INTEGRITY 550 tlul_adapter_host #( 551 .MAX_REQS(NumOutstandingReqs), 552 // if secure ibex is not set, data integrity is not generated 553 // from ibex, therefore generate it in the gasket instead. 554 .EnableDataIntgGen(~SecureIbex) 555 ) tl_adapter_host_i_ibex ( 556 .clk_i, 557 .rst_ni, 558 .req_i (instr_req), 559 .instr_type_i (prim_mubi_pkg::MuBi4True), 560 .gnt_o (instr_gnt), 561 .addr_i (instr_addr_trans), 562 .we_i (1'b0), 563 .wdata_i (32'b0), 564 .wdata_intg_i (instr_wdata_intg), 565 .be_i (4'hF), 566 .user_rsvd_i ('0), 567 .valid_o (instr_rvalid), 568 .rdata_o (instr_rdata), 569 .rdata_intg_o (instr_rdata_intg), 570 .err_o (instr_err), 571 .intg_err_o (ibus_intg_err), 572 .tl_o (tl_i_ibex2fifo), 573 .tl_i (tl_i_fifo2ibex) 574 ); 575 576 tlul_fifo_sync #( 577 .ReqPass(FifoPass), 578 .RspPass(FifoPass), 579 .ReqDepth(FifoDepth), 580 .RspDepth(FifoDepth) 581 ) fifo_i ( 582 .clk_i, 583 .rst_ni, 584 .tl_h_i (tl_i_ibex2fifo), 585 .tl_h_o (tl_i_fifo2ibex), 586 .tl_d_o (corei_tl_h_o), 587 .tl_d_i (corei_tl_h_i), 588 .spare_req_i (1'b0), 589 .spare_req_o (), 590 .spare_rsp_i (1'b0), 591 .spare_rsp_o ()); 592 593 logic [31:0] data_addr_trans; 594 rv_core_addr_trans #( 595 .AddrWidth(32), 596 .NumRegions(NumRegions) 597 ) u_dbus_trans ( 598 .clk_i, 599 .rst_ni(addr_trans_rst_ni), 600 .region_cfg_i(dbus_region_cfg), 601 .addr_i(data_addr), 602 .addr_o(data_addr_trans) 603 ); 604 605 // SEC_CM: BUS.INTEGRITY 606 tlul_adapter_host #( 607 .MAX_REQS(2), 608 .EnableDataIntgGen(~SecureIbex) 609 ) tl_adapter_host_d_ibex ( 610 .clk_i, 611 .rst_ni, 612 .req_i (data_req), 613 .instr_type_i (prim_mubi_pkg::MuBi4False), 614 .gnt_o (data_gnt), 615 .addr_i (data_addr_trans), 616 .we_i (data_we), 617 .wdata_i (data_wdata), 618 .wdata_intg_i (data_wdata_intg), 619 .be_i (data_be), 620 .user_rsvd_i ('0), 621 .valid_o (data_rvalid), 622 .rdata_o (data_rdata), 623 .rdata_intg_o (data_rdata_intg), 624 .err_o (data_err), 625 .intg_err_o (dbus_intg_err), 626 .tl_o (tl_d_ibex2fifo), 627 .tl_i (tl_d_fifo2ibex) 628 ); 629 630 tlul_fifo_sync #( 631 .ReqPass(FifoPass), 632 .RspPass(FifoPass), 633 .ReqDepth(FifoDepth), 634 .RspDepth(FifoDepth) 635 ) fifo_d ( 636 .clk_i, 637 .rst_ni, 638 .tl_h_i (tl_d_ibex2fifo), 639 .tl_h_o (tl_d_fifo2ibex), 640 .tl_d_o (cored_tl_h_o), 641 .tl_d_i (cored_tl_h_i), 642 .spare_req_i (1'b0), 643 .spare_req_o (), 644 .spare_rsp_i (1'b0), 645 .spare_rsp_o ()); 646 647 `ifdef RVFI 648 ibex_tracer ibex_tracer_i ( 649 .clk_i, 650 .rst_ni, 651 652 .hart_id_i, 653 654 .rvfi_valid, 655 .rvfi_order, 656 .rvfi_insn, 657 .rvfi_trap, 658 .rvfi_halt, 659 .rvfi_intr, 660 .rvfi_mode, 661 .rvfi_ixl, 662 .rvfi_rs1_addr, 663 .rvfi_rs2_addr, 664 .rvfi_rs3_addr, 665 .rvfi_rs1_rdata, 666 .rvfi_rs2_rdata, 667 .rvfi_rs3_rdata, 668 .rvfi_rd_addr, 669 .rvfi_rd_wdata, 670 .rvfi_pc_rdata, 671 .rvfi_pc_wdata, 672 .rvfi_mem_addr, 673 .rvfi_mem_rmask, 674 .rvfi_mem_wmask, 675 .rvfi_mem_rdata, 676 .rvfi_mem_wdata 677 ); 678 `endif 679 680 ////////////////////////////////// 681 // Peripheral functions 682 ////////////////////////////////// 683 684 logic intg_err; 685 tlul_pkg::tl_h2d_t tl_win_h2d; 686 tlul_pkg::tl_d2h_t tl_win_d2h; 687 rv_core_ibex_cfg_reg_top u_reg_cfg ( 688 .clk_i, 689 .rst_ni, 690 .tl_i(cfg_tl_d_i), 691 .tl_o(cfg_tl_d_o), 692 .reg2hw, 693 .hw2reg, 694 .intg_err_o (intg_err), 695 .tl_win_o(tl_win_h2d), 696 .tl_win_i(tl_win_d2h) 697 ); 698 699 /////////////////////// 700 // Region assignments 701 /////////////////////// 702 703 for(genvar i = 0; i < NumRegions; i++) begin : gen_ibus_region_cfgs 704 2/2 assign ibus_region_cfg[i].en = reg2hw.ibus_addr_en[i]; Tests: T214 T268 T269  | T214 T268 T269  705 2/2 assign ibus_region_cfg[i].matching_region = reg2hw.ibus_addr_matching[i]; Tests: T214 T268 T269  | T214 T268 T269  706 2/2 assign ibus_region_cfg[i].remap_addr = reg2hw.ibus_remap_addr[i]; Tests: T214 T268 T269  | T214 T268 T269  707 end 708 709 for(genvar i = 0; i < NumRegions; i++) begin : gen_dbus_region_cfgs 710 2/2 assign dbus_region_cfg[i].en = reg2hw.dbus_addr_en[i]; Tests: T214 T268 T269  | T214 T268 T269  711 2/2 assign dbus_region_cfg[i].matching_region = reg2hw.dbus_addr_matching[i]; Tests: T214 T268 T269  | T214 T268 T269  712 2/2 assign dbus_region_cfg[i].remap_addr = reg2hw.dbus_remap_addr[i]; Tests: T214 T268 T269  | T214 T268 T269  713 end 714 715 /////////////////////// 716 // Error assignment 717 /////////////////////// 718 719 1/1 assign fatal_intg_err = fatal_intg_event; Tests: T1 T2 T3  720 1/1 assign fatal_core_err = fatal_core_event; Tests: T1 T2 T3  721 1/1 assign recov_core_err = recov_core_event; Tests: T2 T4 T5  722 723 assign hw2reg.err_status.reg_intg_err.d = 1'b1; 724 1/1 assign hw2reg.err_status.reg_intg_err.de = intg_err; Tests: T1 T2 T3  725 assign hw2reg.err_status.fatal_intg_err.d = 1'b1; 726 1/1 assign hw2reg.err_status.fatal_intg_err.de = fatal_intg_err; Tests: T1 T2 T3  727 assign hw2reg.err_status.fatal_core_err.d = 1'b1; 728 1/1 assign hw2reg.err_status.fatal_core_err.de = fatal_core_err; Tests: T1 T2 T3  729 assign hw2reg.err_status.recov_core_err.d = 1'b1; 730 1/1 assign hw2reg.err_status.recov_core_err.de = recov_core_err; Tests: T2 T4 T5  731 732 /////////////////////// 733 // Alert generation 734 /////////////////////// 735 736 logic [NumAlerts-1:0] alert_test; 737 1/1 assign alert_test[0] = reg2hw.alert_test.fatal_sw_err.q & Tests: T1 T2 T3  738 reg2hw.alert_test.fatal_sw_err.qe; 739 1/1 assign alert_test[1] = reg2hw.alert_test.recov_sw_err.q & Tests: T1 T2 T3  740 reg2hw.alert_test.recov_sw_err.qe; 741 1/1 assign alert_test[2] = reg2hw.alert_test.fatal_hw_err.q & Tests: T1 T2 T3  742 reg2hw.alert_test.fatal_hw_err.qe; 743 1/1 assign alert_test[3] = reg2hw.alert_test.recov_hw_err.q & Tests: T1 T2 T3  744 reg2hw.alert_test.recov_hw_err.qe; 745 746 localparam bit [NumAlerts-1:0] AlertFatal = '{1'b0, 1'b1, 1'b0, 1'b1}; 747 748 logic [NumAlerts-1:0] alert_events; 749 logic [NumAlerts-1:0] alert_acks; 750 751 import prim_mubi_pkg::mubi4_test_true_loose; 752 import prim_mubi_pkg::mubi4_t; 753 1/1 assign alert_events[0] = mubi4_test_true_loose(mubi4_t'(reg2hw.sw_fatal_err.q)); Tests: T270  754 0/1 ==> assign alert_events[1] = mubi4_test_true_loose(mubi4_t'(reg2hw.sw_recov_err.q)); 755 1/1 assign alert_events[2] = intg_err | fatal_intg_err | fatal_core_err; Tests: T1 T2 T3  756 1/1 assign alert_events[3] = recov_core_err; Tests: T2 T4 T5  757 758 logic unused_alert_acks; 759 1/1 assign unused_alert_acks = |alert_acks; Tests: T229 T246 T217  760 761 // recoverable alerts are sent once and silenced until activated again. 762 0/1 ==> assign hw2reg.sw_recov_err.de = alert_acks[1]; 763 assign hw2reg.sw_recov_err.d = prim_mubi_pkg::MuBi4False; 764 765 for (genvar i = 0; i < NumAlerts; i++) begin : gen_alert_senders 766 prim_alert_sender #( 767 .AsyncOn(AlertAsyncOn[0]), 768 .IsFatal(AlertFatal[i]) 769 ) u_alert_sender ( 770 .clk_i, 771 .rst_ni, 772 .alert_test_i(alert_test[i]), 773 .alert_req_i(alert_events[i]), 774 .alert_ack_o(alert_acks[i]), 775 .alert_state_o(), 776 .alert_rx_i(alert_rx_i[i]), 777 .alert_tx_o(alert_tx_o[i]) 778 ); 779 end 780 781 ////////////// 782 // RND Data // 783 ////////////// 784 785 logic [31:0] rnd_data_q, rnd_data_d; 786 logic rnd_valid_q, rnd_valid_d; 787 logic rnd_fips_q, rnd_fips_d; 788 logic edn_req; 789 logic [31:0] edn_data; 790 logic edn_ack; 791 logic edn_fips; 792 793 always_comb begin 794 1/1 rnd_valid_d = rnd_valid_q; Tests: T2 T3 T4  795 1/1 rnd_data_d = rnd_data_q; Tests: T2 T3 T4  796 1/1 rnd_fips_d = rnd_fips_q; Tests: T2 T3 T4  797 798 1/1 if (reg2hw.rnd_data.re) begin Tests: T2 T3 T4  799 1/1 rnd_valid_d = '0; Tests: T2 T3 T5  800 1/1 rnd_data_d = '0; Tests: T2 T3 T5  801 1/1 rnd_fips_d = '0; Tests: T2 T3 T5  802 1/1 end else if (edn_req && edn_ack) begin Tests: T2 T3 T4  803 1/1 rnd_valid_d = 1'b1; Tests: T2 T3 T4  804 1/1 rnd_data_d = edn_data; Tests: T2 T3 T4  805 1/1 rnd_fips_d = edn_fips; Tests: T2 T3 T4  806 end MISSING_ELSE 807 end 808 809 always_ff @(posedge clk_i or negedge rst_ni) begin 810 1/1 if (!rst_ni) begin Tests: T1 T2 T3  811 1/1 rnd_valid_q <= '0; Tests: T1 T2 T3  812 1/1 rnd_data_q <= '0; Tests: T1 T2 T3  813 1/1 rnd_fips_q <= '0; Tests: T1 T2 T3  814 end else begin 815 1/1 rnd_valid_q <= rnd_valid_d; Tests: T1 T2 T3  816 1/1 rnd_data_q <= rnd_data_d; Tests: T1 T2 T3  817 1/1 rnd_fips_q <= rnd_fips_d; Tests: T1 T2 T3  818 end 819 end 820 821 1/1 assign edn_req = ~rnd_valid_q; Tests: T2 T3 T4  822 823 prim_edn_req #( 824 .OutWidth(32) 825 ) u_edn_if ( 826 .clk_i, 827 .rst_ni, 828 .req_chk_i(1'b1), 829 .req_i(edn_req), 830 .ack_o(edn_ack), 831 .data_o(edn_data), 832 .fips_o(edn_fips), 833 .err_o(), 834 .clk_edn_i, 835 .rst_edn_ni, 836 .edn_o, 837 .edn_i 838 ); 839 840 1/1 assign hw2reg.rnd_data.d = rnd_data_q; Tests: T2 T3 T4  841 1/1 assign hw2reg.rnd_status.rnd_data_valid.d = rnd_valid_q; Tests: T2 T3 T4  842 1/1 assign hw2reg.rnd_status.rnd_data_fips.d = rnd_fips_q; Tests: T157 T271 T272  843 844 logic unused_reg2hw; 845 0/1 ==> assign unused_reg2hw = |reg2hw.rnd_data.q; 846 847 848 // fpga build info hook-up 849 unreachable assign hw2reg.fpga_info.d = fpga_info_i; 850 851 ///////////////////////////////////// 852 // The carved out space is for DV emulation purposes only 853 ///////////////////////////////////// 854 855 import tlul_pkg::tl_h2d_t; 856 import tlul_pkg::tl_d2h_t; 857 localparam int TlH2DWidth = $bits(tl_h2d_t); 858 localparam int TlD2HWidth = $bits(tl_d2h_t); 859 860 logic [TlH2DWidth-1:0] tl_win_h2d_int; 861 logic [TlD2HWidth-1:0] tl_win_d2h_int; 862 tl_d2h_t tl_win_d2h_err_rsp; 863 864 prim_buf #( 865 .Width(TlH2DWidth) 866 ) u_tlul_req_buf ( 867 .in_i(tl_win_h2d), 868 .out_o(tl_win_h2d_int) 869 ); 870 871 prim_buf #( 872 .Width(TlD2HWidth) 873 ) u_tlul_rsp_buf ( 874 .in_i(tl_win_d2h_err_rsp), 875 .out_o(tl_win_d2h_int) 876 ); 877 878 // Interception point for connecting simulation SRAM by disconnecting the tl_d output. The 879 // disconnection is done only if `SYNTHESIS is NOT defined AND `RV_CORE_IBEX_SIM_SRAM is 880 // defined. 881 // This define is used only for verilator as verilator does not support forces. 882 `ifdef RV_CORE_IBEX_SIM_SRAM 883 `ifdef SYNTHESIS 884 // Induce a compilation error by instantiating a non-existent module. 885 illegal_preprocessor_branch_taken u_illegal_preprocessor_branch_taken(); 886 `endif 887 `else 888 1/1 assign tl_win_d2h = tl_d2h_t'(tl_win_d2h_int); Tests: T1 T2 T3  889 `endif 890 891 tlul_err_resp u_sim_win_rsp ( 892 .clk_i, 893 .rst_ni, 894 .tl_h_i(tl_h2d_t'(tl_win_h2d_int)), 895 .tl_h_o(tl_win_d2h_err_rsp) 896 ); 897 898 // Assertions for CPU enable 899 // Allow 2 or 3 cycles for input to enable due to synchronizers 900 `ASSERT(FpvSecCmIbexFetchEnable0_A, 901 fatal_core_err 902 |=> 903 lc_ctrl_pkg::lc_tx_test_false_loose(fetch_enable)) 904 `ASSERT(FpvSecCmIbexFetchEnable1_A, 905 lc_ctrl_pkg::lc_tx_test_false_loose(lc_cpu_en_i) 906 |-> 907 ##[2:3] lc_ctrl_pkg::lc_tx_test_false_loose(fetch_enable)) 908 `ASSERT(FpvSecCmIbexFetchEnable2_A, 909 lc_ctrl_pkg::lc_tx_test_false_loose(pwrmgr_cpu_en_i) 910 |-> 911 ##[2:3] lc_ctrl_pkg::lc_tx_test_false_loose(fetch_enable)) 912 `ASSERT(FpvSecCmIbexFetchEnable3_A, 913 lc_ctrl_pkg::lc_tx_test_true_strict(lc_cpu_en_i) && 914 lc_ctrl_pkg::lc_tx_test_true_strict(pwrmgr_cpu_en_i) ##1 915 lc_ctrl_pkg::lc_tx_test_true_strict(local_fetch_enable_q) && 916 !fatal_core_err 917 |=> 918 ##[0:1] lc_ctrl_pkg::lc_tx_test_true_strict(fetch_enable)) 919 `ASSERT(FpvSecCmIbexFetchEnable3Rev_A, 920 ##2 lc_ctrl_pkg::lc_tx_test_true_strict(fetch_enable) 921 |-> 922 ($past(lc_ctrl_pkg::lc_tx_test_true_strict(lc_cpu_en_i), 2) || 923 $past(lc_ctrl_pkg::lc_tx_test_true_strict(lc_cpu_en_i), 3)) && 924 ($past(lc_ctrl_pkg::lc_tx_test_true_strict(pwrmgr_cpu_en_i), 2) || 925 $past(lc_ctrl_pkg::lc_tx_test_true_strict(pwrmgr_cpu_en_i), 3)) && 926 $past(!fatal_core_err)) 927 928 // Alert assertions for reg_we onehot check 929 `ASSERT_PRIM_REG_WE_ONEHOT_ERROR_TRIGGER_ALERT(RegWeOnehotCheck_A, u_reg_cfg, alert_tx_o[2]) 930 `ASSERT_PRIM_ONEHOT_ERROR_TRIGGER_ALERT(RvCoreRegWeOnehotCheck_A, 931 u_core.gen_regfile_ff.register_file_i.gen_wren_check.u_prim_onehot_check, alert_tx_o[2]) 932 `ASSERT_PRIM_ONEHOT_ERROR_TRIGGER_ALERT(RvCoreRegWeOnehotCheckRAddrA_A, 933 u_core.gen_regfile_ff.register_file_i.gen_rdata_mux_check.u_prim_onehot_check_raddr_a, 934 alert_tx_o[2]) 935 `ASSERT_PRIM_ONEHOT_ERROR_TRIGGER_ALERT(RvCoreRegWeOnehotCheckRAddrB_A, 936 u_core.gen_regfile_ff.register_file_i.gen_rdata_mux_check.u_prim_onehot_check_raddr_b, 937 alert_tx_o[2]) 938 939 `ifdef INC_ASSERT 940 if (ICache && ICacheScramble) begin : gen_icache_scramble_asserts 941 942 // Sample icache scramble key for use in assertions below. 943 // pragma coverage off 944 //VCS coverage off 945 logic [otp_ctrl_pkg::FlashKeyWidth-1:0] icache_otp_key_q; 946 always_ff @(posedge clk_i, negedge rst_ni) begin 947 unreachable if (!rst_ni) begin 948 unreachable icache_otp_key_q <= '0; 949 unreachable end else if (icache_otp_key_i.ack) begin 950 unreachable icache_otp_key_q <= icache_otp_key_i.key; 951 end ==> MISSING_ELSE 952 end 953 //VCS coverage on 954 // pragma coverage on 955 956 // Ensure that when a scramble key is received, it is correctly forwarded to the core. The core 957 // will then internally ensure that the key is correctly applied to the icache scrambled 958 // memory primitives. 959 `ASSERT(IbexIcacheScrambleKeyForwardedToCore_A, 960 icache_otp_key_i.ack 961 |-> ##[0:10] // upper bound is not exact, but it should not take more than 10 cycles 962 u_core.scramble_key_valid_i && (u_core.scramble_key_i == icache_otp_key_q) 963 ) 964 965 // Ensure that when a FENCE.I is executed, a new icache scramble key is requested. 966 `ASSERT(IbexIcacheScrambleKeyRequestAfterFenceI_A, 967 u_core.u_ibex_core.id_stage_i.instr_valid_i 968 && u_core.u_ibex_core.id_stage_i.decoder_i.opcode == ibex_pkg::OPCODE_MISC_MEM 969 && u_core.u_ibex_core.id_stage_i.decoder_i.instr[14:12] == 3'b001 // FENCE.I 970 |-> ##[0:14] // upper bound is not exact, but it should not take more than a few cycles 971 icache_otp_key_o.req 972 ) 973 974 end 975 976 `define ASSERT_IBEX_CORE_ERROR_TRIGGER_ALERT(__assert_name, __alert_name, _hier, __error_name) \ 977 if (1) begin : g_``__error_name``_assert_signals \ 978 logic __error_name; \ 979 assign __error_name = u_core._hier``.__error_name; \ 980 \ 981 logic unused_assert_connected; \ 982 `ASSERT_INIT_NET(AssertConnected_A, unused_assert_connected === 1'b1) \ 983 end \ 984 `ASSERT_ERROR_TRIGGER_ALERT(__assert_name, g_``__error_name``_assert_signals, __alert_name, 0, \ 985 30, // MAX_CYCLES_, use a large value as ibex clock is 4x faster than clk in alert_handler \ 986 __error_name) 987 988 0/1 ==> `ASSERT_IBEX_CORE_ERROR_TRIGGER_ALERT(IbexPcMismatchCheck_A, alert_tx_o[2],
ASSERT_IBEX_CORE_ERROR_TRIGGER_ALERT(IbexPcMism: 988.1 if (1) begin : g_pc_mismatch_alert_o_assert_signals 988.2 logic pc_mismatch_alert_o; 988.3 0/1 ==> assign pc_mismatch_alert_o = u_core.u_ibex_core.if_stage_i.pc_mismatch_alert_o; 988.4 988.5 logic unused_assert_connected; 988.6 initial begin 988.7 988.8 988.9 988.10 #1ps; 988.11 AssertConnected_A: assert (unused_assert_connected === 1'b1) 988.12 else begin 988.13 `ifdef UVM 988.14 uvm_pkg::uvm_report_error("ASSERT FAILED", "AssertConnected_A", uvm_pkg::UVM_NONE, 988.15 "../src/lowrisc_ip_rv_core_ibex_0.1/rtl/rv_core_ibex.sv", 988, "", 1); 988.16 `else 988.17 $error("%0t: (%0s:%0d) [%m] [ASSERT FAILED] %0s", $time, `__FILE__, `__LINE__, 988.18 `PRIM_STRINGIFY(AssertConnected_A)); 988.19 `endif 988.20 end 988.21 end 988.22 988.23 end 988.24 FpvSecCmIbexPcMismatchCheck_A: assert property (@(posedge clk_i) disable iff ((!rst_ni) !== '0) ($rose(g_pc_mismatch_alert_o_assert_signals.pc_mismatch_alert_o) && !(0) |-> ##[0:30] ((alert_tx_o[2].alert_p)))) 988.25 else begin 988.26 `ifdef UVM 988.27 uvm_pkg::uvm_report_error("ASSERT FAILED", "FpvSecCmIbexPcMismatchCheck_A", uvm_pkg::UVM_NONE, 988.28 "../src/lowrisc_ip_rv_core_ibex_0.1/rtl/rv_core_ibex.sv", 988, "", 1); 988.29 `else 988.30 $error("%0t: (%0s:%0d) [%m] [ASSERT FAILED] %0s", $time, `__FILE__, `__LINE__, 988.31 `PRIM_STRINGIFY(FpvSecCmIbexPcMismatchCheck_A)); 988.32 `endif 988.33 end 988.34 `ifdef INC_ASSERT 988.35 assign g_pc_mismatch_alert_o_assert_signals.unused_assert_connected = 1'b1; 988.36 `endif 988.37 `ifdef FPV_ON 988.38 `ASSUME(IbexPcMismatchCheck_ATriggerAfterAlertInit_S, $stable(rst_ni) == 0 |-> g_pc_mismatch_alert_o_assert_signals.pc_mismatch_alert_o == 0 [*10], `ASSERT_DEFAULT_CLK, `ASSERT_DEFAULT_RST) 988.39 `endif989 u_ibex_core.if_stage_i, pc_mismatch_alert_o) 990 0/1 ==> `ASSERT_IBEX_CORE_ERROR_TRIGGER_ALERT(IbexRfEccErrCheck_A, alert_tx_o[2], u_ibex_core,
ASSERT_IBEX_CORE_ER: 990.1 if (1) begin : g_rf_ecc_err_comb_assert_signals 990.2 logic rf_ecc_err_comb; 990.3 0/1 ==> assign rf_ecc_err_comb = u_core.u_ibex_core.rf_ecc_err_comb; 990.4 990.5 logic unused_assert_connected; 990.6 initial begin 990.7 990.8 990.9 990.10 #1ps; 990.11 AssertConnected_A: assert (unused_assert_connected === 1'b1) 990.12 else begin 990.13 `ifdef UVM 990.14 uvm_pkg::uvm_report_error("ASSERT FAILED", "AssertConnected_A", uvm_pkg::UVM_NONE, 990.15 "../src/lowrisc_ip_rv_core_ibex_0.1/rtl/rv_core_ibex.sv", 990, "", 1); 990.16 `else 990.17 $error("%0t: (%0s:%0d) [%m] [ASSERT FAILED] %0s", $time, `__FILE__, `__LINE__, 990.18 `PRIM_STRINGIFY(AssertConnected_A)); 990.19 `endif 990.20 end 990.21 end 990.22 990.23 end 990.24 FpvSecCmIbexRfEccErrCheck_A: assert property (@(posedge clk_i) disable iff ((!rst_ni) !== '0) ($rose(g_rf_ecc_err_comb_assert_signals.rf_ecc_err_comb) && !(0) |-> ##[0:30] ((alert_tx_o[2].alert_p)))) 990.25 else begin 990.26 `ifdef UVM 990.27 uvm_pkg::uvm_report_error("ASSERT FAILED", "FpvSecCmIbexRfEccErrCheck_A", uvm_pkg::UVM_NONE, 990.28 "../src/lowrisc_ip_rv_core_ibex_0.1/rtl/rv_core_ibex.sv", 990, "", 1); 990.29 `else 990.30 $error("%0t: (%0s:%0d) [%m] [ASSERT FAILED] %0s", $time, `__FILE__, `__LINE__, 990.31 `PRIM_STRINGIFY(FpvSecCmIbexRfEccErrCheck_A)); 990.32 `endif 990.33 end 990.34 `ifdef INC_ASSERT 990.35 assign g_rf_ecc_err_comb_assert_signals.unused_assert_connected = 1'b1; 990.36 `endif 990.37 `ifdef FPV_ON 990.38 `ASSUME(IbexRfEccErrCheck_ATriggerAfterAlertInit_S, $stable(rst_ni) == 0 |-> g_rf_ecc_err_comb_assert_signals.rf_ecc_err_comb == 0 [*10], `ASSERT_DEFAULT_CLK, `ASSERT_DEFAULT_RST) 990.39 `endif991 rf_ecc_err_comb) 992 1/1 `ASSERT_IBEX_CORE_ERROR_TRIGGER_ALERT(IbexLoadRespIntgErrCheck_A, alert_tx_o[2], u_ibex_core, Tests: T1 T2 T3 
ASSERT_IBEX_CORE_ERROR_TRI: 992.1 if (1) begin : g_lsu_load_resp_intg_err_assert_signals 992.2 logic lsu_load_resp_intg_err; 992.3 1/1 assign lsu_load_resp_intg_err = u_core.u_ibex_core.lsu_load_resp_intg_err; Tests: T1 T2 T3  992.4 992.5 logic unused_assert_connected; 992.6 initial begin 992.7 992.8 992.9 992.10 #1ps; 992.11 AssertConnected_A: assert (unused_assert_connected === 1'b1) 992.12 else begin 992.13 `ifdef UVM 992.14 uvm_pkg::uvm_report_error("ASSERT FAILED", "AssertConnected_A", uvm_pkg::UVM_NONE, 992.15 "../src/lowrisc_ip_rv_core_ibex_0.1/rtl/rv_core_ibex.sv", 992, "", 1); 992.16 `else 992.17 $error("%0t: (%0s:%0d) [%m] [ASSERT FAILED] %0s", $time, `__FILE__, `__LINE__, 992.18 `PRIM_STRINGIFY(AssertConnected_A)); 992.19 `endif 992.20 end 992.21 end 992.22 992.23 end 992.24 FpvSecCmIbexLoadRespIntgErrCheck_A: assert property (@(posedge clk_i) disable iff ((!rst_ni) !== '0) ($rose(g_lsu_load_resp_intg_err_assert_signals.lsu_load_resp_intg_err) && !(0) |-> ##[0:30] ((alert_tx_o[2].alert_p)))) 992.25 else begin 992.26 `ifdef UVM 992.27 uvm_pkg::uvm_report_error("ASSERT FAILED", "FpvSecCmIbexLoadRespIntgErrCheck_A", uvm_pkg::UVM_NONE, 992.28 "../src/lowrisc_ip_rv_core_ibex_0.1/rtl/rv_core_ibex.sv", 992, "", 1); 992.29 `else 992.30 $error("%0t: (%0s:%0d) [%m] [ASSERT FAILED] %0s", $time, `__FILE__, `__LINE__, 992.31 `PRIM_STRINGIFY(FpvSecCmIbexLoadRespIntgErrCheck_A)); 992.32 `endif 992.33 end 992.34 `ifdef INC_ASSERT 992.35 assign g_lsu_load_resp_intg_err_assert_signals.unused_assert_connected = 1'b1; 992.36 `endif 992.37 `ifdef FPV_ON 992.38 `ASSUME(IbexLoadRespIntgErrCheck_ATriggerAfterAlertInit_S, $stable(rst_ni) == 0 |-> g_lsu_load_resp_intg_err_assert_signals.lsu_load_resp_intg_err == 0 [*10], `ASSERT_DEFAULT_CLK, `ASSERT_DEFAULT_RST) 992.39 `endif993 lsu_load_resp_intg_err) 994 1/1 `ASSERT_IBEX_CORE_ERROR_TRIGGER_ALERT(IbexStoreRespIntgErrCheck_A, alert_tx_o[2], u_ibex_core, Tests: T1 T2 T3 
ASSERT_IBEX_CORE_ERROR_TRIG: 994.1 if (1) begin : g_lsu_store_resp_intg_err_assert_signals 994.2 logic lsu_store_resp_intg_err; 994.3 1/1 assign lsu_store_resp_intg_err = u_core.u_ibex_core.lsu_store_resp_intg_err; Tests: T1 T2 T3  994.4 994.5 logic unused_assert_connected; 994.6 initial begin 994.7 994.8 994.9 994.10 #1ps; 994.11 AssertConnected_A: assert (unused_assert_connected === 1'b1) 994.12 else begin 994.13 `ifdef UVM 994.14 uvm_pkg::uvm_report_error("ASSERT FAILED", "AssertConnected_A", uvm_pkg::UVM_NONE, 994.15 "../src/lowrisc_ip_rv_core_ibex_0.1/rtl/rv_core_ibex.sv", 994, "", 1); 994.16 `else 994.17 $error("%0t: (%0s:%0d) [%m] [ASSERT FAILED] %0s", $time, `__FILE__, `__LINE__, 994.18 `PRIM_STRINGIFY(AssertConnected_A)); 994.19 `endif 994.20 end 994.21 end 994.22 994.23 end 994.24 FpvSecCmIbexStoreRespIntgErrCheck_A: assert property (@(posedge clk_i) disable iff ((!rst_ni) !== '0) ($rose(g_lsu_store_resp_intg_err_assert_signals.lsu_store_resp_intg_err) && !(0) |-> ##[0:30] ((alert_tx_o[2].alert_p)))) 994.25 else begin 994.26 `ifdef UVM 994.27 uvm_pkg::uvm_report_error("ASSERT FAILED", "FpvSecCmIbexStoreRespIntgErrCheck_A", uvm_pkg::UVM_NONE, 994.28 "../src/lowrisc_ip_rv_core_ibex_0.1/rtl/rv_core_ibex.sv", 994, "", 1); 994.29 `else 994.30 $error("%0t: (%0s:%0d) [%m] [ASSERT FAILED] %0s", $time, `__FILE__, `__LINE__, 994.31 `PRIM_STRINGIFY(FpvSecCmIbexStoreRespIntgErrCheck_A)); 994.32 `endif 994.33 end 994.34 `ifdef INC_ASSERT 994.35 assign g_lsu_store_resp_intg_err_assert_signals.unused_assert_connected = 1'b1; 994.36 `endif 994.37 `ifdef FPV_ON 994.38 `ASSUME(IbexStoreRespIntgErrCheck_ATriggerAfterAlertInit_S, $stable(rst_ni) == 0 |-> g_lsu_store_resp_intg_err_assert_signals.lsu_store_resp_intg_err == 0 [*10], `ASSERT_DEFAULT_CLK, `ASSERT_DEFAULT_RST) 994.39 `endif995 lsu_store_resp_intg_err) 996 1/1 `ASSERT_IBEX_CORE_ERROR_TRIGGER_ALERT(IbexInstrIntgErrCheck_A, alert_tx_o[2], u_ibex_core, Tests: T1 T2 T3 
ASSERT_IBEX_CORE_E: 996.1 if (1) begin : g_instr_intg_err_assert_signals 996.2 logic instr_intg_err; 996.3 1/1 assign instr_intg_err = u_core.u_ibex_core.instr_intg_err; Tests: T1 T2 T3  996.4 996.5 logic unused_assert_connected; 996.6 initial begin 996.7 996.8 996.9 996.10 #1ps; 996.11 AssertConnected_A: assert (unused_assert_connected === 1'b1) 996.12 else begin 996.13 `ifdef UVM 996.14 uvm_pkg::uvm_report_error("ASSERT FAILED", "AssertConnected_A", uvm_pkg::UVM_NONE, 996.15 "../src/lowrisc_ip_rv_core_ibex_0.1/rtl/rv_core_ibex.sv", 996, "", 1); 996.16 `else 996.17 $error("%0t: (%0s:%0d) [%m] [ASSERT FAILED] %0s", $time, `__FILE__, `__LINE__, 996.18 `PRIM_STRINGIFY(AssertConnected_A)); 996.19 `endif 996.20 end 996.21 end 996.22 996.23 end 996.24 FpvSecCmIbexInstrIntgErrCheck_A: assert property (@(posedge clk_i) disable iff ((!rst_ni) !== '0) ($rose(g_instr_intg_err_assert_signals.instr_intg_err) && !(0) |-> ##[0:30] ((alert_tx_o[2].alert_p)))) 996.25 else begin 996.26 `ifdef UVM 996.27 uvm_pkg::uvm_report_error("ASSERT FAILED", "FpvSecCmIbexInstrIntgErrCheck_A", uvm_pkg::UVM_NONE, 996.28 "../src/lowrisc_ip_rv_core_ibex_0.1/rtl/rv_core_ibex.sv", 996, "", 1); 996.29 `else 996.30 $error("%0t: (%0s:%0d) [%m] [ASSERT FAILED] %0s", $time, `__FILE__, `__LINE__, 996.31 `PRIM_STRINGIFY(FpvSecCmIbexInstrIntgErrCheck_A)); 996.32 `endif 996.33 end 996.34 `ifdef INC_ASSERT 996.35 assign g_instr_intg_err_assert_signals.unused_assert_connected = 1'b1; 996.36 `endif 996.37 `ifdef FPV_ON 996.38 `ASSUME(IbexInstrIntgErrCheck_ATriggerAfterAlertInit_S, $stable(rst_ni) == 0 |-> g_instr_intg_err_assert_signals.instr_intg_err == 0 [*10], `ASSERT_DEFAULT_CLK, `ASSERT_DEFAULT_RST) 996.39 `endif

Cond Coverage for Instance : tb.dut.top_earlgrey.u_rv_core_ibex
TotalCoveredPercent
Conditions282589.29
Logical282589.29
Non-Logical00
Event00

 LINE       216
 EXPRESSION (ibus_intg_err | dbus_intg_err | alert_major_bus)
             ------1------   ------2------   -------3-------
-1--2--3-StatusTests
000CoveredT1,T2,T3
001CoveredT229,T217,T151
010Not Covered
100Not Covered

 LINE       217
 EXPRESSION (alert_major_internal | double_fault)
             ----------1---------   ------2-----
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT246,T266,T267
10CoveredT163,T273,T227

 LINE       348
 EXPRESSION (fatal_core_err ? Off : local_fetch_enable_q)
             -------1------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT246,T163,T273

 LINE       737
 EXPRESSION (reg2hw.alert_test.fatal_sw_err.q & reg2hw.alert_test.fatal_sw_err.qe)
             ----------------1---------------   ----------------2----------------
-1--2-StatusTests
01CoveredT75,T227,T192
10CoveredT1,T2,T3
11CoveredT75,T76,T274

 LINE       739
 EXPRESSION (reg2hw.alert_test.recov_sw_err.q & reg2hw.alert_test.recov_sw_err.qe)
             ----------------1---------------   ----------------2----------------
-1--2-StatusTests
01CoveredT75,T76,T274
10CoveredT1,T2,T3
11CoveredT75,T227,T192

 LINE       741
 EXPRESSION (reg2hw.alert_test.fatal_hw_err.q & reg2hw.alert_test.fatal_hw_err.qe)
             ----------------1---------------   ----------------2----------------
-1--2-StatusTests
01CoveredT75,T227,T192
10CoveredT1,T2,T3
11CoveredT75,T76,T274

 LINE       743
 EXPRESSION (reg2hw.alert_test.recov_hw_err.q & reg2hw.alert_test.recov_hw_err.qe)
             ----------------1---------------   ----------------2----------------
-1--2-StatusTests
01CoveredT75,T227,T192
10CoveredT1,T2,T3
11CoveredT75,T76,T274

 LINE       755
 EXPRESSION (intg_err | fatal_intg_err | fatal_core_err)
             ----1---   -------2------   -------3------
-1--2--3-StatusTests
000CoveredT1,T2,T3
001CoveredT246,T163,T273
010CoveredT229,T217,T151
100CoveredT275,T276,T277

 LINE       802
 EXPRESSION (edn_req && edn_ack)
             ---1---    ---2---
-1--2-StatusTests
01Not Covered
10CoveredT2,T3,T5
11CoveredT2,T3,T4

Toggle Coverage for Instance : tb.dut.top_earlgrey.u_rv_core_ibex
TotalCoveredPercent
Totals 119 117 98.32
Total Bits 1608 1604 99.75
Total Bits 0->1 804 802 99.75
Total Bits 1->0 804 802 99.75

Ports 119 117 98.32
Port Bits 1608 1604 99.75
Port Bits 0->1 804 802 99.75
Port Bits 1->0 804 802 99.75

Port Details
NameToggleToggle 1->0TestsToggle 0->1TestsDirectionExclude Annotation
clk_i Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
rst_ni Yes Yes T6,T29,T36 Yes T1,T2,T3 INPUT
clk_edn_i Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
rst_edn_ni Yes Yes T6,T29,T36 Yes T1,T2,T3 INPUT
clk_esc_i Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
rst_esc_ni Yes Yes T6,T29,T36 Yes T1,T2,T3 INPUT
rst_cpu_n_o Yes Yes T6,T29,T36 Yes T1,T2,T3 OUTPUT
ram_cfg_i.rf_cfg.cfg[3:0] Excluded Excluded Excluded INPUT [LOW_RISK] Covered in formal conn: hw/top_earlgrey/formal/conn_csvs/ast_mem_cfg.csv
ram_cfg_i.rf_cfg.cfg_en[0:0] Excluded Excluded Excluded INPUT [LOW_RISK] Covered in formal conn: hw/top_earlgrey/formal/conn_csvs/ast_mem_cfg.csv
ram_cfg_i.rf_cfg.test No No No INPUT
ram_cfg_i.ram_cfg.cfg[3:0] Excluded Excluded Excluded INPUT [LOW_RISK] Covered in formal conn: hw/top_earlgrey/formal/conn_csvs/ast_mem_cfg.csv
ram_cfg_i.ram_cfg.cfg_en[0:0] Excluded Excluded Excluded INPUT [LOW_RISK] Covered in formal conn: hw/top_earlgrey/formal/conn_csvs/ast_mem_cfg.csv
ram_cfg_i.ram_cfg.test No No No INPUT
hart_id_i[31:0] Unreachable Unreachable Unreachable INPUT
boot_addr_i[31:0] Unreachable Unreachable Unreachable INPUT
corei_tl_h_o.d_ready Yes Yes T278,T279,T280 Yes T94,T95,T96 OUTPUT
corei_tl_h_o.a_user.data_intg[6:0] Yes Yes T94,T95,T96 Yes T94,T95,T96 OUTPUT
corei_tl_h_o.a_user.cmd_intg[6:0] Yes Yes T1,T2,T3 Yes T1,T2,T3 OUTPUT
corei_tl_h_o.a_user.instr_type[3:0] Yes Yes T99,T278,T279 Yes T99,T278,T279 OUTPUT
corei_tl_h_o.a_user.rsvd[4:0] Unreachable Unreachable Unreachable OUTPUT
corei_tl_h_o.a_data[31:0] Yes Yes T94,T95,T96 Yes T94,T95,T96 OUTPUT
corei_tl_h_o.a_mask[3:0] Yes Yes T94,T95,T96 Yes T94,T95,T96 OUTPUT
corei_tl_h_o.a_address[31:0] Yes Yes T94,T95,T96 Yes T94,T95,T96 OUTPUT
corei_tl_h_o.a_source[5:0] Yes Yes *T1,*T2,*T3 Yes T1,T2,T3 OUTPUT
corei_tl_h_o.a_source[7:6] Unreachable Unreachable Unreachable OUTPUT
corei_tl_h_o.a_size[1:0] Yes Yes T94,T95,T96 Yes T94,T95,T96 OUTPUT
corei_tl_h_o.a_param[2:0] Unreachable Unreachable Unreachable OUTPUT
corei_tl_h_o.a_opcode[2:0] Yes Yes T94,T95,T96 Yes T94,T95,T96 OUTPUT
corei_tl_h_o.a_valid Yes Yes T1,T2,T3 Yes T1,T2,T3 OUTPUT
corei_tl_h_i.a_ready Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
corei_tl_h_i.d_error Yes Yes T192,T245,T213 Yes T192,T245,T213 INPUT
corei_tl_h_i.d_user.data_intg[6:0] Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
corei_tl_h_i.d_user.rsp_intg[6:0] Yes Yes T229,T192,T245 Yes T229,T192,T245 INPUT
corei_tl_h_i.d_data[31:0] Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
corei_tl_h_i.d_sink Yes Yes T94,T95,T96 Yes T94,T95,T96 INPUT
corei_tl_h_i.d_source[5:0] Yes Yes *T1,*T2,*T3 Yes T1,T2,T3 INPUT
corei_tl_h_i.d_source[7:6] Unreachable Unreachable Unreachable INPUT
corei_tl_h_i.d_size[1:0] Yes Yes T94,T95,T96 Yes T94,T95,T96 INPUT
corei_tl_h_i.d_param[2:0] Unreachable Unreachable Unreachable INPUT
corei_tl_h_i.d_opcode[0] Yes Yes *T1,*T2,*T3 Yes T1,T2,T3 INPUT
corei_tl_h_i.d_opcode[2:1] Unreachable Unreachable Unreachable INPUT
corei_tl_h_i.d_valid Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
cored_tl_h_o.d_ready Yes Yes T35,T97,T98 Yes T35,T97,T98 OUTPUT
cored_tl_h_o.a_user.data_intg[6:0] Yes Yes T1,T2,T3 Yes T1,T2,T3 OUTPUT
cored_tl_h_o.a_user.cmd_intg[6:0] Yes Yes T1,T2,T3 Yes T1,T2,T3 OUTPUT
cored_tl_h_o.a_user.instr_type[3:0] Yes Yes T181,T96,T278 Yes T181,T96,T278 OUTPUT
cored_tl_h_o.a_user.rsvd[4:0] Unreachable Unreachable Unreachable OUTPUT
cored_tl_h_o.a_data[31:0] Yes Yes T1,T2,T3 Yes T1,T2,T3 OUTPUT
cored_tl_h_o.a_mask[3:0] Yes Yes T1,T2,T3 Yes T1,T2,T3 OUTPUT
cored_tl_h_o.a_address[31:0] Yes Yes T181,T94,T95 Yes T181,T94,T95 OUTPUT
cored_tl_h_o.a_source[5:0] Yes Yes *T1,*T2,*T3 Yes T1,T2,T3 OUTPUT
cored_tl_h_o.a_source[7:6] Unreachable Unreachable Unreachable OUTPUT
cored_tl_h_o.a_size[1:0] Yes Yes T181,T94,T95 Yes T181,T94,T95 OUTPUT
cored_tl_h_o.a_param[2:0] Unreachable Unreachable Unreachable OUTPUT
cored_tl_h_o.a_opcode[2:0] Yes Yes T1,T2,T3 Yes T1,T2,T3 OUTPUT
cored_tl_h_o.a_valid Yes Yes T1,T2,T3 Yes T1,T2,T3 OUTPUT
cored_tl_h_i.a_ready Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
cored_tl_h_i.d_error Yes Yes T83,T229,T246 Yes T83,T229,T246 INPUT
cored_tl_h_i.d_user.data_intg[6:0] Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
cored_tl_h_i.d_user.rsp_intg[6:0] Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
cored_tl_h_i.d_data[31:0] Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
cored_tl_h_i.d_sink Yes Yes T94,T95,T96 Yes T94,T95,T96 INPUT
cored_tl_h_i.d_source[5:0] Yes Yes *T1,*T2,*T3 Yes T1,T2,T3 INPUT
cored_tl_h_i.d_source[7:6] Unreachable Unreachable Unreachable INPUT
cored_tl_h_i.d_size[1:0] Yes Yes T94,T95,T96 Yes T94,T95,T96 INPUT
cored_tl_h_i.d_param[2:0] Unreachable Unreachable Unreachable INPUT
cored_tl_h_i.d_opcode[0] Yes Yes *T1,*T2,*T3 Yes T1,T2,T3 INPUT
cored_tl_h_i.d_opcode[2:1] Unreachable Unreachable Unreachable INPUT
cored_tl_h_i.d_valid Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
irq_software_i Yes Yes T281,T70,T282 Yes T281,T70,T282 INPUT
irq_timer_i Yes Yes T126,T127,T128 Yes T126,T127,T128 INPUT
irq_external_i Yes Yes T2,T3,T5 Yes T2,T3,T5 INPUT
esc_tx_i.esc_n Yes Yes T43,T81,T83 Yes T43,T81,T83 INPUT
esc_tx_i.esc_p Yes Yes T43,T81,T83 Yes T43,T81,T83 INPUT
esc_rx_o.resp_n Yes Yes T43,T81,T83 Yes T43,T81,T83 OUTPUT
esc_rx_o.resp_p Yes Yes T43,T81,T83 Yes T43,T81,T83 OUTPUT
nmi_wdog_i Yes Yes T264,T265,T138 Yes T264,T265,T138 INPUT
debug_req_i Yes Yes T88,T54,T55 Yes T88,T54,T55 INPUT
crash_dump_o.current.exception_addr[31:0] Unreachable Unreachable Unreachable OUTPUT
crash_dump_o.current.exception_pc[31:0] Unreachable Unreachable Unreachable OUTPUT
crash_dump_o.current.last_data_addr[31:0] Unreachable Unreachable Unreachable OUTPUT
crash_dump_o.current.next_pc[31:0] Unreachable Unreachable Unreachable OUTPUT
crash_dump_o.current.current_pc[31:0] Unreachable Unreachable Unreachable OUTPUT
crash_dump_o.prev_exception_addr[31:0] Unreachable Unreachable Unreachable OUTPUT
crash_dump_o.prev_exception_pc[31:0] Unreachable Unreachable Unreachable OUTPUT
crash_dump_o.prev_valid Unreachable Unreachable Unreachable OUTPUT
lc_cpu_en_i[3:0] Yes Yes T6,T36,T42 Yes T1,T2,T3 INPUT
pwrmgr_cpu_en_i[3:0] Yes Yes T5,T6,T23 Yes T1,T2,T3 INPUT
pwrmgr_o.core_sleeping Yes Yes T1,T2,T3 Yes T1,T2,T3 OUTPUT
scan_rst_ni Unreachable Unreachable Unreachable INPUT
scanmode_i[3:0] Unreachable Unreachable Unreachable INPUT
cfg_tl_d_i.d_ready Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
cfg_tl_d_i.a_user.data_intg[6:0] Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
cfg_tl_d_i.a_user.cmd_intg[6:0] Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
cfg_tl_d_i.a_user.instr_type[3:0] Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
cfg_tl_d_i.a_user.rsvd[4:0] Unreachable Unreachable Unreachable INPUT
cfg_tl_d_i.a_data[31:0] Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
cfg_tl_d_i.a_mask[3:0] Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
cfg_tl_d_i.a_address[7:0] Yes Yes *T95,*T96,*T99 Yes T95,T96,T99 INPUT
cfg_tl_d_i.a_address[15:8] Unreachable Unreachable Unreachable INPUT
cfg_tl_d_i.a_address[20:16] Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
cfg_tl_d_i.a_address[23:21] Unreachable Unreachable Unreachable INPUT
cfg_tl_d_i.a_address[24] Yes Yes *T1,*T2,*T3 Yes T1,T2,T3 INPUT
cfg_tl_d_i.a_address[29:25] Unreachable Unreachable Unreachable INPUT
cfg_tl_d_i.a_address[30] Yes Yes *T1,*T2,*T3 Yes T1,T2,T3 INPUT
cfg_tl_d_i.a_address[31] Unreachable Unreachable Unreachable INPUT
cfg_tl_d_i.a_source[5:0] Yes Yes *T94,*T95,*T96 Yes T94,T95,T96 INPUT
cfg_tl_d_i.a_source[7:6] Unreachable Unreachable Unreachable INPUT
cfg_tl_d_i.a_size[1:0] Yes Yes T94,T95,T96 Yes T94,T95,T96 INPUT
cfg_tl_d_i.a_param[2:0] Unreachable Unreachable Unreachable INPUT
cfg_tl_d_i.a_opcode[2:0] Yes Yes T95,T96,T99 Yes T95,T96,T99 INPUT
cfg_tl_d_i.a_valid Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
cfg_tl_d_o.a_ready Yes Yes T1,T2,T3 Yes T1,T2,T3 OUTPUT
cfg_tl_d_o.d_error Yes Yes T94,T95,T96 Yes T94,T95,T96 OUTPUT
cfg_tl_d_o.d_user.data_intg[6:0] Yes Yes T2,T3,T5 Yes T2,T3,T5 OUTPUT
cfg_tl_d_o.d_user.rsp_intg[6:0] Yes Yes T2,T3,T4 Yes T1,T2,T3 OUTPUT
cfg_tl_d_o.d_data[31:0] Yes Yes T2,T3,T5 Yes T2,T3,T5 OUTPUT
cfg_tl_d_o.d_sink Yes Yes T94,T95,T96 Yes T94,T95,T96 OUTPUT
cfg_tl_d_o.d_source[5:0] Yes Yes *T94,*T96,*T99 Yes T94,T95,T96 OUTPUT
cfg_tl_d_o.d_source[7:6] Unreachable Unreachable Unreachable OUTPUT
cfg_tl_d_o.d_size[1:0] Yes Yes T94,T95,T96 Yes T94,T95,T96 OUTPUT
cfg_tl_d_o.d_param[2:0] Unreachable Unreachable Unreachable OUTPUT
cfg_tl_d_o.d_opcode[0] Yes Yes *T2,*T3,*T4 Yes T2,T3,T4 OUTPUT
cfg_tl_d_o.d_opcode[2:1] Unreachable Unreachable Unreachable OUTPUT
cfg_tl_d_o.d_valid Yes Yes T1,T2,T3 Yes T1,T2,T3 OUTPUT
edn_o.edn_req Yes Yes T2,T3,T4 Yes T1,T2,T3 OUTPUT
edn_i.edn_bus[31:0] Yes Yes T6,T26,T27 Yes T2,T30,T104 INPUT
edn_i.edn_fips Yes Yes T157,T272,T143 Yes T157,T271,T272 INPUT
edn_i.edn_ack Yes Yes T2,T3,T4 Yes T2,T3,T4 INPUT
clk_otp_i Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
rst_otp_ni Yes Yes T6,T29,T36 Yes T1,T2,T3 INPUT
icache_otp_key_o.req Yes Yes T213,T214,T215 Yes T213,T214,T215 OUTPUT
icache_otp_key_i.seed_valid Yes Yes T6,T36,T42 Yes T2,T4,T5 INPUT
icache_otp_key_i.nonce[127:0] Yes Yes T6,T11,T34 Yes T30,T104,T105 INPUT
icache_otp_key_i.key[127:0] Yes Yes T2,T3,T5 Yes T2,T5,T121 INPUT
icache_otp_key_i.ack Yes Yes T214,T215,T216 Yes T214,T215,T216 INPUT
fpga_info_i[31:0] Unreachable Unreachable Unreachable INPUT
alert_rx_i[0].ack_n Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
alert_rx_i[0].ack_p Yes Yes T75,T100,T101 Yes T75,T100,T101 INPUT
alert_rx_i[0].ping_n Yes Yes T100,T101,T102 Yes T100,T101,T102 INPUT
alert_rx_i[0].ping_p Yes Yes T100,T101,T102 Yes T100,T101,T102 INPUT
alert_rx_i[1].ack_n Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
alert_rx_i[1].ack_p Yes Yes T75,T100,T227 Yes T75,T100,T227 INPUT
alert_rx_i[1].ping_n Yes Yes T100,T101,T102 Yes T100,T101,T102 INPUT
alert_rx_i[1].ping_p Yes Yes T100,T101,T102 Yes T100,T101,T102 INPUT
alert_rx_i[2].ack_n Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
alert_rx_i[2].ack_p Yes Yes T229,T246,T217 Yes T229,T246,T217 INPUT
alert_rx_i[2].ping_n Yes Yes T100,T101,T102 Yes T101,T103,T283 INPUT
alert_rx_i[2].ping_p Yes Yes T101,T103,T283 Yes T100,T101,T102 INPUT
alert_rx_i[3].ack_n Yes Yes T1,T2,T3 Yes T1,T2,T3 INPUT
alert_rx_i[3].ack_p Yes Yes T75,T100,T101 Yes T75,T100,T101 INPUT
alert_rx_i[3].ping_n Yes Yes T100,T101,T102 Yes T100,T101,T102 INPUT
alert_rx_i[3].ping_p Yes Yes T100,T101,T102 Yes T100,T101,T102 INPUT
alert_tx_o[0].alert_n Yes Yes T1,T2,T3 Yes T1,T2,T3 OUTPUT
alert_tx_o[0].alert_p Yes Yes T75,T100,T101 Yes T75,T100,T101 OUTPUT
alert_tx_o[1].alert_n Yes Yes T1,T2,T3 Yes T1,T2,T3 OUTPUT
alert_tx_o[1].alert_p Yes Yes T75,T100,T227 Yes T75,T100,T227 OUTPUT
alert_tx_o[2].alert_n Yes Yes T1,T2,T3 Yes T1,T2,T3 OUTPUT
alert_tx_o[2].alert_p Yes Yes T229,T246,T217 Yes T229,T246,T217 OUTPUT
alert_tx_o[3].alert_n Yes Yes T1,T2,T3 Yes T1,T2,T3 OUTPUT
alert_tx_o[3].alert_p Yes Yes T75,T100,T101 Yes T75,T100,T101 OUTPUT

*Tests covering at least one bit in the range

Branch Coverage for Instance : tb.dut.top_earlgrey.u_rv_core_ibex
Line No.TotalCoveredPercent
Branches 12 12 100.00
TERNARY 348 2 2 100.00
IF 492 2 2 100.00
IF 518 3 3 100.00
IF 798 3 3 100.00
IF 810 2 2 100.00


348 assign local_fetch_enable_d = fatal_core_err ? lc_ctrl_pkg::Off : local_fetch_enable_q; -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T246,T163,T273
0 Covered T1,T2,T3


492 if (!rst_ni) begin -1- 493 core_sleep_q <= '0; ==> 494 end else begin 495 core_sleep_q <= core_sleep; ==>

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


518 if (!rst_ni) begin -1- 519 prev_valid <= '0; ==> 520 prev_exception_pc <= '0; 521 prev_exception_addr <= '0; 522 end else if (double_fault) begin -2- 523 prev_valid <= 1'b1; ==> 524 prev_exception_pc <= crash_dump.exception_pc; 525 prev_exception_addr <= crash_dump.exception_addr; 526 end MISSING_ELSE ==>

Branches:
-1--2-StatusTests
1 - Covered T1,T2,T3
0 1 Covered T246,T266,T267
0 0 Covered T1,T2,T3


798 if (reg2hw.rnd_data.re) begin -1- 799 rnd_valid_d = '0; ==> 800 rnd_data_d = '0; 801 rnd_fips_d = '0; 802 end else if (edn_req && edn_ack) begin -2- 803 rnd_valid_d = 1'b1; ==> 804 rnd_data_d = edn_data; 805 rnd_fips_d = edn_fips; 806 end MISSING_ELSE ==>

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


810 if (!rst_ni) begin -1- 811 rnd_valid_q <= '0; ==> 812 rnd_data_q <= '0; 813 rnd_fips_q <= '0; 814 end else begin 815 rnd_valid_q <= rnd_valid_d; ==>

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


Assert Coverage for Instance : tb.dut.top_earlgrey.u_rv_core_ibex
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 22 22 100.00 15 68.18
Cover properties 0 0 0
Cover sequences 0 0 0
Total 22 22 100.00 15 68.18




Assertion Details

NameAttemptsReal SuccessesFailuresIncomplete
FpvSecCmIbexFetchEnable0_A 491226693 5 0 0
FpvSecCmIbexFetchEnable1_A 491226693 24416272 0 96
FpvSecCmIbexFetchEnable2_A 491226693 64195315 0 82
FpvSecCmIbexFetchEnable3Rev_A 491226693 422416327 0 1998
FpvSecCmIbexFetchEnable3_A 491226693 422418168 0 1895
FpvSecCmIbexInstrIntgErrCheck_A 491226693 307 0 0
FpvSecCmIbexLoadRespIntgErrCheck_A 491226693 586 0 0
FpvSecCmIbexLockstepResetCountAlertCheck_A 491226693 0 0 0
FpvSecCmIbexPcMismatchCheck_A 491226693 0 0 0
FpvSecCmIbexRfEccErrCheck_A 491226693 0 0 0
FpvSecCmIbexStoreRespIntgErrCheck_A 491226693 0 0 0
FpvSecCmRegWeOnehotCheck_A 491226693 3 0 0
FpvSecCmRvCoreRegWeOnehotCheckRAddrA_A 491226693 0 0 0
FpvSecCmRvCoreRegWeOnehotCheckRAddrB_A 491226693 0 0 0
FpvSecCmRvCoreRegWeOnehotCheck_A 491226693 0 0 0
g_instr_intg_err_assert_signals.AssertConnected_A 1010 1010 0 0
g_lsu_load_resp_intg_err_assert_signals.AssertConnected_A 1010 1010 0 0
g_lsu_store_resp_intg_err_assert_signals.AssertConnected_A 1010 1010 0 0
g_pc_mismatch_alert_o_assert_signals.AssertConnected_A 1010 1010 0 0
g_rf_ecc_err_comb_assert_signals.AssertConnected_A 1010 1010 0 0
gen_icache_scramble_asserts.IbexIcacheScrambleKeyForwardedToCore_A 491226693 169 0 0
gen_icache_scramble_asserts.IbexIcacheScrambleKeyRequestAfterFenceI_A 491226693 190 0 0


FpvSecCmIbexFetchEnable0_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 491226693 5 0 0
T126 97466 0 0 0
T149 356252 0 0 0
T150 353149 0 0 0
T155 154857 0 0 0
T163 186002 0 0 0
T199 404286 0 0 0
T207 433602 0 0 0
T246 223982 1 0 0
T266 0 1 0 0
T267 0 1 0 0
T284 0 1 0 0
T285 0 1 0 0
T286 370601 0 0 0
T287 88776 0 0 0

FpvSecCmIbexFetchEnable1_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 491226693 24416272 0 96
T1 42275 9931 0 0
T2 91152 9927 0 0
T3 115201 9923 0 0
T4 110863 9923 0 0
T5 83840 9923 0 0
T6 116117 9927 0 0
T29 0 0 0 2
T30 92780 9931 0 0
T35 0 0 0 2
T36 0 0 0 2
T37 0 0 0 2
T51 0 0 0 2
T57 0 0 0 2
T68 219320 9919 0 0
T82 0 0 0 2
T97 0 0 0 2
T104 98538 9919 0 0
T105 67890 9931 0 0
T201 0 0 0 2
T288 0 0 0 2

FpvSecCmIbexFetchEnable2_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 491226693 64195315 0 82
T1 42275 34775 0 0
T2 91152 34775 0 0
T3 115201 34775 0 0
T4 110863 34775 0 0
T5 83840 40329 0 0
T6 116117 34780 0 0
T29 0 0 0 2
T30 92780 34775 0 0
T35 0 0 0 2
T36 0 0 0 2
T37 0 0 0 2
T51 0 0 0 2
T53 0 0 0 2
T68 219320 34775 0 0
T97 0 0 0 2
T104 98538 34771 0 0
T105 67890 34775 0 0
T201 0 0 0 2
T289 0 0 0 2
T290 0 0 0 2

FpvSecCmIbexFetchEnable3Rev_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 491226693 422416327 0 1998
T1 42275 7435 0 2
T2 91152 56316 0 2
T3 115201 80368 0 2
T4 110863 76030 0 2
T5 83840 43455 0 2
T6 116117 81276 0 0
T23 0 0 0 2
T30 92780 57944 0 2
T68 219320 184491 0 2
T104 98538 63710 0 2
T105 67890 33054 0 2

FpvSecCmIbexFetchEnable3_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 491226693 422418168 0 1895
T1 42275 7436 0 2
T2 91152 56317 0 2
T3 115201 80369 0 2
T4 110863 76031 0 2
T5 83840 43458 0 2
T6 116117 81277 0 0
T23 0 0 0 2
T30 92780 57945 0 2
T68 219320 184492 0 2
T104 98538 63710 0 2
T105 67890 33055 0 2

FpvSecCmIbexInstrIntgErrCheck_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 491226693 307 0 0
T47 111561 0 0 0
T49 140712 0 0 0
T78 104023 0 0 0
T134 144507 0 0 0
T135 238063 0 0 0
T291 281714 76 0 0
T292 0 77 0 0
T293 0 77 0 0
T294 0 77 0 0
T295 400262 0 0 0
T296 217207 0 0 0
T297 210519 0 0 0
T298 137462 0 0 0

FpvSecCmIbexLoadRespIntgErrCheck_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 491226693 586 0 0
T126 97466 0 0 0
T149 356252 0 0 0
T151 0 30 0 0
T155 154857 0 0 0
T163 186002 0 0 0
T202 341500 0 0 0
T206 156405 0 0 0
T210 0 32 0 0
T211 0 32 0 0
T217 0 99 0 0
T229 296430 1 0 0
T246 223982 0 0 0
T286 370601 0 0 0
T299 0 100 0 0
T300 0 32 0 0
T301 0 31 0 0
T302 0 32 0 0
T303 0 100 0 0
T304 211759 0 0 0

FpvSecCmIbexLockstepResetCountAlertCheck_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 491226693 0 0 0

FpvSecCmIbexPcMismatchCheck_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 491226693 0 0 0

FpvSecCmIbexRfEccErrCheck_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 491226693 0 0 0

FpvSecCmIbexStoreRespIntgErrCheck_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 491226693 0 0 0

FpvSecCmRegWeOnehotCheck_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 491226693 3 0 0
T275 132307 1 0 0
T276 0 1 0 0
T277 0 1 0 0
T305 148261 0 0 0
T306 230894 0 0 0
T307 592002 0 0 0
T308 149747 0 0 0
T309 291722 0 0 0
T310 129293 0 0 0
T311 138699 0 0 0
T312 128279 0 0 0
T313 132709 0 0 0

FpvSecCmRvCoreRegWeOnehotCheckRAddrA_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 491226693 0 0 0

FpvSecCmRvCoreRegWeOnehotCheckRAddrB_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 491226693 0 0 0

FpvSecCmRvCoreRegWeOnehotCheck_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 491226693 0 0 0

g_instr_intg_err_assert_signals.AssertConnected_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1010 1010 0 0
T1 1 1 0 0
T2 1 1 0 0
T3 1 1 0 0
T4 1 1 0 0
T5 1 1 0 0
T6 1 1 0 0
T30 1 1 0 0
T68 1 1 0 0
T104 1 1 0 0
T105 1 1 0 0

g_lsu_load_resp_intg_err_assert_signals.AssertConnected_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1010 1010 0 0
T1 1 1 0 0
T2 1 1 0 0
T3 1 1 0 0
T4 1 1 0 0
T5 1 1 0 0
T6 1 1 0 0
T30 1 1 0 0
T68 1 1 0 0
T104 1 1 0 0
T105 1 1 0 0

g_lsu_store_resp_intg_err_assert_signals.AssertConnected_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1010 1010 0 0
T1 1 1 0 0
T2 1 1 0 0
T3 1 1 0 0
T4 1 1 0 0
T5 1 1 0 0
T6 1 1 0 0
T30 1 1 0 0
T68 1 1 0 0
T104 1 1 0 0
T105 1 1 0 0

g_pc_mismatch_alert_o_assert_signals.AssertConnected_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1010 1010 0 0
T1 1 1 0 0
T2 1 1 0 0
T3 1 1 0 0
T4 1 1 0 0
T5 1 1 0 0
T6 1 1 0 0
T30 1 1 0 0
T68 1 1 0 0
T104 1 1 0 0
T105 1 1 0 0

g_rf_ecc_err_comb_assert_signals.AssertConnected_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1010 1010 0 0
T1 1 1 0 0
T2 1 1 0 0
T3 1 1 0 0
T4 1 1 0 0
T5 1 1 0 0
T6 1 1 0 0
T30 1 1 0 0
T68 1 1 0 0
T104 1 1 0 0
T105 1 1 0 0

gen_icache_scramble_asserts.IbexIcacheScrambleKeyForwardedToCore_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 491226693 169 0 0
T89 213837 0 0 0
T203 243439 0 0 0
T214 84494 33 0 0
T215 79788 22 0 0
T216 0 9 0 0
T221 375124 0 0 0
T268 0 34 0 0
T269 0 33 0 0
T314 0 38 0 0
T315 161591 0 0 0
T316 559635 0 0 0
T317 98791 0 0 0
T318 675102 0 0 0
T319 224651 0 0 0

gen_icache_scramble_asserts.IbexIcacheScrambleKeyRequestAfterFenceI_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 491226693 190 0 0
T31 52858 0 0 0
T152 209522 0 0 0
T153 204244 0 0 0
T154 216331 0 0 0
T184 442017 0 0 0
T198 112543 0 0 0
T212 332778 0 0 0
T213 293234 16 0 0
T214 0 42 0 0
T215 0 5 0 0
T216 0 2 0 0
T268 0 42 0 0
T269 0 42 0 0
T314 0 9 0 0
T320 0 16 0 0
T321 0 16 0 0
T322 270922 0 0 0
T323 157352 0 0 0

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