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: T1 T2 T3
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: T73 T75 T76
264 assign hw2reg.nmi_state.wdog.d = 1'b1;
265 1/1 assign hw2reg.nmi_state.wdog.de = wdog_irq_nm;
Tests: T253 T254 T255
266
267 logic irq_nm;
268 1/1 assign irq_nm = |(reg2hw.nmi_state & reg2hw.nmi_enable);
Tests: T73 T253 T75
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: T1 T2 T3
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: T232 T256 T257
514 1/1 assign crash_dump_o.prev_exception_pc = prev_exception_pc;
Tests: T232 T256 T257
515 1/1 assign crash_dump_o.prev_exception_addr = prev_exception_addr;
Tests: T232 T256 T257
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: T232 T256 T257
524 1/1 prev_exception_pc <= crash_dump.exception_pc;
Tests: T232 T256 T257
525 1/1 prev_exception_addr <= crash_dump.exception_addr;
Tests: T232 T256 T257
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: T200 T258 T259 | T200 T258 T259
705 2/2 assign ibus_region_cfg[i].matching_region = reg2hw.ibus_addr_matching[i];
Tests: T200 T258 T259 | T200 T258 T259
706 2/2 assign ibus_region_cfg[i].remap_addr = reg2hw.ibus_remap_addr[i];
Tests: T200 T258 T259 | T200 T258 T259
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: T200 T258 T259 | T200 T258 T259
711 2/2 assign dbus_region_cfg[i].matching_region = reg2hw.dbus_addr_matching[i];
Tests: T200 T258 T259 | T200 T258 T259
712 2/2 assign dbus_region_cfg[i].remap_addr = reg2hw.dbus_remap_addr[i];
Tests: T200 T258 T259 | T200 T258 T259
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: T1 T2 T3
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: T1 T2 T3
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: T110
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: T1 T2 T3
757
758 logic unused_alert_acks;
759 1/1 assign unused_alert_acks = |alert_acks;
Tests: T73 T232 T203
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: T1 T2 T3
795 1/1 rnd_data_d = rnd_data_q;
Tests: T1 T2 T3
796 1/1 rnd_fips_d = rnd_fips_q;
Tests: T1 T2 T3
797
798 1/1 if (reg2hw.rnd_data.re) begin
Tests: T1 T2 T3
799 1/1 rnd_valid_d = '0;
Tests: T25 T7 T4
800 1/1 rnd_data_d = '0;
Tests: T25 T7 T4
801 1/1 rnd_fips_d = '0;
Tests: T25 T7 T4
802 1/1 end else if (edn_req && edn_ack) begin
Tests: T1 T2 T3
803 1/1 rnd_valid_d = 1'b1;
Tests: T1 T2 T3
804 1/1 rnd_data_d = edn_data;
Tests: T1 T2 T3
805 1/1 rnd_fips_d = edn_fips;
Tests: T1 T2 T3
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: T1 T2 T3
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: T1 T2 T3
841 1/1 assign hw2reg.rnd_status.rnd_data_valid.d = rnd_valid_q;
Tests: T1 T2 T3
842 1/1 assign hw2reg.rnd_status.rnd_data_fips.d = rnd_fips_q;
Tests: T149 T260 T252
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 | T73,T203,T143 |
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 | T232,T256,T257 |
1 | 0 | Covered | T156,T261,T213 |
LINE 348
EXPRESSION (fatal_core_err ? Off : local_fetch_enable_q)
-------1------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T156,T261,T232 |
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 | T68,T213,T181 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T68,T69,T262 |
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 | T68,T69,T262 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T68,T213,T181 |
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 | T68,T213,T181 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T68,T69,T262 |
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 | T68,T213,T181 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T68,T69,T262 |
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 | T156,T261,T232 |
0 | 1 | 0 | Covered | T73,T203,T143 |
1 | 0 | 0 | Covered | T263,T112,T264 |
LINE 802
EXPRESSION (edn_req && edn_ack)
---1--- ---2---
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T25,T7,T4 |
1 | 1 | Covered | T1,T2,T3 |
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 |
T59,T60,T72 |
Yes |
T1,T2,T3 |
INPUT |
clk_edn_i |
Yes |
Yes |
T1,T2,T3 |
Yes |
T1,T2,T3 |
INPUT |
rst_edn_ni |
Yes |
Yes |
T59,T60,T72 |
Yes |
T1,T2,T3 |
INPUT |
clk_esc_i |
Yes |
Yes |
T1,T2,T3 |
Yes |
T1,T2,T3 |
INPUT |
rst_esc_ni |
Yes |
Yes |
T59,T60,T72 |
Yes |
T1,T2,T3 |
INPUT |
rst_cpu_n_o |
Yes |
Yes |
T59,T60,T72 |
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 |
T85,T86,T89 |
Yes |
T84,T85,T86 |
OUTPUT |
corei_tl_h_o.a_user.data_intg[6:0] |
Yes |
Yes |
T84,T85,T86 |
Yes |
T84,T85,T86 |
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 |
T86,T89,T155 |
Yes |
T84,T86,T89 |
OUTPUT |
corei_tl_h_o.a_user.rsvd[4:0] |
Unreachable |
Unreachable |
|
Unreachable |
|
OUTPUT |
corei_tl_h_o.a_data[31:0] |
Yes |
Yes |
T84,T85,T86 |
Yes |
T84,T85,T86 |
OUTPUT |
corei_tl_h_o.a_mask[3:0] |
Yes |
Yes |
T84,T85,T86 |
Yes |
T84,T85,T86 |
OUTPUT |
corei_tl_h_o.a_address[31:0] |
Yes |
Yes |
T84,T85,T86 |
Yes |
T84,T85,T86 |
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 |
T84,T85,T86 |
Yes |
T84,T85,T86 |
OUTPUT |
corei_tl_h_o.a_param[2:0] |
Unreachable |
Unreachable |
|
Unreachable |
|
OUTPUT |
corei_tl_h_o.a_opcode[2:0] |
Yes |
Yes |
T84,T85,T86 |
Yes |
T84,T85,T86 |
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 |
T75,T214,T231 |
Yes |
T75,T214,T231 |
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 |
T73,T75,T214 |
Yes |
T73,T75,T214 |
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 |
T84,T85,T86 |
Yes |
T84,T85,T86 |
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 |
T84,T85,T86 |
Yes |
T84,T85,T86 |
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 |
T58,T88,T41 |
Yes |
T58,T88,T41 |
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 |
T88,T220,T86 |
Yes |
T88,T220,T86 |
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 |
T88,T220,T84 |
Yes |
T88,T220,T84 |
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 |
T88,T220,T84 |
Yes |
T88,T220,T84 |
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 |
T73,T75,T232 |
Yes |
T73,T75,T232 |
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 |
T84,T85,T86 |
Yes |
T84,T85,T86 |
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 |
T84,T85,T86 |
Yes |
T84,T85,T86 |
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 |
T265,T266,T267 |
Yes |
T265,T266,T267 |
INPUT |
irq_timer_i |
Yes |
Yes |
T121,T122,T123 |
Yes |
T121,T122,T123 |
INPUT |
irq_external_i |
Yes |
Yes |
T4,T5,T6 |
Yes |
T4,T5,T6 |
INPUT |
esc_tx_i.esc_n |
Yes |
Yes |
T73,T75,T76 |
Yes |
T73,T75,T76 |
INPUT |
esc_tx_i.esc_p |
Yes |
Yes |
T73,T75,T76 |
Yes |
T73,T75,T76 |
INPUT |
esc_rx_o.resp_n |
Yes |
Yes |
T73,T75,T76 |
Yes |
T73,T75,T76 |
OUTPUT |
esc_rx_o.resp_p |
Yes |
Yes |
T73,T75,T76 |
Yes |
T73,T75,T76 |
OUTPUT |
nmi_wdog_i |
Yes |
Yes |
T253,T254,T255 |
Yes |
T253,T254,T255 |
INPUT |
debug_req_i |
Yes |
Yes |
T87,T23,T268 |
Yes |
T87,T23,T268 |
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 |
T72,T73,T74 |
Yes |
T1,T2,T3 |
INPUT |
pwrmgr_cpu_en_i[3:0] |
Yes |
Yes |
T25,T4,T6 |
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 |
*T85,*T91,*T89 |
Yes |
T85,T91,T89 |
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 |
*T84,*T85,*T91 |
Yes |
T84,T85,T91 |
INPUT |
cfg_tl_d_i.a_source[7:6] |
Unreachable |
Unreachable |
|
Unreachable |
|
INPUT |
cfg_tl_d_i.a_size[1:0] |
Yes |
Yes |
T85,T89,T155 |
Yes |
T85,T89,T155 |
INPUT |
cfg_tl_d_i.a_param[2:0] |
Unreachable |
Unreachable |
|
Unreachable |
|
INPUT |
cfg_tl_d_i.a_opcode[2:0] |
Yes |
Yes |
T91,T89,T90 |
Yes |
T91,T89,T90 |
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 |
T85,T91,T89 |
Yes |
T85,T91,T89 |
OUTPUT |
cfg_tl_d_o.d_user.data_intg[6:0] |
Yes |
Yes |
T25,T7,T4 |
Yes |
T25,T7,T4 |
OUTPUT |
cfg_tl_d_o.d_user.rsp_intg[6:0] |
Yes |
Yes |
T1,T2,T3 |
Yes |
T1,T2,T3 |
OUTPUT |
cfg_tl_d_o.d_data[31:0] |
Yes |
Yes |
T25,T7,T4 |
Yes |
T25,T7,T4 |
OUTPUT |
cfg_tl_d_o.d_sink |
Yes |
Yes |
T84,T85,T91 |
Yes |
T85,T89,T155 |
OUTPUT |
cfg_tl_d_o.d_source[5:0] |
Yes |
Yes |
*T89,*T90,*T155 |
Yes |
T84,T85,T91 |
OUTPUT |
cfg_tl_d_o.d_source[7:6] |
Unreachable |
Unreachable |
|
Unreachable |
|
OUTPUT |
cfg_tl_d_o.d_size[1:0] |
Yes |
Yes |
T85,T89,T90 |
Yes |
T84,T85,T89 |
OUTPUT |
cfg_tl_d_o.d_param[2:0] |
Unreachable |
Unreachable |
|
Unreachable |
|
OUTPUT |
cfg_tl_d_o.d_opcode[0] |
Yes |
Yes |
*T1,*T2,*T3 |
Yes |
T1,T2,T3 |
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 |
T1,T2,T3 |
Yes |
T1,T2,T3 |
OUTPUT |
edn_i.edn_bus[31:0] |
Yes |
Yes |
T6,T118,T72 |
Yes |
T25,T7,T99 |
INPUT |
edn_i.edn_fips |
Yes |
Yes |
T149,T269,T135 |
Yes |
T149,T260,T252 |
INPUT |
edn_i.edn_ack |
Yes |
Yes |
T1,T2,T3 |
Yes |
T1,T2,T3 |
INPUT |
clk_otp_i |
Yes |
Yes |
T1,T2,T3 |
Yes |
T1,T2,T3 |
INPUT |
rst_otp_ni |
Yes |
Yes |
T59,T60,T72 |
Yes |
T1,T2,T3 |
INPUT |
icache_otp_key_o.req |
Yes |
Yes |
T199,T200,T201 |
Yes |
T199,T200,T201 |
OUTPUT |
icache_otp_key_i.seed_valid |
Yes |
Yes |
T72,T73,T74 |
Yes |
T1,T2,T3 |
INPUT |
icache_otp_key_i.nonce[127:0] |
Yes |
Yes |
T25,T46,T63 |
Yes |
T25,T7,T99 |
INPUT |
icache_otp_key_i.key[127:0] |
Yes |
Yes |
T3,T25,T7 |
Yes |
T46,T101,T63 |
INPUT |
icache_otp_key_i.ack |
Yes |
Yes |
T200,T201,T202 |
Yes |
T200,T201,T202 |
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 |
T68,T92,T93 |
Yes |
T68,T92,T93 |
INPUT |
alert_rx_i[0].ping_n |
Yes |
Yes |
T92,T93,T94 |
Yes |
T92,T93,T94 |
INPUT |
alert_rx_i[0].ping_p |
Yes |
Yes |
T92,T93,T94 |
Yes |
T92,T93,T94 |
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 |
T68,T92,T213 |
Yes |
T68,T92,T213 |
INPUT |
alert_rx_i[1].ping_n |
Yes |
Yes |
T92,T93,T94 |
Yes |
T92,T93,T94 |
INPUT |
alert_rx_i[1].ping_p |
Yes |
Yes |
T92,T93,T94 |
Yes |
T92,T93,T94 |
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 |
T73,T232,T68 |
Yes |
T73,T232,T68 |
INPUT |
alert_rx_i[2].ping_n |
Yes |
Yes |
T92,T93,T94 |
Yes |
T93,T94,T180 |
INPUT |
alert_rx_i[2].ping_p |
Yes |
Yes |
T93,T94,T180 |
Yes |
T92,T93,T94 |
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 |
T68,T92,T93 |
Yes |
T68,T92,T93 |
INPUT |
alert_rx_i[3].ping_n |
Yes |
Yes |
T92,T93,T94 |
Yes |
T93,T94,T180 |
INPUT |
alert_rx_i[3].ping_p |
Yes |
Yes |
T93,T94,T180 |
Yes |
T92,T93,T94 |
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 |
T68,T92,T93 |
Yes |
T68,T92,T93 |
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 |
T68,T92,T213 |
Yes |
T68,T92,T213 |
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 |
T73,T232,T68 |
Yes |
T73,T232,T68 |
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 |
T68,T92,T93 |
Yes |
T68,T92,T93 |
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 |
T156,T261,T232 |
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 |
T232,T256,T257 |
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 |
T25,T7,T4 |
0 |
1 |
Covered |
T1,T2,T3 |
0 |
0 |
Covered |
T1,T2,T3 |
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 |
482982954 |
8 |
0 |
0 |
T43 |
252188 |
0 |
0 |
0 |
T68 |
102939 |
0 |
0 |
0 |
T114 |
0 |
1 |
0 |
0 |
T125 |
608679 |
0 |
0 |
0 |
T134 |
174017 |
0 |
0 |
0 |
T203 |
144342 |
0 |
0 |
0 |
T231 |
276942 |
0 |
0 |
0 |
T232 |
308430 |
1 |
0 |
0 |
T235 |
444152 |
0 |
0 |
0 |
T256 |
0 |
1 |
0 |
0 |
T257 |
0 |
1 |
0 |
0 |
T270 |
0 |
1 |
0 |
0 |
T271 |
0 |
1 |
0 |
0 |
T272 |
0 |
1 |
0 |
0 |
T273 |
0 |
1 |
0 |
0 |
T274 |
184921 |
0 |
0 |
0 |
T275 |
103997 |
0 |
0 |
0 |
FpvSecCmIbexFetchEnable1_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
482982954 |
24223584 |
0 |
102 |
T1 |
90199 |
9927 |
0 |
0 |
T2 |
96900 |
9919 |
0 |
0 |
T3 |
57421 |
9927 |
0 |
0 |
T4 |
81721 |
9931 |
0 |
0 |
T7 |
91544 |
9927 |
0 |
0 |
T24 |
0 |
0 |
0 |
2 |
T25 |
94967 |
9931 |
0 |
0 |
T46 |
65559 |
9919 |
0 |
0 |
T58 |
0 |
0 |
0 |
2 |
T59 |
0 |
0 |
0 |
2 |
T60 |
0 |
0 |
0 |
2 |
T72 |
0 |
0 |
0 |
2 |
T88 |
0 |
0 |
0 |
2 |
T99 |
66193 |
9919 |
0 |
0 |
T100 |
42210 |
9927 |
0 |
0 |
T101 |
94759 |
9927 |
0 |
0 |
T184 |
0 |
0 |
0 |
2 |
T185 |
0 |
0 |
0 |
2 |
T192 |
0 |
0 |
0 |
2 |
T276 |
0 |
0 |
0 |
2 |
FpvSecCmIbexFetchEnable2_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
482982954 |
64014610 |
0 |
90 |
T1 |
90199 |
34775 |
0 |
0 |
T2 |
96900 |
34775 |
0 |
0 |
T3 |
57421 |
34775 |
0 |
0 |
T4 |
81721 |
36301 |
0 |
0 |
T7 |
91544 |
34775 |
0 |
0 |
T24 |
0 |
0 |
0 |
2 |
T25 |
94967 |
34780 |
0 |
2 |
T46 |
65559 |
34775 |
0 |
0 |
T58 |
0 |
0 |
0 |
2 |
T59 |
0 |
0 |
0 |
2 |
T60 |
0 |
0 |
0 |
2 |
T72 |
0 |
0 |
0 |
2 |
T88 |
0 |
0 |
0 |
2 |
T97 |
0 |
0 |
0 |
2 |
T99 |
66193 |
34771 |
0 |
0 |
T100 |
42210 |
34775 |
0 |
0 |
T101 |
94759 |
34775 |
0 |
0 |
T192 |
0 |
0 |
0 |
2 |
T277 |
0 |
0 |
0 |
2 |
FpvSecCmIbexFetchEnable3Rev_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
482982954 |
414431499 |
0 |
2000 |
T1 |
90199 |
55363 |
0 |
2 |
T2 |
96900 |
62067 |
0 |
2 |
T3 |
57421 |
22581 |
0 |
2 |
T4 |
81721 |
45358 |
0 |
2 |
T7 |
91544 |
56708 |
0 |
2 |
T25 |
94967 |
60122 |
0 |
2 |
T46 |
65559 |
30730 |
0 |
2 |
T99 |
66193 |
31369 |
0 |
2 |
T100 |
42210 |
7374 |
0 |
2 |
T101 |
94759 |
59923 |
0 |
2 |
FpvSecCmIbexFetchEnable3_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
482982954 |
414433357 |
0 |
1890 |
T1 |
90199 |
55364 |
0 |
2 |
T2 |
96900 |
62068 |
0 |
2 |
T3 |
57421 |
22582 |
0 |
2 |
T4 |
81721 |
45360 |
0 |
2 |
T5 |
0 |
0 |
0 |
2 |
T7 |
91544 |
56709 |
0 |
2 |
T25 |
94967 |
60123 |
0 |
0 |
T46 |
65559 |
30731 |
0 |
2 |
T99 |
66193 |
31369 |
0 |
2 |
T100 |
42210 |
7375 |
0 |
2 |
T101 |
94759 |
59924 |
0 |
2 |
FpvSecCmIbexInstrIntgErrCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
482982954 |
229 |
0 |
0 |
T50 |
461920 |
0 |
0 |
0 |
T95 |
222160 |
0 |
0 |
0 |
T245 |
814960 |
0 |
0 |
0 |
T278 |
316403 |
77 |
0 |
0 |
T279 |
0 |
76 |
0 |
0 |
T280 |
0 |
76 |
0 |
0 |
T281 |
230612 |
0 |
0 |
0 |
T282 |
239452 |
0 |
0 |
0 |
T283 |
247770 |
0 |
0 |
0 |
T284 |
150610 |
0 |
0 |
0 |
T285 |
118703 |
0 |
0 |
0 |
T286 |
307358 |
0 |
0 |
0 |
FpvSecCmIbexLoadRespIntgErrCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
482982954 |
585 |
0 |
0 |
T8 |
257511 |
0 |
0 |
0 |
T39 |
216796 |
0 |
0 |
0 |
T73 |
250530 |
1 |
0 |
0 |
T74 |
167810 |
0 |
0 |
0 |
T140 |
212770 |
0 |
0 |
0 |
T143 |
0 |
32 |
0 |
0 |
T144 |
0 |
32 |
0 |
0 |
T175 |
77866 |
0 |
0 |
0 |
T176 |
111076 |
0 |
0 |
0 |
T177 |
227513 |
0 |
0 |
0 |
T185 |
37973 |
0 |
0 |
0 |
T197 |
0 |
32 |
0 |
0 |
T203 |
0 |
100 |
0 |
0 |
T253 |
138508 |
0 |
0 |
0 |
T287 |
0 |
1 |
0 |
0 |
T288 |
0 |
97 |
0 |
0 |
T289 |
0 |
31 |
0 |
0 |
T290 |
0 |
32 |
0 |
0 |
T291 |
0 |
32 |
0 |
0 |
FpvSecCmIbexLockstepResetCountAlertCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
482982954 |
0 |
0 |
0 |
FpvSecCmIbexPcMismatchCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
482982954 |
0 |
0 |
0 |
FpvSecCmIbexRfEccErrCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
482982954 |
0 |
0 |
0 |
FpvSecCmIbexStoreRespIntgErrCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
482982954 |
0 |
0 |
0 |
FpvSecCmRegWeOnehotCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
482982954 |
6 |
0 |
0 |
T112 |
0 |
1 |
0 |
0 |
T263 |
131488 |
1 |
0 |
0 |
T264 |
0 |
1 |
0 |
0 |
T292 |
0 |
1 |
0 |
0 |
T293 |
0 |
1 |
0 |
0 |
T294 |
0 |
1 |
0 |
0 |
T295 |
944096 |
0 |
0 |
0 |
T296 |
646066 |
0 |
0 |
0 |
T297 |
275401 |
0 |
0 |
0 |
T298 |
162301 |
0 |
0 |
0 |
T299 |
222650 |
0 |
0 |
0 |
T300 |
233777 |
0 |
0 |
0 |
T301 |
135857 |
0 |
0 |
0 |
T302 |
280753 |
0 |
0 |
0 |
T303 |
253463 |
0 |
0 |
0 |
FpvSecCmRvCoreRegWeOnehotCheckRAddrA_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
482982954 |
0 |
0 |
0 |
FpvSecCmRvCoreRegWeOnehotCheckRAddrB_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
482982954 |
0 |
0 |
0 |
FpvSecCmRvCoreRegWeOnehotCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
482982954 |
0 |
0 |
0 |
g_instr_intg_err_assert_signals.AssertConnected_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1007 |
1007 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T4 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T25 |
1 |
1 |
0 |
0 |
T46 |
1 |
1 |
0 |
0 |
T99 |
1 |
1 |
0 |
0 |
T100 |
1 |
1 |
0 |
0 |
T101 |
1 |
1 |
0 |
0 |
g_lsu_load_resp_intg_err_assert_signals.AssertConnected_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1007 |
1007 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T4 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T25 |
1 |
1 |
0 |
0 |
T46 |
1 |
1 |
0 |
0 |
T99 |
1 |
1 |
0 |
0 |
T100 |
1 |
1 |
0 |
0 |
T101 |
1 |
1 |
0 |
0 |
g_lsu_store_resp_intg_err_assert_signals.AssertConnected_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1007 |
1007 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T4 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T25 |
1 |
1 |
0 |
0 |
T46 |
1 |
1 |
0 |
0 |
T99 |
1 |
1 |
0 |
0 |
T100 |
1 |
1 |
0 |
0 |
T101 |
1 |
1 |
0 |
0 |
g_pc_mismatch_alert_o_assert_signals.AssertConnected_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1007 |
1007 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T4 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T25 |
1 |
1 |
0 |
0 |
T46 |
1 |
1 |
0 |
0 |
T99 |
1 |
1 |
0 |
0 |
T100 |
1 |
1 |
0 |
0 |
T101 |
1 |
1 |
0 |
0 |
g_rf_ecc_err_comb_assert_signals.AssertConnected_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1007 |
1007 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T4 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T25 |
1 |
1 |
0 |
0 |
T46 |
1 |
1 |
0 |
0 |
T99 |
1 |
1 |
0 |
0 |
T100 |
1 |
1 |
0 |
0 |
T101 |
1 |
1 |
0 |
0 |
gen_icache_scramble_asserts.IbexIcacheScrambleKeyForwardedToCore_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
482982954 |
210 |
0 |
0 |
T87 |
217949 |
0 |
0 |
0 |
T200 |
86513 |
33 |
0 |
0 |
T201 |
81934 |
49 |
0 |
0 |
T202 |
0 |
21 |
0 |
0 |
T237 |
547018 |
0 |
0 |
0 |
T258 |
0 |
32 |
0 |
0 |
T259 |
0 |
33 |
0 |
0 |
T304 |
0 |
42 |
0 |
0 |
T305 |
664514 |
0 |
0 |
0 |
T306 |
111782 |
0 |
0 |
0 |
T307 |
59593 |
0 |
0 |
0 |
T308 |
192184 |
0 |
0 |
0 |
T309 |
328626 |
0 |
0 |
0 |
T310 |
72576 |
0 |
0 |
0 |
gen_icache_scramble_asserts.IbexIcacheScrambleKeyRequestAfterFenceI_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
482982954 |
201 |
0 |
0 |
T54 |
106062 |
0 |
0 |
0 |
T122 |
185647 |
0 |
0 |
0 |
T145 |
205864 |
0 |
0 |
0 |
T198 |
321900 |
0 |
0 |
0 |
T199 |
310540 |
16 |
0 |
0 |
T200 |
0 |
42 |
0 |
0 |
T201 |
0 |
12 |
0 |
0 |
T202 |
0 |
5 |
0 |
0 |
T258 |
0 |
42 |
0 |
0 |
T259 |
0 |
42 |
0 |
0 |
T304 |
0 |
10 |
0 |
0 |
T311 |
0 |
16 |
0 |
0 |
T312 |
0 |
16 |
0 |
0 |
T313 |
609427 |
0 |
0 |
0 |
T314 |
191932 |
0 |
0 |
0 |
T315 |
64282 |
0 |
0 |
0 |
T316 |
482298 |
0 |
0 |
0 |
T317 |
442604 |
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: T1 T2 T3
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: T73 T75 T76
264 assign hw2reg.nmi_state.wdog.d = 1'b1;
265 1/1 assign hw2reg.nmi_state.wdog.de = wdog_irq_nm;
Tests: T253 T254 T255
266
267 logic irq_nm;
268 1/1 assign irq_nm = |(reg2hw.nmi_state & reg2hw.nmi_enable);
Tests: T73 T253 T75
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: T1 T2 T3
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: T232 T256 T257
514 1/1 assign crash_dump_o.prev_exception_pc = prev_exception_pc;
Tests: T232 T256 T257
515 1/1 assign crash_dump_o.prev_exception_addr = prev_exception_addr;
Tests: T232 T256 T257
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: T232 T256 T257
524 1/1 prev_exception_pc <= crash_dump.exception_pc;
Tests: T232 T256 T257
525 1/1 prev_exception_addr <= crash_dump.exception_addr;
Tests: T232 T256 T257
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: T200 T258 T259 | T200 T258 T259
705 2/2 assign ibus_region_cfg[i].matching_region = reg2hw.ibus_addr_matching[i];
Tests: T200 T258 T259 | T200 T258 T259
706 2/2 assign ibus_region_cfg[i].remap_addr = reg2hw.ibus_remap_addr[i];
Tests: T200 T258 T259 | T200 T258 T259
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: T200 T258 T259 | T200 T258 T259
711 2/2 assign dbus_region_cfg[i].matching_region = reg2hw.dbus_addr_matching[i];
Tests: T200 T258 T259 | T200 T258 T259
712 2/2 assign dbus_region_cfg[i].remap_addr = reg2hw.dbus_remap_addr[i];
Tests: T200 T258 T259 | T200 T258 T259
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: T1 T2 T3
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: T1 T2 T3
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: T110
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: T1 T2 T3
757
758 logic unused_alert_acks;
759 1/1 assign unused_alert_acks = |alert_acks;
Tests: T73 T232 T203
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: T1 T2 T3
795 1/1 rnd_data_d = rnd_data_q;
Tests: T1 T2 T3
796 1/1 rnd_fips_d = rnd_fips_q;
Tests: T1 T2 T3
797
798 1/1 if (reg2hw.rnd_data.re) begin
Tests: T1 T2 T3
799 1/1 rnd_valid_d = '0;
Tests: T25 T7 T4
800 1/1 rnd_data_d = '0;
Tests: T25 T7 T4
801 1/1 rnd_fips_d = '0;
Tests: T25 T7 T4
802 1/1 end else if (edn_req && edn_ack) begin
Tests: T1 T2 T3
803 1/1 rnd_valid_d = 1'b1;
Tests: T1 T2 T3
804 1/1 rnd_data_d = edn_data;
Tests: T1 T2 T3
805 1/1 rnd_fips_d = edn_fips;
Tests: T1 T2 T3
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: T1 T2 T3
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: T1 T2 T3
841 1/1 assign hw2reg.rnd_status.rnd_data_valid.d = rnd_valid_q;
Tests: T1 T2 T3
842 1/1 assign hw2reg.rnd_status.rnd_data_fips.d = rnd_fips_q;
Tests: T149 T260 T252
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 | T73,T203,T143 |
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 | T232,T256,T257 |
1 | 0 | Covered | T156,T261,T213 |
LINE 348
EXPRESSION (fatal_core_err ? Off : local_fetch_enable_q)
-------1------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T156,T261,T232 |
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 | T68,T213,T181 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T68,T69,T262 |
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 | T68,T69,T262 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T68,T213,T181 |
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 | T68,T213,T181 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T68,T69,T262 |
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 | T68,T213,T181 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T68,T69,T262 |
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 | T156,T261,T232 |
0 | 1 | 0 | Covered | T73,T203,T143 |
1 | 0 | 0 | Covered | T263,T112,T264 |
LINE 802
EXPRESSION (edn_req && edn_ack)
---1--- ---2---
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T25,T7,T4 |
1 | 1 | Covered | T1,T2,T3 |
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 |
T59,T60,T72 |
Yes |
T1,T2,T3 |
INPUT |
|
clk_edn_i |
Yes |
Yes |
T1,T2,T3 |
Yes |
T1,T2,T3 |
INPUT |
|
rst_edn_ni |
Yes |
Yes |
T59,T60,T72 |
Yes |
T1,T2,T3 |
INPUT |
|
clk_esc_i |
Yes |
Yes |
T1,T2,T3 |
Yes |
T1,T2,T3 |
INPUT |
|
rst_esc_ni |
Yes |
Yes |
T59,T60,T72 |
Yes |
T1,T2,T3 |
INPUT |
|
rst_cpu_n_o |
Yes |
Yes |
T59,T60,T72 |
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 |
T85,T86,T89 |
Yes |
T84,T85,T86 |
OUTPUT |
|
corei_tl_h_o.a_user.data_intg[6:0] |
Yes |
Yes |
T84,T85,T86 |
Yes |
T84,T85,T86 |
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 |
T86,T89,T155 |
Yes |
T84,T86,T89 |
OUTPUT |
|
corei_tl_h_o.a_user.rsvd[4:0] |
Unreachable |
Unreachable |
|
Unreachable |
|
OUTPUT |
|
corei_tl_h_o.a_data[31:0] |
Yes |
Yes |
T84,T85,T86 |
Yes |
T84,T85,T86 |
OUTPUT |
|
corei_tl_h_o.a_mask[3:0] |
Yes |
Yes |
T84,T85,T86 |
Yes |
T84,T85,T86 |
OUTPUT |
|
corei_tl_h_o.a_address[31:0] |
Yes |
Yes |
T84,T85,T86 |
Yes |
T84,T85,T86 |
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 |
T84,T85,T86 |
Yes |
T84,T85,T86 |
OUTPUT |
|
corei_tl_h_o.a_param[2:0] |
Unreachable |
Unreachable |
|
Unreachable |
|
OUTPUT |
|
corei_tl_h_o.a_opcode[2:0] |
Yes |
Yes |
T84,T85,T86 |
Yes |
T84,T85,T86 |
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 |
T75,T214,T231 |
Yes |
T75,T214,T231 |
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 |
T73,T75,T214 |
Yes |
T73,T75,T214 |
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 |
T84,T85,T86 |
Yes |
T84,T85,T86 |
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 |
T84,T85,T86 |
Yes |
T84,T85,T86 |
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 |
T58,T88,T41 |
Yes |
T58,T88,T41 |
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 |
T88,T220,T86 |
Yes |
T88,T220,T86 |
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 |
T88,T220,T84 |
Yes |
T88,T220,T84 |
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 |
T88,T220,T84 |
Yes |
T88,T220,T84 |
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 |
T73,T75,T232 |
Yes |
T73,T75,T232 |
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 |
T84,T85,T86 |
Yes |
T84,T85,T86 |
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 |
T84,T85,T86 |
Yes |
T84,T85,T86 |
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 |
T265,T266,T267 |
Yes |
T265,T266,T267 |
INPUT |
|
irq_timer_i |
Yes |
Yes |
T121,T122,T123 |
Yes |
T121,T122,T123 |
INPUT |
|
irq_external_i |
Yes |
Yes |
T4,T5,T6 |
Yes |
T4,T5,T6 |
INPUT |
|
esc_tx_i.esc_n |
Yes |
Yes |
T73,T75,T76 |
Yes |
T73,T75,T76 |
INPUT |
|
esc_tx_i.esc_p |
Yes |
Yes |
T73,T75,T76 |
Yes |
T73,T75,T76 |
INPUT |
|
esc_rx_o.resp_n |
Yes |
Yes |
T73,T75,T76 |
Yes |
T73,T75,T76 |
OUTPUT |
|
esc_rx_o.resp_p |
Yes |
Yes |
T73,T75,T76 |
Yes |
T73,T75,T76 |
OUTPUT |
|
nmi_wdog_i |
Yes |
Yes |
T253,T254,T255 |
Yes |
T253,T254,T255 |
INPUT |
|
debug_req_i |
Yes |
Yes |
T87,T23,T268 |
Yes |
T87,T23,T268 |
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 |
T72,T73,T74 |
Yes |
T1,T2,T3 |
INPUT |
|
pwrmgr_cpu_en_i[3:0] |
Yes |
Yes |
T25,T4,T6 |
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 |
*T85,*T91,*T89 |
Yes |
T85,T91,T89 |
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 |
*T84,*T85,*T91 |
Yes |
T84,T85,T91 |
INPUT |
|
cfg_tl_d_i.a_source[7:6] |
Unreachable |
Unreachable |
|
Unreachable |
|
INPUT |
|
cfg_tl_d_i.a_size[1:0] |
Yes |
Yes |
T85,T89,T155 |
Yes |
T85,T89,T155 |
INPUT |
|
cfg_tl_d_i.a_param[2:0] |
Unreachable |
Unreachable |
|
Unreachable |
|
INPUT |
|
cfg_tl_d_i.a_opcode[2:0] |
Yes |
Yes |
T91,T89,T90 |
Yes |
T91,T89,T90 |
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 |
T85,T91,T89 |
Yes |
T85,T91,T89 |
OUTPUT |
|
cfg_tl_d_o.d_user.data_intg[6:0] |
Yes |
Yes |
T25,T7,T4 |
Yes |
T25,T7,T4 |
OUTPUT |
|
cfg_tl_d_o.d_user.rsp_intg[6:0] |
Yes |
Yes |
T1,T2,T3 |
Yes |
T1,T2,T3 |
OUTPUT |
|
cfg_tl_d_o.d_data[31:0] |
Yes |
Yes |
T25,T7,T4 |
Yes |
T25,T7,T4 |
OUTPUT |
|
cfg_tl_d_o.d_sink |
Yes |
Yes |
T84,T85,T91 |
Yes |
T85,T89,T155 |
OUTPUT |
|
cfg_tl_d_o.d_source[5:0] |
Yes |
Yes |
*T89,*T90,*T155 |
Yes |
T84,T85,T91 |
OUTPUT |
|
cfg_tl_d_o.d_source[7:6] |
Unreachable |
Unreachable |
|
Unreachable |
|
OUTPUT |
|
cfg_tl_d_o.d_size[1:0] |
Yes |
Yes |
T85,T89,T90 |
Yes |
T84,T85,T89 |
OUTPUT |
|
cfg_tl_d_o.d_param[2:0] |
Unreachable |
Unreachable |
|
Unreachable |
|
OUTPUT |
|
cfg_tl_d_o.d_opcode[0] |
Yes |
Yes |
*T1,*T2,*T3 |
Yes |
T1,T2,T3 |
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 |
T1,T2,T3 |
Yes |
T1,T2,T3 |
OUTPUT |
|
edn_i.edn_bus[31:0] |
Yes |
Yes |
T6,T118,T72 |
Yes |
T25,T7,T99 |
INPUT |
|
edn_i.edn_fips |
Yes |
Yes |
T149,T269,T135 |
Yes |
T149,T260,T252 |
INPUT |
|
edn_i.edn_ack |
Yes |
Yes |
T1,T2,T3 |
Yes |
T1,T2,T3 |
INPUT |
|
clk_otp_i |
Yes |
Yes |
T1,T2,T3 |
Yes |
T1,T2,T3 |
INPUT |
|
rst_otp_ni |
Yes |
Yes |
T59,T60,T72 |
Yes |
T1,T2,T3 |
INPUT |
|
icache_otp_key_o.req |
Yes |
Yes |
T199,T200,T201 |
Yes |
T199,T200,T201 |
OUTPUT |
|
icache_otp_key_i.seed_valid |
Yes |
Yes |
T72,T73,T74 |
Yes |
T1,T2,T3 |
INPUT |
|
icache_otp_key_i.nonce[127:0] |
Yes |
Yes |
T25,T46,T63 |
Yes |
T25,T7,T99 |
INPUT |
|
icache_otp_key_i.key[127:0] |
Yes |
Yes |
T3,T25,T7 |
Yes |
T46,T101,T63 |
INPUT |
|
icache_otp_key_i.ack |
Yes |
Yes |
T200,T201,T202 |
Yes |
T200,T201,T202 |
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 |
T68,T92,T93 |
Yes |
T68,T92,T93 |
INPUT |
|
alert_rx_i[0].ping_n |
Yes |
Yes |
T92,T93,T94 |
Yes |
T92,T93,T94 |
INPUT |
|
alert_rx_i[0].ping_p |
Yes |
Yes |
T92,T93,T94 |
Yes |
T92,T93,T94 |
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 |
T68,T92,T213 |
Yes |
T68,T92,T213 |
INPUT |
|
alert_rx_i[1].ping_n |
Yes |
Yes |
T92,T93,T94 |
Yes |
T92,T93,T94 |
INPUT |
|
alert_rx_i[1].ping_p |
Yes |
Yes |
T92,T93,T94 |
Yes |
T92,T93,T94 |
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 |
T73,T232,T68 |
Yes |
T73,T232,T68 |
INPUT |
|
alert_rx_i[2].ping_n |
Yes |
Yes |
T92,T93,T94 |
Yes |
T93,T94,T180 |
INPUT |
|
alert_rx_i[2].ping_p |
Yes |
Yes |
T93,T94,T180 |
Yes |
T92,T93,T94 |
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 |
T68,T92,T93 |
Yes |
T68,T92,T93 |
INPUT |
|
alert_rx_i[3].ping_n |
Yes |
Yes |
T92,T93,T94 |
Yes |
T93,T94,T180 |
INPUT |
|
alert_rx_i[3].ping_p |
Yes |
Yes |
T93,T94,T180 |
Yes |
T92,T93,T94 |
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 |
T68,T92,T93 |
Yes |
T68,T92,T93 |
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 |
T68,T92,T213 |
Yes |
T68,T92,T213 |
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 |
T73,T232,T68 |
Yes |
T73,T232,T68 |
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 |
T68,T92,T93 |
Yes |
T68,T92,T93 |
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 |
T156,T261,T232 |
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 |
T232,T256,T257 |
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 |
T25,T7,T4 |
0 |
1 |
Covered |
T1,T2,T3 |
0 |
0 |
Covered |
T1,T2,T3 |
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 |
482982954 |
8 |
0 |
0 |
T43 |
252188 |
0 |
0 |
0 |
T68 |
102939 |
0 |
0 |
0 |
T114 |
0 |
1 |
0 |
0 |
T125 |
608679 |
0 |
0 |
0 |
T134 |
174017 |
0 |
0 |
0 |
T203 |
144342 |
0 |
0 |
0 |
T231 |
276942 |
0 |
0 |
0 |
T232 |
308430 |
1 |
0 |
0 |
T235 |
444152 |
0 |
0 |
0 |
T256 |
0 |
1 |
0 |
0 |
T257 |
0 |
1 |
0 |
0 |
T270 |
0 |
1 |
0 |
0 |
T271 |
0 |
1 |
0 |
0 |
T272 |
0 |
1 |
0 |
0 |
T273 |
0 |
1 |
0 |
0 |
T274 |
184921 |
0 |
0 |
0 |
T275 |
103997 |
0 |
0 |
0 |
FpvSecCmIbexFetchEnable1_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
482982954 |
24223584 |
0 |
102 |
T1 |
90199 |
9927 |
0 |
0 |
T2 |
96900 |
9919 |
0 |
0 |
T3 |
57421 |
9927 |
0 |
0 |
T4 |
81721 |
9931 |
0 |
0 |
T7 |
91544 |
9927 |
0 |
0 |
T24 |
0 |
0 |
0 |
2 |
T25 |
94967 |
9931 |
0 |
0 |
T46 |
65559 |
9919 |
0 |
0 |
T58 |
0 |
0 |
0 |
2 |
T59 |
0 |
0 |
0 |
2 |
T60 |
0 |
0 |
0 |
2 |
T72 |
0 |
0 |
0 |
2 |
T88 |
0 |
0 |
0 |
2 |
T99 |
66193 |
9919 |
0 |
0 |
T100 |
42210 |
9927 |
0 |
0 |
T101 |
94759 |
9927 |
0 |
0 |
T184 |
0 |
0 |
0 |
2 |
T185 |
0 |
0 |
0 |
2 |
T192 |
0 |
0 |
0 |
2 |
T276 |
0 |
0 |
0 |
2 |
FpvSecCmIbexFetchEnable2_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
482982954 |
64014610 |
0 |
90 |
T1 |
90199 |
34775 |
0 |
0 |
T2 |
96900 |
34775 |
0 |
0 |
T3 |
57421 |
34775 |
0 |
0 |
T4 |
81721 |
36301 |
0 |
0 |
T7 |
91544 |
34775 |
0 |
0 |
T24 |
0 |
0 |
0 |
2 |
T25 |
94967 |
34780 |
0 |
2 |
T46 |
65559 |
34775 |
0 |
0 |
T58 |
0 |
0 |
0 |
2 |
T59 |
0 |
0 |
0 |
2 |
T60 |
0 |
0 |
0 |
2 |
T72 |
0 |
0 |
0 |
2 |
T88 |
0 |
0 |
0 |
2 |
T97 |
0 |
0 |
0 |
2 |
T99 |
66193 |
34771 |
0 |
0 |
T100 |
42210 |
34775 |
0 |
0 |
T101 |
94759 |
34775 |
0 |
0 |
T192 |
0 |
0 |
0 |
2 |
T277 |
0 |
0 |
0 |
2 |
FpvSecCmIbexFetchEnable3Rev_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
482982954 |
414431499 |
0 |
2000 |
T1 |
90199 |
55363 |
0 |
2 |
T2 |
96900 |
62067 |
0 |
2 |
T3 |
57421 |
22581 |
0 |
2 |
T4 |
81721 |
45358 |
0 |
2 |
T7 |
91544 |
56708 |
0 |
2 |
T25 |
94967 |
60122 |
0 |
2 |
T46 |
65559 |
30730 |
0 |
2 |
T99 |
66193 |
31369 |
0 |
2 |
T100 |
42210 |
7374 |
0 |
2 |
T101 |
94759 |
59923 |
0 |
2 |
FpvSecCmIbexFetchEnable3_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
482982954 |
414433357 |
0 |
1890 |
T1 |
90199 |
55364 |
0 |
2 |
T2 |
96900 |
62068 |
0 |
2 |
T3 |
57421 |
22582 |
0 |
2 |
T4 |
81721 |
45360 |
0 |
2 |
T5 |
0 |
0 |
0 |
2 |
T7 |
91544 |
56709 |
0 |
2 |
T25 |
94967 |
60123 |
0 |
0 |
T46 |
65559 |
30731 |
0 |
2 |
T99 |
66193 |
31369 |
0 |
2 |
T100 |
42210 |
7375 |
0 |
2 |
T101 |
94759 |
59924 |
0 |
2 |
FpvSecCmIbexInstrIntgErrCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
482982954 |
229 |
0 |
0 |
T50 |
461920 |
0 |
0 |
0 |
T95 |
222160 |
0 |
0 |
0 |
T245 |
814960 |
0 |
0 |
0 |
T278 |
316403 |
77 |
0 |
0 |
T279 |
0 |
76 |
0 |
0 |
T280 |
0 |
76 |
0 |
0 |
T281 |
230612 |
0 |
0 |
0 |
T282 |
239452 |
0 |
0 |
0 |
T283 |
247770 |
0 |
0 |
0 |
T284 |
150610 |
0 |
0 |
0 |
T285 |
118703 |
0 |
0 |
0 |
T286 |
307358 |
0 |
0 |
0 |
FpvSecCmIbexLoadRespIntgErrCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
482982954 |
585 |
0 |
0 |
T8 |
257511 |
0 |
0 |
0 |
T39 |
216796 |
0 |
0 |
0 |
T73 |
250530 |
1 |
0 |
0 |
T74 |
167810 |
0 |
0 |
0 |
T140 |
212770 |
0 |
0 |
0 |
T143 |
0 |
32 |
0 |
0 |
T144 |
0 |
32 |
0 |
0 |
T175 |
77866 |
0 |
0 |
0 |
T176 |
111076 |
0 |
0 |
0 |
T177 |
227513 |
0 |
0 |
0 |
T185 |
37973 |
0 |
0 |
0 |
T197 |
0 |
32 |
0 |
0 |
T203 |
0 |
100 |
0 |
0 |
T253 |
138508 |
0 |
0 |
0 |
T287 |
0 |
1 |
0 |
0 |
T288 |
0 |
97 |
0 |
0 |
T289 |
0 |
31 |
0 |
0 |
T290 |
0 |
32 |
0 |
0 |
T291 |
0 |
32 |
0 |
0 |
FpvSecCmIbexLockstepResetCountAlertCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
482982954 |
0 |
0 |
0 |
FpvSecCmIbexPcMismatchCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
482982954 |
0 |
0 |
0 |
FpvSecCmIbexRfEccErrCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
482982954 |
0 |
0 |
0 |
FpvSecCmIbexStoreRespIntgErrCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
482982954 |
0 |
0 |
0 |
FpvSecCmRegWeOnehotCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
482982954 |
6 |
0 |
0 |
T112 |
0 |
1 |
0 |
0 |
T263 |
131488 |
1 |
0 |
0 |
T264 |
0 |
1 |
0 |
0 |
T292 |
0 |
1 |
0 |
0 |
T293 |
0 |
1 |
0 |
0 |
T294 |
0 |
1 |
0 |
0 |
T295 |
944096 |
0 |
0 |
0 |
T296 |
646066 |
0 |
0 |
0 |
T297 |
275401 |
0 |
0 |
0 |
T298 |
162301 |
0 |
0 |
0 |
T299 |
222650 |
0 |
0 |
0 |
T300 |
233777 |
0 |
0 |
0 |
T301 |
135857 |
0 |
0 |
0 |
T302 |
280753 |
0 |
0 |
0 |
T303 |
253463 |
0 |
0 |
0 |
FpvSecCmRvCoreRegWeOnehotCheckRAddrA_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
482982954 |
0 |
0 |
0 |
FpvSecCmRvCoreRegWeOnehotCheckRAddrB_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
482982954 |
0 |
0 |
0 |
FpvSecCmRvCoreRegWeOnehotCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
482982954 |
0 |
0 |
0 |
g_instr_intg_err_assert_signals.AssertConnected_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1007 |
1007 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T4 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T25 |
1 |
1 |
0 |
0 |
T46 |
1 |
1 |
0 |
0 |
T99 |
1 |
1 |
0 |
0 |
T100 |
1 |
1 |
0 |
0 |
T101 |
1 |
1 |
0 |
0 |
g_lsu_load_resp_intg_err_assert_signals.AssertConnected_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1007 |
1007 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T4 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T25 |
1 |
1 |
0 |
0 |
T46 |
1 |
1 |
0 |
0 |
T99 |
1 |
1 |
0 |
0 |
T100 |
1 |
1 |
0 |
0 |
T101 |
1 |
1 |
0 |
0 |
g_lsu_store_resp_intg_err_assert_signals.AssertConnected_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1007 |
1007 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T4 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T25 |
1 |
1 |
0 |
0 |
T46 |
1 |
1 |
0 |
0 |
T99 |
1 |
1 |
0 |
0 |
T100 |
1 |
1 |
0 |
0 |
T101 |
1 |
1 |
0 |
0 |
g_pc_mismatch_alert_o_assert_signals.AssertConnected_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1007 |
1007 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T4 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T25 |
1 |
1 |
0 |
0 |
T46 |
1 |
1 |
0 |
0 |
T99 |
1 |
1 |
0 |
0 |
T100 |
1 |
1 |
0 |
0 |
T101 |
1 |
1 |
0 |
0 |
g_rf_ecc_err_comb_assert_signals.AssertConnected_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1007 |
1007 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T4 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T25 |
1 |
1 |
0 |
0 |
T46 |
1 |
1 |
0 |
0 |
T99 |
1 |
1 |
0 |
0 |
T100 |
1 |
1 |
0 |
0 |
T101 |
1 |
1 |
0 |
0 |
gen_icache_scramble_asserts.IbexIcacheScrambleKeyForwardedToCore_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
482982954 |
210 |
0 |
0 |
T87 |
217949 |
0 |
0 |
0 |
T200 |
86513 |
33 |
0 |
0 |
T201 |
81934 |
49 |
0 |
0 |
T202 |
0 |
21 |
0 |
0 |
T237 |
547018 |
0 |
0 |
0 |
T258 |
0 |
32 |
0 |
0 |
T259 |
0 |
33 |
0 |
0 |
T304 |
0 |
42 |
0 |
0 |
T305 |
664514 |
0 |
0 |
0 |
T306 |
111782 |
0 |
0 |
0 |
T307 |
59593 |
0 |
0 |
0 |
T308 |
192184 |
0 |
0 |
0 |
T309 |
328626 |
0 |
0 |
0 |
T310 |
72576 |
0 |
0 |
0 |
gen_icache_scramble_asserts.IbexIcacheScrambleKeyRequestAfterFenceI_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
482982954 |
201 |
0 |
0 |
T54 |
106062 |
0 |
0 |
0 |
T122 |
185647 |
0 |
0 |
0 |
T145 |
205864 |
0 |
0 |
0 |
T198 |
321900 |
0 |
0 |
0 |
T199 |
310540 |
16 |
0 |
0 |
T200 |
0 |
42 |
0 |
0 |
T201 |
0 |
12 |
0 |
0 |
T202 |
0 |
5 |
0 |
0 |
T258 |
0 |
42 |
0 |
0 |
T259 |
0 |
42 |
0 |
0 |
T304 |
0 |
10 |
0 |
0 |
T311 |
0 |
16 |
0 |
0 |
T312 |
0 |
16 |
0 |
0 |
T313 |
609427 |
0 |
0 |
0 |
T314 |
191932 |
0 |
0 |
0 |
T315 |
64282 |
0 |
0 |
0 |
T316 |
482298 |
0 |
0 |
0 |
T317 |
442604 |
0 |
0 |
0 |