Skip to content

Commit febc8fe

Browse files
committed
[alert,fpv] Make AlertCheck1_A actually true for async alerts
This assertion wasn't true because a skew on e.g. the ack signal from the alert receiver to the alert sender can completely lock up communication between them. It seems that Jasper didn't manage to find the loop it would need for a counterexample with this sort of liveness proof, so it just hung. With the extra condition (which, in hindsight, is definitely required), the proof goes through nicely. Signed-off-by: Rupert Swarbrick <[email protected]>
1 parent 65474d4 commit febc8fe

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

hw/ip/prim/fpv/vip/prim_alert_rxtx_async_assert_fpv.sv

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -196,11 +196,13 @@ module prim_alert_rxtx_async_assert_fpv
196196
//
197197
// We want to disable the assertion if there is a reset or the alert complex is still
198198
// initialising. We also want to disable it if there has been an injected error: the alerts that
199-
// should come out in that situation rely on the ping mechanism.
199+
// should come out in that situation rely on the ping mechanism. This injected error will either
200+
// be detected with error_setreg_q or seen_skew_q.
200201
//
201202
// Finally, we disable it if the sender clears its alert (because ack was dropped again at the end
202203
// of an alert handshake).
203-
AlertCheck1_A: assert property (disable iff (!rst_ni || init_pending || error_setreg_q ||
204+
AlertCheck1_A: assert property (disable iff (!rst_ni || init_pending ||
205+
error_setreg_q || seen_skew_q ||
204206
i_prim_alert_sender.alert_clr)
205207
alert_req_i || alert_test_i |=> s_eventually alert_o);
206208

0 commit comments

Comments
 (0)