Module Definition
dashboard | hierarchy | modlist | groups | tests | asserts



Module Instance : tb.dut.top_earlgrey.u_rv_core_ibex.u_prim_sync_reqack_data

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
100.00 100.00 100.00


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
91.67 100.00 66.67 100.00 100.00


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
89.83 96.47 89.29 99.75 100.00 63.64 u_rv_core_ibex


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
u_prim_sync_reqack 91.67 100.00 66.67 100.00 100.00



Module Instance : tb.dut.top_earlgrey.u_rv_core_ibex.u_edn_if.u_prim_sync_reqack_data

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
100.00 100.00 100.00


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
91.67 100.00 66.67 100.00 100.00


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
96.15 100.00 84.62 100.00 100.00 u_edn_if


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
u_prim_sync_reqack 91.67 100.00 66.67 100.00 100.00

Line Coverage for Module : prim_sync_reqack_data
Line No.TotalCoveredPercent
TOTAL11100.00
CONT_ASSIGN9311100.00
CONT_ASSIGN15300
CONT_ASSIGN15600
ALWAYS15900

92 // Just feed through the data. 93 1/1 assign data_o = data_i; Tests: T2 T3 T4  94 end 95 96 //////////////// 97 // Assertions // 98 //////////////// 99 if (DataSrc2Dst == 1'b1) begin : gen_assert_data_src2dst 100 `ifdef INC_ASSERT 101 //VCS coverage off 102 // pragma coverage off 103 logic effective_rst_n; 104 assign effective_rst_n = rst_src_ni && rst_dst_ni; 105 106 logic chk_flag_d, chk_flag_q; 107 assign chk_flag_d = src_req_i && !chk_flag_q ? 1'b1 : chk_flag_q; 108 109 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin 110 if (!effective_rst_n) begin 111 chk_flag_q <= '0; 112 end else begin 113 chk_flag_q <= chk_flag_d; 114 end 115 end 116 //VCS coverage on 117 // pragma coverage on 118 119 // SRC domain cannot change data while waiting for ACK. 120 `ASSERT(SyncReqAckDataHoldSrc2Dst, !$stable(data_i) && chk_flag_q |-> 121 (!src_req_i || (src_req_i && src_ack_o)), 122 clk_src_i, !rst_src_ni || !rst_dst_ni || !chk_flag_q) 123 124 // Register stage cannot be used. 125 `ASSERT_INIT(SyncReqAckDataReg, DataSrc2Dst && !DataReg) 126 `endif 127 end else if (DataSrc2Dst == 1'b0 && DataReg == 1'b0) begin : gen_assert_data_dst2src 128 // DST domain shall not change data while waiting for SRC domain to latch it (together with 129 // receiving ACK). It takes 2 SRC cycles for ACK to cross over from DST to SRC, and 1 SRC cycle 130 // for the next REQ to cross over from SRC to DST. 131 // 132 // Denote the src clock where REQ & ACK as time zero. The data flowing through the CDC could be 133 // corrupted if data_o was not stable over the previous 2 clock cycles (so we want to check time 134 // points -2, -1 and 0). Moreover, the DST domain cannot know that it is allowed to change value 135 // until at least one more SRC cycle (the time taken for REQ to cross back from SRC to DST). 136 // 137 // To make this assertion, we will sample at each of 4 time points (-2, -1, 0 and +1), asserting 138 // that data_o is equal at each of these times. Note this won't detect glitches at intermediate 139 // timepoints. 140 // 141 // The SVAs below are designed not to consume time, which means that they can be disabled with 142 // an $assertoff(..) and won't linger to fail later. This wouldn't work properly if we used 143 // something like |=> instead of the $past(...) function. That means that we have to trigger at 144 // the "end" of the window. To make sure we don't miss a situation where the value changed at 145 // time -1 (causing corruption), but reset was asserted between time 0 and 1, we split the 146 // assertion into two pieces. The first (SyncReqAckDataHoldDst2SrcA) checks that data doesn't 147 // change in a way that could cause data corruption. The second (SyncReqAckDataHoldDst2SrcB) 148 // checks that the DST side doesn't do anything that it shouldn't know is safe. 149 `ifdef INC_ASSERT 150 //VCS coverage off 151 // pragma coverage off 152 logic effective_rst_n; 153 unreachable assign effective_rst_n = rst_src_ni && rst_dst_ni; 154 155 logic chk_flag_d, chk_flag_q; 156 unreachable assign chk_flag_d = src_req_i && !chk_flag_q ? 1'b1 : chk_flag_q; 157 158 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin 159 unreachable if (!effective_rst_n) begin 160 unreachable chk_flag_q <= '0; 161 end else begin 162 unreachable chk_flag_q <= chk_flag_d;

