[dv] Update prim_sparse_fsm_flop_if to force at the flop
To solve the FSM coverage issue, we deposit invalid value to the FSM
at these 2 places.
1. the __q at the same hierarchy of the state machine
2. state_o in the prim_sparse_fsm_flop
But `state_o` isn't the actual flop, after depositing the value, it
won't be changed unless `state_d` is updated, while __q will be changed
back to __d in the next cycle.
changed to desposit value on the flop rather than `state_o`
Signed-off-by: Weicai Yang <weicai@google.com>
diff --git a/hw/dv/sv/sec_cm/prim_double_lfsr_if.sv b/hw/dv/sv/sec_cm/prim_double_lfsr_if.sv
index 368274a..152eb8c 100644
--- a/hw/dv/sv/sec_cm/prim_double_lfsr_if.sv
+++ b/hw/dv/sv/sec_cm/prim_double_lfsr_if.sv
@@ -35,11 +35,12 @@
`DV_CHECK_STD_RANDOMIZE_WITH_FATAL(force_value,
force_value != orig_value;)
- `DV_CHECK(uvm_hdl_deposit(signal_forced, force_value))
+ `DV_CHECK(uvm_hdl_force(signal_forced, force_value))
`uvm_info(msg_id, $sformatf("Forcing %s from %0d to %0d",
signal_forced, orig_value, force_value), UVM_LOW)
- @(posedge clk_i);
+ @(negedge clk_i);
+ `DV_CHECK(uvm_hdl_release(signal_forced))
endtask
virtual task automatic restore_fault();
diff --git a/hw/dv/sv/sec_cm/prim_sparse_fsm_flop_if.sv b/hw/dv/sv/sec_cm/prim_sparse_fsm_flop_if.sv
index 30015a9..abd26c6 100644
--- a/hw/dv/sv/sec_cm/prim_sparse_fsm_flop_if.sv
+++ b/hw/dv/sv/sec_cm/prim_sparse_fsm_flop_if.sv
@@ -44,13 +44,15 @@
`uvm_info(msg_id, $sformatf("Forcing %s from %0d to %0d",
signal_forced, orig_value, force_value), UVM_LOW)
- `DV_CHECK(uvm_hdl_deposit(signal_forced, force_value))
+ `DV_CHECK(uvm_hdl_force(signal_forced, force_value))
if (CustomForceName != "") begin
`uvm_info(msg_id, $sformatf("Forcing %s from %0d to %0d",
custom_signal_forced, orig_value, force_value), UVM_LOW)
- `DV_CHECK(uvm_hdl_deposit(custom_signal_forced, force_value))
+ `DV_CHECK(uvm_hdl_force(custom_signal_forced, force_value))
end
- @(posedge clk_i);
+ @(negedge clk_i);
+ `DV_CHECK(uvm_hdl_release(signal_forced))
+ if (CustomForceName != "") `DV_CHECK(uvm_hdl_release(custom_signal_forced))
endtask
virtual task automatic restore_fault();