Line Coverage for Module :
rv_core_ibex
| Line No. | Total | Covered | Percent |
TOTAL | | 85 | 80 | 94.12 |
CONT_ASSIGN | 202 | 1 | 1 | 100.00 |
CONT_ASSIGN | 203 | 1 | 1 | 100.00 |
CONT_ASSIGN | 216 | 1 | 1 | 100.00 |
CONT_ASSIGN | 217 | 1 | 1 | 100.00 |
CONT_ASSIGN | 218 | 1 | 1 | 100.00 |
CONT_ASSIGN | 225 | 1 | 1 | 100.00 |
CONT_ASSIGN | 263 | 1 | 1 | 100.00 |
CONT_ASSIGN | 265 | 1 | 1 | 100.00 |
CONT_ASSIGN | 268 | 1 | 1 | 100.00 |
CONT_ASSIGN | 342 | 1 | 1 | 100.00 |
CONT_ASSIGN | 348 | 1 | 1 | 100.00 |
CONT_ASSIGN | 363 | 1 | 1 | 100.00 |
ALWAYS | 492 | 3 | 3 | 100.00 |
CONT_ASSIGN | 512 | 1 | 1 | 100.00 |
CONT_ASSIGN | 513 | 1 | 1 | 100.00 |
CONT_ASSIGN | 514 | 1 | 1 | 100.00 |
CONT_ASSIGN | 515 | 1 | 1 | 100.00 |
ALWAYS | 518 | 8 | 8 | 100.00 |
CONT_ASSIGN | 704 | 1 | 1 | 100.00 |
CONT_ASSIGN | 704 | 1 | 1 | 100.00 |
CONT_ASSIGN | 705 | 1 | 1 | 100.00 |
CONT_ASSIGN | 705 | 1 | 1 | 100.00 |
CONT_ASSIGN | 706 | 1 | 1 | 100.00 |
CONT_ASSIGN | 706 | 1 | 1 | 100.00 |
CONT_ASSIGN | 710 | 1 | 1 | 100.00 |
CONT_ASSIGN | 710 | 1 | 1 | 100.00 |
CONT_ASSIGN | 711 | 1 | 1 | 100.00 |
CONT_ASSIGN | 711 | 1 | 1 | 100.00 |
CONT_ASSIGN | 712 | 1 | 1 | 100.00 |
CONT_ASSIGN | 712 | 1 | 1 | 100.00 |
CONT_ASSIGN | 719 | 1 | 1 | 100.00 |
CONT_ASSIGN | 720 | 1 | 1 | 100.00 |
CONT_ASSIGN | 721 | 1 | 1 | 100.00 |
CONT_ASSIGN | 724 | 1 | 1 | 100.00 |
CONT_ASSIGN | 726 | 1 | 1 | 100.00 |
CONT_ASSIGN | 728 | 1 | 1 | 100.00 |
CONT_ASSIGN | 730 | 1 | 1 | 100.00 |
CONT_ASSIGN | 737 | 1 | 1 | 100.00 |
CONT_ASSIGN | 739 | 1 | 1 | 100.00 |
CONT_ASSIGN | 741 | 1 | 1 | 100.00 |
CONT_ASSIGN | 743 | 1 | 1 | 100.00 |
CONT_ASSIGN | 753 | 1 | 1 | 100.00 |
CONT_ASSIGN | 754 | 1 | 0 | 0.00 |
CONT_ASSIGN | 755 | 1 | 1 | 100.00 |
CONT_ASSIGN | 756 | 1 | 1 | 100.00 |
CONT_ASSIGN | 759 | 1 | 1 | 100.00 |
CONT_ASSIGN | 762 | 1 | 0 | 0.00 |
ALWAYS | 794 | 11 | 11 | 100.00 |
ALWAYS | 810 | 7 | 7 | 100.00 |
CONT_ASSIGN | 821 | 1 | 1 | 100.00 |
CONT_ASSIGN | 840 | 1 | 1 | 100.00 |
CONT_ASSIGN | 841 | 1 | 1 | 100.00 |
CONT_ASSIGN | 842 | 1 | 1 | 100.00 |
CONT_ASSIGN | 845 | 1 | 0 | 0.00 |
CONT_ASSIGN | 849 | 0 | 0 | |
CONT_ASSIGN | 888 | 1 | 1 | 100.00 |
ALWAYS | 947 | 0 | 0 | |
CONT_ASSIGN | 988 | 1 | 0 | 0.00 |
CONT_ASSIGN | 990 | 1 | 0 | 0.00 |
CONT_ASSIGN | 992 | 1 | 1 | 100.00 |
CONT_ASSIGN | 994 | 1 | 1 | 100.00 |
CONT_ASSIGN | 996 | 1 | 1 | 100.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
| Total | Covered | Percent |
Conditions | 28 | 25 | 89.29 |
Logical | 28 | 25 | 89.29 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 216
EXPRESSION (ibus_intg_err | dbus_intg_err | alert_major_bus)
------1------ ------2------ -------3-------
-1- | -2- | -3- | Status | Tests |
0 | 0 | 0 | Covered | T1,T2,T3 |
0 | 0 | 1 | Covered | T229,T217,T151 |
0 | 1 | 0 | Not Covered | |
1 | 0 | 0 | Not Covered | |
LINE 217
EXPRESSION (alert_major_internal | double_fault)
----------1--------- ------2-----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T246,T266,T267 |
1 | 0 | Covered | T163,T273,T227 |
LINE 348
EXPRESSION (fatal_core_err ? Off : local_fetch_enable_q)
-------1------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T246,T163,T273 |
LINE 737
EXPRESSION (reg2hw.alert_test.fatal_sw_err.q & reg2hw.alert_test.fatal_sw_err.qe)
----------------1--------------- ----------------2----------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T75,T227,T192 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T75,T76,T274 |
LINE 739
EXPRESSION (reg2hw.alert_test.recov_sw_err.q & reg2hw.alert_test.recov_sw_err.qe)
----------------1--------------- ----------------2----------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T75,T76,T274 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T75,T227,T192 |
LINE 741
EXPRESSION (reg2hw.alert_test.fatal_hw_err.q & reg2hw.alert_test.fatal_hw_err.qe)
----------------1--------------- ----------------2----------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T75,T227,T192 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T75,T76,T274 |
LINE 743
EXPRESSION (reg2hw.alert_test.recov_hw_err.q & reg2hw.alert_test.recov_hw_err.qe)
----------------1--------------- ----------------2----------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T75,T227,T192 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T75,T76,T274 |
LINE 755
EXPRESSION (intg_err | fatal_intg_err | fatal_core_err)
----1--- -------2------ -------3------
-1- | -2- | -3- | Status | Tests |
0 | 0 | 0 | Covered | T1,T2,T3 |
0 | 0 | 1 | Covered | T246,T163,T273 |
0 | 1 | 0 | Covered | T229,T217,T151 |
1 | 0 | 0 | Covered | T275,T276,T277 |
LINE 802
EXPRESSION (edn_req && edn_ack)
---1--- ---2---
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T2,T3,T5 |
1 | 1 | Covered | T2,T3,T4 |
Toggle Coverage for Module :
rv_core_ibex
| Total | Covered | Percent |
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
Name | Toggle | Toggle 1->0 | Tests | Toggle 0->1 | Tests | Direction |
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. | Total | Covered | Percent |
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- | Status | Tests |
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- | Status | Tests |
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- | Status | Tests |
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- | Status | Tests |
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- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T1,T2,T3 |
Assert Coverage for Module :
rv_core_ibex
Assertion Details
FpvSecCmIbexFetchEnable0_A
Name | Attempts | Real Successes | Failures | Incomplete |
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
Name | Attempts | Real Successes | Failures | Incomplete |
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
Name | Attempts | Real Successes | Failures | Incomplete |
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
Name | Attempts | Real Successes | Failures | Incomplete |
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
Name | Attempts | Real Successes | Failures | Incomplete |
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
Name | Attempts | Real Successes | Failures | Incomplete |
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
Name | Attempts | Real Successes | Failures | Incomplete |
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
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
491226693 |
0 |
0 |
0 |
FpvSecCmIbexPcMismatchCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
491226693 |
0 |
0 |
0 |
FpvSecCmIbexRfEccErrCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
491226693 |
0 |
0 |
0 |
FpvSecCmIbexStoreRespIntgErrCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
491226693 |
0 |
0 |
0 |
FpvSecCmRegWeOnehotCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
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
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
491226693 |
0 |
0 |
0 |
FpvSecCmRvCoreRegWeOnehotCheckRAddrB_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
491226693 |
0 |
0 |
0 |
FpvSecCmRvCoreRegWeOnehotCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
491226693 |
0 |
0 |
0 |
g_instr_intg_err_assert_signals.AssertConnected_A
Name | Attempts | Real Successes | Failures | Incomplete |
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
Name | Attempts | Real Successes | Failures | Incomplete |
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
Name | Attempts | Real Successes | Failures | Incomplete |
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
Name | Attempts | Real Successes | Failures | Incomplete |
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
Name | Attempts | Real Successes | Failures | Incomplete |
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
Name | Attempts | Real Successes | Failures | Incomplete |
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
Name | Attempts | Real Successes | Failures | Incomplete |
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. | Total | Covered | Percent |
TOTAL | | 85 | 80 | 94.12 |
CONT_ASSIGN | 202 | 1 | 1 | 100.00 |
CONT_ASSIGN | 203 | 1 | 1 | 100.00 |
CONT_ASSIGN | 216 | 1 | 1 | 100.00 |
CONT_ASSIGN | 217 | 1 | 1 | 100.00 |
CONT_ASSIGN | 218 | 1 | 1 | 100.00 |
CONT_ASSIGN | 225 | 1 | 1 | 100.00 |
CONT_ASSIGN | 263 | 1 | 1 | 100.00 |
CONT_ASSIGN | 265 | 1 | 1 | 100.00 |
CONT_ASSIGN | 268 | 1 | 1 | 100.00 |
CONT_ASSIGN | 342 | 1 | 1 | 100.00 |
CONT_ASSIGN | 348 | 1 | 1 | 100.00 |
CONT_ASSIGN | 363 | 1 | 1 | 100.00 |
ALWAYS | 492 | 3 | 3 | 100.00 |
CONT_ASSIGN | 512 | 1 | 1 | 100.00 |
CONT_ASSIGN | 513 | 1 | 1 | 100.00 |
CONT_ASSIGN | 514 | 1 | 1 | 100.00 |
CONT_ASSIGN | 515 | 1 | 1 | 100.00 |
ALWAYS | 518 | 8 | 8 | 100.00 |
CONT_ASSIGN | 704 | 1 | 1 | 100.00 |
CONT_ASSIGN | 704 | 1 | 1 | 100.00 |
CONT_ASSIGN | 705 | 1 | 1 | 100.00 |
CONT_ASSIGN | 705 | 1 | 1 | 100.00 |
CONT_ASSIGN | 706 | 1 | 1 | 100.00 |
CONT_ASSIGN | 706 | 1 | 1 | 100.00 |
CONT_ASSIGN | 710 | 1 | 1 | 100.00 |
CONT_ASSIGN | 710 | 1 | 1 | 100.00 |
CONT_ASSIGN | 711 | 1 | 1 | 100.00 |
CONT_ASSIGN | 711 | 1 | 1 | 100.00 |
CONT_ASSIGN | 712 | 1 | 1 | 100.00 |
CONT_ASSIGN | 712 | 1 | 1 | 100.00 |
CONT_ASSIGN | 719 | 1 | 1 | 100.00 |
CONT_ASSIGN | 720 | 1 | 1 | 100.00 |
CONT_ASSIGN | 721 | 1 | 1 | 100.00 |
CONT_ASSIGN | 724 | 1 | 1 | 100.00 |
CONT_ASSIGN | 726 | 1 | 1 | 100.00 |
CONT_ASSIGN | 728 | 1 | 1 | 100.00 |
CONT_ASSIGN | 730 | 1 | 1 | 100.00 |
CONT_ASSIGN | 737 | 1 | 1 | 100.00 |
CONT_ASSIGN | 739 | 1 | 1 | 100.00 |
CONT_ASSIGN | 741 | 1 | 1 | 100.00 |
CONT_ASSIGN | 743 | 1 | 1 | 100.00 |
CONT_ASSIGN | 753 | 1 | 1 | 100.00 |
CONT_ASSIGN | 754 | 1 | 0 | 0.00 |
CONT_ASSIGN | 755 | 1 | 1 | 100.00 |
CONT_ASSIGN | 756 | 1 | 1 | 100.00 |
CONT_ASSIGN | 759 | 1 | 1 | 100.00 |
CONT_ASSIGN | 762 | 1 | 0 | 0.00 |
ALWAYS | 794 | 11 | 11 | 100.00 |
ALWAYS | 810 | 7 | 7 | 100.00 |
CONT_ASSIGN | 821 | 1 | 1 | 100.00 |
CONT_ASSIGN | 840 | 1 | 1 | 100.00 |
CONT_ASSIGN | 841 | 1 | 1 | 100.00 |
CONT_ASSIGN | 842 | 1 | 1 | 100.00 |
CONT_ASSIGN | 845 | 1 | 0 | 0.00 |
CONT_ASSIGN | 849 | 0 | 0 | |
CONT_ASSIGN | 888 | 1 | 1 | 100.00 |
ALWAYS | 947 | 0 | 0 | |
CONT_ASSIGN | 988 | 1 | 0 | 0.00 |
CONT_ASSIGN | 990 | 1 | 0 | 0.00 |
CONT_ASSIGN | 992 | 1 | 1 | 100.00 |
CONT_ASSIGN | 994 | 1 | 1 | 100.00 |
CONT_ASSIGN | 996 | 1 | 1 | 100.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
| Total | Covered | Percent |
Conditions | 28 | 25 | 89.29 |
Logical | 28 | 25 | 89.29 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 216
EXPRESSION (ibus_intg_err | dbus_intg_err | alert_major_bus)
------1------ ------2------ -------3-------
-1- | -2- | -3- | Status | Tests |
0 | 0 | 0 | Covered | T1,T2,T3 |
0 | 0 | 1 | Covered | T229,T217,T151 |
0 | 1 | 0 | Not Covered | |
1 | 0 | 0 | Not Covered | |
LINE 217
EXPRESSION (alert_major_internal | double_fault)
----------1--------- ------2-----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Covered | T246,T266,T267 |
1 | 0 | Covered | T163,T273,T227 |
LINE 348
EXPRESSION (fatal_core_err ? Off : local_fetch_enable_q)
-------1------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T246,T163,T273 |
LINE 737
EXPRESSION (reg2hw.alert_test.fatal_sw_err.q & reg2hw.alert_test.fatal_sw_err.qe)
----------------1--------------- ----------------2----------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T75,T227,T192 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T75,T76,T274 |
LINE 739
EXPRESSION (reg2hw.alert_test.recov_sw_err.q & reg2hw.alert_test.recov_sw_err.qe)
----------------1--------------- ----------------2----------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T75,T76,T274 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T75,T227,T192 |
LINE 741
EXPRESSION (reg2hw.alert_test.fatal_hw_err.q & reg2hw.alert_test.fatal_hw_err.qe)
----------------1--------------- ----------------2----------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T75,T227,T192 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T75,T76,T274 |
LINE 743
EXPRESSION (reg2hw.alert_test.recov_hw_err.q & reg2hw.alert_test.recov_hw_err.qe)
----------------1--------------- ----------------2----------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T75,T227,T192 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T75,T76,T274 |
LINE 755
EXPRESSION (intg_err | fatal_intg_err | fatal_core_err)
----1--- -------2------ -------3------
-1- | -2- | -3- | Status | Tests |
0 | 0 | 0 | Covered | T1,T2,T3 |
0 | 0 | 1 | Covered | T246,T163,T273 |
0 | 1 | 0 | Covered | T229,T217,T151 |
1 | 0 | 0 | Covered | T275,T276,T277 |
LINE 802
EXPRESSION (edn_req && edn_ack)
---1--- ---2---
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T2,T3,T5 |
1 | 1 | Covered | T2,T3,T4 |
Toggle Coverage for Instance : tb.dut.top_earlgrey.u_rv_core_ibex
| Total | Covered | Percent |
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
Name | Toggle | Toggle 1->0 | Tests | Toggle 0->1 | Tests | Direction | Exclude 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. | Total | Covered | Percent |
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- | Status | Tests |
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- | Status | Tests |
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- | Status | Tests |
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- | Status | Tests |
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- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T1,T2,T3 |
Assert Coverage for Instance : tb.dut.top_earlgrey.u_rv_core_ibex
Assertion Details
FpvSecCmIbexFetchEnable0_A
Name | Attempts | Real Successes | Failures | Incomplete |
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
Name | Attempts | Real Successes | Failures | Incomplete |
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
Name | Attempts | Real Successes | Failures | Incomplete |
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
Name | Attempts | Real Successes | Failures | Incomplete |
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
Name | Attempts | Real Successes | Failures | Incomplete |
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
Name | Attempts | Real Successes | Failures | Incomplete |
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
Name | Attempts | Real Successes | Failures | Incomplete |
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
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
491226693 |
0 |
0 |
0 |
FpvSecCmIbexPcMismatchCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
491226693 |
0 |
0 |
0 |
FpvSecCmIbexRfEccErrCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
491226693 |
0 |
0 |
0 |
FpvSecCmIbexStoreRespIntgErrCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
491226693 |
0 |
0 |
0 |
FpvSecCmRegWeOnehotCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
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
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
491226693 |
0 |
0 |
0 |
FpvSecCmRvCoreRegWeOnehotCheckRAddrB_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
491226693 |
0 |
0 |
0 |
FpvSecCmRvCoreRegWeOnehotCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
491226693 |
0 |
0 |
0 |
g_instr_intg_err_assert_signals.AssertConnected_A
Name | Attempts | Real Successes | Failures | Incomplete |
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
Name | Attempts | Real Successes | Failures | Incomplete |
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
Name | Attempts | Real Successes | Failures | Incomplete |
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
Name | Attempts | Real Successes | Failures | Incomplete |
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
Name | Attempts | Real Successes | Failures | Incomplete |
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
Name | Attempts | Real Successes | Failures | Incomplete |
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
Name | Attempts | Real Successes | Failures | Incomplete |
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 |