Assert Coverage for Module : prim_sync_reqack_data
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 2 2 100.00 2 100.00
Cover properties 0 0 0
Cover sequences 0 0 0
Total 2 2 100.00 2 100.00




Assertion Details

NameAttemptsReal SuccessesFailuresIncomplete
gen_assert_data_dst2src.SyncReqAckDataHoldDst2SrcA 1098872998 4356 0 0
gen_assert_data_dst2src.SyncReqAckDataHoldDst2SrcB 1098872998 4356 0 0


gen_assert_data_dst2src.SyncReqAckDataHoldDst2SrcA
NameAttemptsReal SuccessesFailuresIncomplete
Total 1098872998 4356 0 0
T2 61148 1 0 0
T3 65177 1 0 0
T4 91950 1 0 0
T5 115823 2 0 0
T6 104855 2 0 0
T8 105965 2 0 0
T9 90200 1 0 0
T10 145349 1 0 0
T27 149974 3 0 0
T38 61154 1 0 0
T99 263943 0 0 0
T220 87647 4 0 0
T221 91844 8 0 0
T222 0 3 0 0
T256 0 8 0 0
T257 0 8 0 0
T297 0 9 0 0
T298 63561 0 0 0
T299 98383 0 0 0
T300 377920 0 0 0
T301 108084 0 0 0
T302 86120 0 0 0
T303 72357 0 0 0
T304 57571 0 0 0

gen_assert_data_dst2src.SyncReqAckDataHoldDst2SrcB
NameAttemptsReal SuccessesFailuresIncomplete
Total 1098872998 4356 0 0
T2 61148 1 0 0
T3 65177 1 0 0
T4 91950 1 0 0
T5 115823 2 0 0
T6 104855 2 0 0
T8 105965 2 0 0
T9 90200 1 0 0
T10 145349 1 0 0
T27 149974 3 0 0
T38 61154 1 0 0
T99 263943 0 0 0
T220 87647 4 0 0
T221 91844 8 0 0
T222 0 3 0 0
T256 0 8 0 0
T257 0 8 0 0
T297 0 9 0 0
T298 63561 0 0 0
T299 98383 0 0 0
T300 377920 0 0 0
T301 108084 0 0 0
T302 86120 0 0 0
T303 72357 0 0 0
T304 57571 0 0 0

Line Coverage for Instance : tb.dut.top_earlgrey.u_rv_core_ibex.u_prim_sync_reqack_data
Line No.TotalCoveredPercent
TOTAL11100.00
CONT_ASSIGN9311100.00
CONT_ASSIGN15300
CONT_ASSIGN15600
ALWAYS15900

