From b6f953dc71bd0687406665fd3d1ba79673c86ee5 Mon Sep 17 00:00:00 2001 From: Kinza Qamar Date: Tue, 17 Dec 2024 14:26:31 +0000 Subject: [PATCH] [rom_ctrl, dv] Removal of a signal to cover cond coverage hole rom_ctrl coverage report shows a coverage hole for the conditional statement as 110 not covered. The description below explains why we can't cover the case counter_lnt and !kmac_rom_vld_o Starting with counter_lnt = 1 means that we get the last address of a non top word. counter_lnt is delayed by a cycle through last_nontop_d in rom_ctrl_counter.sv. Next is kmac_rom_vld_o which also delayed by a cycle through kmac_rom_vld_d. The kmac_rom_vld_d signal depends on counter_read_req which goes immediately high after reset. Then checker fsm state should be in state ReadingLow and !counter_lnt meaning we haven't reached to the top. Now assuming that we are out of reset, first request to the ROM has been sent, checker fsm is sending nontop data to KMAC and we still haven't reached to the top; makes kmac_rom_vld_d go high. But when we reach to the last address of the nontop data, we get counter_lnt go high and kmac_rom_vld_d go low. Since kmac_rom_vld_o delayed through kmac_rom_vld_d, we get counter_lnt with kmac_rom_vld_o. Signed-off-by: Kinza Qamar --- hw/ip/rom_ctrl/rtl/rom_ctrl_fsm.sv | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/hw/ip/rom_ctrl/rtl/rom_ctrl_fsm.sv b/hw/ip/rom_ctrl/rtl/rom_ctrl_fsm.sv index b13518c706591..f270376be5fea 100644 --- a/hw/ip/rom_ctrl/rtl/rom_ctrl_fsm.sv +++ b/hw/ip/rom_ctrl/rtl/rom_ctrl_fsm.sv @@ -145,7 +145,10 @@ module rom_ctrl_fsm ReadingLow: begin // Switch to ReadingHigh when counter_lnt is true and kmac_rom_rdy_i & kmac_rom_vld_o // (implying that the transaction went through) - if (counter_lnt && kmac_rom_rdy_i && kmac_rom_vld_o) begin + // + // If counter_lnt is true then we requested the last non-top word from the ROM on the last + // cycle and the response will be available now. This gets taken if kmac_rom_rdy_i. + if (counter_lnt && kmac_rom_rdy_i) begin state_d = ReadingHigh; end end @@ -311,4 +314,6 @@ module rom_ctrl_fsm assign alert_o = fsm_alert | checker_alert | unexpected_counter_change; + `ASSERT(CounterLntImpliesKmacRomVldO_A, counter_lnt -> kmac_rom_vld_o) + endmodule