Skip to content

Commit 81ebe5f

Browse files
KinzaQamarrswarbrick
authored andcommitted
[rom_ctrl, dv] Conditional coverage hole of rom_ctrl_mux
rom_ctrl coverage report contains a hole occurred in rom_ctrl_mux.sv by a conditional statement (alert_d = sel_invalid | sel_reverted | sel_q_reverted) as 001 not covered. This PR fixes corrupt_sig_fatal_vseq to force sel_bus_qq in rom_ctrl_mux to an invalid value to get sel_q_reverted = 1. Then to make sure that we inject something bad to sel_bus_qq before ROM check finishes, the fix adds force_early variable. Lastly, changed the name err_point to inject_after_done for better readibility. Signed-off-by: Kinza Qamar <kqzaman@lowrisc.org>
1 parent ed6c889 commit 81ebe5f

File tree

1 file changed

+19
-7
lines changed

1 file changed

+19
-7
lines changed

hw/ip/rom_ctrl/dv/env/seq_lib/rom_ctrl_corrupt_sig_fatal_chk_vseq.sv

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class rom_ctrl_corrupt_sig_fatal_chk_vseq extends rom_ctrl_base_vseq;
2929
extern task force_sig(string path, int value);
3030
extern task chk_fsm_state();
3131
extern task wait_for_fsm_state_inside(ref rom_ctrl_pkg::fsm_state_e states_to_visit[$]);
32-
extern task pick_err_inj_point();
32+
extern task pick_err_inj_point(bit force_early = 1'b0);
3333
extern function prim_mubi_pkg::mubi4_t get_invalid_mubi4();
3434

3535
endclass : rom_ctrl_corrupt_sig_fatal_chk_vseq
@@ -154,8 +154,8 @@ task rom_ctrl_corrupt_sig_fatal_chk_vseq::body();
154154
get_invalid_mubi4());
155155
wait_for_fatal_alert(.check_fsm_state(1'b0));
156156
dut_init();
157-
pick_err_inj_point();
158-
force_sig("tb.dut.u_mux.sel_bus_q", get_invalid_mubi4());
157+
pick_err_inj_point(1'b1);
158+
force_sig("tb.dut.u_mux.sel_bus_qq", get_invalid_mubi4());
159159
wait_for_fatal_alert(.check_fsm_state(1'b0));
160160
end
161161
// The mux that arbitrates between the checker and the bus gives access to the checker at
@@ -283,19 +283,31 @@ task rom_ctrl_corrupt_sig_fatal_chk_vseq::wait_for_fsm_state_inside(
283283
while (states_to_visit.pop_front() != rdata_state);
284284
endtask: wait_for_fsm_state_inside
285285

286-
task rom_ctrl_corrupt_sig_fatal_chk_vseq::pick_err_inj_point();
286+
task rom_ctrl_corrupt_sig_fatal_chk_vseq::pick_err_inj_point(bit force_early = 1'b0);
287287
int wait_clks;
288+
bit inject_after_done;
289+
288290
// Pick error injection point. 1 - After ROM check completion. 0 - Before ROM check completion.
289-
bit err_point;
290-
`DV_CHECK_STD_RANDOMIZE_FATAL(err_point)
291-
if(err_point) begin
291+
//
292+
// If there is a requirement of injecting error before ROM check completes,then
293+
// inject_after_done getting randomized and then set to 0 won't help.
294+
//
295+
// force_early being true, sets inject_after_done to 0 if there is a requirement to always inject
296+
// error before ROM check finishes.
297+
298+
if (force_early) inject_after_done = 1'b0;
299+
else `DV_CHECK_STD_RANDOMIZE_FATAL(inject_after_done)
300+
301+
if(inject_after_done) begin
292302
wait (cfg.rom_ctrl_vif.pwrmgr_data.done == MuBi4True);
293303
wait_clks = 10;
294304
end
295305
else begin
296306
wait_clks = 10000;
297307
end
298308
wait_with_bound(wait_clks);
309+
310+
if (!inject_after_done) `DV_CHECK(cfg.rom_ctrl_vif.pwrmgr_data.done != MuBi4True)
299311
endtask
300312

301313
function prim_mubi_pkg::mubi4_t rom_ctrl_corrupt_sig_fatal_chk_vseq::get_invalid_mubi4();

0 commit comments

Comments
 (0)