92 // Just feed through the data. 93 1/1 assign data_o = data_i; Tests: T2 T3 T4  94 end 95 96 //////////////// 97 // Assertions // 98 //////////////// 99 if (DataSrc2Dst == 1'b1) begin : gen_assert_data_src2dst 100 `ifdef INC_ASSERT 101 //VCS coverage off 102 // pragma coverage off 103 logic effective_rst_n; 104 assign effective_rst_n = rst_src_ni && rst_dst_ni; 105 106 logic chk_flag_d, chk_flag_q; 107 assign chk_flag_d = src_req_i && !chk_flag_q ? 1'b1 : chk_flag_q; 108 109 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin 110 if (!effective_rst_n) begin 111 chk_flag_q <= '0; 112 end else begin 113 chk_flag_q <= chk_flag_d; 114 end 115 end 116 //VCS coverage on 117 // pragma coverage on 118 119 // SRC domain cannot change data while waiting for ACK. 120 `ASSERT(SyncReqAckDataHoldSrc2Dst, !$stable(data_i) && chk_flag_q |-> 121 (!src_req_i || (src_req_i && src_ack_o)), 122 clk_src_i, !rst_src_ni || !rst_dst_ni || !chk_flag_q) 123 124 // Register stage cannot be used. 125 `ASSERT_INIT(SyncReqAckDataReg, DataSrc2Dst && !DataReg) 126 `endif 127 end else if (DataSrc2Dst == 1'b0 && DataReg == 1'b0) begin : gen_assert_data_dst2src 128 // DST domain shall not change data while waiting for SRC domain to latch it (together with 129 // receiving ACK). It takes 2 SRC cycles for ACK to cross over from DST to SRC, and 1 SRC cycle 130 // for the next REQ to cross over from SRC to DST. 131 // 132 // Denote the src clock where REQ & ACK as time zero. The data flowing through the CDC could be 133 // corrupted if data_o was not stable over the previous 2 clock cycles (so we want to check time 134 // points -2, -1 and 0). Moreover, the DST domain cannot know that it is allowed to change value 135 // until at least one more SRC cycle (the time taken for REQ to cross back from SRC to DST). 136 // 137 // To make this assertion, we will sample at each of 4 time points (-2, -1, 0 and +1), asserting 138 // that data_o is equal at each of these times. Note this won't detect glitches at intermediate 139 // timepoints. 140 // 141 // The SVAs below are designed not to consume time, which means that they can be disabled with 142 // an $assertoff(..) and won't linger to fail later. This wouldn't work properly if we used 143 // something like |=> instead of the $past(...) function. That means that we have to trigger at 144 // the "end" of the window. To make sure we don't miss a situation where the value changed at 145 // time -1 (causing corruption), but reset was asserted between time 0 and 1, we split the 146 // assertion into two pieces. The first (SyncReqAckDataHoldDst2SrcA) checks that data doesn't 147 // change in a way that could cause data corruption. The second (SyncReqAckDataHoldDst2SrcB) 148 // checks that the DST side doesn't do anything that it shouldn't know is safe. 149 `ifdef INC_ASSERT 150 //VCS coverage off 151 // pragma coverage off 152 logic effective_rst_n; 153 unreachable assign effective_rst_n = rst_src_ni && rst_dst_ni; 154 155 logic chk_flag_d, chk_flag_q; 156 unreachable assign chk_flag_d = src_req_i && !chk_flag_q ? 1'b1 : chk_flag_q; 157 158 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin 159 unreachable if (!effective_rst_n) begin 160 unreachable chk_flag_q <= '0; 161 end else begin 162 unreachable chk_flag_q <= chk_flag_d;

Assert Coverage for Instance : tb.dut.top_earlgrey.u_rv_core_ibex.u_prim_sync_reqack_data
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 2 2 100.00 2 100.00
Cover properties 0 0 0
Cover sequences 0 0 0
Total 2 2 100.00 2 100.00




Assertion Details

NameAttemptsReal SuccessesFailuresIncomplete
gen_assert_data_dst2src.SyncReqAckDataHoldDst2SrcA 549436499 40 0 0
gen_assert_data_dst2src.SyncReqAckDataHoldDst2SrcB 549436499 40 0 0


gen_assert_data_dst2src.SyncReqAckDataHoldDst2SrcA
NameAttemptsReal SuccessesFailuresIncomplete
Total 549436499 40 0 0
T99 263943 0 0 0
T220 87647 4 0 0
T221 91844 8 0 0
T222 0 3 0 0
T256 0 8 0 0
T257 0 8 0 0
T297 0 9 0 0
T298 63561 0 0 0
T299 98383 0 0 0
T300 377920 0 0 0
T301 108084 0 0 0
T302 86120 0 0 0
T303 72357 0 0 0
T304 57571 0 0 0

gen_assert_data_dst2src.SyncReqAckDataHoldDst2SrcB
NameAttemptsReal SuccessesFailuresIncomplete
Total 549436499 40 0 0
T99 263943 0 0 0
T220 87647 4 0 0
T221 91844 8 0 0
T222 0 3 0 0
T256 0 8 0 0
T257 0 8 0 0
T297 0 9 0 0
T298 63561 0 0 0
T299 98383 0 0 0
T300 377920 0 0 0
T301 108084 0 0 0
T302 86120 0 0 0
T303 72357 0 0 0
T304 57571 0 0 0

Line Coverage for Instance : tb.dut.top_earlgrey.u_rv_core_ibex.u_edn_if.u_prim_sync_reqack_data
Line No.TotalCoveredPercent
TOTAL11100.00
CONT_ASSIGN9311100.00
CONT_ASSIGN15300
CONT_ASSIGN15600
ALWAYS15900

