[dv/cip] Fix csr_rw corner cases

Due to the async clock config, alert receiver and sender domain can have
different clock frequencies.
The cip_base_vseq intend to check there is no fatal alert at the end of
the simulation, and allow recoverable alert to fire due to alert_test
reg.
The current wait cycles method does not handle the different clock
domain very well. This new method will just wait until the first alert
handshake is done.

Signed-off-by: Cindy Chen <chencindy@opentitan.org>
diff --git a/hw/dv/sv/cip_lib/seq_lib/cip_base_vseq.sv b/hw/dv/sv/cip_lib/seq_lib/cip_base_vseq.sv
index 6ebf7b8..848ad33 100644
--- a/hw/dv/sv/cip_lib/seq_lib/cip_base_vseq.sv
+++ b/hw/dv/sv/cip_lib/seq_lib/cip_base_vseq.sv
@@ -506,9 +506,12 @@
       int check_cycles = $urandom_range(max_alert_handshake_cycles,
                                         max_alert_handshake_cycles * 3);
 
-      // This task allows recoverable alerts to fire, or fatal alert being triggered once by
-      // `alert_test` register.
+      // This task wait for recoverable alerts handshake to complete, or fatal alert being
+      // triggered once by `alert_test` register.
       cfg.clk_rst_vif.wait_clks(max_alert_handshake_cycles);
+      foreach (cfg.m_alert_agent_cfgs[alert_name]) begin
+        `DV_SPINWAIT(cfg.m_alert_agent_cfgs[alert_name].vif.wait_ack_complete();)
+      end
 
       repeat(check_cycles) begin
         cfg.clk_rst_vif.wait_clks(1);