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
90.74 96.47 89.29 99.75 100.00 68.18 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 1032981276 4478 0 0
gen_assert_data_dst2src.SyncReqAckDataHoldDst2SrcB 1032981276 4478 0 0


gen_assert_data_dst2src.SyncReqAckDataHoldDst2SrcA
NameAttemptsReal SuccessesFailuresIncomplete
Total 1032981276 4478 0 0
T2 84649 2 0 0
T3 76631 1 0 0
T4 104153 2 0 0
T5 127764 2 0 0
T6 79367 1 0 0
T7 0 2 0 0
T26 87872 2 0 0
T34 36418 0 0 0
T91 211864 0 0 0
T105 61525 1 0 0
T106 94103 1 0 0
T121 96268 2 0 0
T123 166559 0 0 0
T167 182279 0 0 0
T213 81443 11 0 0
T214 105437 8 0 0
T215 0 8 0 0
T236 650384 0 0 0
T263 0 8 0 0
T276 637696 0 0 0
T312 0 9 0 0
T313 0 12 0 0
T314 85784 0 0 0
T315 596324 0 0 0
T316 118205 0 0 0

gen_assert_data_dst2src.SyncReqAckDataHoldDst2SrcB
NameAttemptsReal SuccessesFailuresIncomplete
Total 1032981276 4478 0 0
T2 84649 2 0 0
T3 76631 1 0 0
T4 104153 2 0 0
T5 127764 2 0 0
T6 79367 1 0 0
T7 0 2 0 0
T26 87872 2 0 0
T34 36418 0 0 0
T91 211864 0 0 0
T105 61525 1 0 0
T106 94103 1 0 0
T121 96268 2 0 0
T123 166559 0 0 0
T167 182279 0 0 0
T213 81443 11 0 0
T214 105437 8 0 0
T215 0 8 0 0
T236 650384 0 0 0
T263 0 8 0 0
T276 637696 0 0 0
T312 0 9 0 0
T313 0 12 0 0
T314 85784 0 0 0
T315 596324 0 0 0
T316 118205 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 516490638 56 0 0
gen_assert_data_dst2src.SyncReqAckDataHoldDst2SrcB 516490638 56 0 0


gen_assert_data_dst2src.SyncReqAckDataHoldDst2SrcA
NameAttemptsReal SuccessesFailuresIncomplete
Total 516490638 56 0 0
T91 211864 0 0 0
T123 166559 0 0 0
T167 182279 0 0 0
T213 81443 11 0 0
T214 105437 8 0 0
T215 0 8 0 0
T236 650384 0 0 0
T263 0 8 0 0
T276 637696 0 0 0
T312 0 9 0 0
T313 0 12 0 0
T314 85784 0 0 0
T315 596324 0 0 0
T316 118205 0 0 0

gen_assert_data_dst2src.SyncReqAckDataHoldDst2SrcB
NameAttemptsReal SuccessesFailuresIncomplete
Total 516490638 56 0 0
T91 211864 0 0 0
T123 166559 0 0 0
T167 182279 0 0 0
T213 81443 11 0 0
T214 105437 8 0 0
T215 0 8 0 0
T236 650384 0 0 0
T263 0 8 0 0
T276 637696 0 0 0
T312 0 9 0 0
T313 0 12 0 0
T314 85784 0 0 0
T315 596324 0 0 0
T316 118205 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 516490638 4422 0 0
gen_assert_data_dst2src.SyncReqAckDataHoldDst2SrcB 516490638 4422 0 0


gen_assert_data_dst2src.SyncReqAckDataHoldDst2SrcA
NameAttemptsReal SuccessesFailuresIncomplete
Total 516490638 4422 0 0
T2 84649 2 0 0
T3 76631 1 0 0
T4 104153 2 0 0
T5 127764 2 0 0
T6 79367 1 0 0
T7 0 2 0 0
T26 87872 2 0 0
T34 36418 0 0 0
T105 61525 1 0 0
T106 94103 1 0 0
T121 96268 2 0 0

gen_assert_data_dst2src.SyncReqAckDataHoldDst2SrcB
NameAttemptsReal SuccessesFailuresIncomplete
Total 516490638 4422 0 0
T2 84649 2 0 0
T3 76631 1 0 0
T4 104153 2 0 0
T5 127764 2 0 0
T6 79367 1 0 0
T7 0 2 0 0
T26 87872 2 0 0
T34 36418 0 0 0
T105 61525 1 0 0
T106 94103 1 0 0
T121 96268 2 0 0

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