92 // Just feed through the data. 93 1/1 assign data_o = data_i; Tests: T2 T3 T4  94 end 95 96 //////////////// 97 // Assertions // 98 //////////////// 99 if (DataSrc2Dst == 1'b1) begin : gen_assert_data_src2dst 100 `ifdef INC_ASSERT 101 //VCS coverage off 102 // pragma coverage off 103 logic effective_rst_n; 104 assign effective_rst_n = rst_src_ni && rst_dst_ni; 105 106 logic chk_flag_d, chk_flag_q; 107 assign chk_flag_d = src_req_i && !chk_flag_q ? 1'b1 : chk_flag_q; 108 109 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin 110 if (!effective_rst_n) begin 111 chk_flag_q <= '0; 112 end else begin 113 chk_flag_q <= chk_flag_d; 114 end 115 end 116 //VCS coverage on 117 // pragma coverage on 118 119 // SRC domain cannot change data while waiting for ACK. 120 `ASSERT(SyncReqAckDataHoldSrc2Dst, !$stable(data_i) && chk_flag_q |-> 121 (!src_req_i || (src_req_i && src_ack_o)), 122 clk_src_i, !rst_src_ni || !rst_dst_ni || !chk_flag_q) 123 124 // Register stage cannot be used. 125 `ASSERT_INIT(SyncReqAckDataReg, DataSrc2Dst && !DataReg) 126 `endif 127 end else if (DataSrc2Dst == 1'b0 && DataReg == 1'b0) begin : gen_assert_data_dst2src 128 // DST domain shall not change data while waiting for SRC domain to latch it (together with 129 // receiving ACK). It takes 2 SRC cycles for ACK to cross over from DST to SRC, and 1 SRC cycle 130 // for the next REQ to cross over from SRC to DST. 131 // 132 // Denote the src clock where REQ & ACK as time zero. The data flowing through the CDC could be 133 // corrupted if data_o was not stable over the previous 2 clock cycles (so we want to check time 134 // points -2, -1 and 0). Moreover, the DST domain cannot know that it is allowed to change value 135 // until at least one more SRC cycle (the time taken for REQ to cross back from SRC to DST). 136 // 137 // To make this assertion, we will sample at each of 4 time points (-2, -1, 0 and +1), asserting 138 // that data_o is equal at each of these times. Note this won't detect glitches at intermediate 139 // timepoints. 140 // 141 // The SVAs below are designed not to consume time, which means that they can be disabled with 142 // an $assertoff(..) and won't linger to fail later. This wouldn't work properly if we used 143 // something like |=> instead of the $past(...) function. That means that we have to trigger at 144 // the "end" of the window. To make sure we don't miss a situation where the value changed at 145 // time -1 (causing corruption), but reset was asserted between time 0 and 1, we split the 146 // assertion into two pieces. The first (SyncReqAckDataHoldDst2SrcA) checks that data doesn't 147 // change in a way that could cause data corruption. The second (SyncReqAckDataHoldDst2SrcB) 148 // checks that the DST side doesn't do anything that it shouldn't know is safe. 149 `ifdef INC_ASSERT 150 //VCS coverage off 151 // pragma coverage off 152 logic effective_rst_n; 153 unreachable assign effective_rst_n = rst_src_ni && rst_dst_ni; 154 155 logic chk_flag_d, chk_flag_q; 156 unreachable assign chk_flag_d = src_req_i && !chk_flag_q ? 1'b1 : chk_flag_q; 157 158 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin 159 unreachable if (!effective_rst_n) begin 160 unreachable chk_flag_q <= '0; 161 end else begin 162 unreachable chk_flag_q <= chk_flag_d;

Assert Coverage for Instance : tb.dut.top_earlgrey.u_rv_core_ibex.u_edn_if.u_prim_sync_reqack_data
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 2 2 100.00 2 100.00
Cover properties 0 0 0
Cover sequences 0 0 0
Total 2 2 100.00 2 100.00




Assertion Details

NameAttemptsReal SuccessesFailuresIncomplete
gen_assert_data_dst2src.SyncReqAckDataHoldDst2SrcA 549436499 4316 0 0
gen_assert_data_dst2src.SyncReqAckDataHoldDst2SrcB 549436499 4316 0 0


gen_assert_data_dst2src.SyncReqAckDataHoldDst2SrcA
NameAttemptsReal SuccessesFailuresIncomplete
Total 549436499 4316 0 0
T2 61148 1 0 0
T3 65177 1 0 0
T4 91950 1 0 0
T5 115823 2 0 0
T6 104855 2 0 0
T8 105965 2 0 0
T9 90200 1 0 0
T10 145349 1 0 0
T27 149974 3 0 0
T38 61154 1 0 0

gen_assert_data_dst2src.SyncReqAckDataHoldDst2SrcB
NameAttemptsReal SuccessesFailuresIncomplete
Total 549436499 4316 0 0
T2 61148 1 0 0
T3 65177 1 0 0
T4 91950 1 0 0
T5 115823 2 0 0
T6 104855 2 0 0
T8 105965 2 0 0
T9 90200 1 0 0
T10 145349 1 0 0
T27 149974 3 0 0
T38 61154 1 0 0

0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%