[dv/keymgr_kmac_agent] Add 2 assertions to check last and done
Also fix some typos
Signed-off-by: Weicai Yang <weicai@google.com>
diff --git a/hw/dv/sv/keymgr_kmac_agent/keymgr_kmac_intf.sv b/hw/dv/sv/keymgr_kmac_agent/keymgr_kmac_intf.sv
index e1a3b1e..e7470f5 100644
--- a/hw/dv/sv/keymgr_kmac_agent/keymgr_kmac_intf.sv
+++ b/hw/dv/sv/keymgr_kmac_agent/keymgr_kmac_intf.sv
@@ -55,15 +55,22 @@
{req_data_if.ready, rsp_done, rsp_digest_share0, rsp_digest_share1, rsp_error} : 'z;
// strb should never be 0
- `ASSERT(StrbNotZero_A, kmac_data_req.valid -> kmac_data_req.strb > 0, clk, !rst_n)
+ `ASSERT(StrbNotZero_A, kmac_data_req.valid |-> kmac_data_req.strb > 0, clk, !rst_n)
// strb should be all 1s unless it's last cycle
- `ASSERT(StrbAllSetIfNotLast_A, kmac_data_req.valid && !kmac_data_req.last ->
+ `ASSERT(StrbAllSetIfNotLast_A, kmac_data_req.valid && !kmac_data_req.last |->
kmac_data_req.strb == '1, clk, !rst_n)
+ // last can only be asserted along with valid
+ `ASSERT(LastAssertWithValid_A, kmac_data_req.last |-> kmac_data_req.valid, clk, !rst_n)
+
+ // Done should be asserted after last, before we start another request
+ `ASSERT(DoneAssertAfterLast_A, kmac_data_req.last |=>
+ !kmac_data_req.valid throughout rsp_done[->1], clk, !rst_n)
+
// Check strb is aligned to LSB, for example: if strb[1]==0, strb[$:2] should be 0 too
for (genvar k = 1; k < KmacDataIfWidth / 8 - 1; k++) begin : gen_strb_check
- `ASSERT(StrbAlignLSB_A, kmac_data_req.valid && kmac_data_req.strb[k] === 0 ->
+ `ASSERT(StrbAlignLSB_A, kmac_data_req.valid && kmac_data_req.strb[k] === 0 |->
kmac_data_req.strb[k+1] === 0, clk, !rst_n)
end
endinterface