mirror of
https://github.com/lowRISC/ibex.git
synced 2025-04-22 04:47:25 -04:00
Change double_fault detector to on by default, fatal error if triggered
Add a plusargs "+is_double_fault_detected_fatal" to the top-level cfg, which is set to 1 by default. Set the default for the "+enable_double_fault_detector" to 1.
This commit is contained in:
parent
b214fa1c72
commit
bece44f4d6
4 changed files with 17 additions and 7 deletions
7
dv/uvm/core_ibex/env/core_ibex_env_cfg.sv
vendored
7
dv/uvm/core_ibex/env/core_ibex_env_cfg.sv
vendored
|
@ -21,12 +21,16 @@ class core_ibex_env_cfg extends uvm_object;
|
|||
rand scrambling_key_agent_cfg scrambling_key_cfg;
|
||||
|
||||
// Double-Fault detection in scoreboard
|
||||
bit enable_double_fault_detector = 0;
|
||||
bit enable_double_fault_detector = 1;
|
||||
int unsigned double_fault_threshold_consecutive = 100;
|
||||
int unsigned double_fault_threshold_total = 1000;
|
||||
// If '1', reaching either threshold fatally ends the test.
|
||||
// If '0', we end the test with a pass.
|
||||
bit is_double_fault_detected_fatal = 1;
|
||||
|
||||
`uvm_object_utils_begin(core_ibex_env_cfg)
|
||||
`uvm_field_int(enable_double_fault_detector, UVM_DEFAULT)
|
||||
`uvm_field_int(is_double_fault_detected_fatal, UVM_DEFAULT)
|
||||
`uvm_field_int(enable_irq_single_seq, UVM_DEFAULT)
|
||||
`uvm_field_int(enable_irq_multiple_seq, UVM_DEFAULT)
|
||||
`uvm_field_int(enable_irq_nmi_seq, UVM_DEFAULT)
|
||||
|
@ -43,6 +47,7 @@ class core_ibex_env_cfg extends uvm_object;
|
|||
function new(string name = "");
|
||||
super.new(name);
|
||||
void'($value$plusargs("enable_double_fault_detector=%0d", enable_double_fault_detector));
|
||||
void'($value$plusargs("is_double_fault_detected_fatal=%0d", is_double_fault_detected_fatal));
|
||||
void'($value$plusargs("enable_irq_single_seq=%0d", enable_irq_single_seq));
|
||||
void'($value$plusargs("enable_irq_multiple_seq=%0d", enable_irq_multiple_seq));
|
||||
void'($value$plusargs("enable_irq_nmi_seq=%0d", enable_irq_nmi_seq));
|
||||
|
|
9
dv/uvm/core_ibex/env/core_ibex_scoreboard.sv
vendored
9
dv/uvm/core_ibex/env/core_ibex_scoreboard.sv
vendored
|
@ -58,7 +58,6 @@ class core_ibex_scoreboard extends uvm_scoreboard;
|
|||
double_fault_cnt_consecutive = 0;
|
||||
end
|
||||
|
||||
|
||||
// Create an event if either counter reaches its threshold value, then reset the counter.
|
||||
if (double_fault_cnt_consecutive == cfg.double_fault_threshold_consecutive) begin
|
||||
fault_threshold_consecutive_reached.trigger();
|
||||
|
@ -71,8 +70,12 @@ class core_ibex_scoreboard extends uvm_scoreboard;
|
|||
|
||||
end
|
||||
end
|
||||
// Latch a signal to show that we have seen a double_fault.
|
||||
// The pulse may be receieved sometime before the rvfi_seq_item.
|
||||
// Latch the 'double_fault_seen_o' signal to catch the fault.
|
||||
// The single pulse may be receieved sometime before the rvfi_seq_item
|
||||
// corresponding to the faulting instruction is generated. Hence we
|
||||
// latch that pulse when it is seen, and then reset above when the
|
||||
// seq_item arrives.
|
||||
// https://github.com/lowRISC/ibex/pull/1848#discussion_r995903762
|
||||
begin
|
||||
forever begin
|
||||
@(posedge cfg.ibex_dut_vif.double_fault_seen);
|
||||
|
|
|
@ -744,9 +744,7 @@
|
|||
+instr_cnt=6000
|
||||
+pmp_max_offset=00024000
|
||||
+pmp_randomize=1
|
||||
+pmp_allow_illegal_tor=1
|
||||
sim_opts: >
|
||||
+enable_double_fault_detector=1
|
||||
+pmp_allow_addr_overlap=1
|
||||
rtl_test: core_ibex_base_test
|
||||
rtl_params:
|
||||
PMPEnable: 1
|
||||
|
|
|
@ -236,6 +236,10 @@ class core_ibex_base_test extends uvm_test;
|
|||
begin
|
||||
if (cfg.enable_double_fault_detector) begin
|
||||
env.scoreboard.dfd_wait_for_pass_events();
|
||||
if (cfg.is_double_fault_detected_fatal) begin
|
||||
`uvm_fatal(`gfn, "Fatal threshold for double_fault detector reached.")
|
||||
end
|
||||
// If we get here, join this fork to end the test gracefully.
|
||||
`uvm_info(`gfn, "Test done due to double_fault detector.", UVM_LOW)
|
||||
end else begin
|
||||
wait (test_done == 1'b1);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue