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

Module : prim_sync_reqack
SCORELINECONDTOGGLEFSMBRANCHASSERT
87.50 100.00 50.00 100.00 100.00

Source File(s) :
/workspaces/repo/scratch/os_regression_2024_09_23/clkmgr-sim-vcs/default/sim-vcs/../src/lowrisc_prim_all_0.1/rtl/prim_sync_reqack.sv

Module self-instances :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
tb.dut.u_io_meas.u_meas.gen_clk_timeout_chk.u_timeout_ref_to_clk.u_ref_timeout 87.50 100.00 100.00 100.00 50.00
tb.dut.u_io_div2_meas.u_meas.gen_clk_timeout_chk.u_timeout_ref_to_clk.u_ref_timeout 87.50 100.00 100.00 100.00 50.00
tb.dut.u_io_div4_meas.u_meas.gen_clk_timeout_chk.u_timeout_ref_to_clk.u_ref_timeout 87.50 100.00 100.00 100.00 50.00
tb.dut.u_main_meas.u_meas.gen_clk_timeout_chk.u_timeout_ref_to_clk.u_ref_timeout 87.50 100.00 100.00 100.00 50.00
tb.dut.u_usb_meas.u_meas.gen_clk_timeout_chk.u_timeout_ref_to_clk.u_ref_timeout 87.50 100.00 100.00 100.00 50.00
tb.dut.u_reg.u_io_meas_ctrl_en_cdc.u_arb.gen_wr_req.u_dst_update_sync 93.75 100.00 75.00 100.00 100.00
tb.dut.u_reg.u_io_div2_meas_ctrl_en_cdc.u_arb.gen_wr_req.u_dst_update_sync 93.75 100.00 75.00 100.00 100.00
tb.dut.u_reg.u_io_div4_meas_ctrl_en_cdc.u_arb.gen_wr_req.u_dst_update_sync 93.75 100.00 75.00 100.00 100.00
tb.dut.u_reg.u_main_meas_ctrl_en_cdc.u_arb.gen_wr_req.u_dst_update_sync 93.75 100.00 75.00 100.00 100.00
tb.dut.u_reg.u_usb_meas_ctrl_en_cdc.u_arb.gen_wr_req.u_dst_update_sync 93.75 100.00 75.00 100.00 100.00
tb.dut.u_io_meas.u_err_sync 93.75 100.00 75.00 100.00 100.00
tb.dut.u_io_div2_meas.u_err_sync 93.75 100.00 75.00 100.00 100.00
tb.dut.u_io_div4_meas.u_err_sync 93.75 100.00 75.00 100.00 100.00
tb.dut.u_main_meas.u_err_sync 93.75 100.00 75.00 100.00 100.00
tb.dut.u_usb_meas.u_err_sync 93.75 100.00 75.00 100.00 100.00



Module Instance : tb.dut.u_io_meas.u_meas.gen_clk_timeout_chk.u_timeout_ref_to_clk.u_ref_timeout

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
87.50 100.00 100.00 100.00 50.00


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
87.50 100.00 100.00 100.00 50.00


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
100.00 100.00 100.00 100.00 gen_clk_timeout_chk.u_timeout_ref_to_clk


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
gen_nrz_hs_protocol.ack_sync 100.00 100.00 100.00
gen_nrz_hs_protocol.req_sync 100.00 100.00 100.00



Module Instance : tb.dut.u_io_div2_meas.u_meas.gen_clk_timeout_chk.u_timeout_ref_to_clk.u_ref_timeout

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
87.50 100.00 100.00 100.00 50.00


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
87.50 100.00 100.00 100.00 50.00


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
100.00 100.00 100.00 100.00 gen_clk_timeout_chk.u_timeout_ref_to_clk


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
gen_nrz_hs_protocol.ack_sync 100.00 100.00 100.00
gen_nrz_hs_protocol.req_sync 100.00 100.00 100.00



Module Instance : tb.dut.u_io_div4_meas.u_meas.gen_clk_timeout_chk.u_timeout_ref_to_clk.u_ref_timeout

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
87.50 100.00 100.00 100.00 50.00


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
87.50 100.00 100.00 100.00 50.00


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
100.00 100.00 100.00 100.00 gen_clk_timeout_chk.u_timeout_ref_to_clk


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
gen_nrz_hs_protocol.ack_sync 100.00 100.00 100.00
gen_nrz_hs_protocol.req_sync 100.00 100.00 100.00



Module Instance : tb.dut.u_main_meas.u_meas.gen_clk_timeout_chk.u_timeout_ref_to_clk.u_ref_timeout

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
87.50 100.00 100.00 100.00 50.00


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
87.50 100.00 100.00 100.00 50.00


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
100.00 100.00 100.00 100.00 gen_clk_timeout_chk.u_timeout_ref_to_clk


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
gen_nrz_hs_protocol.ack_sync 100.00 100.00 100.00
gen_nrz_hs_protocol.req_sync 100.00 100.00 100.00



Module Instance : tb.dut.u_usb_meas.u_meas.gen_clk_timeout_chk.u_timeout_ref_to_clk.u_ref_timeout

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
87.50 100.00 100.00 100.00 50.00


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
87.50 100.00 100.00 100.00 50.00


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
100.00 100.00 100.00 100.00 gen_clk_timeout_chk.u_timeout_ref_to_clk


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
gen_nrz_hs_protocol.ack_sync 100.00 100.00 100.00
gen_nrz_hs_protocol.req_sync 100.00 100.00 100.00



Module Instance : tb.dut.u_reg.u_io_meas_ctrl_en_cdc.u_arb.gen_wr_req.u_dst_update_sync

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
93.75 100.00 75.00 100.00 100.00


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
93.75 100.00 75.00 100.00 100.00


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
73.61 90.00 76.19 78.26 50.00 u_arb


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
gen_nrz_hs_protocol.ack_sync 100.00 100.00 100.00
gen_nrz_hs_protocol.req_sync 100.00 100.00 100.00



Module Instance : tb.dut.u_reg.u_io_div2_meas_ctrl_en_cdc.u_arb.gen_wr_req.u_dst_update_sync

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
93.75 100.00 75.00 100.00 100.00


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
93.75 100.00 75.00 100.00 100.00


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
73.61 90.00 76.19 78.26 50.00 u_arb


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
gen_nrz_hs_protocol.ack_sync 100.00 100.00 100.00
gen_nrz_hs_protocol.req_sync 100.00 100.00 100.00



Module Instance : tb.dut.u_reg.u_io_div4_meas_ctrl_en_cdc.u_arb.gen_wr_req.u_dst_update_sync

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
93.75 100.00 75.00 100.00 100.00


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
93.75 100.00 75.00 100.00 100.00


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
79.17 94.00 85.71 86.96 50.00 u_arb


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
gen_nrz_hs_protocol.ack_sync 100.00 100.00 100.00
gen_nrz_hs_protocol.req_sync 100.00 100.00 100.00



Module Instance : tb.dut.u_reg.u_main_meas_ctrl_en_cdc.u_arb.gen_wr_req.u_dst_update_sync

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
93.75 100.00 75.00 100.00 100.00


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
93.75 100.00 75.00 100.00 100.00


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
73.61 90.00 76.19 78.26 50.00 u_arb


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
gen_nrz_hs_protocol.ack_sync 100.00 100.00 100.00
gen_nrz_hs_protocol.req_sync 100.00 100.00 100.00



Module Instance : tb.dut.u_reg.u_usb_meas_ctrl_en_cdc.u_arb.gen_wr_req.u_dst_update_sync

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
93.75 100.00 75.00 100.00 100.00


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
93.75 100.00 75.00 100.00 100.00


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
73.61 90.00 76.19 78.26 50.00 u_arb


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
gen_nrz_hs_protocol.ack_sync 100.00 100.00 100.00
gen_nrz_hs_protocol.req_sync 100.00 100.00 100.00



Module Instance : tb.dut.u_io_meas.u_err_sync

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
93.75 100.00 75.00 100.00 100.00


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
93.75 100.00 75.00 100.00 100.00


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
94.44 100.00 83.33 100.00 u_io_meas


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
gen_nrz_hs_protocol.ack_sync 100.00 100.00 100.00
gen_nrz_hs_protocol.req_sync 100.00 100.00 100.00



Module Instance : tb.dut.u_io_div2_meas.u_err_sync

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
93.75 100.00 75.00 100.00 100.00


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
93.75 100.00 75.00 100.00 100.00


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
94.44 100.00 83.33 100.00 u_io_div2_meas


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
gen_nrz_hs_protocol.ack_sync 100.00 100.00 100.00
gen_nrz_hs_protocol.req_sync 100.00 100.00 100.00



Module Instance : tb.dut.u_io_div4_meas.u_err_sync

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
93.75 100.00 75.00 100.00 100.00


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
93.75 100.00 75.00 100.00 100.00


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
94.44 100.00 83.33 100.00 u_io_div4_meas


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
gen_nrz_hs_protocol.ack_sync 100.00 100.00 100.00
gen_nrz_hs_protocol.req_sync 100.00 100.00 100.00



Module Instance : tb.dut.u_main_meas.u_err_sync

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
93.75 100.00 75.00 100.00 100.00


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
93.75 100.00 75.00 100.00 100.00


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
94.44 100.00 83.33 100.00 u_main_meas


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
gen_nrz_hs_protocol.ack_sync 100.00 100.00 100.00
gen_nrz_hs_protocol.req_sync 100.00 100.00 100.00



Module Instance : tb.dut.u_usb_meas.u_err_sync

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
93.75 100.00 75.00 100.00 100.00


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
93.75 100.00 75.00 100.00 100.00


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
94.44 100.00 83.33 100.00 u_usb_meas


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
gen_nrz_hs_protocol.ack_sync 100.00 100.00 100.00
gen_nrz_hs_protocol.req_sync 100.00 100.00 100.00

Line Coverage for Module : prim_sync_reqack
Line No.TotalCoveredPercent
TOTAL3636100.00
CONT_ASSIGN5500
CONT_ASSIGN19411100.00
CONT_ASSIGN19511100.00
ALWAYS2191212100.00
ALWAYS2631212100.00
ALWAYS30755100.00
ALWAYS31655100.00
CONT_ASSIGN33500
ALWAYS33900

54 logic unused_req_chk; 55 unreachable assign unused_req_chk = req_chk_i; 56 57 if (EnRzHs) begin : gen_rz_hs_protocol 58 ////////////////// 59 // RZ protocol // 60 ////////////////// 61 62 // Types 63 typedef enum logic { 64 LoSt, HiSt 65 } rz_fsm_e; 66 67 // Signals 68 rz_fsm_e src_fsm_d, src_fsm_q; 69 rz_fsm_e dst_fsm_d, dst_fsm_q; 70 logic src_ack, dst_ack; 71 logic src_req, dst_req; 72 73 // REQ-side FSM (SRC domain) 74 always_comb begin : src_fsm 75 src_fsm_d = src_fsm_q; 76 src_ack_o = 1'b0; 77 src_req = 1'b0; 78 79 unique case (src_fsm_q) 80 LoSt: begin 81 // Wait for the ack to go back to zero before starting 82 // a new transaction. 83 if (!src_ack && src_req_i) begin 84 src_fsm_d = HiSt; 85 end 86 end 87 HiSt: begin 88 src_req = 1'b1; 89 // Forward the acknowledgement. 90 src_ack_o = src_ack; 91 // If request drops out, we go back to LoSt. 92 // If DST side asserts ack, we also go back to LoSt. 93 if (!src_req_i || src_ack) begin 94 src_fsm_d = LoSt; 95 end 96 end 97 //VCS coverage off 98 // pragma coverage off 99 default: ; 100 //VCS coverage on 101 // pragma coverage on 102 endcase 103 end 104 105 // Move ACK over to SRC domain. 106 prim_flop_2sync #( 107 .Width(1) 108 ) ack_sync ( 109 .clk_i (clk_src_i), 110 .rst_ni (rst_src_ni), 111 .d_i (dst_ack), 112 .q_o (src_ack) 113 ); 114 115 // Registers 116 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin 117 if (!rst_src_ni) begin 118 src_fsm_q <= LoSt; 119 end else begin 120 src_fsm_q <= src_fsm_d; 121 end 122 end 123 124 // ACK-side FSM (DST domain) 125 always_comb begin : dst_fsm 126 dst_fsm_d = dst_fsm_q; 127 dst_req_o = 1'b0; 128 dst_ack = 1'b0; 129 130 unique case (dst_fsm_q) 131 LoSt: begin 132 if (dst_req) begin 133 // Forward the request. 134 dst_req_o = 1'b1; 135 // Wait for the request and acknowledge to be asserted 136 // before responding to the SRC side. 137 if (dst_ack_i) begin 138 dst_fsm_d = HiSt; 139 end 140 end 141 end 142 HiSt: begin 143 dst_ack = 1'b1; 144 // Wait for the request to drop back to zero. 145 if (!dst_req) begin 146 dst_fsm_d = LoSt; 147 end 148 end 149 //VCS coverage off 150 // pragma coverage off 151 default: ; 152 //VCS coverage on 153 // pragma coverage on 154 endcase 155 end 156 157 // Move REQ over to DST domain. 158 prim_flop_2sync #( 159 .Width(1) 160 ) req_sync ( 161 .clk_i (clk_dst_i), 162 .rst_ni (rst_dst_ni), 163 .d_i (src_req), 164 .q_o (dst_req) 165 ); 166 167 // Registers 168 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin 169 if (!rst_dst_ni) begin 170 dst_fsm_q <= LoSt; 171 end else begin 172 dst_fsm_q <= dst_fsm_d; 173 end 174 end 175 176 end else begin : gen_nrz_hs_protocol 177 ////////////////// 178 // NRZ protocol // 179 ////////////////// 180 181 // Types 182 typedef enum logic { 183 EVEN, ODD 184 } sync_reqack_fsm_e; 185 186 // Signals 187 sync_reqack_fsm_e src_fsm_ns, src_fsm_cs; 188 sync_reqack_fsm_e dst_fsm_ns, dst_fsm_cs; 189 190 logic src_req_d, src_req_q, src_ack; 191 logic dst_ack_d, dst_ack_q, dst_req; 192 logic src_handshake, dst_handshake; 193 194 1/1 assign src_handshake = src_req_i & src_ack_o; Tests: T4 T5 T6  195 1/1 assign dst_handshake = dst_req_o & dst_ack_i; Tests: T4 T5 T6  196 197 // Move REQ over to DST domain. 198 prim_flop_2sync #( 199 .Width(1) 200 ) req_sync ( 201 .clk_i (clk_dst_i), 202 .rst_ni (rst_dst_ni), 203 .d_i (src_req_q), 204 .q_o (dst_req) 205 ); 206 207 // Move ACK over to SRC domain. 208 prim_flop_2sync #( 209 .Width(1) 210 ) ack_sync ( 211 .clk_i (clk_src_i), 212 .rst_ni (rst_src_ni), 213 .d_i (dst_ack_q), 214 .q_o (src_ack) 215 ); 216 217 // REQ-side FSM (SRC domain) 218 always_comb begin : src_fsm 219 1/1 src_fsm_ns = src_fsm_cs; Tests: T4 T5 T6  220 221 // By default, we keep the internal REQ value and don't ACK. 222 1/1 src_req_d = src_req_q; Tests: T4 T5 T6  223 1/1 src_ack_o = 1'b0; Tests: T4 T5 T6  224 225 1/1 unique case (src_fsm_cs) Tests: T4 T5 T6  226 227 EVEN: begin 228 // Simply forward REQ and ACK. 229 1/1 src_req_d = src_req_i; Tests: T4 T5 T6  230 1/1 src_ack_o = src_ack; Tests: T4 T5 T6  231 232 // The handshake is done for exactly 1 clock cycle. 233 1/1 if (src_handshake) begin Tests: T4 T5 T6  234 1/1 src_fsm_ns = ODD; Tests: T4 T5 T6  235 end MISSING_ELSE 236 end 237 238 ODD: begin 239 // Internal REQ and ACK have inverted meaning now. If src_req_i is high again, this 240 // signals a new transaction. 241 1/1 src_req_d = ~src_req_i; Tests: T4 T5 T6  242 1/1 src_ack_o = ~src_ack; Tests: T4 T5 T6  243 244 // The handshake is done for exactly 1 clock cycle. 245 1/1 if (src_handshake) begin Tests: T4 T5 T6  246 1/1 src_fsm_ns = EVEN; Tests: T4 T5 T6  247 end MISSING_ELSE 248 end 249 250 //VCS coverage off 251 // pragma coverage off 252 253 default: ; 254 255 //VCS coverage on 256 // pragma coverage on 257 258 endcase 259 end 260 261 // ACK-side FSM (DST domain) 262 always_comb begin : dst_fsm 263 1/1 dst_fsm_ns = dst_fsm_cs; Tests: T4 T5 T6  264 265 // By default, we don't REQ and keep the internal ACK. 266 1/1 dst_req_o = 1'b0; Tests: T4 T5 T6  267 1/1 dst_ack_d = dst_ack_q; Tests: T4 T5 T6  268 269 1/1 unique case (dst_fsm_cs) Tests: T4 T5 T6  270 271 EVEN: begin 272 // Simply forward REQ and ACK. 273 1/1 dst_req_o = dst_req; Tests: T4 T5 T6  274 1/1 dst_ack_d = dst_ack_i; Tests: T4 T5 T6  275 276 // The handshake is done for exactly 1 clock cycle. 277 1/1 if (dst_handshake) begin Tests: T4 T5 T6  278 1/1 dst_fsm_ns = ODD; Tests: T4 T5 T6  279 end MISSING_ELSE 280 end 281 282 ODD: begin 283 // Internal REQ and ACK have inverted meaning now. If dst_req goes low, this signals a new 284 // transaction. 285 1/1 dst_req_o = ~dst_req; Tests: T4 T5 T6  286 1/1 dst_ack_d = ~dst_ack_i; Tests: T4 T5 T6  287 288 // The handshake is done for exactly 1 clock cycle. 289 1/1 if (dst_handshake) begin Tests: T4 T5 T6  290 1/1 dst_fsm_ns = EVEN; Tests: T4 T5 T6  291 end MISSING_ELSE 292 end 293 294 //VCS coverage off 295 // pragma coverage off 296 297 default: ; 298 299 //VCS coverage on 300 // pragma coverage on 301 302 endcase 303 end 304 305 // Registers 306 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin 307 1/1 if (!rst_src_ni) begin Tests: T4 T5 T6  308 1/1 src_fsm_cs <= EVEN; Tests: T4 T5 T6  309 1/1 src_req_q <= 1'b0; Tests: T4 T5 T6  310 end else begin 311 1/1 src_fsm_cs <= src_fsm_ns; Tests: T4 T5 T6  312 1/1 src_req_q <= src_req_d; Tests: T4 T5 T6  313 end 314 end 315 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin 316 1/1 if (!rst_dst_ni) begin Tests: T4 T5 T6  317 1/1 dst_fsm_cs <= EVEN; Tests: T4 T5 T6  318 1/1 dst_ack_q <= 1'b0; Tests: T4 T5 T6  319 end else begin 320 1/1 dst_fsm_cs <= dst_fsm_ns; Tests: T4 T5 T6  321 1/1 dst_ack_q <= dst_ack_d; Tests: T4 T5 T6  322 end 323 end 324 end 325 326 //////////////// 327 // Assertions // 328 //////////////// 329 330 `ifdef INC_ASSERT 331 //VCS coverage off 332 // pragma coverage off 333 334 logic effective_rst_n; 335 unreachable assign effective_rst_n = rst_src_ni && rst_dst_ni; 336 337 logic chk_flag; 338 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin 339 unreachable if (!effective_rst_n) begin 340 unreachable chk_flag <= '0; 341 unreachable end else if (src_req_i && !chk_flag) begin 342 unreachable chk_flag <= 1'b1; 343 end ==> MISSING_ELSE

Cond Coverage for Module : prim_sync_reqack
TotalCoveredPercent
Conditions6350.00
Logical6350.00
Non-Logical00
Event00

 LINE       194
 EXPRESSION (src_req_i & src_ack_o)
             ----1----   ----2----
-1--2-StatusTests
01Not Covered
10CoveredT4,T5,T6
11CoveredT4,T5,T6

 LINE       195
 EXPRESSION (dst_req_o & dst_ack_i)
             ----1----   ----2----
-1--2-StatusTests
01Not Covered
10Not Covered
11CoveredT4,T5,T6

Branch Coverage for Module : prim_sync_reqack
Line No.TotalCoveredPercent
Branches 12 12 100.00
CASE 225 4 4 100.00
CASE 269 4 4 100.00
IF 307 2 2 100.00
IF 316 2 2 100.00


225 unique case (src_fsm_cs) -1- 226 227 EVEN: begin 228 // Simply forward REQ and ACK. 229 src_req_d = src_req_i; 230 src_ack_o = src_ack; 231 232 // The handshake is done for exactly 1 clock cycle. 233 if (src_handshake) begin -2- 234 src_fsm_ns = ODD; ==> 235 end MISSING_ELSE ==> 236 end 237 238 ODD: begin 239 // Internal REQ and ACK have inverted meaning now. If src_req_i is high again, this 240 // signals a new transaction. 241 src_req_d = ~src_req_i; 242 src_ack_o = ~src_ack; 243 244 // The handshake is done for exactly 1 clock cycle. 245 if (src_handshake) begin -3- 246 src_fsm_ns = EVEN; ==> 247 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
EVEN 1 - Covered T4,T5,T6
EVEN 0 - Covered T4,T5,T6
ODD - 1 Covered T4,T5,T6
ODD - 0 Covered T4,T5,T6


269 unique case (dst_fsm_cs) -1- 270 271 EVEN: begin 272 // Simply forward REQ and ACK. 273 dst_req_o = dst_req; 274 dst_ack_d = dst_ack_i; 275 276 // The handshake is done for exactly 1 clock cycle. 277 if (dst_handshake) begin -2- 278 dst_fsm_ns = ODD; ==> 279 end MISSING_ELSE ==> 280 end 281 282 ODD: begin 283 // Internal REQ and ACK have inverted meaning now. If dst_req goes low, this signals a new 284 // transaction. 285 dst_req_o = ~dst_req; 286 dst_ack_d = ~dst_ack_i; 287 288 // The handshake is done for exactly 1 clock cycle. 289 if (dst_handshake) begin -3- 290 dst_fsm_ns = EVEN; ==> 291 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
EVEN 1 - Covered T4,T5,T6
EVEN 0 - Covered T4,T5,T6
ODD - 1 Covered T4,T5,T6
ODD - 0 Covered T4,T5,T6


307 if (!rst_src_ni) begin -1- 308 src_fsm_cs <= EVEN; ==> 309 src_req_q <= 1'b0; 310 end else begin 311 src_fsm_cs <= src_fsm_ns; ==>

Branches:
-1-StatusTests
1 Covered T4,T5,T6
0 Covered T4,T5,T6


316 if (!rst_dst_ni) begin -1- 317 dst_fsm_cs <= EVEN; ==> 318 dst_ack_q <= 1'b0; 319 end else begin 320 dst_fsm_cs <= dst_fsm_ns; ==>

Branches:
-1-StatusTests
1 Covered T4,T5,T6
0 Covered T4,T5,T6


Assert Coverage for Module : prim_sync_reqack
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
SyncReqAckAckNeedsReq 705195610 1654678 0 0
SyncReqAckHoldReq 625291451 71809 0 0


SyncReqAckAckNeedsReq
NameAttemptsReal SuccessesFailuresIncomplete
Total 705195610 1654678 0 0
T4 813 24 0 0
T5 981 30 0 0
T6 1188 35 0 0
T7 54981 6 0 0
T8 0 8 0 0
T9 0 28 0 0
T10 10140 0 0 0
T11 0 18 0 0
T12 0 11 0 0
T13 0 19 0 0
T16 0 13 0 0
T17 0 3 0 0
T27 33429 3 0 0
T28 1125 32 0 0
T29 700 20 0 0
T30 756 22 0 0
T31 4318 138 0 0
T32 1001 32 0 0
T33 2941 95 0 0
T34 4720 151 0 0
T35 0 11 0 0
T36 0 14 0 0
T37 2274 0 0 0
T38 2564 0 0 0
T39 6813 0 0 0
T40 652 0 0 0
T41 752 0 0 0
T42 2815 0 0 0
T43 2088 0 0 0
T44 32206 0 0 0

SyncReqAckHoldReq
NameAttemptsReal SuccessesFailuresIncomplete
Total 625291451 71809 0 0
T1 0 10 0 0
T2 0 14 0 0
T3 0 10 0 0
T7 299872 45 0 0
T8 0 8 0 0
T9 0 57 0 0
T10 12709 12 0 0
T11 0 49 0 0
T12 0 26 0 0
T13 0 26 0 0
T14 0 11 0 0
T15 0 21 0 0
T16 0 20 0 0
T17 0 6 0 0
T18 5407 0 0 0
T19 68936 0 0 0
T20 2236 0 0 0
T21 411 0 0 0
T22 24020 0 0 0
T23 5134 0 0 0
T24 8546 0 0 0
T25 10950 0 0 0
T26 704 0 0 0
T27 32678 18 0 0
T35 0 35 0 0
T36 0 18 0 0
T37 4439 0 0 0
T38 9434 0 0 0
T39 13567 4 0 0
T40 1267 0 0 0
T41 2659 0 0 0
T42 26966 0 0 0
T43 9974 0 0 0
T44 24419 12 0 0
T45 42622 12 0 0
T46 0 4 0 0

Line Coverage for Instance : tb.dut.u_io_meas.u_meas.gen_clk_timeout_chk.u_timeout_ref_to_clk.u_ref_timeout
Line No.TotalCoveredPercent
TOTAL3636100.00
CONT_ASSIGN5500
CONT_ASSIGN19411100.00
CONT_ASSIGN19511100.00
ALWAYS2191212100.00
ALWAYS2631212100.00
ALWAYS30755100.00
ALWAYS31655100.00
CONT_ASSIGN33500
ALWAYS33900

54 logic unused_req_chk; 55 unreachable assign unused_req_chk = req_chk_i; 56 57 if (EnRzHs) begin : gen_rz_hs_protocol 58 ////////////////// 59 // RZ protocol // 60 ////////////////// 61 62 // Types 63 typedef enum logic { 64 LoSt, HiSt 65 } rz_fsm_e; 66 67 // Signals 68 rz_fsm_e src_fsm_d, src_fsm_q; 69 rz_fsm_e dst_fsm_d, dst_fsm_q; 70 logic src_ack, dst_ack; 71 logic src_req, dst_req; 72 73 // REQ-side FSM (SRC domain) 74 always_comb begin : src_fsm 75 src_fsm_d = src_fsm_q; 76 src_ack_o = 1'b0; 77 src_req = 1'b0; 78 79 unique case (src_fsm_q) 80 LoSt: begin 81 // Wait for the ack to go back to zero before starting 82 // a new transaction. 83 if (!src_ack && src_req_i) begin 84 src_fsm_d = HiSt; 85 end 86 end 87 HiSt: begin 88 src_req = 1'b1; 89 // Forward the acknowledgement. 90 src_ack_o = src_ack; 91 // If request drops out, we go back to LoSt. 92 // If DST side asserts ack, we also go back to LoSt. 93 if (!src_req_i || src_ack) begin 94 src_fsm_d = LoSt; 95 end 96 end 97 //VCS coverage off 98 // pragma coverage off 99 default: ; 100 //VCS coverage on 101 // pragma coverage on 102 endcase 103 end 104 105 // Move ACK over to SRC domain. 106 prim_flop_2sync #( 107 .Width(1) 108 ) ack_sync ( 109 .clk_i (clk_src_i), 110 .rst_ni (rst_src_ni), 111 .d_i (dst_ack), 112 .q_o (src_ack) 113 ); 114 115 // Registers 116 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin 117 if (!rst_src_ni) begin 118 src_fsm_q <= LoSt; 119 end else begin 120 src_fsm_q <= src_fsm_d; 121 end 122 end 123 124 // ACK-side FSM (DST domain) 125 always_comb begin : dst_fsm 126 dst_fsm_d = dst_fsm_q; 127 dst_req_o = 1'b0; 128 dst_ack = 1'b0; 129 130 unique case (dst_fsm_q) 131 LoSt: begin 132 if (dst_req) begin 133 // Forward the request. 134 dst_req_o = 1'b1; 135 // Wait for the request and acknowledge to be asserted 136 // before responding to the SRC side. 137 if (dst_ack_i) begin 138 dst_fsm_d = HiSt; 139 end 140 end 141 end 142 HiSt: begin 143 dst_ack = 1'b1; 144 // Wait for the request to drop back to zero. 145 if (!dst_req) begin 146 dst_fsm_d = LoSt; 147 end 148 end 149 //VCS coverage off 150 // pragma coverage off 151 default: ; 152 //VCS coverage on 153 // pragma coverage on 154 endcase 155 end 156 157 // Move REQ over to DST domain. 158 prim_flop_2sync #( 159 .Width(1) 160 ) req_sync ( 161 .clk_i (clk_dst_i), 162 .rst_ni (rst_dst_ni), 163 .d_i (src_req), 164 .q_o (dst_req) 165 ); 166 167 // Registers 168 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin 169 if (!rst_dst_ni) begin 170 dst_fsm_q <= LoSt; 171 end else begin 172 dst_fsm_q <= dst_fsm_d; 173 end 174 end 175 176 end else begin : gen_nrz_hs_protocol 177 ////////////////// 178 // NRZ protocol // 179 ////////////////// 180 181 // Types 182 typedef enum logic { 183 EVEN, ODD 184 } sync_reqack_fsm_e; 185 186 // Signals 187 sync_reqack_fsm_e src_fsm_ns, src_fsm_cs; 188 sync_reqack_fsm_e dst_fsm_ns, dst_fsm_cs; 189 190 logic src_req_d, src_req_q, src_ack; 191 logic dst_ack_d, dst_ack_q, dst_req; 192 logic src_handshake, dst_handshake; 193 194 1/1 assign src_handshake = src_req_i & src_ack_o; Tests: T4 T5 T6  195 1/1 assign dst_handshake = dst_req_o & dst_ack_i; Tests: T4 T5 T6  196 197 // Move REQ over to DST domain. 198 prim_flop_2sync #( 199 .Width(1) 200 ) req_sync ( 201 .clk_i (clk_dst_i), 202 .rst_ni (rst_dst_ni), 203 .d_i (src_req_q), 204 .q_o (dst_req) 205 ); 206 207 // Move ACK over to SRC domain. 208 prim_flop_2sync #( 209 .Width(1) 210 ) ack_sync ( 211 .clk_i (clk_src_i), 212 .rst_ni (rst_src_ni), 213 .d_i (dst_ack_q), 214 .q_o (src_ack) 215 ); 216 217 // REQ-side FSM (SRC domain) 218 always_comb begin : src_fsm 219 1/1 src_fsm_ns = src_fsm_cs; Tests: T4 T5 T6  220 221 // By default, we keep the internal REQ value and don't ACK. 222 1/1 src_req_d = src_req_q; Tests: T4 T5 T6  223 1/1 src_ack_o = 1'b0; Tests: T4 T5 T6  224 225 1/1 unique case (src_fsm_cs) Tests: T4 T5 T6  226 227 EVEN: begin 228 // Simply forward REQ and ACK. 229 1/1 src_req_d = src_req_i; Tests: T4 T5 T6  230 1/1 src_ack_o = src_ack; Tests: T4 T5 T6  231 232 // The handshake is done for exactly 1 clock cycle. 233 1/1 if (src_handshake) begin Tests: T4 T5 T6  234 1/1 src_fsm_ns = ODD; Tests: T4 T5 T6  235 end MISSING_ELSE 236 end 237 238 ODD: begin 239 // Internal REQ and ACK have inverted meaning now. If src_req_i is high again, this 240 // signals a new transaction. 241 1/1 src_req_d = ~src_req_i; Tests: T4 T5 T6  242 1/1 src_ack_o = ~src_ack; Tests: T4 T5 T6  243 244 // The handshake is done for exactly 1 clock cycle. 245 1/1 if (src_handshake) begin Tests: T4 T5 T6  246 1/1 src_fsm_ns = EVEN; Tests: T4 T5 T6  247 end MISSING_ELSE 248 end 249 250 //VCS coverage off 251 // pragma coverage off 252 253 default: ; 254 255 //VCS coverage on 256 // pragma coverage on 257 258 endcase 259 end 260 261 // ACK-side FSM (DST domain) 262 always_comb begin : dst_fsm 263 1/1 dst_fsm_ns = dst_fsm_cs; Tests: T4 T5 T6  264 265 // By default, we don't REQ and keep the internal ACK. 266 1/1 dst_req_o = 1'b0; Tests: T4 T5 T6  267 1/1 dst_ack_d = dst_ack_q; Tests: T4 T5 T6  268 269 1/1 unique case (dst_fsm_cs) Tests: T4 T5 T6  270 271 EVEN: begin 272 // Simply forward REQ and ACK. 273 1/1 dst_req_o = dst_req; Tests: T4 T5 T6  274 1/1 dst_ack_d = dst_ack_i; Tests: T4 T5 T6  275 276 // The handshake is done for exactly 1 clock cycle. 277 1/1 if (dst_handshake) begin Tests: T4 T5 T6  278 1/1 dst_fsm_ns = ODD; Tests: T4 T5 T6  279 end MISSING_ELSE 280 end 281 282 ODD: begin 283 // Internal REQ and ACK have inverted meaning now. If dst_req goes low, this signals a new 284 // transaction. 285 1/1 dst_req_o = ~dst_req; Tests: T4 T5 T6  286 1/1 dst_ack_d = ~dst_ack_i; Tests: T4 T5 T6  287 288 // The handshake is done for exactly 1 clock cycle. 289 1/1 if (dst_handshake) begin Tests: T4 T5 T6  290 1/1 dst_fsm_ns = EVEN; Tests: T4 T5 T6  291 end MISSING_ELSE 292 end 293 294 //VCS coverage off 295 // pragma coverage off 296 297 default: ; 298 299 //VCS coverage on 300 // pragma coverage on 301 302 endcase 303 end 304 305 // Registers 306 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin 307 1/1 if (!rst_src_ni) begin Tests: T4 T5 T6  308 1/1 src_fsm_cs <= EVEN; Tests: T4 T5 T6  309 1/1 src_req_q <= 1'b0; Tests: T4 T5 T6  310 end else begin 311 1/1 src_fsm_cs <= src_fsm_ns; Tests: T4 T5 T6  312 1/1 src_req_q <= src_req_d; Tests: T4 T5 T6  313 end 314 end 315 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin 316 1/1 if (!rst_dst_ni) begin Tests: T4 T5 T6  317 1/1 dst_fsm_cs <= EVEN; Tests: T4 T5 T6  318 1/1 dst_ack_q <= 1'b0; Tests: T4 T5 T6  319 end else begin 320 1/1 dst_fsm_cs <= dst_fsm_ns; Tests: T4 T5 T6  321 1/1 dst_ack_q <= dst_ack_d; Tests: T4 T5 T6  322 end 323 end 324 end 325 326 //////////////// 327 // Assertions // 328 //////////////// 329 330 `ifdef INC_ASSERT 331 //VCS coverage off 332 // pragma coverage off 333 334 logic effective_rst_n; 335 unreachable assign effective_rst_n = rst_src_ni && rst_dst_ni; 336 337 logic chk_flag; 338 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin 339 unreachable if (!effective_rst_n) begin 340 unreachable chk_flag <= '0; 341 unreachable end else if (src_req_i && !chk_flag) begin 342 unreachable chk_flag <= 1'b1; 343 end ==> MISSING_ELSE

Cond Coverage for Instance : tb.dut.u_io_meas.u_meas.gen_clk_timeout_chk.u_timeout_ref_to_clk.u_ref_timeout
TotalCoveredPercent
Conditions33100.00
Logical33100.00
Non-Logical00
Event00

 LINE       194
 EXPRESSION (src_req_i & src_ack_o)
             ----1----   ----2----
-1--2-StatusTests
01Unreachable
10CoveredT4,T5,T6
11CoveredT4,T5,T6

 LINE       195
 EXPRESSION (dst_req_o & dst_ack_i)
             ----1----   ----2----
-1--2-StatusTestsExclude Annotation
01Excluded VC_COV_UNR
10Excluded VC_COV_UNR
11CoveredT4,T5,T6

Branch Coverage for Instance : tb.dut.u_io_meas.u_meas.gen_clk_timeout_chk.u_timeout_ref_to_clk.u_ref_timeout
Line No.TotalCoveredPercent
Branches 12 12 100.00
CASE 225 4 4 100.00
CASE 269 4 4 100.00
IF 307 2 2 100.00
IF 316 2 2 100.00


225 unique case (src_fsm_cs) -1- 226 227 EVEN: begin 228 // Simply forward REQ and ACK. 229 src_req_d = src_req_i; 230 src_ack_o = src_ack; 231 232 // The handshake is done for exactly 1 clock cycle. 233 if (src_handshake) begin -2- 234 src_fsm_ns = ODD; ==> 235 end MISSING_ELSE ==> 236 end 237 238 ODD: begin 239 // Internal REQ and ACK have inverted meaning now. If src_req_i is high again, this 240 // signals a new transaction. 241 src_req_d = ~src_req_i; 242 src_ack_o = ~src_ack; 243 244 // The handshake is done for exactly 1 clock cycle. 245 if (src_handshake) begin -3- 246 src_fsm_ns = EVEN; ==> 247 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
EVEN 1 - Covered T4,T5,T6
EVEN 0 - Covered T4,T5,T6
ODD - 1 Covered T4,T5,T6
ODD - 0 Covered T4,T5,T6


269 unique case (dst_fsm_cs) -1- 270 271 EVEN: begin 272 // Simply forward REQ and ACK. 273 dst_req_o = dst_req; 274 dst_ack_d = dst_ack_i; 275 276 // The handshake is done for exactly 1 clock cycle. 277 if (dst_handshake) begin -2- 278 dst_fsm_ns = ODD; ==> 279 end MISSING_ELSE ==> 280 end 281 282 ODD: begin 283 // Internal REQ and ACK have inverted meaning now. If dst_req goes low, this signals a new 284 // transaction. 285 dst_req_o = ~dst_req; 286 dst_ack_d = ~dst_ack_i; 287 288 // The handshake is done for exactly 1 clock cycle. 289 if (dst_handshake) begin -3- 290 dst_fsm_ns = EVEN; ==> 291 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
EVEN 1 - Covered T4,T5,T6
EVEN 0 - Covered T4,T5,T6
ODD - 1 Covered T4,T5,T6
ODD - 0 Covered T4,T5,T6


307 if (!rst_src_ni) begin -1- 308 src_fsm_cs <= EVEN; ==> 309 src_req_q <= 1'b0; 310 end else begin 311 src_fsm_cs <= src_fsm_ns; ==>

Branches:
-1-StatusTests
1 Covered T4,T5,T6
0 Covered T4,T5,T6


316 if (!rst_dst_ni) begin -1- 317 dst_fsm_cs <= EVEN; ==> 318 dst_ack_q <= 1'b0; 319 end else begin 320 dst_fsm_cs <= dst_fsm_ns; ==>

Branches:
-1-StatusTests
1 Covered T4,T5,T6
0 Covered T4,T5,T6


Assert Coverage for Instance : tb.dut.u_io_meas.u_meas.gen_clk_timeout_chk.u_timeout_ref_to_clk.u_ref_timeout
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 2 2 100.00 1 50.00
Cover properties 0 0 0
Cover sequences 0 0 0
Total 2 2 100.00 1 50.00




Assertion Details

NameAttemptsReal SuccessesFailuresIncomplete
SyncReqAckAckNeedsReq 90243933 317850 0 0
SyncReqAckHoldReq 1468064 0 0 0


SyncReqAckAckNeedsReq
NameAttemptsReal SuccessesFailuresIncomplete
Total 90243933 317850 0 0
T4 1698 24 0 0
T5 2055 30 0 0
T6 2314 35 0 0
T28 2002 32 0 0
T29 1508 21 0 0
T30 1467 22 0 0
T31 8771 138 0 0
T32 2137 32 0 0
T33 6017 95 0 0
T34 9560 151 0 0

SyncReqAckHoldReq
NameAttemptsReal SuccessesFailuresIncomplete
Total 1468064 0 0 0

Line Coverage for Instance : tb.dut.u_io_div2_meas.u_meas.gen_clk_timeout_chk.u_timeout_ref_to_clk.u_ref_timeout
Line No.TotalCoveredPercent
TOTAL3636100.00
CONT_ASSIGN5500
CONT_ASSIGN19411100.00
CONT_ASSIGN19511100.00
ALWAYS2191212100.00
ALWAYS2631212100.00
ALWAYS30755100.00
ALWAYS31655100.00
CONT_ASSIGN33500
ALWAYS33900

54 logic unused_req_chk; 55 unreachable assign unused_req_chk = req_chk_i; 56 57 if (EnRzHs) begin : gen_rz_hs_protocol 58 ////////////////// 59 // RZ protocol // 60 ////////////////// 61 62 // Types 63 typedef enum logic { 64 LoSt, HiSt 65 } rz_fsm_e; 66 67 // Signals 68 rz_fsm_e src_fsm_d, src_fsm_q; 69 rz_fsm_e dst_fsm_d, dst_fsm_q; 70 logic src_ack, dst_ack; 71 logic src_req, dst_req; 72 73 // REQ-side FSM (SRC domain) 74 always_comb begin : src_fsm 75 src_fsm_d = src_fsm_q; 76 src_ack_o = 1'b0; 77 src_req = 1'b0; 78 79 unique case (src_fsm_q) 80 LoSt: begin 81 // Wait for the ack to go back to zero before starting 82 // a new transaction. 83 if (!src_ack && src_req_i) begin 84 src_fsm_d = HiSt; 85 end 86 end 87 HiSt: begin 88 src_req = 1'b1; 89 // Forward the acknowledgement. 90 src_ack_o = src_ack; 91 // If request drops out, we go back to LoSt. 92 // If DST side asserts ack, we also go back to LoSt. 93 if (!src_req_i || src_ack) begin 94 src_fsm_d = LoSt; 95 end 96 end 97 //VCS coverage off 98 // pragma coverage off 99 default: ; 100 //VCS coverage on 101 // pragma coverage on 102 endcase 103 end 104 105 // Move ACK over to SRC domain. 106 prim_flop_2sync #( 107 .Width(1) 108 ) ack_sync ( 109 .clk_i (clk_src_i), 110 .rst_ni (rst_src_ni), 111 .d_i (dst_ack), 112 .q_o (src_ack) 113 ); 114 115 // Registers 116 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin 117 if (!rst_src_ni) begin 118 src_fsm_q <= LoSt; 119 end else begin 120 src_fsm_q <= src_fsm_d; 121 end 122 end 123 124 // ACK-side FSM (DST domain) 125 always_comb begin : dst_fsm 126 dst_fsm_d = dst_fsm_q; 127 dst_req_o = 1'b0; 128 dst_ack = 1'b0; 129 130 unique case (dst_fsm_q) 131 LoSt: begin 132 if (dst_req) begin 133 // Forward the request. 134 dst_req_o = 1'b1; 135 // Wait for the request and acknowledge to be asserted 136 // before responding to the SRC side. 137 if (dst_ack_i) begin 138 dst_fsm_d = HiSt; 139 end 140 end 141 end 142 HiSt: begin 143 dst_ack = 1'b1; 144 // Wait for the request to drop back to zero. 145 if (!dst_req) begin 146 dst_fsm_d = LoSt; 147 end 148 end 149 //VCS coverage off 150 // pragma coverage off 151 default: ; 152 //VCS coverage on 153 // pragma coverage on 154 endcase 155 end 156 157 // Move REQ over to DST domain. 158 prim_flop_2sync #( 159 .Width(1) 160 ) req_sync ( 161 .clk_i (clk_dst_i), 162 .rst_ni (rst_dst_ni), 163 .d_i (src_req), 164 .q_o (dst_req) 165 ); 166 167 // Registers 168 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin 169 if (!rst_dst_ni) begin 170 dst_fsm_q <= LoSt; 171 end else begin 172 dst_fsm_q <= dst_fsm_d; 173 end 174 end 175 176 end else begin : gen_nrz_hs_protocol 177 ////////////////// 178 // NRZ protocol // 179 ////////////////// 180 181 // Types 182 typedef enum logic { 183 EVEN, ODD 184 } sync_reqack_fsm_e; 185 186 // Signals 187 sync_reqack_fsm_e src_fsm_ns, src_fsm_cs; 188 sync_reqack_fsm_e dst_fsm_ns, dst_fsm_cs; 189 190 logic src_req_d, src_req_q, src_ack; 191 logic dst_ack_d, dst_ack_q, dst_req; 192 logic src_handshake, dst_handshake; 193 194 1/1 assign src_handshake = src_req_i & src_ack_o; Tests: T4 T5 T6  195 1/1 assign dst_handshake = dst_req_o & dst_ack_i; Tests: T4 T5 T6  196 197 // Move REQ over to DST domain. 198 prim_flop_2sync #( 199 .Width(1) 200 ) req_sync ( 201 .clk_i (clk_dst_i), 202 .rst_ni (rst_dst_ni), 203 .d_i (src_req_q), 204 .q_o (dst_req) 205 ); 206 207 // Move ACK over to SRC domain. 208 prim_flop_2sync #( 209 .Width(1) 210 ) ack_sync ( 211 .clk_i (clk_src_i), 212 .rst_ni (rst_src_ni), 213 .d_i (dst_ack_q), 214 .q_o (src_ack) 215 ); 216 217 // REQ-side FSM (SRC domain) 218 always_comb begin : src_fsm 219 1/1 src_fsm_ns = src_fsm_cs; Tests: T4 T5 T6  220 221 // By default, we keep the internal REQ value and don't ACK. 222 1/1 src_req_d = src_req_q; Tests: T4 T5 T6  223 1/1 src_ack_o = 1'b0; Tests: T4 T5 T6  224 225 1/1 unique case (src_fsm_cs) Tests: T4 T5 T6  226 227 EVEN: begin 228 // Simply forward REQ and ACK. 229 1/1 src_req_d = src_req_i; Tests: T4 T5 T6  230 1/1 src_ack_o = src_ack; Tests: T4 T5 T6  231 232 // The handshake is done for exactly 1 clock cycle. 233 1/1 if (src_handshake) begin Tests: T4 T5 T6  234 1/1 src_fsm_ns = ODD; Tests: T4 T5 T6  235 end MISSING_ELSE 236 end 237 238 ODD: begin 239 // Internal REQ and ACK have inverted meaning now. If src_req_i is high again, this 240 // signals a new transaction. 241 1/1 src_req_d = ~src_req_i; Tests: T4 T5 T6  242 1/1 src_ack_o = ~src_ack; Tests: T4 T5 T6  243 244 // The handshake is done for exactly 1 clock cycle. 245 1/1 if (src_handshake) begin Tests: T4 T5 T6  246 1/1 src_fsm_ns = EVEN; Tests: T4 T5 T6  247 end MISSING_ELSE 248 end 249 250 //VCS coverage off 251 // pragma coverage off 252 253 default: ; 254 255 //VCS coverage on 256 // pragma coverage on 257 258 endcase 259 end 260 261 // ACK-side FSM (DST domain) 262 always_comb begin : dst_fsm 263 1/1 dst_fsm_ns = dst_fsm_cs; Tests: T4 T5 T6  264 265 // By default, we don't REQ and keep the internal ACK. 266 1/1 dst_req_o = 1'b0; Tests: T4 T5 T6  267 1/1 dst_ack_d = dst_ack_q; Tests: T4 T5 T6  268 269 1/1 unique case (dst_fsm_cs) Tests: T4 T5 T6  270 271 EVEN: begin 272 // Simply forward REQ and ACK. 273 1/1 dst_req_o = dst_req; Tests: T4 T5 T6  274 1/1 dst_ack_d = dst_ack_i; Tests: T4 T5 T6  275 276 // The handshake is done for exactly 1 clock cycle. 277 1/1 if (dst_handshake) begin Tests: T4 T5 T6  278 1/1 dst_fsm_ns = ODD; Tests: T4 T5 T6  279 end MISSING_ELSE 280 end 281 282 ODD: begin 283 // Internal REQ and ACK have inverted meaning now. If dst_req goes low, this signals a new 284 // transaction. 285 1/1 dst_req_o = ~dst_req; Tests: T4 T5 T6  286 1/1 dst_ack_d = ~dst_ack_i; Tests: T4 T5 T6  287 288 // The handshake is done for exactly 1 clock cycle. 289 1/1 if (dst_handshake) begin Tests: T4 T5 T6  290 1/1 dst_fsm_ns = EVEN; Tests: T4 T5 T6  291 end MISSING_ELSE 292 end 293 294 //VCS coverage off 295 // pragma coverage off 296 297 default: ; 298 299 //VCS coverage on 300 // pragma coverage on 301 302 endcase 303 end 304 305 // Registers 306 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin 307 1/1 if (!rst_src_ni) begin Tests: T4 T5 T6  308 1/1 src_fsm_cs <= EVEN; Tests: T4 T5 T6  309 1/1 src_req_q <= 1'b0; Tests: T4 T5 T6  310 end else begin 311 1/1 src_fsm_cs <= src_fsm_ns; Tests: T4 T5 T6  312 1/1 src_req_q <= src_req_d; Tests: T4 T5 T6  313 end 314 end 315 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin 316 1/1 if (!rst_dst_ni) begin Tests: T4 T5 T6  317 1/1 dst_fsm_cs <= EVEN; Tests: T4 T5 T6  318 1/1 dst_ack_q <= 1'b0; Tests: T4 T5 T6  319 end else begin 320 1/1 dst_fsm_cs <= dst_fsm_ns; Tests: T4 T5 T6  321 1/1 dst_ack_q <= dst_ack_d; Tests: T4 T5 T6  322 end 323 end 324 end 325 326 //////////////// 327 // Assertions // 328 //////////////// 329 330 `ifdef INC_ASSERT 331 //VCS coverage off 332 // pragma coverage off 333 334 logic effective_rst_n; 335 unreachable assign effective_rst_n = rst_src_ni && rst_dst_ni; 336 337 logic chk_flag; 338 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin 339 unreachable if (!effective_rst_n) begin 340 unreachable chk_flag <= '0; 341 unreachable end else if (src_req_i && !chk_flag) begin 342 unreachable chk_flag <= 1'b1; 343 end ==> MISSING_ELSE

Cond Coverage for Instance : tb.dut.u_io_div2_meas.u_meas.gen_clk_timeout_chk.u_timeout_ref_to_clk.u_ref_timeout
TotalCoveredPercent
Conditions33100.00
Logical33100.00
Non-Logical00
Event00

 LINE       194
 EXPRESSION (src_req_i & src_ack_o)
             ----1----   ----2----
-1--2-StatusTests
01Unreachable
10CoveredT4,T5,T6
11CoveredT4,T5,T6

 LINE       195
 EXPRESSION (dst_req_o & dst_ack_i)
             ----1----   ----2----
-1--2-StatusTestsExclude Annotation
01Excluded VC_COV_UNR
10Excluded VC_COV_UNR
11CoveredT4,T5,T6

Branch Coverage for Instance : tb.dut.u_io_div2_meas.u_meas.gen_clk_timeout_chk.u_timeout_ref_to_clk.u_ref_timeout
Line No.TotalCoveredPercent
Branches 12 12 100.00
CASE 225 4 4 100.00
CASE 269 4 4 100.00
IF 307 2 2 100.00
IF 316 2 2 100.00


225 unique case (src_fsm_cs) -1- 226 227 EVEN: begin 228 // Simply forward REQ and ACK. 229 src_req_d = src_req_i; 230 src_ack_o = src_ack; 231 232 // The handshake is done for exactly 1 clock cycle. 233 if (src_handshake) begin -2- 234 src_fsm_ns = ODD; ==> 235 end MISSING_ELSE ==> 236 end 237 238 ODD: begin 239 // Internal REQ and ACK have inverted meaning now. If src_req_i is high again, this 240 // signals a new transaction. 241 src_req_d = ~src_req_i; 242 src_ack_o = ~src_ack; 243 244 // The handshake is done for exactly 1 clock cycle. 245 if (src_handshake) begin -3- 246 src_fsm_ns = EVEN; ==> 247 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
EVEN 1 - Covered T4,T5,T6
EVEN 0 - Covered T4,T5,T6
ODD - 1 Covered T4,T5,T6
ODD - 0 Covered T4,T5,T6


269 unique case (dst_fsm_cs) -1- 270 271 EVEN: begin 272 // Simply forward REQ and ACK. 273 dst_req_o = dst_req; 274 dst_ack_d = dst_ack_i; 275 276 // The handshake is done for exactly 1 clock cycle. 277 if (dst_handshake) begin -2- 278 dst_fsm_ns = ODD; ==> 279 end MISSING_ELSE ==> 280 end 281 282 ODD: begin 283 // Internal REQ and ACK have inverted meaning now. If dst_req goes low, this signals a new 284 // transaction. 285 dst_req_o = ~dst_req; 286 dst_ack_d = ~dst_ack_i; 287 288 // The handshake is done for exactly 1 clock cycle. 289 if (dst_handshake) begin -3- 290 dst_fsm_ns = EVEN; ==> 291 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
EVEN 1 - Covered T4,T5,T6
EVEN 0 - Covered T4,T5,T6
ODD - 1 Covered T4,T5,T6
ODD - 0 Covered T4,T5,T6


307 if (!rst_src_ni) begin -1- 308 src_fsm_cs <= EVEN; ==> 309 src_req_q <= 1'b0; 310 end else begin 311 src_fsm_cs <= src_fsm_ns; ==>

Branches:
-1-StatusTests
1 Covered T4,T5,T6
0 Covered T4,T5,T6


316 if (!rst_dst_ni) begin -1- 317 dst_fsm_cs <= EVEN; ==> 318 dst_ack_q <= 1'b0; 319 end else begin 320 dst_fsm_cs <= dst_fsm_ns; ==>

Branches:
-1-StatusTests
1 Covered T4,T5,T6
0 Covered T4,T5,T6


Assert Coverage for Instance : tb.dut.u_io_div2_meas.u_meas.gen_clk_timeout_chk.u_timeout_ref_to_clk.u_ref_timeout
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 2 2 100.00 1 50.00
Cover properties 0 0 0
Cover sequences 0 0 0
Total 2 2 100.00 1 50.00




Assertion Details

NameAttemptsReal SuccessesFailuresIncomplete
SyncReqAckAckNeedsReq 44418973 317727 0 0
SyncReqAckHoldReq 1468064 0 0 0


SyncReqAckAckNeedsReq
NameAttemptsReal SuccessesFailuresIncomplete
Total 44418973 317727 0 0
T4 813 24 0 0
T5 981 30 0 0
T6 1188 35 0 0
T28 1125 32 0 0
T29 700 20 0 0
T30 756 22 0 0
T31 4318 138 0 0
T32 1001 32 0 0
T33 2941 95 0 0
T34 4720 151 0 0

SyncReqAckHoldReq
NameAttemptsReal SuccessesFailuresIncomplete
Total 1468064 0 0 0

Line Coverage for Instance : tb.dut.u_io_div4_meas.u_meas.gen_clk_timeout_chk.u_timeout_ref_to_clk.u_ref_timeout
Line No.TotalCoveredPercent
TOTAL3636100.00
CONT_ASSIGN5500
CONT_ASSIGN19411100.00
CONT_ASSIGN19511100.00
ALWAYS2191212100.00
ALWAYS2631212100.00
ALWAYS30755100.00
ALWAYS31655100.00
CONT_ASSIGN33500
ALWAYS33900

54 logic unused_req_chk; 55 unreachable assign unused_req_chk = req_chk_i; 56 57 if (EnRzHs) begin : gen_rz_hs_protocol 58 ////////////////// 59 // RZ protocol // 60 ////////////////// 61 62 // Types 63 typedef enum logic { 64 LoSt, HiSt 65 } rz_fsm_e; 66 67 // Signals 68 rz_fsm_e src_fsm_d, src_fsm_q; 69 rz_fsm_e dst_fsm_d, dst_fsm_q; 70 logic src_ack, dst_ack; 71 logic src_req, dst_req; 72 73 // REQ-side FSM (SRC domain) 74 always_comb begin : src_fsm 75 src_fsm_d = src_fsm_q; 76 src_ack_o = 1'b0; 77 src_req = 1'b0; 78 79 unique case (src_fsm_q) 80 LoSt: begin 81 // Wait for the ack to go back to zero before starting 82 // a new transaction. 83 if (!src_ack && src_req_i) begin 84 src_fsm_d = HiSt; 85 end 86 end 87 HiSt: begin 88 src_req = 1'b1; 89 // Forward the acknowledgement. 90 src_ack_o = src_ack; 91 // If request drops out, we go back to LoSt. 92 // If DST side asserts ack, we also go back to LoSt. 93 if (!src_req_i || src_ack) begin 94 src_fsm_d = LoSt; 95 end 96 end 97 //VCS coverage off 98 // pragma coverage off 99 default: ; 100 //VCS coverage on 101 // pragma coverage on 102 endcase 103 end 104 105 // Move ACK over to SRC domain. 106 prim_flop_2sync #( 107 .Width(1) 108 ) ack_sync ( 109 .clk_i (clk_src_i), 110 .rst_ni (rst_src_ni), 111 .d_i (dst_ack), 112 .q_o (src_ack) 113 ); 114 115 // Registers 116 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin 117 if (!rst_src_ni) begin 118 src_fsm_q <= LoSt; 119 end else begin 120 src_fsm_q <= src_fsm_d; 121 end 122 end 123 124 // ACK-side FSM (DST domain) 125 always_comb begin : dst_fsm 126 dst_fsm_d = dst_fsm_q; 127 dst_req_o = 1'b0; 128 dst_ack = 1'b0; 129 130 unique case (dst_fsm_q) 131 LoSt: begin 132 if (dst_req) begin 133 // Forward the request. 134 dst_req_o = 1'b1; 135 // Wait for the request and acknowledge to be asserted 136 // before responding to the SRC side. 137 if (dst_ack_i) begin 138 dst_fsm_d = HiSt; 139 end 140 end 141 end 142 HiSt: begin 143 dst_ack = 1'b1; 144 // Wait for the request to drop back to zero. 145 if (!dst_req) begin 146 dst_fsm_d = LoSt; 147 end 148 end 149 //VCS coverage off 150 // pragma coverage off 151 default: ; 152 //VCS coverage on 153 // pragma coverage on 154 endcase 155 end 156 157 // Move REQ over to DST domain. 158 prim_flop_2sync #( 159 .Width(1) 160 ) req_sync ( 161 .clk_i (clk_dst_i), 162 .rst_ni (rst_dst_ni), 163 .d_i (src_req), 164 .q_o (dst_req) 165 ); 166 167 // Registers 168 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin 169 if (!rst_dst_ni) begin 170 dst_fsm_q <= LoSt; 171 end else begin 172 dst_fsm_q <= dst_fsm_d; 173 end 174 end 175 176 end else begin : gen_nrz_hs_protocol 177 ////////////////// 178 // NRZ protocol // 179 ////////////////// 180 181 // Types 182 typedef enum logic { 183 EVEN, ODD 184 } sync_reqack_fsm_e; 185 186 // Signals 187 sync_reqack_fsm_e src_fsm_ns, src_fsm_cs; 188 sync_reqack_fsm_e dst_fsm_ns, dst_fsm_cs; 189 190 logic src_req_d, src_req_q, src_ack; 191 logic dst_ack_d, dst_ack_q, dst_req; 192 logic src_handshake, dst_handshake; 193 194 1/1 assign src_handshake = src_req_i & src_ack_o; Tests: T4 T5 T6  195 1/1 assign dst_handshake = dst_req_o & dst_ack_i; Tests: T4 T5 T6  196 197 // Move REQ over to DST domain. 198 prim_flop_2sync #( 199 .Width(1) 200 ) req_sync ( 201 .clk_i (clk_dst_i), 202 .rst_ni (rst_dst_ni), 203 .d_i (src_req_q), 204 .q_o (dst_req) 205 ); 206 207 // Move ACK over to SRC domain. 208 prim_flop_2sync #( 209 .Width(1) 210 ) ack_sync ( 211 .clk_i (clk_src_i), 212 .rst_ni (rst_src_ni), 213 .d_i (dst_ack_q), 214 .q_o (src_ack) 215 ); 216 217 // REQ-side FSM (SRC domain) 218 always_comb begin : src_fsm 219 1/1 src_fsm_ns = src_fsm_cs; Tests: T4 T5 T6  220 221 // By default, we keep the internal REQ value and don't ACK. 222 1/1 src_req_d = src_req_q; Tests: T4 T5 T6  223 1/1 src_ack_o = 1'b0; Tests: T4 T5 T6  224 225 1/1 unique case (src_fsm_cs) Tests: T4 T5 T6  226 227 EVEN: begin 228 // Simply forward REQ and ACK. 229 1/1 src_req_d = src_req_i; Tests: T4 T5 T6  230 1/1 src_ack_o = src_ack; Tests: T4 T5 T6  231 232 // The handshake is done for exactly 1 clock cycle. 233 1/1 if (src_handshake) begin Tests: T4 T5 T6  234 1/1 src_fsm_ns = ODD; Tests: T4 T5 T6  235 end MISSING_ELSE 236 end 237 238 ODD: begin 239 // Internal REQ and ACK have inverted meaning now. If src_req_i is high again, this 240 // signals a new transaction. 241 1/1 src_req_d = ~src_req_i; Tests: T4 T5 T6  242 1/1 src_ack_o = ~src_ack; Tests: T4 T5 T6  243 244 // The handshake is done for exactly 1 clock cycle. 245 1/1 if (src_handshake) begin Tests: T4 T5 T6  246 1/1 src_fsm_ns = EVEN; Tests: T4 T5 T6  247 end MISSING_ELSE 248 end 249 250 //VCS coverage off 251 // pragma coverage off 252 253 default: ; 254 255 //VCS coverage on 256 // pragma coverage on 257 258 endcase 259 end 260 261 // ACK-side FSM (DST domain) 262 always_comb begin : dst_fsm 263 1/1 dst_fsm_ns = dst_fsm_cs; Tests: T4 T5 T6  264 265 // By default, we don't REQ and keep the internal ACK. 266 1/1 dst_req_o = 1'b0; Tests: T4 T5 T6  267 1/1 dst_ack_d = dst_ack_q; Tests: T4 T5 T6  268 269 1/1 unique case (dst_fsm_cs) Tests: T4 T5 T6  270 271 EVEN: begin 272 // Simply forward REQ and ACK. 273 1/1 dst_req_o = dst_req; Tests: T4 T5 T6  274 1/1 dst_ack_d = dst_ack_i; Tests: T4 T5 T6  275 276 // The handshake is done for exactly 1 clock cycle. 277 1/1 if (dst_handshake) begin Tests: T4 T5 T6  278 1/1 dst_fsm_ns = ODD; Tests: T4 T5 T6  279 end MISSING_ELSE 280 end 281 282 ODD: begin 283 // Internal REQ and ACK have inverted meaning now. If dst_req goes low, this signals a new 284 // transaction. 285 1/1 dst_req_o = ~dst_req; Tests: T4 T5 T6  286 1/1 dst_ack_d = ~dst_ack_i; Tests: T4 T5 T6  287 288 // The handshake is done for exactly 1 clock cycle. 289 1/1 if (dst_handshake) begin Tests: T4 T5 T6  290 1/1 dst_fsm_ns = EVEN; Tests: T4 T5 T6  291 end MISSING_ELSE 292 end 293 294 //VCS coverage off 295 // pragma coverage off 296 297 default: ; 298 299 //VCS coverage on 300 // pragma coverage on 301 302 endcase 303 end 304 305 // Registers 306 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin 307 1/1 if (!rst_src_ni) begin Tests: T4 T5 T6  308 1/1 src_fsm_cs <= EVEN; Tests: T4 T5 T6  309 1/1 src_req_q <= 1'b0; Tests: T4 T5 T6  310 end else begin 311 1/1 src_fsm_cs <= src_fsm_ns; Tests: T4 T5 T6  312 1/1 src_req_q <= src_req_d; Tests: T4 T5 T6  313 end 314 end 315 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin 316 1/1 if (!rst_dst_ni) begin Tests: T4 T5 T6  317 1/1 dst_fsm_cs <= EVEN; Tests: T4 T5 T6  318 1/1 dst_ack_q <= 1'b0; Tests: T4 T5 T6  319 end else begin 320 1/1 dst_fsm_cs <= dst_fsm_ns; Tests: T4 T5 T6  321 1/1 dst_ack_q <= dst_ack_d; Tests: T4 T5 T6  322 end 323 end 324 end 325 326 //////////////// 327 // Assertions // 328 //////////////// 329 330 `ifdef INC_ASSERT 331 //VCS coverage off 332 // pragma coverage off 333 334 logic effective_rst_n; 335 unreachable assign effective_rst_n = rst_src_ni && rst_dst_ni; 336 337 logic chk_flag; 338 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin 339 unreachable if (!effective_rst_n) begin 340 unreachable chk_flag <= '0; 341 unreachable end else if (src_req_i && !chk_flag) begin 342 unreachable chk_flag <= 1'b1; 343 end ==> MISSING_ELSE

Cond Coverage for Instance : tb.dut.u_io_div4_meas.u_meas.gen_clk_timeout_chk.u_timeout_ref_to_clk.u_ref_timeout
TotalCoveredPercent
Conditions33100.00
Logical33100.00
Non-Logical00
Event00

 LINE       194
 EXPRESSION (src_req_i & src_ack_o)
             ----1----   ----2----
-1--2-StatusTests
01Unreachable
10CoveredT4,T5,T6
11CoveredT4,T5,T6

 LINE       195
 EXPRESSION (dst_req_o & dst_ack_i)
             ----1----   ----2----
-1--2-StatusTestsExclude Annotation
01Excluded VC_COV_UNR
10Excluded VC_COV_UNR
11CoveredT4,T5,T6

Branch Coverage for Instance : tb.dut.u_io_div4_meas.u_meas.gen_clk_timeout_chk.u_timeout_ref_to_clk.u_ref_timeout
Line No.TotalCoveredPercent
Branches 12 12 100.00
CASE 225 4 4 100.00
CASE 269 4 4 100.00
IF 307 2 2 100.00
IF 316 2 2 100.00


225 unique case (src_fsm_cs) -1- 226 227 EVEN: begin 228 // Simply forward REQ and ACK. 229 src_req_d = src_req_i; 230 src_ack_o = src_ack; 231 232 // The handshake is done for exactly 1 clock cycle. 233 if (src_handshake) begin -2- 234 src_fsm_ns = ODD; ==> 235 end MISSING_ELSE ==> 236 end 237 238 ODD: begin 239 // Internal REQ and ACK have inverted meaning now. If src_req_i is high again, this 240 // signals a new transaction. 241 src_req_d = ~src_req_i; 242 src_ack_o = ~src_ack; 243 244 // The handshake is done for exactly 1 clock cycle. 245 if (src_handshake) begin -3- 246 src_fsm_ns = EVEN; ==> 247 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
EVEN 1 - Covered T4,T5,T6
EVEN 0 - Covered T4,T5,T6
ODD - 1 Covered T4,T5,T6
ODD - 0 Covered T4,T5,T6


269 unique case (dst_fsm_cs) -1- 270 271 EVEN: begin 272 // Simply forward REQ and ACK. 273 dst_req_o = dst_req; 274 dst_ack_d = dst_ack_i; 275 276 // The handshake is done for exactly 1 clock cycle. 277 if (dst_handshake) begin -2- 278 dst_fsm_ns = ODD; ==> 279 end MISSING_ELSE ==> 280 end 281 282 ODD: begin 283 // Internal REQ and ACK have inverted meaning now. If dst_req goes low, this signals a new 284 // transaction. 285 dst_req_o = ~dst_req; 286 dst_ack_d = ~dst_ack_i; 287 288 // The handshake is done for exactly 1 clock cycle. 289 if (dst_handshake) begin -3- 290 dst_fsm_ns = EVEN; ==> 291 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
EVEN 1 - Covered T4,T5,T6
EVEN 0 - Covered T4,T5,T6
ODD - 1 Covered T4,T5,T6
ODD - 0 Covered T4,T5,T6


307 if (!rst_src_ni) begin -1- 308 src_fsm_cs <= EVEN; ==> 309 src_req_q <= 1'b0; 310 end else begin 311 src_fsm_cs <= src_fsm_ns; ==>

Branches:
-1-StatusTests
1 Covered T4,T5,T6
0 Covered T4,T5,T6


316 if (!rst_dst_ni) begin -1- 317 dst_fsm_cs <= EVEN; ==> 318 dst_ack_q <= 1'b0; 319 end else begin 320 dst_fsm_cs <= dst_fsm_ns; ==>

Branches:
-1-StatusTests
1 Covered T4,T5,T6
0 Covered T4,T5,T6


Assert Coverage for Instance : tb.dut.u_io_div4_meas.u_meas.gen_clk_timeout_chk.u_timeout_ref_to_clk.u_ref_timeout
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 2 2 100.00 1 50.00
Cover properties 0 0 0
Cover sequences 0 0 0
Total 2 2 100.00 1 50.00




Assertion Details

NameAttemptsReal SuccessesFailuresIncomplete
SyncReqAckAckNeedsReq 22209072 304629 0 0
SyncReqAckHoldReq 1468064 0 0 0


SyncReqAckAckNeedsReq
NameAttemptsReal SuccessesFailuresIncomplete
Total 22209072 304629 0 0
T4 407 23 0 0
T5 490 28 0 0
T6 593 33 0 0
T28 562 31 0 0
T29 350 20 0 0
T30 377 21 0 0
T31 2159 131 0 0
T32 501 30 0 0
T33 1471 90 0 0
T34 2360 144 0 0

SyncReqAckHoldReq
NameAttemptsReal SuccessesFailuresIncomplete
Total 1468064 0 0 0

Line Coverage for Instance : tb.dut.u_main_meas.u_meas.gen_clk_timeout_chk.u_timeout_ref_to_clk.u_ref_timeout
Line No.TotalCoveredPercent
TOTAL3636100.00
CONT_ASSIGN5500
CONT_ASSIGN19411100.00
CONT_ASSIGN19511100.00
ALWAYS2191212100.00
ALWAYS2631212100.00
ALWAYS30755100.00
ALWAYS31655100.00
CONT_ASSIGN33500
ALWAYS33900

54 logic unused_req_chk; 55 unreachable assign unused_req_chk = req_chk_i; 56 57 if (EnRzHs) begin : gen_rz_hs_protocol 58 ////////////////// 59 // RZ protocol // 60 ////////////////// 61 62 // Types 63 typedef enum logic { 64 LoSt, HiSt 65 } rz_fsm_e; 66 67 // Signals 68 rz_fsm_e src_fsm_d, src_fsm_q; 69 rz_fsm_e dst_fsm_d, dst_fsm_q; 70 logic src_ack, dst_ack; 71 logic src_req, dst_req; 72 73 // REQ-side FSM (SRC domain) 74 always_comb begin : src_fsm 75 src_fsm_d = src_fsm_q; 76 src_ack_o = 1'b0; 77 src_req = 1'b0; 78 79 unique case (src_fsm_q) 80 LoSt: begin 81 // Wait for the ack to go back to zero before starting 82 // a new transaction. 83 if (!src_ack && src_req_i) begin 84 src_fsm_d = HiSt; 85 end 86 end 87 HiSt: begin 88 src_req = 1'b1; 89 // Forward the acknowledgement. 90 src_ack_o = src_ack; 91 // If request drops out, we go back to LoSt. 92 // If DST side asserts ack, we also go back to LoSt. 93 if (!src_req_i || src_ack) begin 94 src_fsm_d = LoSt; 95 end 96 end 97 //VCS coverage off 98 // pragma coverage off 99 default: ; 100 //VCS coverage on 101 // pragma coverage on 102 endcase 103 end 104 105 // Move ACK over to SRC domain. 106 prim_flop_2sync #( 107 .Width(1) 108 ) ack_sync ( 109 .clk_i (clk_src_i), 110 .rst_ni (rst_src_ni), 111 .d_i (dst_ack), 112 .q_o (src_ack) 113 ); 114 115 // Registers 116 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin 117 if (!rst_src_ni) begin 118 src_fsm_q <= LoSt; 119 end else begin 120 src_fsm_q <= src_fsm_d; 121 end 122 end 123 124 // ACK-side FSM (DST domain) 125 always_comb begin : dst_fsm 126 dst_fsm_d = dst_fsm_q; 127 dst_req_o = 1'b0; 128 dst_ack = 1'b0; 129 130 unique case (dst_fsm_q) 131 LoSt: begin 132 if (dst_req) begin 133 // Forward the request. 134 dst_req_o = 1'b1; 135 // Wait for the request and acknowledge to be asserted 136 // before responding to the SRC side. 137 if (dst_ack_i) begin 138 dst_fsm_d = HiSt; 139 end 140 end 141 end 142 HiSt: begin 143 dst_ack = 1'b1; 144 // Wait for the request to drop back to zero. 145 if (!dst_req) begin 146 dst_fsm_d = LoSt; 147 end 148 end 149 //VCS coverage off 150 // pragma coverage off 151 default: ; 152 //VCS coverage on 153 // pragma coverage on 154 endcase 155 end 156 157 // Move REQ over to DST domain. 158 prim_flop_2sync #( 159 .Width(1) 160 ) req_sync ( 161 .clk_i (clk_dst_i), 162 .rst_ni (rst_dst_ni), 163 .d_i (src_req), 164 .q_o (dst_req) 165 ); 166 167 // Registers 168 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin 169 if (!rst_dst_ni) begin 170 dst_fsm_q <= LoSt; 171 end else begin 172 dst_fsm_q <= dst_fsm_d; 173 end 174 end 175 176 end else begin : gen_nrz_hs_protocol 177 ////////////////// 178 // NRZ protocol // 179 ////////////////// 180 181 // Types 182 typedef enum logic { 183 EVEN, ODD 184 } sync_reqack_fsm_e; 185 186 // Signals 187 sync_reqack_fsm_e src_fsm_ns, src_fsm_cs; 188 sync_reqack_fsm_e dst_fsm_ns, dst_fsm_cs; 189 190 logic src_req_d, src_req_q, src_ack; 191 logic dst_ack_d, dst_ack_q, dst_req; 192 logic src_handshake, dst_handshake; 193 194 1/1 assign src_handshake = src_req_i & src_ack_o; Tests: T4 T5 T6  195 1/1 assign dst_handshake = dst_req_o & dst_ack_i; Tests: T4 T5 T6  196 197 // Move REQ over to DST domain. 198 prim_flop_2sync #( 199 .Width(1) 200 ) req_sync ( 201 .clk_i (clk_dst_i), 202 .rst_ni (rst_dst_ni), 203 .d_i (src_req_q), 204 .q_o (dst_req) 205 ); 206 207 // Move ACK over to SRC domain. 208 prim_flop_2sync #( 209 .Width(1) 210 ) ack_sync ( 211 .clk_i (clk_src_i), 212 .rst_ni (rst_src_ni), 213 .d_i (dst_ack_q), 214 .q_o (src_ack) 215 ); 216 217 // REQ-side FSM (SRC domain) 218 always_comb begin : src_fsm 219 1/1 src_fsm_ns = src_fsm_cs; Tests: T4 T5 T6  220 221 // By default, we keep the internal REQ value and don't ACK. 222 1/1 src_req_d = src_req_q; Tests: T4 T5 T6  223 1/1 src_ack_o = 1'b0; Tests: T4 T5 T6  224 225 1/1 unique case (src_fsm_cs) Tests: T4 T5 T6  226 227 EVEN: begin 228 // Simply forward REQ and ACK. 229 1/1 src_req_d = src_req_i; Tests: T4 T5 T6  230 1/1 src_ack_o = src_ack; Tests: T4 T5 T6  231 232 // The handshake is done for exactly 1 clock cycle. 233 1/1 if (src_handshake) begin Tests: T4 T5 T6  234 1/1 src_fsm_ns = ODD; Tests: T4 T5 T6  235 end MISSING_ELSE 236 end 237 238 ODD: begin 239 // Internal REQ and ACK have inverted meaning now. If src_req_i is high again, this 240 // signals a new transaction. 241 1/1 src_req_d = ~src_req_i; Tests: T4 T5 T6  242 1/1 src_ack_o = ~src_ack; Tests: T4 T5 T6  243 244 // The handshake is done for exactly 1 clock cycle. 245 1/1 if (src_handshake) begin Tests: T4 T5 T6  246 1/1 src_fsm_ns = EVEN; Tests: T4 T5 T6  247 end MISSING_ELSE 248 end 249 250 //VCS coverage off 251 // pragma coverage off 252 253 default: ; 254 255 //VCS coverage on 256 // pragma coverage on 257 258 endcase 259 end 260 261 // ACK-side FSM (DST domain) 262 always_comb begin : dst_fsm 263 1/1 dst_fsm_ns = dst_fsm_cs; Tests: T4 T5 T6  264 265 // By default, we don't REQ and keep the internal ACK. 266 1/1 dst_req_o = 1'b0; Tests: T4 T5 T6  267 1/1 dst_ack_d = dst_ack_q; Tests: T4 T5 T6  268 269 1/1 unique case (dst_fsm_cs) Tests: T4 T5 T6  270 271 EVEN: begin 272 // Simply forward REQ and ACK. 273 1/1 dst_req_o = dst_req; Tests: T4 T5 T6  274 1/1 dst_ack_d = dst_ack_i; Tests: T4 T5 T6  275 276 // The handshake is done for exactly 1 clock cycle. 277 1/1 if (dst_handshake) begin Tests: T4 T5 T6  278 1/1 dst_fsm_ns = ODD; Tests: T4 T5 T6  279 end MISSING_ELSE 280 end 281 282 ODD: begin 283 // Internal REQ and ACK have inverted meaning now. If dst_req goes low, this signals a new 284 // transaction. 285 1/1 dst_req_o = ~dst_req; Tests: T4 T5 T6  286 1/1 dst_ack_d = ~dst_ack_i; Tests: T4 T5 T6  287 288 // The handshake is done for exactly 1 clock cycle. 289 1/1 if (dst_handshake) begin Tests: T4 T5 T6  290 1/1 dst_fsm_ns = EVEN; Tests: T4 T5 T6  291 end MISSING_ELSE 292 end 293 294 //VCS coverage off 295 // pragma coverage off 296 297 default: ; 298 299 //VCS coverage on 300 // pragma coverage on 301 302 endcase 303 end 304 305 // Registers 306 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin 307 1/1 if (!rst_src_ni) begin Tests: T4 T5 T6  308 1/1 src_fsm_cs <= EVEN; Tests: T4 T5 T6  309 1/1 src_req_q <= 1'b0; Tests: T4 T5 T6  310 end else begin 311 1/1 src_fsm_cs <= src_fsm_ns; Tests: T4 T5 T6  312 1/1 src_req_q <= src_req_d; Tests: T4 T5 T6  313 end 314 end 315 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin 316 1/1 if (!rst_dst_ni) begin Tests: T4 T5 T6  317 1/1 dst_fsm_cs <= EVEN; Tests: T4 T5 T6  318 1/1 dst_ack_q <= 1'b0; Tests: T4 T5 T6  319 end else begin 320 1/1 dst_fsm_cs <= dst_fsm_ns; Tests: T4 T5 T6  321 1/1 dst_ack_q <= dst_ack_d; Tests: T4 T5 T6  322 end 323 end 324 end 325 326 //////////////// 327 // Assertions // 328 //////////////// 329 330 `ifdef INC_ASSERT 331 //VCS coverage off 332 // pragma coverage off 333 334 logic effective_rst_n; 335 unreachable assign effective_rst_n = rst_src_ni && rst_dst_ni; 336 337 logic chk_flag; 338 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin 339 unreachable if (!effective_rst_n) begin 340 unreachable chk_flag <= '0; 341 unreachable end else if (src_req_i && !chk_flag) begin 342 unreachable chk_flag <= 1'b1; 343 end ==> MISSING_ELSE

Cond Coverage for Instance : tb.dut.u_main_meas.u_meas.gen_clk_timeout_chk.u_timeout_ref_to_clk.u_ref_timeout
TotalCoveredPercent
Conditions33100.00
Logical33100.00
Non-Logical00
Event00

 LINE       194
 EXPRESSION (src_req_i & src_ack_o)
             ----1----   ----2----
-1--2-StatusTests
01Unreachable
10CoveredT4,T5,T6
11CoveredT4,T5,T6

 LINE       195
 EXPRESSION (dst_req_o & dst_ack_i)
             ----1----   ----2----
-1--2-StatusTestsExclude Annotation
01Excluded VC_COV_UNR
10Excluded VC_COV_UNR
11CoveredT4,T5,T6

Branch Coverage for Instance : tb.dut.u_main_meas.u_meas.gen_clk_timeout_chk.u_timeout_ref_to_clk.u_ref_timeout
Line No.TotalCoveredPercent
Branches 12 12 100.00
CASE 225 4 4 100.00
CASE 269 4 4 100.00
IF 307 2 2 100.00
IF 316 2 2 100.00


225 unique case (src_fsm_cs) -1- 226 227 EVEN: begin 228 // Simply forward REQ and ACK. 229 src_req_d = src_req_i; 230 src_ack_o = src_ack; 231 232 // The handshake is done for exactly 1 clock cycle. 233 if (src_handshake) begin -2- 234 src_fsm_ns = ODD; ==> 235 end MISSING_ELSE ==> 236 end 237 238 ODD: begin 239 // Internal REQ and ACK have inverted meaning now. If src_req_i is high again, this 240 // signals a new transaction. 241 src_req_d = ~src_req_i; 242 src_ack_o = ~src_ack; 243 244 // The handshake is done for exactly 1 clock cycle. 245 if (src_handshake) begin -3- 246 src_fsm_ns = EVEN; ==> 247 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
EVEN 1 - Covered T4,T5,T6
EVEN 0 - Covered T4,T5,T6
ODD - 1 Covered T4,T5,T6
ODD - 0 Covered T4,T5,T6


269 unique case (dst_fsm_cs) -1- 270 271 EVEN: begin 272 // Simply forward REQ and ACK. 273 dst_req_o = dst_req; 274 dst_ack_d = dst_ack_i; 275 276 // The handshake is done for exactly 1 clock cycle. 277 if (dst_handshake) begin -2- 278 dst_fsm_ns = ODD; ==> 279 end MISSING_ELSE ==> 280 end 281 282 ODD: begin 283 // Internal REQ and ACK have inverted meaning now. If dst_req goes low, this signals a new 284 // transaction. 285 dst_req_o = ~dst_req; 286 dst_ack_d = ~dst_ack_i; 287 288 // The handshake is done for exactly 1 clock cycle. 289 if (dst_handshake) begin -3- 290 dst_fsm_ns = EVEN; ==> 291 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
EVEN 1 - Covered T4,T5,T6
EVEN 0 - Covered T4,T5,T6
ODD - 1 Covered T4,T5,T6
ODD - 0 Covered T4,T5,T6


307 if (!rst_src_ni) begin -1- 308 src_fsm_cs <= EVEN; ==> 309 src_req_q <= 1'b0; 310 end else begin 311 src_fsm_cs <= src_fsm_ns; ==>

Branches:
-1-StatusTests
1 Covered T4,T5,T6
0 Covered T4,T5,T6


316 if (!rst_dst_ni) begin -1- 317 dst_fsm_cs <= EVEN; ==> 318 dst_ack_q <= 1'b0; 319 end else begin 320 dst_fsm_cs <= dst_fsm_ns; ==>

Branches:
-1-StatusTests
1 Covered T4,T5,T6
0 Covered T4,T5,T6


Assert Coverage for Instance : tb.dut.u_main_meas.u_meas.gen_clk_timeout_chk.u_timeout_ref_to_clk.u_ref_timeout
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 2 2 100.00 1 50.00
Cover properties 0 0 0
Cover sequences 0 0 0
Total 2 2 100.00 1 50.00




Assertion Details

NameAttemptsReal SuccessesFailuresIncomplete
SyncReqAckAckNeedsReq 99737448 320003 0 0
SyncReqAckHoldReq 1468064 0 0 0


SyncReqAckAckNeedsReq
NameAttemptsReal SuccessesFailuresIncomplete
Total 99737448 320003 0 0
T4 1768 24 0 0
T5 2141 30 0 0
T6 2411 35 0 0
T28 2085 32 0 0
T29 1562 21 0 0
T30 1528 22 0 0
T31 9137 138 0 0
T32 2226 32 0 0
T33 6267 95 0 0
T34 9958 151 0 0

SyncReqAckHoldReq
NameAttemptsReal SuccessesFailuresIncomplete
Total 1468064 0 0 0

Line Coverage for Instance : tb.dut.u_usb_meas.u_meas.gen_clk_timeout_chk.u_timeout_ref_to_clk.u_ref_timeout
Line No.TotalCoveredPercent
TOTAL3636100.00
CONT_ASSIGN5500
CONT_ASSIGN19411100.00
CONT_ASSIGN19511100.00
ALWAYS2191212100.00
ALWAYS2631212100.00
ALWAYS30755100.00
ALWAYS31655100.00
CONT_ASSIGN33500
ALWAYS33900

54 logic unused_req_chk; 55 unreachable assign unused_req_chk = req_chk_i; 56 57 if (EnRzHs) begin : gen_rz_hs_protocol 58 ////////////////// 59 // RZ protocol // 60 ////////////////// 61 62 // Types 63 typedef enum logic { 64 LoSt, HiSt 65 } rz_fsm_e; 66 67 // Signals 68 rz_fsm_e src_fsm_d, src_fsm_q; 69 rz_fsm_e dst_fsm_d, dst_fsm_q; 70 logic src_ack, dst_ack; 71 logic src_req, dst_req; 72 73 // REQ-side FSM (SRC domain) 74 always_comb begin : src_fsm 75 src_fsm_d = src_fsm_q; 76 src_ack_o = 1'b0; 77 src_req = 1'b0; 78 79 unique case (src_fsm_q) 80 LoSt: begin 81 // Wait for the ack to go back to zero before starting 82 // a new transaction. 83 if (!src_ack && src_req_i) begin 84 src_fsm_d = HiSt; 85 end 86 end 87 HiSt: begin 88 src_req = 1'b1; 89 // Forward the acknowledgement. 90 src_ack_o = src_ack; 91 // If request drops out, we go back to LoSt. 92 // If DST side asserts ack, we also go back to LoSt. 93 if (!src_req_i || src_ack) begin 94 src_fsm_d = LoSt; 95 end 96 end 97 //VCS coverage off 98 // pragma coverage off 99 default: ; 100 //VCS coverage on 101 // pragma coverage on 102 endcase 103 end 104 105 // Move ACK over to SRC domain. 106 prim_flop_2sync #( 107 .Width(1) 108 ) ack_sync ( 109 .clk_i (clk_src_i), 110 .rst_ni (rst_src_ni), 111 .d_i (dst_ack), 112 .q_o (src_ack) 113 ); 114 115 // Registers 116 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin 117 if (!rst_src_ni) begin 118 src_fsm_q <= LoSt; 119 end else begin 120 src_fsm_q <= src_fsm_d; 121 end 122 end 123 124 // ACK-side FSM (DST domain) 125 always_comb begin : dst_fsm 126 dst_fsm_d = dst_fsm_q; 127 dst_req_o = 1'b0; 128 dst_ack = 1'b0; 129 130 unique case (dst_fsm_q) 131 LoSt: begin 132 if (dst_req) begin 133 // Forward the request. 134 dst_req_o = 1'b1; 135 // Wait for the request and acknowledge to be asserted 136 // before responding to the SRC side. 137 if (dst_ack_i) begin 138 dst_fsm_d = HiSt; 139 end 140 end 141 end 142 HiSt: begin 143 dst_ack = 1'b1; 144 // Wait for the request to drop back to zero. 145 if (!dst_req) begin 146 dst_fsm_d = LoSt; 147 end 148 end 149 //VCS coverage off 150 // pragma coverage off 151 default: ; 152 //VCS coverage on 153 // pragma coverage on 154 endcase 155 end 156 157 // Move REQ over to DST domain. 158 prim_flop_2sync #( 159 .Width(1) 160 ) req_sync ( 161 .clk_i (clk_dst_i), 162 .rst_ni (rst_dst_ni), 163 .d_i (src_req), 164 .q_o (dst_req) 165 ); 166 167 // Registers 168 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin 169 if (!rst_dst_ni) begin 170 dst_fsm_q <= LoSt; 171 end else begin 172 dst_fsm_q <= dst_fsm_d; 173 end 174 end 175 176 end else begin : gen_nrz_hs_protocol 177 ////////////////// 178 // NRZ protocol // 179 ////////////////// 180 181 // Types 182 typedef enum logic { 183 EVEN, ODD 184 } sync_reqack_fsm_e; 185 186 // Signals 187 sync_reqack_fsm_e src_fsm_ns, src_fsm_cs; 188 sync_reqack_fsm_e dst_fsm_ns, dst_fsm_cs; 189 190 logic src_req_d, src_req_q, src_ack; 191 logic dst_ack_d, dst_ack_q, dst_req; 192 logic src_handshake, dst_handshake; 193 194 1/1 assign src_handshake = src_req_i & src_ack_o; Tests: T4 T5 T6  195 1/1 assign dst_handshake = dst_req_o & dst_ack_i; Tests: T4 T5 T6  196 197 // Move REQ over to DST domain. 198 prim_flop_2sync #( 199 .Width(1) 200 ) req_sync ( 201 .clk_i (clk_dst_i), 202 .rst_ni (rst_dst_ni), 203 .d_i (src_req_q), 204 .q_o (dst_req) 205 ); 206 207 // Move ACK over to SRC domain. 208 prim_flop_2sync #( 209 .Width(1) 210 ) ack_sync ( 211 .clk_i (clk_src_i), 212 .rst_ni (rst_src_ni), 213 .d_i (dst_ack_q), 214 .q_o (src_ack) 215 ); 216 217 // REQ-side FSM (SRC domain) 218 always_comb begin : src_fsm 219 1/1 src_fsm_ns = src_fsm_cs; Tests: T4 T5 T6  220 221 // By default, we keep the internal REQ value and don't ACK. 222 1/1 src_req_d = src_req_q; Tests: T4 T5 T6  223 1/1 src_ack_o = 1'b0; Tests: T4 T5 T6  224 225 1/1 unique case (src_fsm_cs) Tests: T4 T5 T6  226 227 EVEN: begin 228 // Simply forward REQ and ACK. 229 1/1 src_req_d = src_req_i; Tests: T4 T5 T6  230 1/1 src_ack_o = src_ack; Tests: T4 T5 T6  231 232 // The handshake is done for exactly 1 clock cycle. 233 1/1 if (src_handshake) begin Tests: T4 T5 T6  234 1/1 src_fsm_ns = ODD; Tests: T4 T5 T6  235 end MISSING_ELSE 236 end 237 238 ODD: begin 239 // Internal REQ and ACK have inverted meaning now. If src_req_i is high again, this 240 // signals a new transaction. 241 1/1 src_req_d = ~src_req_i; Tests: T4 T5 T6  242 1/1 src_ack_o = ~src_ack; Tests: T4 T5 T6  243 244 // The handshake is done for exactly 1 clock cycle. 245 1/1 if (src_handshake) begin Tests: T4 T5 T6  246 1/1 src_fsm_ns = EVEN; Tests: T4 T5 T6  247 end MISSING_ELSE 248 end 249 250 //VCS coverage off 251 // pragma coverage off 252 253 default: ; 254 255 //VCS coverage on 256 // pragma coverage on 257 258 endcase 259 end 260 261 // ACK-side FSM (DST domain) 262 always_comb begin : dst_fsm 263 1/1 dst_fsm_ns = dst_fsm_cs; Tests: T4 T5 T6  264 265 // By default, we don't REQ and keep the internal ACK. 266 1/1 dst_req_o = 1'b0; Tests: T4 T5 T6  267 1/1 dst_ack_d = dst_ack_q; Tests: T4 T5 T6  268 269 1/1 unique case (dst_fsm_cs) Tests: T4 T5 T6  270 271 EVEN: begin 272 // Simply forward REQ and ACK. 273 1/1 dst_req_o = dst_req; Tests: T4 T5 T6  274 1/1 dst_ack_d = dst_ack_i; Tests: T4 T5 T6  275 276 // The handshake is done for exactly 1 clock cycle. 277 1/1 if (dst_handshake) begin Tests: T4 T5 T6  278 1/1 dst_fsm_ns = ODD; Tests: T4 T5 T6  279 end MISSING_ELSE 280 end 281 282 ODD: begin 283 // Internal REQ and ACK have inverted meaning now. If dst_req goes low, this signals a new 284 // transaction. 285 1/1 dst_req_o = ~dst_req; Tests: T4 T5 T6  286 1/1 dst_ack_d = ~dst_ack_i; Tests: T4 T5 T6  287 288 // The handshake is done for exactly 1 clock cycle. 289 1/1 if (dst_handshake) begin Tests: T4 T5 T6  290 1/1 dst_fsm_ns = EVEN; Tests: T4 T5 T6  291 end MISSING_ELSE 292 end 293 294 //VCS coverage off 295 // pragma coverage off 296 297 default: ; 298 299 //VCS coverage on 300 // pragma coverage on 301 302 endcase 303 end 304 305 // Registers 306 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin 307 1/1 if (!rst_src_ni) begin Tests: T4 T5 T6  308 1/1 src_fsm_cs <= EVEN; Tests: T4 T5 T6  309 1/1 src_req_q <= 1'b0; Tests: T4 T5 T6  310 end else begin 311 1/1 src_fsm_cs <= src_fsm_ns; Tests: T4 T5 T6  312 1/1 src_req_q <= src_req_d; Tests: T4 T5 T6  313 end 314 end 315 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin 316 1/1 if (!rst_dst_ni) begin Tests: T4 T5 T6  317 1/1 dst_fsm_cs <= EVEN; Tests: T4 T5 T6  318 1/1 dst_ack_q <= 1'b0; Tests: T4 T5 T6  319 end else begin 320 1/1 dst_fsm_cs <= dst_fsm_ns; Tests: T4 T5 T6  321 1/1 dst_ack_q <= dst_ack_d; Tests: T4 T5 T6  322 end 323 end 324 end 325 326 //////////////// 327 // Assertions // 328 //////////////// 329 330 `ifdef INC_ASSERT 331 //VCS coverage off 332 // pragma coverage off 333 334 logic effective_rst_n; 335 unreachable assign effective_rst_n = rst_src_ni && rst_dst_ni; 336 337 logic chk_flag; 338 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin 339 unreachable if (!effective_rst_n) begin 340 unreachable chk_flag <= '0; 341 unreachable end else if (src_req_i && !chk_flag) begin 342 unreachable chk_flag <= 1'b1; 343 end ==> MISSING_ELSE

Cond Coverage for Instance : tb.dut.u_usb_meas.u_meas.gen_clk_timeout_chk.u_timeout_ref_to_clk.u_ref_timeout
TotalCoveredPercent
Conditions33100.00
Logical33100.00
Non-Logical00
Event00

 LINE       194
 EXPRESSION (src_req_i & src_ack_o)
             ----1----   ----2----
-1--2-StatusTests
01Unreachable
10CoveredT4,T5,T6
11CoveredT4,T5,T6

 LINE       195
 EXPRESSION (dst_req_o & dst_ack_i)
             ----1----   ----2----
-1--2-StatusTestsExclude Annotation
01Excluded VC_COV_UNR
10Excluded VC_COV_UNR
11CoveredT4,T5,T6

Branch Coverage for Instance : tb.dut.u_usb_meas.u_meas.gen_clk_timeout_chk.u_timeout_ref_to_clk.u_ref_timeout
Line No.TotalCoveredPercent
Branches 12 12 100.00
CASE 225 4 4 100.00
CASE 269 4 4 100.00
IF 307 2 2 100.00
IF 316 2 2 100.00


225 unique case (src_fsm_cs) -1- 226 227 EVEN: begin 228 // Simply forward REQ and ACK. 229 src_req_d = src_req_i; 230 src_ack_o = src_ack; 231 232 // The handshake is done for exactly 1 clock cycle. 233 if (src_handshake) begin -2- 234 src_fsm_ns = ODD; ==> 235 end MISSING_ELSE ==> 236 end 237 238 ODD: begin 239 // Internal REQ and ACK have inverted meaning now. If src_req_i is high again, this 240 // signals a new transaction. 241 src_req_d = ~src_req_i; 242 src_ack_o = ~src_ack; 243 244 // The handshake is done for exactly 1 clock cycle. 245 if (src_handshake) begin -3- 246 src_fsm_ns = EVEN; ==> 247 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
EVEN 1 - Covered T4,T5,T6
EVEN 0 - Covered T4,T5,T6
ODD - 1 Covered T4,T5,T6
ODD - 0 Covered T4,T5,T6


269 unique case (dst_fsm_cs) -1- 270 271 EVEN: begin 272 // Simply forward REQ and ACK. 273 dst_req_o = dst_req; 274 dst_ack_d = dst_ack_i; 275 276 // The handshake is done for exactly 1 clock cycle. 277 if (dst_handshake) begin -2- 278 dst_fsm_ns = ODD; ==> 279 end MISSING_ELSE ==> 280 end 281 282 ODD: begin 283 // Internal REQ and ACK have inverted meaning now. If dst_req goes low, this signals a new 284 // transaction. 285 dst_req_o = ~dst_req; 286 dst_ack_d = ~dst_ack_i; 287 288 // The handshake is done for exactly 1 clock cycle. 289 if (dst_handshake) begin -3- 290 dst_fsm_ns = EVEN; ==> 291 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
EVEN 1 - Covered T4,T5,T6
EVEN 0 - Covered T4,T5,T6
ODD - 1 Covered T4,T5,T6
ODD - 0 Covered T4,T5,T6


307 if (!rst_src_ni) begin -1- 308 src_fsm_cs <= EVEN; ==> 309 src_req_q <= 1'b0; 310 end else begin 311 src_fsm_cs <= src_fsm_ns; ==>

Branches:
-1-StatusTests
1 Covered T4,T5,T6
0 Covered T4,T5,T6


316 if (!rst_dst_ni) begin -1- 317 dst_fsm_cs <= EVEN; ==> 318 dst_ack_q <= 1'b0; 319 end else begin 320 dst_fsm_cs <= dst_fsm_ns; ==>

Branches:
-1-StatusTests
1 Covered T4,T5,T6
0 Covered T4,T5,T6


Assert Coverage for Instance : tb.dut.u_usb_meas.u_meas.gen_clk_timeout_chk.u_timeout_ref_to_clk.u_ref_timeout
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 2 2 100.00 1 50.00
Cover properties 0 0 0
Cover sequences 0 0 0
Total 2 2 100.00 1 50.00




Assertion Details

NameAttemptsReal SuccessesFailuresIncomplete
SyncReqAckAckNeedsReq 47836459 319866 0 0
SyncReqAckHoldReq 1468064 0 0 0


SyncReqAckAckNeedsReq
NameAttemptsReal SuccessesFailuresIncomplete
Total 47836459 319866 0 0
T4 849 24 0 0
T5 1027 30 0 0
T6 1157 35 0 0
T28 1001 32 0 0
T29 753 20 0 0
T30 733 22 0 0
T31 4385 138 0 0
T32 1069 32 0 0
T33 3009 95 0 0
T34 4780 151 0 0

SyncReqAckHoldReq
NameAttemptsReal SuccessesFailuresIncomplete
Total 1468064 0 0 0

Line Coverage for Instance : tb.dut.u_reg.u_io_meas_ctrl_en_cdc.u_arb.gen_wr_req.u_dst_update_sync
Line No.TotalCoveredPercent
TOTAL3636100.00
CONT_ASSIGN5500
CONT_ASSIGN19411100.00
CONT_ASSIGN19511100.00
ALWAYS2191212100.00
ALWAYS2631212100.00
ALWAYS30755100.00
ALWAYS31655100.00
CONT_ASSIGN33500
ALWAYS33900

54 logic unused_req_chk; 55 unreachable assign unused_req_chk = req_chk_i; 56 57 if (EnRzHs) begin : gen_rz_hs_protocol 58 ////////////////// 59 // RZ protocol // 60 ////////////////// 61 62 // Types 63 typedef enum logic { 64 LoSt, HiSt 65 } rz_fsm_e; 66 67 // Signals 68 rz_fsm_e src_fsm_d, src_fsm_q; 69 rz_fsm_e dst_fsm_d, dst_fsm_q; 70 logic src_ack, dst_ack; 71 logic src_req, dst_req; 72 73 // REQ-side FSM (SRC domain) 74 always_comb begin : src_fsm 75 src_fsm_d = src_fsm_q; 76 src_ack_o = 1'b0; 77 src_req = 1'b0; 78 79 unique case (src_fsm_q) 80 LoSt: begin 81 // Wait for the ack to go back to zero before starting 82 // a new transaction. 83 if (!src_ack && src_req_i) begin 84 src_fsm_d = HiSt; 85 end 86 end 87 HiSt: begin 88 src_req = 1'b1; 89 // Forward the acknowledgement. 90 src_ack_o = src_ack; 91 // If request drops out, we go back to LoSt. 92 // If DST side asserts ack, we also go back to LoSt. 93 if (!src_req_i || src_ack) begin 94 src_fsm_d = LoSt; 95 end 96 end 97 //VCS coverage off 98 // pragma coverage off 99 default: ; 100 //VCS coverage on 101 // pragma coverage on 102 endcase 103 end 104 105 // Move ACK over to SRC domain. 106 prim_flop_2sync #( 107 .Width(1) 108 ) ack_sync ( 109 .clk_i (clk_src_i), 110 .rst_ni (rst_src_ni), 111 .d_i (dst_ack), 112 .q_o (src_ack) 113 ); 114 115 // Registers 116 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin 117 if (!rst_src_ni) begin 118 src_fsm_q <= LoSt; 119 end else begin 120 src_fsm_q <= src_fsm_d; 121 end 122 end 123 124 // ACK-side FSM (DST domain) 125 always_comb begin : dst_fsm 126 dst_fsm_d = dst_fsm_q; 127 dst_req_o = 1'b0; 128 dst_ack = 1'b0; 129 130 unique case (dst_fsm_q) 131 LoSt: begin 132 if (dst_req) begin 133 // Forward the request. 134 dst_req_o = 1'b1; 135 // Wait for the request and acknowledge to be asserted 136 // before responding to the SRC side. 137 if (dst_ack_i) begin 138 dst_fsm_d = HiSt; 139 end 140 end 141 end 142 HiSt: begin 143 dst_ack = 1'b1; 144 // Wait for the request to drop back to zero. 145 if (!dst_req) begin 146 dst_fsm_d = LoSt; 147 end 148 end 149 //VCS coverage off 150 // pragma coverage off 151 default: ; 152 //VCS coverage on 153 // pragma coverage on 154 endcase 155 end 156 157 // Move REQ over to DST domain. 158 prim_flop_2sync #( 159 .Width(1) 160 ) req_sync ( 161 .clk_i (clk_dst_i), 162 .rst_ni (rst_dst_ni), 163 .d_i (src_req), 164 .q_o (dst_req) 165 ); 166 167 // Registers 168 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin 169 if (!rst_dst_ni) begin 170 dst_fsm_q <= LoSt; 171 end else begin 172 dst_fsm_q <= dst_fsm_d; 173 end 174 end 175 176 end else begin : gen_nrz_hs_protocol 177 ////////////////// 178 // NRZ protocol // 179 ////////////////// 180 181 // Types 182 typedef enum logic { 183 EVEN, ODD 184 } sync_reqack_fsm_e; 185 186 // Signals 187 sync_reqack_fsm_e src_fsm_ns, src_fsm_cs; 188 sync_reqack_fsm_e dst_fsm_ns, dst_fsm_cs; 189 190 logic src_req_d, src_req_q, src_ack; 191 logic dst_ack_d, dst_ack_q, dst_req; 192 logic src_handshake, dst_handshake; 193 194 1/1 assign src_handshake = src_req_i & src_ack_o; Tests: T1 T2 T3  195 1/1 assign dst_handshake = dst_req_o & dst_ack_i; Tests: T1 T2 T3  196 197 // Move REQ over to DST domain. 198 prim_flop_2sync #( 199 .Width(1) 200 ) req_sync ( 201 .clk_i (clk_dst_i), 202 .rst_ni (rst_dst_ni), 203 .d_i (src_req_q), 204 .q_o (dst_req) 205 ); 206 207 // Move ACK over to SRC domain. 208 prim_flop_2sync #( 209 .Width(1) 210 ) ack_sync ( 211 .clk_i (clk_src_i), 212 .rst_ni (rst_src_ni), 213 .d_i (dst_ack_q), 214 .q_o (src_ack) 215 ); 216 217 // REQ-side FSM (SRC domain) 218 always_comb begin : src_fsm 219 1/1 src_fsm_ns = src_fsm_cs; Tests: T1 T2 T3  220 221 // By default, we keep the internal REQ value and don't ACK. 222 1/1 src_req_d = src_req_q; Tests: T1 T2 T3  223 1/1 src_ack_o = 1'b0; Tests: T1 T2 T3  224 225 1/1 unique case (src_fsm_cs) Tests: T1 T2 T3  226 227 EVEN: begin 228 // Simply forward REQ and ACK. 229 1/1 src_req_d = src_req_i; Tests: T1 T2 T3  230 1/1 src_ack_o = src_ack; Tests: T1 T2 T3  231 232 // The handshake is done for exactly 1 clock cycle. 233 1/1 if (src_handshake) begin Tests: T1 T2 T3  234 1/1 src_fsm_ns = ODD; Tests: T1 T2 T3  235 end MISSING_ELSE 236 end 237 238 ODD: begin 239 // Internal REQ and ACK have inverted meaning now. If src_req_i is high again, this 240 // signals a new transaction. 241 1/1 src_req_d = ~src_req_i; Tests: T1 T2 T3  242 1/1 src_ack_o = ~src_ack; Tests: T1 T2 T3  243 244 // The handshake is done for exactly 1 clock cycle. 245 1/1 if (src_handshake) begin Tests: T1 T2 T3  246 1/1 src_fsm_ns = EVEN; Tests: T1 T2 T3  247 end MISSING_ELSE 248 end 249 250 //VCS coverage off 251 // pragma coverage off 252 253 default: ; 254 255 //VCS coverage on 256 // pragma coverage on 257 258 endcase 259 end 260 261 // ACK-side FSM (DST domain) 262 always_comb begin : dst_fsm 263 1/1 dst_fsm_ns = dst_fsm_cs; Tests: T1 T2 T3  264 265 // By default, we don't REQ and keep the internal ACK. 266 1/1 dst_req_o = 1'b0; Tests: T1 T2 T3  267 1/1 dst_ack_d = dst_ack_q; Tests: T1 T2 T3  268 269 1/1 unique case (dst_fsm_cs) Tests: T1 T2 T3  270 271 EVEN: begin 272 // Simply forward REQ and ACK. 273 1/1 dst_req_o = dst_req; Tests: T1 T2 T3  274 1/1 dst_ack_d = dst_ack_i; Tests: T1 T2 T3  275 276 // The handshake is done for exactly 1 clock cycle. 277 1/1 if (dst_handshake) begin Tests: T1 T2 T3  278 1/1 dst_fsm_ns = ODD; Tests: T1 T2 T3  279 end MISSING_ELSE 280 end 281 282 ODD: begin 283 // Internal REQ and ACK have inverted meaning now. If dst_req goes low, this signals a new 284 // transaction. 285 1/1 dst_req_o = ~dst_req; Tests: T1 T2 T3  286 1/1 dst_ack_d = ~dst_ack_i; Tests: T1 T2 T3  287 288 // The handshake is done for exactly 1 clock cycle. 289 1/1 if (dst_handshake) begin Tests: T1 T2 T3  290 1/1 dst_fsm_ns = EVEN; Tests: T1 T2 T3  291 end MISSING_ELSE 292 end 293 294 //VCS coverage off 295 // pragma coverage off 296 297 default: ; 298 299 //VCS coverage on 300 // pragma coverage on 301 302 endcase 303 end 304 305 // Registers 306 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin 307 1/1 if (!rst_src_ni) begin Tests: T4 T5 T6  308 1/1 src_fsm_cs <= EVEN; Tests: T4 T5 T6  309 1/1 src_req_q <= 1'b0; Tests: T4 T5 T6  310 end else begin 311 1/1 src_fsm_cs <= src_fsm_ns; Tests: T4 T5 T6  312 1/1 src_req_q <= src_req_d; Tests: T4 T5 T6  313 end 314 end 315 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin 316 1/1 if (!rst_dst_ni) begin Tests: T4 T5 T6  317 1/1 dst_fsm_cs <= EVEN; Tests: T4 T5 T6  318 1/1 dst_ack_q <= 1'b0; Tests: T4 T5 T6  319 end else begin 320 1/1 dst_fsm_cs <= dst_fsm_ns; Tests: T4 T5 T6  321 1/1 dst_ack_q <= dst_ack_d; Tests: T4 T5 T6  322 end 323 end 324 end 325 326 //////////////// 327 // Assertions // 328 //////////////// 329 330 `ifdef INC_ASSERT 331 //VCS coverage off 332 // pragma coverage off 333 334 logic effective_rst_n; 335 unreachable assign effective_rst_n = rst_src_ni && rst_dst_ni; 336 337 logic chk_flag; 338 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin 339 unreachable if (!effective_rst_n) begin 340 unreachable chk_flag <= '0; 341 unreachable end else if (src_req_i && !chk_flag) begin 342 unreachable chk_flag <= 1'b1; 343 end ==> MISSING_ELSE

Cond Coverage for Instance : tb.dut.u_reg.u_io_meas_ctrl_en_cdc.u_arb.gen_wr_req.u_dst_update_sync
TotalCoveredPercent
Conditions4375.00
Logical4375.00
Non-Logical00
Event00

 LINE       194
 EXPRESSION (src_req_i & src_ack_o)
             ----1----   ----2----
-1--2-StatusTests
01Not Covered
10CoveredT1,T2,T3
11CoveredT1,T2,T3

 LINE       195
 EXPRESSION (dst_req_o & dst_ack_i)
             ----1----   ----2----
-1--2-StatusTestsExclude Annotation
01Excluded VC_COV_UNR
10Excluded VC_COV_UNR
11CoveredT1,T2,T3

Branch Coverage for Instance : tb.dut.u_reg.u_io_meas_ctrl_en_cdc.u_arb.gen_wr_req.u_dst_update_sync
Line No.TotalCoveredPercent
Branches 12 12 100.00
CASE 225 4 4 100.00
CASE 269 4 4 100.00
IF 307 2 2 100.00
IF 316 2 2 100.00


225 unique case (src_fsm_cs) -1- 226 227 EVEN: begin 228 // Simply forward REQ and ACK. 229 src_req_d = src_req_i; 230 src_ack_o = src_ack; 231 232 // The handshake is done for exactly 1 clock cycle. 233 if (src_handshake) begin -2- 234 src_fsm_ns = ODD; ==> 235 end MISSING_ELSE ==> 236 end 237 238 ODD: begin 239 // Internal REQ and ACK have inverted meaning now. If src_req_i is high again, this 240 // signals a new transaction. 241 src_req_d = ~src_req_i; 242 src_ack_o = ~src_ack; 243 244 // The handshake is done for exactly 1 clock cycle. 245 if (src_handshake) begin -3- 246 src_fsm_ns = EVEN; ==> 247 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
EVEN 1 - Covered T1,T2,T3
EVEN 0 - Covered T1,T2,T3
ODD - 1 Covered T1,T2,T3
ODD - 0 Covered T1,T2,T3


269 unique case (dst_fsm_cs) -1- 270 271 EVEN: begin 272 // Simply forward REQ and ACK. 273 dst_req_o = dst_req; 274 dst_ack_d = dst_ack_i; 275 276 // The handshake is done for exactly 1 clock cycle. 277 if (dst_handshake) begin -2- 278 dst_fsm_ns = ODD; ==> 279 end MISSING_ELSE ==> 280 end 281 282 ODD: begin 283 // Internal REQ and ACK have inverted meaning now. If dst_req goes low, this signals a new 284 // transaction. 285 dst_req_o = ~dst_req; 286 dst_ack_d = ~dst_ack_i; 287 288 // The handshake is done for exactly 1 clock cycle. 289 if (dst_handshake) begin -3- 290 dst_fsm_ns = EVEN; ==> 291 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
EVEN 1 - Covered T1,T2,T3
EVEN 0 - Covered T1,T2,T3
ODD - 1 Covered T1,T2,T3
ODD - 0 Covered T1,T2,T3


307 if (!rst_src_ni) begin -1- 308 src_fsm_cs <= EVEN; ==> 309 src_req_q <= 1'b0; 310 end else begin 311 src_fsm_cs <= src_fsm_ns; ==>

Branches:
-1-StatusTests
1 Covered T4,T5,T6
0 Covered T4,T5,T6


316 if (!rst_dst_ni) begin -1- 317 dst_fsm_cs <= EVEN; ==> 318 dst_ack_q <= 1'b0; 319 end else begin 320 dst_fsm_cs <= dst_fsm_ns; ==>

Branches:
-1-StatusTests
1 Covered T4,T5,T6
0 Covered T4,T5,T6


Assert Coverage for Instance : tb.dut.u_reg.u_io_meas_ctrl_en_cdc.u_arb.gen_wr_req.u_dst_update_sync
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
SyncReqAckAckNeedsReq 40545146 13453 0 0
SyncReqAckHoldReq 93016148 12917 0 0


SyncReqAckAckNeedsReq
NameAttemptsReal SuccessesFailuresIncomplete
Total 40545146 13453 0 0
T1 27978 10 0 0
T2 0 14 0 0
T3 0 10 0 0
T10 0 12 0 0
T27 0 12 0 0
T39 0 4 0 0
T44 0 12 0 0
T45 0 8 0 0
T47 0 28 0 0
T48 0 2 0 0
T49 1457 0 0 0
T50 1111 0 0 0
T51 2316 0 0 0
T52 1259 0 0 0
T53 2234 0 0 0
T54 9524 0 0 0
T55 757 0 0 0
T56 1568 0 0 0
T57 978 0 0 0

SyncReqAckHoldReq
NameAttemptsReal SuccessesFailuresIncomplete
Total 93016148 12917 0 0
T1 29842 10 0 0
T2 0 14 0 0
T3 0 10 0 0
T10 0 12 0 0
T27 0 12 0 0
T39 0 4 0 0
T44 0 12 0 0
T45 0 8 0 0
T47 0 28 0 0
T48 0 2 0 0
T49 5831 0 0 0
T50 4271 0 0 0
T51 2316 0 0 0
T52 4838 0 0 0
T53 2234 0 0 0
T54 19046 0 0 0
T55 6052 0 0 0
T56 3072 0 0 0
T57 9402 0 0 0

Line Coverage for Instance : tb.dut.u_reg.u_io_div2_meas_ctrl_en_cdc.u_arb.gen_wr_req.u_dst_update_sync
Line No.TotalCoveredPercent
TOTAL3636100.00
CONT_ASSIGN5500
CONT_ASSIGN19411100.00
CONT_ASSIGN19511100.00
ALWAYS2191212100.00
ALWAYS2631212100.00
ALWAYS30755100.00
ALWAYS31655100.00
CONT_ASSIGN33500
ALWAYS33900

54 logic unused_req_chk; 55 unreachable assign unused_req_chk = req_chk_i; 56 57 if (EnRzHs) begin : gen_rz_hs_protocol 58 ////////////////// 59 // RZ protocol // 60 ////////////////// 61 62 // Types 63 typedef enum logic { 64 LoSt, HiSt 65 } rz_fsm_e; 66 67 // Signals 68 rz_fsm_e src_fsm_d, src_fsm_q; 69 rz_fsm_e dst_fsm_d, dst_fsm_q; 70 logic src_ack, dst_ack; 71 logic src_req, dst_req; 72 73 // REQ-side FSM (SRC domain) 74 always_comb begin : src_fsm 75 src_fsm_d = src_fsm_q; 76 src_ack_o = 1'b0; 77 src_req = 1'b0; 78 79 unique case (src_fsm_q) 80 LoSt: begin 81 // Wait for the ack to go back to zero before starting 82 // a new transaction. 83 if (!src_ack && src_req_i) begin 84 src_fsm_d = HiSt; 85 end 86 end 87 HiSt: begin 88 src_req = 1'b1; 89 // Forward the acknowledgement. 90 src_ack_o = src_ack; 91 // If request drops out, we go back to LoSt. 92 // If DST side asserts ack, we also go back to LoSt. 93 if (!src_req_i || src_ack) begin 94 src_fsm_d = LoSt; 95 end 96 end 97 //VCS coverage off 98 // pragma coverage off 99 default: ; 100 //VCS coverage on 101 // pragma coverage on 102 endcase 103 end 104 105 // Move ACK over to SRC domain. 106 prim_flop_2sync #( 107 .Width(1) 108 ) ack_sync ( 109 .clk_i (clk_src_i), 110 .rst_ni (rst_src_ni), 111 .d_i (dst_ack), 112 .q_o (src_ack) 113 ); 114 115 // Registers 116 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin 117 if (!rst_src_ni) begin 118 src_fsm_q <= LoSt; 119 end else begin 120 src_fsm_q <= src_fsm_d; 121 end 122 end 123 124 // ACK-side FSM (DST domain) 125 always_comb begin : dst_fsm 126 dst_fsm_d = dst_fsm_q; 127 dst_req_o = 1'b0; 128 dst_ack = 1'b0; 129 130 unique case (dst_fsm_q) 131 LoSt: begin 132 if (dst_req) begin 133 // Forward the request. 134 dst_req_o = 1'b1; 135 // Wait for the request and acknowledge to be asserted 136 // before responding to the SRC side. 137 if (dst_ack_i) begin 138 dst_fsm_d = HiSt; 139 end 140 end 141 end 142 HiSt: begin 143 dst_ack = 1'b1; 144 // Wait for the request to drop back to zero. 145 if (!dst_req) begin 146 dst_fsm_d = LoSt; 147 end 148 end 149 //VCS coverage off 150 // pragma coverage off 151 default: ; 152 //VCS coverage on 153 // pragma coverage on 154 endcase 155 end 156 157 // Move REQ over to DST domain. 158 prim_flop_2sync #( 159 .Width(1) 160 ) req_sync ( 161 .clk_i (clk_dst_i), 162 .rst_ni (rst_dst_ni), 163 .d_i (src_req), 164 .q_o (dst_req) 165 ); 166 167 // Registers 168 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin 169 if (!rst_dst_ni) begin 170 dst_fsm_q <= LoSt; 171 end else begin 172 dst_fsm_q <= dst_fsm_d; 173 end 174 end 175 176 end else begin : gen_nrz_hs_protocol 177 ////////////////// 178 // NRZ protocol // 179 ////////////////// 180 181 // Types 182 typedef enum logic { 183 EVEN, ODD 184 } sync_reqack_fsm_e; 185 186 // Signals 187 sync_reqack_fsm_e src_fsm_ns, src_fsm_cs; 188 sync_reqack_fsm_e dst_fsm_ns, dst_fsm_cs; 189 190 logic src_req_d, src_req_q, src_ack; 191 logic dst_ack_d, dst_ack_q, dst_req; 192 logic src_handshake, dst_handshake; 193 194 1/1 assign src_handshake = src_req_i & src_ack_o; Tests: T1 T2 T3  195 1/1 assign dst_handshake = dst_req_o & dst_ack_i; Tests: T1 T2 T3  196 197 // Move REQ over to DST domain. 198 prim_flop_2sync #( 199 .Width(1) 200 ) req_sync ( 201 .clk_i (clk_dst_i), 202 .rst_ni (rst_dst_ni), 203 .d_i (src_req_q), 204 .q_o (dst_req) 205 ); 206 207 // Move ACK over to SRC domain. 208 prim_flop_2sync #( 209 .Width(1) 210 ) ack_sync ( 211 .clk_i (clk_src_i), 212 .rst_ni (rst_src_ni), 213 .d_i (dst_ack_q), 214 .q_o (src_ack) 215 ); 216 217 // REQ-side FSM (SRC domain) 218 always_comb begin : src_fsm 219 1/1 src_fsm_ns = src_fsm_cs; Tests: T1 T2 T3  220 221 // By default, we keep the internal REQ value and don't ACK. 222 1/1 src_req_d = src_req_q; Tests: T1 T2 T3  223 1/1 src_ack_o = 1'b0; Tests: T1 T2 T3  224 225 1/1 unique case (src_fsm_cs) Tests: T1 T2 T3  226 227 EVEN: begin 228 // Simply forward REQ and ACK. 229 1/1 src_req_d = src_req_i; Tests: T1 T2 T3  230 1/1 src_ack_o = src_ack; Tests: T1 T2 T3  231 232 // The handshake is done for exactly 1 clock cycle. 233 1/1 if (src_handshake) begin Tests: T1 T2 T3  234 1/1 src_fsm_ns = ODD; Tests: T1 T2 T3  235 end MISSING_ELSE 236 end 237 238 ODD: begin 239 // Internal REQ and ACK have inverted meaning now. If src_req_i is high again, this 240 // signals a new transaction. 241 1/1 src_req_d = ~src_req_i; Tests: T1 T2 T3  242 1/1 src_ack_o = ~src_ack; Tests: T1 T2 T3  243 244 // The handshake is done for exactly 1 clock cycle. 245 1/1 if (src_handshake) begin Tests: T1 T2 T3  246 1/1 src_fsm_ns = EVEN; Tests: T1 T2 T3  247 end MISSING_ELSE 248 end 249 250 //VCS coverage off 251 // pragma coverage off 252 253 default: ; 254 255 //VCS coverage on 256 // pragma coverage on 257 258 endcase 259 end 260 261 // ACK-side FSM (DST domain) 262 always_comb begin : dst_fsm 263 1/1 dst_fsm_ns = dst_fsm_cs; Tests: T1 T2 T3  264 265 // By default, we don't REQ and keep the internal ACK. 266 1/1 dst_req_o = 1'b0; Tests: T1 T2 T3  267 1/1 dst_ack_d = dst_ack_q; Tests: T1 T2 T3  268 269 1/1 unique case (dst_fsm_cs) Tests: T1 T2 T3  270 271 EVEN: begin 272 // Simply forward REQ and ACK. 273 1/1 dst_req_o = dst_req; Tests: T1 T2 T3  274 1/1 dst_ack_d = dst_ack_i; Tests: T1 T2 T3  275 276 // The handshake is done for exactly 1 clock cycle. 277 1/1 if (dst_handshake) begin Tests: T1 T2 T3  278 1/1 dst_fsm_ns = ODD; Tests: T1 T2 T3  279 end MISSING_ELSE 280 end 281 282 ODD: begin 283 // Internal REQ and ACK have inverted meaning now. If dst_req goes low, this signals a new 284 // transaction. 285 1/1 dst_req_o = ~dst_req; Tests: T1 T2 T3  286 1/1 dst_ack_d = ~dst_ack_i; Tests: T1 T2 T3  287 288 // The handshake is done for exactly 1 clock cycle. 289 1/1 if (dst_handshake) begin Tests: T1 T2 T3  290 1/1 dst_fsm_ns = EVEN; Tests: T1 T2 T3  291 end MISSING_ELSE 292 end 293 294 //VCS coverage off 295 // pragma coverage off 296 297 default: ; 298 299 //VCS coverage on 300 // pragma coverage on 301 302 endcase 303 end 304 305 // Registers 306 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin 307 1/1 if (!rst_src_ni) begin Tests: T4 T5 T6  308 1/1 src_fsm_cs <= EVEN; Tests: T4 T5 T6  309 1/1 src_req_q <= 1'b0; Tests: T4 T5 T6  310 end else begin 311 1/1 src_fsm_cs <= src_fsm_ns; Tests: T4 T5 T6  312 1/1 src_req_q <= src_req_d; Tests: T4 T5 T6  313 end 314 end 315 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin 316 1/1 if (!rst_dst_ni) begin Tests: T4 T5 T6  317 1/1 dst_fsm_cs <= EVEN; Tests: T4 T5 T6  318 1/1 dst_ack_q <= 1'b0; Tests: T4 T5 T6  319 end else begin 320 1/1 dst_fsm_cs <= dst_fsm_ns; Tests: T4 T5 T6  321 1/1 dst_ack_q <= dst_ack_d; Tests: T4 T5 T6  322 end 323 end 324 end 325 326 //////////////// 327 // Assertions // 328 //////////////// 329 330 `ifdef INC_ASSERT 331 //VCS coverage off 332 // pragma coverage off 333 334 logic effective_rst_n; 335 unreachable assign effective_rst_n = rst_src_ni && rst_dst_ni; 336 337 logic chk_flag; 338 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin 339 unreachable if (!effective_rst_n) begin 340 unreachable chk_flag <= '0; 341 unreachable end else if (src_req_i && !chk_flag) begin 342 unreachable chk_flag <= 1'b1; 343 end ==> MISSING_ELSE

Cond Coverage for Instance : tb.dut.u_reg.u_io_div2_meas_ctrl_en_cdc.u_arb.gen_wr_req.u_dst_update_sync
TotalCoveredPercent
Conditions4375.00
Logical4375.00
Non-Logical00
Event00

 LINE       194
 EXPRESSION (src_req_i & src_ack_o)
             ----1----   ----2----
-1--2-StatusTests
01Not Covered
10CoveredT1,T2,T3
11CoveredT1,T2,T3

 LINE       195
 EXPRESSION (dst_req_o & dst_ack_i)
             ----1----   ----2----
-1--2-StatusTestsExclude Annotation
01Excluded VC_COV_UNR
10Excluded VC_COV_UNR
11CoveredT1,T2,T3

Branch Coverage for Instance : tb.dut.u_reg.u_io_div2_meas_ctrl_en_cdc.u_arb.gen_wr_req.u_dst_update_sync
Line No.TotalCoveredPercent
Branches 12 12 100.00
CASE 225 4 4 100.00
CASE 269 4 4 100.00
IF 307 2 2 100.00
IF 316 2 2 100.00


225 unique case (src_fsm_cs) -1- 226 227 EVEN: begin 228 // Simply forward REQ and ACK. 229 src_req_d = src_req_i; 230 src_ack_o = src_ack; 231 232 // The handshake is done for exactly 1 clock cycle. 233 if (src_handshake) begin -2- 234 src_fsm_ns = ODD; ==> 235 end MISSING_ELSE ==> 236 end 237 238 ODD: begin 239 // Internal REQ and ACK have inverted meaning now. If src_req_i is high again, this 240 // signals a new transaction. 241 src_req_d = ~src_req_i; 242 src_ack_o = ~src_ack; 243 244 // The handshake is done for exactly 1 clock cycle. 245 if (src_handshake) begin -3- 246 src_fsm_ns = EVEN; ==> 247 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
EVEN 1 - Covered T1,T2,T3
EVEN 0 - Covered T1,T2,T3
ODD - 1 Covered T1,T2,T3
ODD - 0 Covered T1,T2,T3


269 unique case (dst_fsm_cs) -1- 270 271 EVEN: begin 272 // Simply forward REQ and ACK. 273 dst_req_o = dst_req; 274 dst_ack_d = dst_ack_i; 275 276 // The handshake is done for exactly 1 clock cycle. 277 if (dst_handshake) begin -2- 278 dst_fsm_ns = ODD; ==> 279 end MISSING_ELSE ==> 280 end 281 282 ODD: begin 283 // Internal REQ and ACK have inverted meaning now. If dst_req goes low, this signals a new 284 // transaction. 285 dst_req_o = ~dst_req; 286 dst_ack_d = ~dst_ack_i; 287 288 // The handshake is done for exactly 1 clock cycle. 289 if (dst_handshake) begin -3- 290 dst_fsm_ns = EVEN; ==> 291 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
EVEN 1 - Covered T1,T2,T3
EVEN 0 - Covered T1,T2,T3
ODD - 1 Covered T1,T2,T3
ODD - 0 Covered T1,T2,T3


307 if (!rst_src_ni) begin -1- 308 src_fsm_cs <= EVEN; ==> 309 src_req_q <= 1'b0; 310 end else begin 311 src_fsm_cs <= src_fsm_ns; ==>

Branches:
-1-StatusTests
1 Covered T4,T5,T6
0 Covered T4,T5,T6


316 if (!rst_dst_ni) begin -1- 317 dst_fsm_cs <= EVEN; ==> 318 dst_ack_q <= 1'b0; 319 end else begin 320 dst_fsm_cs <= dst_fsm_ns; ==>

Branches:
-1-StatusTests
1 Covered T4,T5,T6
0 Covered T4,T5,T6


Assert Coverage for Instance : tb.dut.u_reg.u_io_div2_meas_ctrl_en_cdc.u_arb.gen_wr_req.u_dst_update_sync
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
SyncReqAckAckNeedsReq 40545146 13453 0 0
SyncReqAckHoldReq 45761112 12915 0 0


SyncReqAckAckNeedsReq
NameAttemptsReal SuccessesFailuresIncomplete
Total 40545146 13453 0 0
T1 27978 10 0 0
T2 0 14 0 0
T3 0 10 0 0
T10 0 12 0 0
T27 0 12 0 0
T39 0 4 0 0
T44 0 12 0 0
T45 0 8 0 0
T47 0 28 0 0
T48 0 2 0 0
T49 1457 0 0 0
T50 1111 0 0 0
T51 2316 0 0 0
T52 1259 0 0 0
T53 2234 0 0 0
T54 9524 0 0 0
T55 757 0 0 0
T56 1568 0 0 0
T57 978 0 0 0

SyncReqAckHoldReq
NameAttemptsReal SuccessesFailuresIncomplete
Total 45761112 12915 0 0
T1 8430 10 0 0
T2 0 14 0 0
T3 0 10 0 0
T10 0 12 0 0
T27 0 12 0 0
T39 0 4 0 0
T44 0 12 0 0
T45 0 8 0 0
T47 0 28 0 0
T48 0 2 0 0
T49 3117 0 0 0
T50 2082 0 0 0
T51 1291 0 0 0
T52 2386 0 0 0
T53 1243 0 0 0
T54 10193 0 0 0
T55 3148 0 0 0
T56 1602 0 0 0
T57 4948 0 0 0

Line Coverage for Instance : tb.dut.u_reg.u_io_div4_meas_ctrl_en_cdc.u_arb.gen_wr_req.u_dst_update_sync
Line No.TotalCoveredPercent
TOTAL3636100.00
CONT_ASSIGN5500
CONT_ASSIGN19411100.00
CONT_ASSIGN19511100.00
ALWAYS2191212100.00
ALWAYS2631212100.00
ALWAYS30755100.00
ALWAYS31655100.00
CONT_ASSIGN33500
ALWAYS33900

54 logic unused_req_chk; 55 unreachable assign unused_req_chk = req_chk_i; 56 57 if (EnRzHs) begin : gen_rz_hs_protocol 58 ////////////////// 59 // RZ protocol // 60 ////////////////// 61 62 // Types 63 typedef enum logic { 64 LoSt, HiSt 65 } rz_fsm_e; 66 67 // Signals 68 rz_fsm_e src_fsm_d, src_fsm_q; 69 rz_fsm_e dst_fsm_d, dst_fsm_q; 70 logic src_ack, dst_ack; 71 logic src_req, dst_req; 72 73 // REQ-side FSM (SRC domain) 74 always_comb begin : src_fsm 75 src_fsm_d = src_fsm_q; 76 src_ack_o = 1'b0; 77 src_req = 1'b0; 78 79 unique case (src_fsm_q) 80 LoSt: begin 81 // Wait for the ack to go back to zero before starting 82 // a new transaction. 83 if (!src_ack && src_req_i) begin 84 src_fsm_d = HiSt; 85 end 86 end 87 HiSt: begin 88 src_req = 1'b1; 89 // Forward the acknowledgement. 90 src_ack_o = src_ack; 91 // If request drops out, we go back to LoSt. 92 // If DST side asserts ack, we also go back to LoSt. 93 if (!src_req_i || src_ack) begin 94 src_fsm_d = LoSt; 95 end 96 end 97 //VCS coverage off 98 // pragma coverage off 99 default: ; 100 //VCS coverage on 101 // pragma coverage on 102 endcase 103 end 104 105 // Move ACK over to SRC domain. 106 prim_flop_2sync #( 107 .Width(1) 108 ) ack_sync ( 109 .clk_i (clk_src_i), 110 .rst_ni (rst_src_ni), 111 .d_i (dst_ack), 112 .q_o (src_ack) 113 ); 114 115 // Registers 116 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin 117 if (!rst_src_ni) begin 118 src_fsm_q <= LoSt; 119 end else begin 120 src_fsm_q <= src_fsm_d; 121 end 122 end 123 124 // ACK-side FSM (DST domain) 125 always_comb begin : dst_fsm 126 dst_fsm_d = dst_fsm_q; 127 dst_req_o = 1'b0; 128 dst_ack = 1'b0; 129 130 unique case (dst_fsm_q) 131 LoSt: begin 132 if (dst_req) begin 133 // Forward the request. 134 dst_req_o = 1'b1; 135 // Wait for the request and acknowledge to be asserted 136 // before responding to the SRC side. 137 if (dst_ack_i) begin 138 dst_fsm_d = HiSt; 139 end 140 end 141 end 142 HiSt: begin 143 dst_ack = 1'b1; 144 // Wait for the request to drop back to zero. 145 if (!dst_req) begin 146 dst_fsm_d = LoSt; 147 end 148 end 149 //VCS coverage off 150 // pragma coverage off 151 default: ; 152 //VCS coverage on 153 // pragma coverage on 154 endcase 155 end 156 157 // Move REQ over to DST domain. 158 prim_flop_2sync #( 159 .Width(1) 160 ) req_sync ( 161 .clk_i (clk_dst_i), 162 .rst_ni (rst_dst_ni), 163 .d_i (src_req), 164 .q_o (dst_req) 165 ); 166 167 // Registers 168 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin 169 if (!rst_dst_ni) begin 170 dst_fsm_q <= LoSt; 171 end else begin 172 dst_fsm_q <= dst_fsm_d; 173 end 174 end 175 176 end else begin : gen_nrz_hs_protocol 177 ////////////////// 178 // NRZ protocol // 179 ////////////////// 180 181 // Types 182 typedef enum logic { 183 EVEN, ODD 184 } sync_reqack_fsm_e; 185 186 // Signals 187 sync_reqack_fsm_e src_fsm_ns, src_fsm_cs; 188 sync_reqack_fsm_e dst_fsm_ns, dst_fsm_cs; 189 190 logic src_req_d, src_req_q, src_ack; 191 logic dst_ack_d, dst_ack_q, dst_req; 192 logic src_handshake, dst_handshake; 193 194 1/1 assign src_handshake = src_req_i & src_ack_o; Tests: T1 T2 T3  195 1/1 assign dst_handshake = dst_req_o & dst_ack_i; Tests: T1 T2 T3  196 197 // Move REQ over to DST domain. 198 prim_flop_2sync #( 199 .Width(1) 200 ) req_sync ( 201 .clk_i (clk_dst_i), 202 .rst_ni (rst_dst_ni), 203 .d_i (src_req_q), 204 .q_o (dst_req) 205 ); 206 207 // Move ACK over to SRC domain. 208 prim_flop_2sync #( 209 .Width(1) 210 ) ack_sync ( 211 .clk_i (clk_src_i), 212 .rst_ni (rst_src_ni), 213 .d_i (dst_ack_q), 214 .q_o (src_ack) 215 ); 216 217 // REQ-side FSM (SRC domain) 218 always_comb begin : src_fsm 219 1/1 src_fsm_ns = src_fsm_cs; Tests: T1 T2 T3  220 221 // By default, we keep the internal REQ value and don't ACK. 222 1/1 src_req_d = src_req_q; Tests: T1 T2 T3  223 1/1 src_ack_o = 1'b0; Tests: T1 T2 T3  224 225 1/1 unique case (src_fsm_cs) Tests: T1 T2 T3  226 227 EVEN: begin 228 // Simply forward REQ and ACK. 229 1/1 src_req_d = src_req_i; Tests: T1 T2 T3  230 1/1 src_ack_o = src_ack; Tests: T1 T2 T3  231 232 // The handshake is done for exactly 1 clock cycle. 233 1/1 if (src_handshake) begin Tests: T1 T2 T3  234 1/1 src_fsm_ns = ODD; Tests: T1 T2 T3  235 end MISSING_ELSE 236 end 237 238 ODD: begin 239 // Internal REQ and ACK have inverted meaning now. If src_req_i is high again, this 240 // signals a new transaction. 241 1/1 src_req_d = ~src_req_i; Tests: T1 T2 T3  242 1/1 src_ack_o = ~src_ack; Tests: T1 T2 T3  243 244 // The handshake is done for exactly 1 clock cycle. 245 1/1 if (src_handshake) begin Tests: T1 T2 T3  246 1/1 src_fsm_ns = EVEN; Tests: T1 T2 T3  247 end MISSING_ELSE 248 end 249 250 //VCS coverage off 251 // pragma coverage off 252 253 default: ; 254 255 //VCS coverage on 256 // pragma coverage on 257 258 endcase 259 end 260 261 // ACK-side FSM (DST domain) 262 always_comb begin : dst_fsm 263 1/1 dst_fsm_ns = dst_fsm_cs; Tests: T1 T2 T3  264 265 // By default, we don't REQ and keep the internal ACK. 266 1/1 dst_req_o = 1'b0; Tests: T1 T2 T3  267 1/1 dst_ack_d = dst_ack_q; Tests: T1 T2 T3  268 269 1/1 unique case (dst_fsm_cs) Tests: T1 T2 T3  270 271 EVEN: begin 272 // Simply forward REQ and ACK. 273 1/1 dst_req_o = dst_req; Tests: T1 T2 T3  274 1/1 dst_ack_d = dst_ack_i; Tests: T1 T2 T3  275 276 // The handshake is done for exactly 1 clock cycle. 277 1/1 if (dst_handshake) begin Tests: T1 T2 T3  278 1/1 dst_fsm_ns = ODD; Tests: T1 T2 T3  279 end MISSING_ELSE 280 end 281 282 ODD: begin 283 // Internal REQ and ACK have inverted meaning now. If dst_req goes low, this signals a new 284 // transaction. 285 1/1 dst_req_o = ~dst_req; Tests: T1 T2 T3  286 1/1 dst_ack_d = ~dst_ack_i; Tests: T1 T2 T3  287 288 // The handshake is done for exactly 1 clock cycle. 289 1/1 if (dst_handshake) begin Tests: T1 T2 T3  290 1/1 dst_fsm_ns = EVEN; Tests: T1 T2 T3  291 end MISSING_ELSE 292 end 293 294 //VCS coverage off 295 // pragma coverage off 296 297 default: ; 298 299 //VCS coverage on 300 // pragma coverage on 301 302 endcase 303 end 304 305 // Registers 306 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin 307 1/1 if (!rst_src_ni) begin Tests: T4 T5 T6  308 1/1 src_fsm_cs <= EVEN; Tests: T4 T5 T6  309 1/1 src_req_q <= 1'b0; Tests: T4 T5 T6  310 end else begin 311 1/1 src_fsm_cs <= src_fsm_ns; Tests: T4 T5 T6  312 1/1 src_req_q <= src_req_d; Tests: T4 T5 T6  313 end 314 end 315 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin 316 1/1 if (!rst_dst_ni) begin Tests: T4 T5 T6  317 1/1 dst_fsm_cs <= EVEN; Tests: T4 T5 T6  318 1/1 dst_ack_q <= 1'b0; Tests: T4 T5 T6  319 end else begin 320 1/1 dst_fsm_cs <= dst_fsm_ns; Tests: T4 T5 T6  321 1/1 dst_ack_q <= dst_ack_d; Tests: T4 T5 T6  322 end 323 end 324 end 325 326 //////////////// 327 // Assertions // 328 //////////////// 329 330 `ifdef INC_ASSERT 331 //VCS coverage off 332 // pragma coverage off 333 334 logic effective_rst_n; 335 unreachable assign effective_rst_n = rst_src_ni && rst_dst_ni; 336 337 logic chk_flag; 338 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin 339 unreachable if (!effective_rst_n) begin 340 unreachable chk_flag <= '0; 341 unreachable end else if (src_req_i && !chk_flag) begin 342 unreachable chk_flag <= 1'b1; 343 end ==> MISSING_ELSE

Cond Coverage for Instance : tb.dut.u_reg.u_io_div4_meas_ctrl_en_cdc.u_arb.gen_wr_req.u_dst_update_sync
TotalCoveredPercent
Conditions4375.00
Logical4375.00
Non-Logical00
Event00

 LINE       194
 EXPRESSION (src_req_i & src_ack_o)
             ----1----   ----2----
-1--2-StatusTests
01Not Covered
10CoveredT1,T2,T3
11CoveredT1,T2,T3

 LINE       195
 EXPRESSION (dst_req_o & dst_ack_i)
             ----1----   ----2----
-1--2-StatusTestsExclude Annotation
01Excluded VC_COV_UNR
10Excluded VC_COV_UNR
11CoveredT1,T2,T3

Branch Coverage for Instance : tb.dut.u_reg.u_io_div4_meas_ctrl_en_cdc.u_arb.gen_wr_req.u_dst_update_sync
Line No.TotalCoveredPercent
Branches 12 12 100.00
CASE 225 4 4 100.00
CASE 269 4 4 100.00
IF 307 2 2 100.00
IF 316 2 2 100.00


225 unique case (src_fsm_cs) -1- 226 227 EVEN: begin 228 // Simply forward REQ and ACK. 229 src_req_d = src_req_i; 230 src_ack_o = src_ack; 231 232 // The handshake is done for exactly 1 clock cycle. 233 if (src_handshake) begin -2- 234 src_fsm_ns = ODD; ==> 235 end MISSING_ELSE ==> 236 end 237 238 ODD: begin 239 // Internal REQ and ACK have inverted meaning now. If src_req_i is high again, this 240 // signals a new transaction. 241 src_req_d = ~src_req_i; 242 src_ack_o = ~src_ack; 243 244 // The handshake is done for exactly 1 clock cycle. 245 if (src_handshake) begin -3- 246 src_fsm_ns = EVEN; ==> 247 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
EVEN 1 - Covered T1,T2,T3
EVEN 0 - Covered T1,T2,T3
ODD - 1 Covered T1,T2,T3
ODD - 0 Covered T1,T2,T3


269 unique case (dst_fsm_cs) -1- 270 271 EVEN: begin 272 // Simply forward REQ and ACK. 273 dst_req_o = dst_req; 274 dst_ack_d = dst_ack_i; 275 276 // The handshake is done for exactly 1 clock cycle. 277 if (dst_handshake) begin -2- 278 dst_fsm_ns = ODD; ==> 279 end MISSING_ELSE ==> 280 end 281 282 ODD: begin 283 // Internal REQ and ACK have inverted meaning now. If dst_req goes low, this signals a new 284 // transaction. 285 dst_req_o = ~dst_req; 286 dst_ack_d = ~dst_ack_i; 287 288 // The handshake is done for exactly 1 clock cycle. 289 if (dst_handshake) begin -3- 290 dst_fsm_ns = EVEN; ==> 291 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
EVEN 1 - Covered T1,T2,T3
EVEN 0 - Covered T1,T2,T3
ODD - 1 Covered T1,T2,T3
ODD - 0 Covered T1,T2,T3


307 if (!rst_src_ni) begin -1- 308 src_fsm_cs <= EVEN; ==> 309 src_req_q <= 1'b0; 310 end else begin 311 src_fsm_cs <= src_fsm_ns; ==>

Branches:
-1-StatusTests
1 Covered T4,T5,T6
0 Covered T4,T5,T6


316 if (!rst_dst_ni) begin -1- 317 dst_fsm_cs <= EVEN; ==> 318 dst_ack_q <= 1'b0; 319 end else begin 320 dst_fsm_cs <= dst_fsm_ns; ==>

Branches:
-1-StatusTests
1 Covered T4,T5,T6
0 Covered T4,T5,T6


Assert Coverage for Instance : tb.dut.u_reg.u_io_div4_meas_ctrl_en_cdc.u_arb.gen_wr_req.u_dst_update_sync
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
SyncReqAckAckNeedsReq 40545146 13453 0 0
SyncReqAckHoldReq 22880144 12895 0 0


SyncReqAckAckNeedsReq
NameAttemptsReal SuccessesFailuresIncomplete
Total 40545146 13453 0 0
T1 27978 10 0 0
T2 0 14 0 0
T3 0 10 0 0
T10 0 12 0 0
T27 0 12 0 0
T39 0 4 0 0
T44 0 12 0 0
T45 0 8 0 0
T47 0 28 0 0
T48 0 2 0 0
T49 1457 0 0 0
T50 1111 0 0 0
T51 2316 0 0 0
T52 1259 0 0 0
T53 2234 0 0 0
T54 9524 0 0 0
T55 757 0 0 0
T56 1568 0 0 0
T57 978 0 0 0

SyncReqAckHoldReq
NameAttemptsReal SuccessesFailuresIncomplete
Total 22880144 12895 0 0
T1 4216 9 0 0
T2 0 14 0 0
T3 0 10 0 0
T10 0 12 0 0
T27 0 12 0 0
T39 0 4 0 0
T44 0 12 0 0
T45 0 8 0 0
T47 0 28 0 0
T48 0 2 0 0
T49 1559 0 0 0
T50 1041 0 0 0
T51 644 0 0 0
T52 1193 0 0 0
T53 619 0 0 0
T54 5094 0 0 0
T55 1574 0 0 0
T56 800 0 0 0
T57 2474 0 0 0

Line Coverage for Instance : tb.dut.u_reg.u_main_meas_ctrl_en_cdc.u_arb.gen_wr_req.u_dst_update_sync
Line No.TotalCoveredPercent
TOTAL3636100.00
CONT_ASSIGN5500
CONT_ASSIGN19411100.00
CONT_ASSIGN19511100.00
ALWAYS2191212100.00
ALWAYS2631212100.00
ALWAYS30755100.00
ALWAYS31655100.00
CONT_ASSIGN33500
ALWAYS33900

54 logic unused_req_chk; 55 unreachable assign unused_req_chk = req_chk_i; 56 57 if (EnRzHs) begin : gen_rz_hs_protocol 58 ////////////////// 59 // RZ protocol // 60 ////////////////// 61 62 // Types 63 typedef enum logic { 64 LoSt, HiSt 65 } rz_fsm_e; 66 67 // Signals 68 rz_fsm_e src_fsm_d, src_fsm_q; 69 rz_fsm_e dst_fsm_d, dst_fsm_q; 70 logic src_ack, dst_ack; 71 logic src_req, dst_req; 72 73 // REQ-side FSM (SRC domain) 74 always_comb begin : src_fsm 75 src_fsm_d = src_fsm_q; 76 src_ack_o = 1'b0; 77 src_req = 1'b0; 78 79 unique case (src_fsm_q) 80 LoSt: begin 81 // Wait for the ack to go back to zero before starting 82 // a new transaction. 83 if (!src_ack && src_req_i) begin 84 src_fsm_d = HiSt; 85 end 86 end 87 HiSt: begin 88 src_req = 1'b1; 89 // Forward the acknowledgement. 90 src_ack_o = src_ack; 91 // If request drops out, we go back to LoSt. 92 // If DST side asserts ack, we also go back to LoSt. 93 if (!src_req_i || src_ack) begin 94 src_fsm_d = LoSt; 95 end 96 end 97 //VCS coverage off 98 // pragma coverage off 99 default: ; 100 //VCS coverage on 101 // pragma coverage on 102 endcase 103 end 104 105 // Move ACK over to SRC domain. 106 prim_flop_2sync #( 107 .Width(1) 108 ) ack_sync ( 109 .clk_i (clk_src_i), 110 .rst_ni (rst_src_ni), 111 .d_i (dst_ack), 112 .q_o (src_ack) 113 ); 114 115 // Registers 116 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin 117 if (!rst_src_ni) begin 118 src_fsm_q <= LoSt; 119 end else begin 120 src_fsm_q <= src_fsm_d; 121 end 122 end 123 124 // ACK-side FSM (DST domain) 125 always_comb begin : dst_fsm 126 dst_fsm_d = dst_fsm_q; 127 dst_req_o = 1'b0; 128 dst_ack = 1'b0; 129 130 unique case (dst_fsm_q) 131 LoSt: begin 132 if (dst_req) begin 133 // Forward the request. 134 dst_req_o = 1'b1; 135 // Wait for the request and acknowledge to be asserted 136 // before responding to the SRC side. 137 if (dst_ack_i) begin 138 dst_fsm_d = HiSt; 139 end 140 end 141 end 142 HiSt: begin 143 dst_ack = 1'b1; 144 // Wait for the request to drop back to zero. 145 if (!dst_req) begin 146 dst_fsm_d = LoSt; 147 end 148 end 149 //VCS coverage off 150 // pragma coverage off 151 default: ; 152 //VCS coverage on 153 // pragma coverage on 154 endcase 155 end 156 157 // Move REQ over to DST domain. 158 prim_flop_2sync #( 159 .Width(1) 160 ) req_sync ( 161 .clk_i (clk_dst_i), 162 .rst_ni (rst_dst_ni), 163 .d_i (src_req), 164 .q_o (dst_req) 165 ); 166 167 // Registers 168 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin 169 if (!rst_dst_ni) begin 170 dst_fsm_q <= LoSt; 171 end else begin 172 dst_fsm_q <= dst_fsm_d; 173 end 174 end 175 176 end else begin : gen_nrz_hs_protocol 177 ////////////////// 178 // NRZ protocol // 179 ////////////////// 180 181 // Types 182 typedef enum logic { 183 EVEN, ODD 184 } sync_reqack_fsm_e; 185 186 // Signals 187 sync_reqack_fsm_e src_fsm_ns, src_fsm_cs; 188 sync_reqack_fsm_e dst_fsm_ns, dst_fsm_cs; 189 190 logic src_req_d, src_req_q, src_ack; 191 logic dst_ack_d, dst_ack_q, dst_req; 192 logic src_handshake, dst_handshake; 193 194 1/1 assign src_handshake = src_req_i & src_ack_o; Tests: T1 T2 T3  195 1/1 assign dst_handshake = dst_req_o & dst_ack_i; Tests: T1 T2 T3  196 197 // Move REQ over to DST domain. 198 prim_flop_2sync #( 199 .Width(1) 200 ) req_sync ( 201 .clk_i (clk_dst_i), 202 .rst_ni (rst_dst_ni), 203 .d_i (src_req_q), 204 .q_o (dst_req) 205 ); 206 207 // Move ACK over to SRC domain. 208 prim_flop_2sync #( 209 .Width(1) 210 ) ack_sync ( 211 .clk_i (clk_src_i), 212 .rst_ni (rst_src_ni), 213 .d_i (dst_ack_q), 214 .q_o (src_ack) 215 ); 216 217 // REQ-side FSM (SRC domain) 218 always_comb begin : src_fsm 219 1/1 src_fsm_ns = src_fsm_cs; Tests: T1 T2 T3  220 221 // By default, we keep the internal REQ value and don't ACK. 222 1/1 src_req_d = src_req_q; Tests: T1 T2 T3  223 1/1 src_ack_o = 1'b0; Tests: T1 T2 T3  224 225 1/1 unique case (src_fsm_cs) Tests: T1 T2 T3  226 227 EVEN: begin 228 // Simply forward REQ and ACK. 229 1/1 src_req_d = src_req_i; Tests: T1 T2 T3  230 1/1 src_ack_o = src_ack; Tests: T1 T2 T3  231 232 // The handshake is done for exactly 1 clock cycle. 233 1/1 if (src_handshake) begin Tests: T1 T2 T3  234 1/1 src_fsm_ns = ODD; Tests: T1 T2 T3  235 end MISSING_ELSE 236 end 237 238 ODD: begin 239 // Internal REQ and ACK have inverted meaning now. If src_req_i is high again, this 240 // signals a new transaction. 241 1/1 src_req_d = ~src_req_i; Tests: T1 T2 T3  242 1/1 src_ack_o = ~src_ack; Tests: T1 T2 T3  243 244 // The handshake is done for exactly 1 clock cycle. 245 1/1 if (src_handshake) begin Tests: T1 T2 T3  246 1/1 src_fsm_ns = EVEN; Tests: T1 T2 T3  247 end MISSING_ELSE 248 end 249 250 //VCS coverage off 251 // pragma coverage off 252 253 default: ; 254 255 //VCS coverage on 256 // pragma coverage on 257 258 endcase 259 end 260 261 // ACK-side FSM (DST domain) 262 always_comb begin : dst_fsm 263 1/1 dst_fsm_ns = dst_fsm_cs; Tests: T1 T2 T3  264 265 // By default, we don't REQ and keep the internal ACK. 266 1/1 dst_req_o = 1'b0; Tests: T1 T2 T3  267 1/1 dst_ack_d = dst_ack_q; Tests: T1 T2 T3  268 269 1/1 unique case (dst_fsm_cs) Tests: T1 T2 T3  270 271 EVEN: begin 272 // Simply forward REQ and ACK. 273 1/1 dst_req_o = dst_req; Tests: T1 T2 T3  274 1/1 dst_ack_d = dst_ack_i; Tests: T1 T2 T3  275 276 // The handshake is done for exactly 1 clock cycle. 277 1/1 if (dst_handshake) begin Tests: T1 T2 T3  278 1/1 dst_fsm_ns = ODD; Tests: T1 T2 T3  279 end MISSING_ELSE 280 end 281 282 ODD: begin 283 // Internal REQ and ACK have inverted meaning now. If dst_req goes low, this signals a new 284 // transaction. 285 1/1 dst_req_o = ~dst_req; Tests: T1 T2 T3  286 1/1 dst_ack_d = ~dst_ack_i; Tests: T1 T2 T3  287 288 // The handshake is done for exactly 1 clock cycle. 289 1/1 if (dst_handshake) begin Tests: T1 T2 T3  290 1/1 dst_fsm_ns = EVEN; Tests: T1 T2 T3  291 end MISSING_ELSE 292 end 293 294 //VCS coverage off 295 // pragma coverage off 296 297 default: ; 298 299 //VCS coverage on 300 // pragma coverage on 301 302 endcase 303 end 304 305 // Registers 306 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin 307 1/1 if (!rst_src_ni) begin Tests: T4 T5 T6  308 1/1 src_fsm_cs <= EVEN; Tests: T4 T5 T6  309 1/1 src_req_q <= 1'b0; Tests: T4 T5 T6  310 end else begin 311 1/1 src_fsm_cs <= src_fsm_ns; Tests: T4 T5 T6  312 1/1 src_req_q <= src_req_d; Tests: T4 T5 T6  313 end 314 end 315 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin 316 1/1 if (!rst_dst_ni) begin Tests: T4 T5 T6  317 1/1 dst_fsm_cs <= EVEN; Tests: T4 T5 T6  318 1/1 dst_ack_q <= 1'b0; Tests: T4 T5 T6  319 end else begin 320 1/1 dst_fsm_cs <= dst_fsm_ns; Tests: T4 T5 T6  321 1/1 dst_ack_q <= dst_ack_d; Tests: T4 T5 T6  322 end 323 end 324 end 325 326 //////////////// 327 // Assertions // 328 //////////////// 329 330 `ifdef INC_ASSERT 331 //VCS coverage off 332 // pragma coverage off 333 334 logic effective_rst_n; 335 unreachable assign effective_rst_n = rst_src_ni && rst_dst_ni; 336 337 logic chk_flag; 338 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin 339 unreachable if (!effective_rst_n) begin 340 unreachable chk_flag <= '0; 341 unreachable end else if (src_req_i && !chk_flag) begin 342 unreachable chk_flag <= 1'b1; 343 end ==> MISSING_ELSE

Cond Coverage for Instance : tb.dut.u_reg.u_main_meas_ctrl_en_cdc.u_arb.gen_wr_req.u_dst_update_sync
TotalCoveredPercent
Conditions4375.00
Logical4375.00
Non-Logical00
Event00

 LINE       194
 EXPRESSION (src_req_i & src_ack_o)
             ----1----   ----2----
-1--2-StatusTests
01Not Covered
10CoveredT1,T2,T3
11CoveredT1,T2,T3

 LINE       195
 EXPRESSION (dst_req_o & dst_ack_i)
             ----1----   ----2----
-1--2-StatusTestsExclude Annotation
01Excluded VC_COV_UNR
10Excluded VC_COV_UNR
11CoveredT1,T2,T3

Branch Coverage for Instance : tb.dut.u_reg.u_main_meas_ctrl_en_cdc.u_arb.gen_wr_req.u_dst_update_sync
Line No.TotalCoveredPercent
Branches 12 12 100.00
CASE 225 4 4 100.00
CASE 269 4 4 100.00
IF 307 2 2 100.00
IF 316 2 2 100.00


225 unique case (src_fsm_cs) -1- 226 227 EVEN: begin 228 // Simply forward REQ and ACK. 229 src_req_d = src_req_i; 230 src_ack_o = src_ack; 231 232 // The handshake is done for exactly 1 clock cycle. 233 if (src_handshake) begin -2- 234 src_fsm_ns = ODD; ==> 235 end MISSING_ELSE ==> 236 end 237 238 ODD: begin 239 // Internal REQ and ACK have inverted meaning now. If src_req_i is high again, this 240 // signals a new transaction. 241 src_req_d = ~src_req_i; 242 src_ack_o = ~src_ack; 243 244 // The handshake is done for exactly 1 clock cycle. 245 if (src_handshake) begin -3- 246 src_fsm_ns = EVEN; ==> 247 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
EVEN 1 - Covered T1,T2,T3
EVEN 0 - Covered T1,T2,T3
ODD - 1 Covered T1,T2,T3
ODD - 0 Covered T1,T2,T3


269 unique case (dst_fsm_cs) -1- 270 271 EVEN: begin 272 // Simply forward REQ and ACK. 273 dst_req_o = dst_req; 274 dst_ack_d = dst_ack_i; 275 276 // The handshake is done for exactly 1 clock cycle. 277 if (dst_handshake) begin -2- 278 dst_fsm_ns = ODD; ==> 279 end MISSING_ELSE ==> 280 end 281 282 ODD: begin 283 // Internal REQ and ACK have inverted meaning now. If dst_req goes low, this signals a new 284 // transaction. 285 dst_req_o = ~dst_req; 286 dst_ack_d = ~dst_ack_i; 287 288 // The handshake is done for exactly 1 clock cycle. 289 if (dst_handshake) begin -3- 290 dst_fsm_ns = EVEN; ==> 291 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
EVEN 1 - Covered T1,T2,T3
EVEN 0 - Covered T1,T2,T3
ODD - 1 Covered T1,T2,T3
ODD - 0 Covered T1,T2,T3


307 if (!rst_src_ni) begin -1- 308 src_fsm_cs <= EVEN; ==> 309 src_req_q <= 1'b0; 310 end else begin 311 src_fsm_cs <= src_fsm_ns; ==>

Branches:
-1-StatusTests
1 Covered T4,T5,T6
0 Covered T4,T5,T6


316 if (!rst_dst_ni) begin -1- 317 dst_fsm_cs <= EVEN; ==> 318 dst_ack_q <= 1'b0; 319 end else begin 320 dst_fsm_cs <= dst_fsm_ns; ==>

Branches:
-1-StatusTests
1 Covered T4,T5,T6
0 Covered T4,T5,T6


Assert Coverage for Instance : tb.dut.u_reg.u_main_meas_ctrl_en_cdc.u_arb.gen_wr_req.u_dst_update_sync
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
SyncReqAckAckNeedsReq 40545146 13453 0 0
SyncReqAckHoldReq 102625272 12917 0 0


SyncReqAckAckNeedsReq
NameAttemptsReal SuccessesFailuresIncomplete
Total 40545146 13453 0 0
T1 27978 10 0 0
T2 0 14 0 0
T3 0 10 0 0
T10 0 12 0 0
T27 0 12 0 0
T39 0 4 0 0
T44 0 12 0 0
T45 0 8 0 0
T47 0 28 0 0
T48 0 2 0 0
T49 1457 0 0 0
T50 1111 0 0 0
T51 2316 0 0 0
T52 1259 0 0 0
T53 2234 0 0 0
T54 9524 0 0 0
T55 757 0 0 0
T56 1568 0 0 0
T57 978 0 0 0

SyncReqAckHoldReq
NameAttemptsReal SuccessesFailuresIncomplete
Total 102625272 12917 0 0
T1 31086 10 0 0
T2 0 14 0 0
T3 0 10 0 0
T10 0 12 0 0
T27 0 12 0 0
T39 0 4 0 0
T44 0 12 0 0
T45 0 8 0 0
T47 0 28 0 0
T48 0 2 0 0
T49 6074 0 0 0
T50 4449 0 0 0
T51 2413 0 0 0
T52 5039 0 0 0
T53 2327 0 0 0
T54 19840 0 0 0
T55 6304 0 0 0
T56 3199 0 0 0
T57 9794 0 0 0

Line Coverage for Instance : tb.dut.u_reg.u_usb_meas_ctrl_en_cdc.u_arb.gen_wr_req.u_dst_update_sync
Line No.TotalCoveredPercent
TOTAL3636100.00
CONT_ASSIGN5500
CONT_ASSIGN19411100.00
CONT_ASSIGN19511100.00
ALWAYS2191212100.00
ALWAYS2631212100.00
ALWAYS30755100.00
ALWAYS31655100.00
CONT_ASSIGN33500
ALWAYS33900

54 logic unused_req_chk; 55 unreachable assign unused_req_chk = req_chk_i; 56 57 if (EnRzHs) begin : gen_rz_hs_protocol 58 ////////////////// 59 // RZ protocol // 60 ////////////////// 61 62 // Types 63 typedef enum logic { 64 LoSt, HiSt 65 } rz_fsm_e; 66 67 // Signals 68 rz_fsm_e src_fsm_d, src_fsm_q; 69 rz_fsm_e dst_fsm_d, dst_fsm_q; 70 logic src_ack, dst_ack; 71 logic src_req, dst_req; 72 73 // REQ-side FSM (SRC domain) 74 always_comb begin : src_fsm 75 src_fsm_d = src_fsm_q; 76 src_ack_o = 1'b0; 77 src_req = 1'b0; 78 79 unique case (src_fsm_q) 80 LoSt: begin 81 // Wait for the ack to go back to zero before starting 82 // a new transaction. 83 if (!src_ack && src_req_i) begin 84 src_fsm_d = HiSt; 85 end 86 end 87 HiSt: begin 88 src_req = 1'b1; 89 // Forward the acknowledgement. 90 src_ack_o = src_ack; 91 // If request drops out, we go back to LoSt. 92 // If DST side asserts ack, we also go back to LoSt. 93 if (!src_req_i || src_ack) begin 94 src_fsm_d = LoSt; 95 end 96 end 97 //VCS coverage off 98 // pragma coverage off 99 default: ; 100 //VCS coverage on 101 // pragma coverage on 102 endcase 103 end 104 105 // Move ACK over to SRC domain. 106 prim_flop_2sync #( 107 .Width(1) 108 ) ack_sync ( 109 .clk_i (clk_src_i), 110 .rst_ni (rst_src_ni), 111 .d_i (dst_ack), 112 .q_o (src_ack) 113 ); 114 115 // Registers 116 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin 117 if (!rst_src_ni) begin 118 src_fsm_q <= LoSt; 119 end else begin 120 src_fsm_q <= src_fsm_d; 121 end 122 end 123 124 // ACK-side FSM (DST domain) 125 always_comb begin : dst_fsm 126 dst_fsm_d = dst_fsm_q; 127 dst_req_o = 1'b0; 128 dst_ack = 1'b0; 129 130 unique case (dst_fsm_q) 131 LoSt: begin 132 if (dst_req) begin 133 // Forward the request. 134 dst_req_o = 1'b1; 135 // Wait for the request and acknowledge to be asserted 136 // before responding to the SRC side. 137 if (dst_ack_i) begin 138 dst_fsm_d = HiSt; 139 end 140 end 141 end 142 HiSt: begin 143 dst_ack = 1'b1; 144 // Wait for the request to drop back to zero. 145 if (!dst_req) begin 146 dst_fsm_d = LoSt; 147 end 148 end 149 //VCS coverage off 150 // pragma coverage off 151 default: ; 152 //VCS coverage on 153 // pragma coverage on 154 endcase 155 end 156 157 // Move REQ over to DST domain. 158 prim_flop_2sync #( 159 .Width(1) 160 ) req_sync ( 161 .clk_i (clk_dst_i), 162 .rst_ni (rst_dst_ni), 163 .d_i (src_req), 164 .q_o (dst_req) 165 ); 166 167 // Registers 168 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin 169 if (!rst_dst_ni) begin 170 dst_fsm_q <= LoSt; 171 end else begin 172 dst_fsm_q <= dst_fsm_d; 173 end 174 end 175 176 end else begin : gen_nrz_hs_protocol 177 ////////////////// 178 // NRZ protocol // 179 ////////////////// 180 181 // Types 182 typedef enum logic { 183 EVEN, ODD 184 } sync_reqack_fsm_e; 185 186 // Signals 187 sync_reqack_fsm_e src_fsm_ns, src_fsm_cs; 188 sync_reqack_fsm_e dst_fsm_ns, dst_fsm_cs; 189 190 logic src_req_d, src_req_q, src_ack; 191 logic dst_ack_d, dst_ack_q, dst_req; 192 logic src_handshake, dst_handshake; 193 194 1/1 assign src_handshake = src_req_i & src_ack_o; Tests: T1 T2 T3  195 1/1 assign dst_handshake = dst_req_o & dst_ack_i; Tests: T1 T2 T3  196 197 // Move REQ over to DST domain. 198 prim_flop_2sync #( 199 .Width(1) 200 ) req_sync ( 201 .clk_i (clk_dst_i), 202 .rst_ni (rst_dst_ni), 203 .d_i (src_req_q), 204 .q_o (dst_req) 205 ); 206 207 // Move ACK over to SRC domain. 208 prim_flop_2sync #( 209 .Width(1) 210 ) ack_sync ( 211 .clk_i (clk_src_i), 212 .rst_ni (rst_src_ni), 213 .d_i (dst_ack_q), 214 .q_o (src_ack) 215 ); 216 217 // REQ-side FSM (SRC domain) 218 always_comb begin : src_fsm 219 1/1 src_fsm_ns = src_fsm_cs; Tests: T1 T2 T3  220 221 // By default, we keep the internal REQ value and don't ACK. 222 1/1 src_req_d = src_req_q; Tests: T1 T2 T3  223 1/1 src_ack_o = 1'b0; Tests: T1 T2 T3  224 225 1/1 unique case (src_fsm_cs) Tests: T1 T2 T3  226 227 EVEN: begin 228 // Simply forward REQ and ACK. 229 1/1 src_req_d = src_req_i; Tests: T1 T2 T3  230 1/1 src_ack_o = src_ack; Tests: T1 T2 T3  231 232 // The handshake is done for exactly 1 clock cycle. 233 1/1 if (src_handshake) begin Tests: T1 T2 T3  234 1/1 src_fsm_ns = ODD; Tests: T1 T2 T3  235 end MISSING_ELSE 236 end 237 238 ODD: begin 239 // Internal REQ and ACK have inverted meaning now. If src_req_i is high again, this 240 // signals a new transaction. 241 1/1 src_req_d = ~src_req_i; Tests: T1 T2 T3  242 1/1 src_ack_o = ~src_ack; Tests: T1 T2 T3  243 244 // The handshake is done for exactly 1 clock cycle. 245 1/1 if (src_handshake) begin Tests: T1 T2 T3  246 1/1 src_fsm_ns = EVEN; Tests: T3 T27 T10  247 end MISSING_ELSE 248 end 249 250 //VCS coverage off 251 // pragma coverage off 252 253 default: ; 254 255 //VCS coverage on 256 // pragma coverage on 257 258 endcase 259 end 260 261 // ACK-side FSM (DST domain) 262 always_comb begin : dst_fsm 263 1/1 dst_fsm_ns = dst_fsm_cs; Tests: T1 T2 T3  264 265 // By default, we don't REQ and keep the internal ACK. 266 1/1 dst_req_o = 1'b0; Tests: T1 T2 T3  267 1/1 dst_ack_d = dst_ack_q; Tests: T1 T2 T3  268 269 1/1 unique case (dst_fsm_cs) Tests: T1 T2 T3  270 271 EVEN: begin 272 // Simply forward REQ and ACK. 273 1/1 dst_req_o = dst_req; Tests: T1 T2 T3  274 1/1 dst_ack_d = dst_ack_i; Tests: T1 T2 T3  275 276 // The handshake is done for exactly 1 clock cycle. 277 1/1 if (dst_handshake) begin Tests: T1 T2 T3  278 1/1 dst_fsm_ns = ODD; Tests: T1 T2 T3  279 end MISSING_ELSE 280 end 281 282 ODD: begin 283 // Internal REQ and ACK have inverted meaning now. If dst_req goes low, this signals a new 284 // transaction. 285 1/1 dst_req_o = ~dst_req; Tests: T1 T2 T3  286 1/1 dst_ack_d = ~dst_ack_i; Tests: T1 T2 T3  287 288 // The handshake is done for exactly 1 clock cycle. 289 1/1 if (dst_handshake) begin Tests: T1 T2 T3  290 1/1 dst_fsm_ns = EVEN; Tests: T3 T27 T10  291 end MISSING_ELSE 292 end 293 294 //VCS coverage off 295 // pragma coverage off 296 297 default: ; 298 299 //VCS coverage on 300 // pragma coverage on 301 302 endcase 303 end 304 305 // Registers 306 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin 307 1/1 if (!rst_src_ni) begin Tests: T4 T5 T6  308 1/1 src_fsm_cs <= EVEN; Tests: T4 T5 T6  309 1/1 src_req_q <= 1'b0; Tests: T4 T5 T6  310 end else begin 311 1/1 src_fsm_cs <= src_fsm_ns; Tests: T4 T5 T6  312 1/1 src_req_q <= src_req_d; Tests: T4 T5 T6  313 end 314 end 315 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin 316 1/1 if (!rst_dst_ni) begin Tests: T4 T5 T6  317 1/1 dst_fsm_cs <= EVEN; Tests: T4 T5 T6  318 1/1 dst_ack_q <= 1'b0; Tests: T4 T5 T6  319 end else begin 320 1/1 dst_fsm_cs <= dst_fsm_ns; Tests: T4 T5 T6  321 1/1 dst_ack_q <= dst_ack_d; Tests: T4 T5 T6  322 end 323 end 324 end 325 326 //////////////// 327 // Assertions // 328 //////////////// 329 330 `ifdef INC_ASSERT 331 //VCS coverage off 332 // pragma coverage off 333 334 logic effective_rst_n; 335 unreachable assign effective_rst_n = rst_src_ni && rst_dst_ni; 336 337 logic chk_flag; 338 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin 339 unreachable if (!effective_rst_n) begin 340 unreachable chk_flag <= '0; 341 unreachable end else if (src_req_i && !chk_flag) begin 342 unreachable chk_flag <= 1'b1; 343 end ==> MISSING_ELSE

Cond Coverage for Instance : tb.dut.u_reg.u_usb_meas_ctrl_en_cdc.u_arb.gen_wr_req.u_dst_update_sync
TotalCoveredPercent
Conditions4375.00
Logical4375.00
Non-Logical00
Event00

 LINE       194
 EXPRESSION (src_req_i & src_ack_o)
             ----1----   ----2----
-1--2-StatusTests
01Not Covered
10CoveredT1,T2,T3
11CoveredT1,T2,T3

 LINE       195
 EXPRESSION (dst_req_o & dst_ack_i)
             ----1----   ----2----
-1--2-StatusTestsExclude Annotation
01Excluded VC_COV_UNR
10Excluded VC_COV_UNR
11CoveredT1,T2,T3

Branch Coverage for Instance : tb.dut.u_reg.u_usb_meas_ctrl_en_cdc.u_arb.gen_wr_req.u_dst_update_sync
Line No.TotalCoveredPercent
Branches 12 12 100.00
CASE 225 4 4 100.00
CASE 269 4 4 100.00
IF 307 2 2 100.00
IF 316 2 2 100.00


225 unique case (src_fsm_cs) -1- 226 227 EVEN: begin 228 // Simply forward REQ and ACK. 229 src_req_d = src_req_i; 230 src_ack_o = src_ack; 231 232 // The handshake is done for exactly 1 clock cycle. 233 if (src_handshake) begin -2- 234 src_fsm_ns = ODD; ==> 235 end MISSING_ELSE ==> 236 end 237 238 ODD: begin 239 // Internal REQ and ACK have inverted meaning now. If src_req_i is high again, this 240 // signals a new transaction. 241 src_req_d = ~src_req_i; 242 src_ack_o = ~src_ack; 243 244 // The handshake is done for exactly 1 clock cycle. 245 if (src_handshake) begin -3- 246 src_fsm_ns = EVEN; ==> 247 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
EVEN 1 - Covered T1,T2,T3
EVEN 0 - Covered T1,T2,T3
ODD - 1 Covered T3,T27,T10
ODD - 0 Covered T1,T2,T3


269 unique case (dst_fsm_cs) -1- 270 271 EVEN: begin 272 // Simply forward REQ and ACK. 273 dst_req_o = dst_req; 274 dst_ack_d = dst_ack_i; 275 276 // The handshake is done for exactly 1 clock cycle. 277 if (dst_handshake) begin -2- 278 dst_fsm_ns = ODD; ==> 279 end MISSING_ELSE ==> 280 end 281 282 ODD: begin 283 // Internal REQ and ACK have inverted meaning now. If dst_req goes low, this signals a new 284 // transaction. 285 dst_req_o = ~dst_req; 286 dst_ack_d = ~dst_ack_i; 287 288 // The handshake is done for exactly 1 clock cycle. 289 if (dst_handshake) begin -3- 290 dst_fsm_ns = EVEN; ==> 291 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
EVEN 1 - Covered T1,T2,T3
EVEN 0 - Covered T1,T2,T3
ODD - 1 Covered T3,T27,T10
ODD - 0 Covered T1,T2,T3


307 if (!rst_src_ni) begin -1- 308 src_fsm_cs <= EVEN; ==> 309 src_req_q <= 1'b0; 310 end else begin 311 src_fsm_cs <= src_fsm_ns; ==>

Branches:
-1-StatusTests
1 Covered T4,T5,T6
0 Covered T4,T5,T6


316 if (!rst_dst_ni) begin -1- 317 dst_fsm_cs <= EVEN; ==> 318 dst_ack_q <= 1'b0; 319 end else begin 320 dst_fsm_cs <= dst_fsm_ns; ==>

Branches:
-1-StatusTests
1 Covered T4,T5,T6
0 Covered T4,T5,T6


Assert Coverage for Instance : tb.dut.u_reg.u_usb_meas_ctrl_en_cdc.u_arb.gen_wr_req.u_dst_update_sync
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
SyncReqAckAckNeedsReq 40545146 13106 0 0
SyncReqAckHoldReq 49222570 12481 0 0


SyncReqAckAckNeedsReq
NameAttemptsReal SuccessesFailuresIncomplete
Total 40545146 13106 0 0
T1 27978 5 0 0
T2 0 7 0 0
T3 0 10 0 0
T10 0 9 0 0
T27 0 12 0 0
T39 0 4 0 0
T44 0 12 0 0
T45 0 8 0 0
T47 0 28 0 0
T48 0 2 0 0
T49 1457 0 0 0
T50 1111 0 0 0
T51 2316 0 0 0
T52 1259 0 0 0
T53 2234 0 0 0
T54 9524 0 0 0
T55 757 0 0 0
T56 1568 0 0 0
T57 978 0 0 0

SyncReqAckHoldReq
NameAttemptsReal SuccessesFailuresIncomplete
Total 49222570 12481 0 0
T2 27225 7 0 0
T3 29614 10 0 0
T7 0 42 0 0
T10 18721 8 0 0
T27 32746 12 0 0
T37 3899 0 0 0
T38 9467 0 0 0
T39 13627 4 0 0
T40 1306 0 0 0
T41 2746 0 0 0
T44 0 12 0 0
T45 0 8 0 0
T47 0 28 0 0
T48 0 2 0 0
T58 2042 0 0 0

Line Coverage for Instance : tb.dut.u_io_meas.u_err_sync
Line No.TotalCoveredPercent
TOTAL3636100.00
CONT_ASSIGN5500
CONT_ASSIGN19411100.00
CONT_ASSIGN19511100.00
ALWAYS2191212100.00
ALWAYS2631212100.00
ALWAYS30755100.00
ALWAYS31655100.00
CONT_ASSIGN33500
ALWAYS33900

54 logic unused_req_chk; 55 unreachable assign unused_req_chk = req_chk_i; 56 57 if (EnRzHs) begin : gen_rz_hs_protocol 58 ////////////////// 59 // RZ protocol // 60 ////////////////// 61 62 // Types 63 typedef enum logic { 64 LoSt, HiSt 65 } rz_fsm_e; 66 67 // Signals 68 rz_fsm_e src_fsm_d, src_fsm_q; 69 rz_fsm_e dst_fsm_d, dst_fsm_q; 70 logic src_ack, dst_ack; 71 logic src_req, dst_req; 72 73 // REQ-side FSM (SRC domain) 74 always_comb begin : src_fsm 75 src_fsm_d = src_fsm_q; 76 src_ack_o = 1'b0; 77 src_req = 1'b0; 78 79 unique case (src_fsm_q) 80 LoSt: begin 81 // Wait for the ack to go back to zero before starting 82 // a new transaction. 83 if (!src_ack && src_req_i) begin 84 src_fsm_d = HiSt; 85 end 86 end 87 HiSt: begin 88 src_req = 1'b1; 89 // Forward the acknowledgement. 90 src_ack_o = src_ack; 91 // If request drops out, we go back to LoSt. 92 // If DST side asserts ack, we also go back to LoSt. 93 if (!src_req_i || src_ack) begin 94 src_fsm_d = LoSt; 95 end 96 end 97 //VCS coverage off 98 // pragma coverage off 99 default: ; 100 //VCS coverage on 101 // pragma coverage on 102 endcase 103 end 104 105 // Move ACK over to SRC domain. 106 prim_flop_2sync #( 107 .Width(1) 108 ) ack_sync ( 109 .clk_i (clk_src_i), 110 .rst_ni (rst_src_ni), 111 .d_i (dst_ack), 112 .q_o (src_ack) 113 ); 114 115 // Registers 116 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin 117 if (!rst_src_ni) begin 118 src_fsm_q <= LoSt; 119 end else begin 120 src_fsm_q <= src_fsm_d; 121 end 122 end 123 124 // ACK-side FSM (DST domain) 125 always_comb begin : dst_fsm 126 dst_fsm_d = dst_fsm_q; 127 dst_req_o = 1'b0; 128 dst_ack = 1'b0; 129 130 unique case (dst_fsm_q) 131 LoSt: begin 132 if (dst_req) begin 133 // Forward the request. 134 dst_req_o = 1'b1; 135 // Wait for the request and acknowledge to be asserted 136 // before responding to the SRC side. 137 if (dst_ack_i) begin 138 dst_fsm_d = HiSt; 139 end 140 end 141 end 142 HiSt: begin 143 dst_ack = 1'b1; 144 // Wait for the request to drop back to zero. 145 if (!dst_req) begin 146 dst_fsm_d = LoSt; 147 end 148 end 149 //VCS coverage off 150 // pragma coverage off 151 default: ; 152 //VCS coverage on 153 // pragma coverage on 154 endcase 155 end 156 157 // Move REQ over to DST domain. 158 prim_flop_2sync #( 159 .Width(1) 160 ) req_sync ( 161 .clk_i (clk_dst_i), 162 .rst_ni (rst_dst_ni), 163 .d_i (src_req), 164 .q_o (dst_req) 165 ); 166 167 // Registers 168 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin 169 if (!rst_dst_ni) begin 170 dst_fsm_q <= LoSt; 171 end else begin 172 dst_fsm_q <= dst_fsm_d; 173 end 174 end 175 176 end else begin : gen_nrz_hs_protocol 177 ////////////////// 178 // NRZ protocol // 179 ////////////////// 180 181 // Types 182 typedef enum logic { 183 EVEN, ODD 184 } sync_reqack_fsm_e; 185 186 // Signals 187 sync_reqack_fsm_e src_fsm_ns, src_fsm_cs; 188 sync_reqack_fsm_e dst_fsm_ns, dst_fsm_cs; 189 190 logic src_req_d, src_req_q, src_ack; 191 logic dst_ack_d, dst_ack_q, dst_req; 192 logic src_handshake, dst_handshake; 193 194 1/1 assign src_handshake = src_req_i & src_ack_o; Tests: T45 T7 T35  195 1/1 assign dst_handshake = dst_req_o & dst_ack_i; Tests: T45 T7 T35  196 197 // Move REQ over to DST domain. 198 prim_flop_2sync #( 199 .Width(1) 200 ) req_sync ( 201 .clk_i (clk_dst_i), 202 .rst_ni (rst_dst_ni), 203 .d_i (src_req_q), 204 .q_o (dst_req) 205 ); 206 207 // Move ACK over to SRC domain. 208 prim_flop_2sync #( 209 .Width(1) 210 ) ack_sync ( 211 .clk_i (clk_src_i), 212 .rst_ni (rst_src_ni), 213 .d_i (dst_ack_q), 214 .q_o (src_ack) 215 ); 216 217 // REQ-side FSM (SRC domain) 218 always_comb begin : src_fsm 219 1/1 src_fsm_ns = src_fsm_cs; Tests: T45 T7 T35  220 221 // By default, we keep the internal REQ value and don't ACK. 222 1/1 src_req_d = src_req_q; Tests: T45 T7 T35  223 1/1 src_ack_o = 1'b0; Tests: T45 T7 T35  224 225 1/1 unique case (src_fsm_cs) Tests: T45 T7 T35  226 227 EVEN: begin 228 // Simply forward REQ and ACK. 229 1/1 src_req_d = src_req_i; Tests: T45 T7 T35  230 1/1 src_ack_o = src_ack; Tests: T45 T7 T35  231 232 // The handshake is done for exactly 1 clock cycle. 233 1/1 if (src_handshake) begin Tests: T45 T7 T35  234 1/1 src_fsm_ns = ODD; Tests: T45 T7 T35  235 end MISSING_ELSE 236 end 237 238 ODD: begin 239 // Internal REQ and ACK have inverted meaning now. If src_req_i is high again, this 240 // signals a new transaction. 241 1/1 src_req_d = ~src_req_i; Tests: T45 T7 T35  242 1/1 src_ack_o = ~src_ack; Tests: T45 T7 T35  243 244 // The handshake is done for exactly 1 clock cycle. 245 1/1 if (src_handshake) begin Tests: T45 T7 T35  246 1/1 src_fsm_ns = EVEN; Tests: T45 T7 T35  247 end MISSING_ELSE 248 end 249 250 //VCS coverage off 251 // pragma coverage off 252 253 default: ; 254 255 //VCS coverage on 256 // pragma coverage on 257 258 endcase 259 end 260 261 // ACK-side FSM (DST domain) 262 always_comb begin : dst_fsm 263 1/1 dst_fsm_ns = dst_fsm_cs; Tests: T45 T7 T35  264 265 // By default, we don't REQ and keep the internal ACK. 266 1/1 dst_req_o = 1'b0; Tests: T45 T7 T35  267 1/1 dst_ack_d = dst_ack_q; Tests: T45 T7 T35  268 269 1/1 unique case (dst_fsm_cs) Tests: T45 T7 T35  270 271 EVEN: begin 272 // Simply forward REQ and ACK. 273 1/1 dst_req_o = dst_req; Tests: T45 T7 T35  274 1/1 dst_ack_d = dst_ack_i; Tests: T45 T7 T35  275 276 // The handshake is done for exactly 1 clock cycle. 277 1/1 if (dst_handshake) begin Tests: T45 T7 T35  278 1/1 dst_fsm_ns = ODD; Tests: T45 T7 T35  279 end MISSING_ELSE 280 end 281 282 ODD: begin 283 // Internal REQ and ACK have inverted meaning now. If dst_req goes low, this signals a new 284 // transaction. 285 1/1 dst_req_o = ~dst_req; Tests: T45 T7 T35  286 1/1 dst_ack_d = ~dst_ack_i; Tests: T45 T7 T35  287 288 // The handshake is done for exactly 1 clock cycle. 289 1/1 if (dst_handshake) begin Tests: T45 T7 T35  290 1/1 dst_fsm_ns = EVEN; Tests: T45 T7 T35  291 end MISSING_ELSE 292 end 293 294 //VCS coverage off 295 // pragma coverage off 296 297 default: ; 298 299 //VCS coverage on 300 // pragma coverage on 301 302 endcase 303 end 304 305 // Registers 306 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin 307 1/1 if (!rst_src_ni) begin Tests: T4 T5 T6  308 1/1 src_fsm_cs <= EVEN; Tests: T4 T5 T6  309 1/1 src_req_q <= 1'b0; Tests: T4 T5 T6  310 end else begin 311 1/1 src_fsm_cs <= src_fsm_ns; Tests: T4 T5 T6  312 1/1 src_req_q <= src_req_d; Tests: T4 T5 T6  313 end 314 end 315 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin 316 1/1 if (!rst_dst_ni) begin Tests: T4 T5 T6  317 1/1 dst_fsm_cs <= EVEN; Tests: T4 T5 T6  318 1/1 dst_ack_q <= 1'b0; Tests: T4 T5 T6  319 end else begin 320 1/1 dst_fsm_cs <= dst_fsm_ns; Tests: T4 T5 T6  321 1/1 dst_ack_q <= dst_ack_d; Tests: T4 T5 T6  322 end 323 end 324 end 325 326 //////////////// 327 // Assertions // 328 //////////////// 329 330 `ifdef INC_ASSERT 331 //VCS coverage off 332 // pragma coverage off 333 334 logic effective_rst_n; 335 unreachable assign effective_rst_n = rst_src_ni && rst_dst_ni; 336 337 logic chk_flag; 338 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin 339 unreachable if (!effective_rst_n) begin 340 unreachable chk_flag <= '0; 341 unreachable end else if (src_req_i && !chk_flag) begin 342 unreachable chk_flag <= 1'b1; 343 end ==> MISSING_ELSE

Cond Coverage for Instance : tb.dut.u_io_meas.u_err_sync
TotalCoveredPercent
Conditions4375.00
Logical4375.00
Non-Logical00
Event00

 LINE       194
 EXPRESSION (src_req_i & src_ack_o)
             ----1----   ----2----
-1--2-StatusTests
01Not Covered
10CoveredT45,T7,T35
11CoveredT45,T7,T35

 LINE       195
 EXPRESSION (dst_req_o & dst_ack_i)
             ----1----   ----2----
-1--2-StatusTestsExclude Annotation
01Excluded VC_COV_UNR
10Excluded VC_COV_UNR
11CoveredT45,T7,T35

Branch Coverage for Instance : tb.dut.u_io_meas.u_err_sync
Line No.TotalCoveredPercent
Branches 12 12 100.00
CASE 225 4 4 100.00
CASE 269 4 4 100.00
IF 307 2 2 100.00
IF 316 2 2 100.00


225 unique case (src_fsm_cs) -1- 226 227 EVEN: begin 228 // Simply forward REQ and ACK. 229 src_req_d = src_req_i; 230 src_ack_o = src_ack; 231 232 // The handshake is done for exactly 1 clock cycle. 233 if (src_handshake) begin -2- 234 src_fsm_ns = ODD; ==> 235 end MISSING_ELSE ==> 236 end 237 238 ODD: begin 239 // Internal REQ and ACK have inverted meaning now. If src_req_i is high again, this 240 // signals a new transaction. 241 src_req_d = ~src_req_i; 242 src_ack_o = ~src_ack; 243 244 // The handshake is done for exactly 1 clock cycle. 245 if (src_handshake) begin -3- 246 src_fsm_ns = EVEN; ==> 247 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
EVEN 1 - Covered T45,T7,T35
EVEN 0 - Covered T45,T7,T35
ODD - 1 Covered T45,T7,T35
ODD - 0 Covered T45,T7,T35


269 unique case (dst_fsm_cs) -1- 270 271 EVEN: begin 272 // Simply forward REQ and ACK. 273 dst_req_o = dst_req; 274 dst_ack_d = dst_ack_i; 275 276 // The handshake is done for exactly 1 clock cycle. 277 if (dst_handshake) begin -2- 278 dst_fsm_ns = ODD; ==> 279 end MISSING_ELSE ==> 280 end 281 282 ODD: begin 283 // Internal REQ and ACK have inverted meaning now. If dst_req goes low, this signals a new 284 // transaction. 285 dst_req_o = ~dst_req; 286 dst_ack_d = ~dst_ack_i; 287 288 // The handshake is done for exactly 1 clock cycle. 289 if (dst_handshake) begin -3- 290 dst_fsm_ns = EVEN; ==> 291 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
EVEN 1 - Covered T45,T7,T35
EVEN 0 - Covered T45,T7,T35
ODD - 1 Covered T45,T7,T35
ODD - 0 Covered T45,T7,T35


307 if (!rst_src_ni) begin -1- 308 src_fsm_cs <= EVEN; ==> 309 src_req_q <= 1'b0; 310 end else begin 311 src_fsm_cs <= src_fsm_ns; ==>

Branches:
-1-StatusTests
1 Covered T4,T5,T6
0 Covered T4,T5,T6


316 if (!rst_dst_ni) begin -1- 317 dst_fsm_cs <= EVEN; ==> 318 dst_ack_q <= 1'b0; 319 end else begin 320 dst_fsm_cs <= dst_fsm_ns; ==>

Branches:
-1-StatusTests
1 Covered T4,T5,T6
0 Covered T4,T5,T6


Assert Coverage for Instance : tb.dut.u_io_meas.u_err_sync
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
SyncReqAckAckNeedsReq 39604799 1543 0 0
SyncReqAckHoldReq 90243933 1543 0 0


SyncReqAckAckNeedsReq
NameAttemptsReal SuccessesFailuresIncomplete
Total 39604799 1543 0 0
T7 54981 14 0 0
T9 0 17 0 0
T11 0 17 0 0
T12 0 4 0 0
T13 0 4 0 0
T14 0 3 0 0
T15 0 4 0 0
T17 0 3 0 0
T18 1129 0 0 0
T19 14804 0 0 0
T20 1824 0 0 0
T35 0 7 0 0
T45 19980 4 0 0
T59 968 0 0 0
T60 1812 0 0 0
T61 2081 0 0 0
T62 3755 0 0 0
T63 1449 0 0 0

SyncReqAckHoldReq
NameAttemptsReal SuccessesFailuresIncomplete
Total 90243933 1543 0 0
T7 239916 14 0 0
T9 0 17 0 0
T11 0 17 0 0
T12 0 4 0 0
T13 0 4 0 0
T14 0 3 0 0
T15 0 4 0 0
T17 0 3 0 0
T18 4337 0 0 0
T19 56851 0 0 0
T20 1805 0 0 0
T35 0 7 0 0
T45 42622 4 0 0
T59 3839 0 0 0
T60 1812 0 0 0
T61 2038 0 0 0
T62 3605 0 0 0
T63 5568 0 0 0

Line Coverage for Instance : tb.dut.u_io_div2_meas.u_err_sync
Line No.TotalCoveredPercent
TOTAL3636100.00
CONT_ASSIGN5500
CONT_ASSIGN19411100.00
CONT_ASSIGN19511100.00
ALWAYS2191212100.00
ALWAYS2631212100.00
ALWAYS30755100.00
ALWAYS31655100.00
CONT_ASSIGN33500
ALWAYS33900

54 logic unused_req_chk; 55 unreachable assign unused_req_chk = req_chk_i; 56 57 if (EnRzHs) begin : gen_rz_hs_protocol 58 ////////////////// 59 // RZ protocol // 60 ////////////////// 61 62 // Types 63 typedef enum logic { 64 LoSt, HiSt 65 } rz_fsm_e; 66 67 // Signals 68 rz_fsm_e src_fsm_d, src_fsm_q; 69 rz_fsm_e dst_fsm_d, dst_fsm_q; 70 logic src_ack, dst_ack; 71 logic src_req, dst_req; 72 73 // REQ-side FSM (SRC domain) 74 always_comb begin : src_fsm 75 src_fsm_d = src_fsm_q; 76 src_ack_o = 1'b0; 77 src_req = 1'b0; 78 79 unique case (src_fsm_q) 80 LoSt: begin 81 // Wait for the ack to go back to zero before starting 82 // a new transaction. 83 if (!src_ack && src_req_i) begin 84 src_fsm_d = HiSt; 85 end 86 end 87 HiSt: begin 88 src_req = 1'b1; 89 // Forward the acknowledgement. 90 src_ack_o = src_ack; 91 // If request drops out, we go back to LoSt. 92 // If DST side asserts ack, we also go back to LoSt. 93 if (!src_req_i || src_ack) begin 94 src_fsm_d = LoSt; 95 end 96 end 97 //VCS coverage off 98 // pragma coverage off 99 default: ; 100 //VCS coverage on 101 // pragma coverage on 102 endcase 103 end 104 105 // Move ACK over to SRC domain. 106 prim_flop_2sync #( 107 .Width(1) 108 ) ack_sync ( 109 .clk_i (clk_src_i), 110 .rst_ni (rst_src_ni), 111 .d_i (dst_ack), 112 .q_o (src_ack) 113 ); 114 115 // Registers 116 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin 117 if (!rst_src_ni) begin 118 src_fsm_q <= LoSt; 119 end else begin 120 src_fsm_q <= src_fsm_d; 121 end 122 end 123 124 // ACK-side FSM (DST domain) 125 always_comb begin : dst_fsm 126 dst_fsm_d = dst_fsm_q; 127 dst_req_o = 1'b0; 128 dst_ack = 1'b0; 129 130 unique case (dst_fsm_q) 131 LoSt: begin 132 if (dst_req) begin 133 // Forward the request. 134 dst_req_o = 1'b1; 135 // Wait for the request and acknowledge to be asserted 136 // before responding to the SRC side. 137 if (dst_ack_i) begin 138 dst_fsm_d = HiSt; 139 end 140 end 141 end 142 HiSt: begin 143 dst_ack = 1'b1; 144 // Wait for the request to drop back to zero. 145 if (!dst_req) begin 146 dst_fsm_d = LoSt; 147 end 148 end 149 //VCS coverage off 150 // pragma coverage off 151 default: ; 152 //VCS coverage on 153 // pragma coverage on 154 endcase 155 end 156 157 // Move REQ over to DST domain. 158 prim_flop_2sync #( 159 .Width(1) 160 ) req_sync ( 161 .clk_i (clk_dst_i), 162 .rst_ni (rst_dst_ni), 163 .d_i (src_req), 164 .q_o (dst_req) 165 ); 166 167 // Registers 168 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin 169 if (!rst_dst_ni) begin 170 dst_fsm_q <= LoSt; 171 end else begin 172 dst_fsm_q <= dst_fsm_d; 173 end 174 end 175 176 end else begin : gen_nrz_hs_protocol 177 ////////////////// 178 // NRZ protocol // 179 ////////////////// 180 181 // Types 182 typedef enum logic { 183 EVEN, ODD 184 } sync_reqack_fsm_e; 185 186 // Signals 187 sync_reqack_fsm_e src_fsm_ns, src_fsm_cs; 188 sync_reqack_fsm_e dst_fsm_ns, dst_fsm_cs; 189 190 logic src_req_d, src_req_q, src_ack; 191 logic dst_ack_d, dst_ack_q, dst_req; 192 logic src_handshake, dst_handshake; 193 194 1/1 assign src_handshake = src_req_i & src_ack_o; Tests: T27 T7 T35  195 1/1 assign dst_handshake = dst_req_o & dst_ack_i; Tests: T27 T7 T35  196 197 // Move REQ over to DST domain. 198 prim_flop_2sync #( 199 .Width(1) 200 ) req_sync ( 201 .clk_i (clk_dst_i), 202 .rst_ni (rst_dst_ni), 203 .d_i (src_req_q), 204 .q_o (dst_req) 205 ); 206 207 // Move ACK over to SRC domain. 208 prim_flop_2sync #( 209 .Width(1) 210 ) ack_sync ( 211 .clk_i (clk_src_i), 212 .rst_ni (rst_src_ni), 213 .d_i (dst_ack_q), 214 .q_o (src_ack) 215 ); 216 217 // REQ-side FSM (SRC domain) 218 always_comb begin : src_fsm 219 1/1 src_fsm_ns = src_fsm_cs; Tests: T27 T7 T35  220 221 // By default, we keep the internal REQ value and don't ACK. 222 1/1 src_req_d = src_req_q; Tests: T27 T7 T35  223 1/1 src_ack_o = 1'b0; Tests: T27 T7 T35  224 225 1/1 unique case (src_fsm_cs) Tests: T27 T7 T35  226 227 EVEN: begin 228 // Simply forward REQ and ACK. 229 1/1 src_req_d = src_req_i; Tests: T27 T7 T35  230 1/1 src_ack_o = src_ack; Tests: T27 T7 T35  231 232 // The handshake is done for exactly 1 clock cycle. 233 1/1 if (src_handshake) begin Tests: T27 T7 T35  234 1/1 src_fsm_ns = ODD; Tests: T27 T7 T35  235 end MISSING_ELSE 236 end 237 238 ODD: begin 239 // Internal REQ and ACK have inverted meaning now. If src_req_i is high again, this 240 // signals a new transaction. 241 1/1 src_req_d = ~src_req_i; Tests: T27 T7 T35  242 1/1 src_ack_o = ~src_ack; Tests: T27 T7 T35  243 244 // The handshake is done for exactly 1 clock cycle. 245 1/1 if (src_handshake) begin Tests: T27 T7 T35  246 1/1 src_fsm_ns = EVEN; Tests: T27 T7 T35  247 end MISSING_ELSE 248 end 249 250 //VCS coverage off 251 // pragma coverage off 252 253 default: ; 254 255 //VCS coverage on 256 // pragma coverage on 257 258 endcase 259 end 260 261 // ACK-side FSM (DST domain) 262 always_comb begin : dst_fsm 263 1/1 dst_fsm_ns = dst_fsm_cs; Tests: T27 T7 T35  264 265 // By default, we don't REQ and keep the internal ACK. 266 1/1 dst_req_o = 1'b0; Tests: T27 T7 T35  267 1/1 dst_ack_d = dst_ack_q; Tests: T27 T7 T35  268 269 1/1 unique case (dst_fsm_cs) Tests: T27 T7 T35  270 271 EVEN: begin 272 // Simply forward REQ and ACK. 273 1/1 dst_req_o = dst_req; Tests: T27 T7 T35  274 1/1 dst_ack_d = dst_ack_i; Tests: T27 T7 T35  275 276 // The handshake is done for exactly 1 clock cycle. 277 1/1 if (dst_handshake) begin Tests: T27 T7 T35  278 1/1 dst_fsm_ns = ODD; Tests: T27 T7 T35  279 end MISSING_ELSE 280 end 281 282 ODD: begin 283 // Internal REQ and ACK have inverted meaning now. If dst_req goes low, this signals a new 284 // transaction. 285 1/1 dst_req_o = ~dst_req; Tests: T27 T7 T35  286 1/1 dst_ack_d = ~dst_ack_i; Tests: T27 T7 T35  287 288 // The handshake is done for exactly 1 clock cycle. 289 1/1 if (dst_handshake) begin Tests: T27 T7 T35  290 1/1 dst_fsm_ns = EVEN; Tests: T27 T7 T35  291 end MISSING_ELSE 292 end 293 294 //VCS coverage off 295 // pragma coverage off 296 297 default: ; 298 299 //VCS coverage on 300 // pragma coverage on 301 302 endcase 303 end 304 305 // Registers 306 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin 307 1/1 if (!rst_src_ni) begin Tests: T4 T5 T6  308 1/1 src_fsm_cs <= EVEN; Tests: T4 T5 T6  309 1/1 src_req_q <= 1'b0; Tests: T4 T5 T6  310 end else begin 311 1/1 src_fsm_cs <= src_fsm_ns; Tests: T4 T5 T6  312 1/1 src_req_q <= src_req_d; Tests: T4 T5 T6  313 end 314 end 315 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin 316 1/1 if (!rst_dst_ni) begin Tests: T4 T5 T6  317 1/1 dst_fsm_cs <= EVEN; Tests: T4 T5 T6  318 1/1 dst_ack_q <= 1'b0; Tests: T4 T5 T6  319 end else begin 320 1/1 dst_fsm_cs <= dst_fsm_ns; Tests: T4 T5 T6  321 1/1 dst_ack_q <= dst_ack_d; Tests: T4 T5 T6  322 end 323 end 324 end 325 326 //////////////// 327 // Assertions // 328 //////////////// 329 330 `ifdef INC_ASSERT 331 //VCS coverage off 332 // pragma coverage off 333 334 logic effective_rst_n; 335 unreachable assign effective_rst_n = rst_src_ni && rst_dst_ni; 336 337 logic chk_flag; 338 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin 339 unreachable if (!effective_rst_n) begin 340 unreachable chk_flag <= '0; 341 unreachable end else if (src_req_i && !chk_flag) begin 342 unreachable chk_flag <= 1'b1; 343 end ==> MISSING_ELSE

Cond Coverage for Instance : tb.dut.u_io_div2_meas.u_err_sync
TotalCoveredPercent
Conditions4375.00
Logical4375.00
Non-Logical00
Event00

 LINE       194
 EXPRESSION (src_req_i & src_ack_o)
             ----1----   ----2----
-1--2-StatusTests
01Not Covered
10CoveredT27,T7,T35
11CoveredT27,T7,T35

 LINE       195
 EXPRESSION (dst_req_o & dst_ack_i)
             ----1----   ----2----
-1--2-StatusTestsExclude Annotation
01Excluded VC_COV_UNR
10Excluded VC_COV_UNR
11CoveredT27,T7,T35

Branch Coverage for Instance : tb.dut.u_io_div2_meas.u_err_sync
Line No.TotalCoveredPercent
Branches 12 12 100.00
CASE 225 4 4 100.00
CASE 269 4 4 100.00
IF 307 2 2 100.00
IF 316 2 2 100.00


225 unique case (src_fsm_cs) -1- 226 227 EVEN: begin 228 // Simply forward REQ and ACK. 229 src_req_d = src_req_i; 230 src_ack_o = src_ack; 231 232 // The handshake is done for exactly 1 clock cycle. 233 if (src_handshake) begin -2- 234 src_fsm_ns = ODD; ==> 235 end MISSING_ELSE ==> 236 end 237 238 ODD: begin 239 // Internal REQ and ACK have inverted meaning now. If src_req_i is high again, this 240 // signals a new transaction. 241 src_req_d = ~src_req_i; 242 src_ack_o = ~src_ack; 243 244 // The handshake is done for exactly 1 clock cycle. 245 if (src_handshake) begin -3- 246 src_fsm_ns = EVEN; ==> 247 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
EVEN 1 - Covered T27,T7,T35
EVEN 0 - Covered T27,T7,T35
ODD - 1 Covered T27,T7,T35
ODD - 0 Covered T27,T7,T35


269 unique case (dst_fsm_cs) -1- 270 271 EVEN: begin 272 // Simply forward REQ and ACK. 273 dst_req_o = dst_req; 274 dst_ack_d = dst_ack_i; 275 276 // The handshake is done for exactly 1 clock cycle. 277 if (dst_handshake) begin -2- 278 dst_fsm_ns = ODD; ==> 279 end MISSING_ELSE ==> 280 end 281 282 ODD: begin 283 // Internal REQ and ACK have inverted meaning now. If dst_req goes low, this signals a new 284 // transaction. 285 dst_req_o = ~dst_req; 286 dst_ack_d = ~dst_ack_i; 287 288 // The handshake is done for exactly 1 clock cycle. 289 if (dst_handshake) begin -3- 290 dst_fsm_ns = EVEN; ==> 291 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
EVEN 1 - Covered T27,T7,T35
EVEN 0 - Covered T27,T7,T35
ODD - 1 Covered T27,T7,T35
ODD - 0 Covered T27,T7,T35


307 if (!rst_src_ni) begin -1- 308 src_fsm_cs <= EVEN; ==> 309 src_req_q <= 1'b0; 310 end else begin 311 src_fsm_cs <= src_fsm_ns; ==>

Branches:
-1-StatusTests
1 Covered T4,T5,T6
0 Covered T4,T5,T6


316 if (!rst_dst_ni) begin -1- 317 dst_fsm_cs <= EVEN; ==> 318 dst_ack_q <= 1'b0; 319 end else begin 320 dst_fsm_cs <= dst_fsm_ns; ==>

Branches:
-1-StatusTests
1 Covered T4,T5,T6
0 Covered T4,T5,T6


Assert Coverage for Instance : tb.dut.u_io_div2_meas.u_err_sync
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
SyncReqAckAckNeedsReq 39604799 1467 0 0
SyncReqAckHoldReq 44418973 1467 0 0


SyncReqAckAckNeedsReq
NameAttemptsReal SuccessesFailuresIncomplete
Total 39604799 1467 0 0
T7 0 3 0 0
T9 0 15 0 0
T10 10140 0 0 0
T11 0 14 0 0
T12 0 11 0 0
T13 0 19 0 0
T16 0 10 0 0
T17 0 3 0 0
T27 33429 3 0 0
T35 0 4 0 0
T36 0 4 0 0
T37 2274 0 0 0
T38 2564 0 0 0
T39 6813 0 0 0
T40 652 0 0 0
T41 752 0 0 0
T42 2815 0 0 0
T43 2088 0 0 0
T44 32206 0 0 0

SyncReqAckHoldReq
NameAttemptsReal SuccessesFailuresIncomplete
Total 44418973 1467 0 0
T7 0 3 0 0
T9 0 15 0 0
T10 12709 0 0 0
T11 0 14 0 0
T12 0 11 0 0
T13 0 19 0 0
T16 0 10 0 0
T17 0 3 0 0
T27 32678 3 0 0
T35 0 4 0 0
T36 0 4 0 0
T37 4439 0 0 0
T38 9434 0 0 0
T39 13567 0 0 0
T40 1267 0 0 0
T41 2659 0 0 0
T42 26966 0 0 0
T43 9974 0 0 0
T44 24419 0 0 0

Line Coverage for Instance : tb.dut.u_io_div4_meas.u_err_sync
Line No.TotalCoveredPercent
TOTAL3636100.00
CONT_ASSIGN5500
CONT_ASSIGN19411100.00
CONT_ASSIGN19511100.00
ALWAYS2191212100.00
ALWAYS2631212100.00
ALWAYS30755100.00
ALWAYS31655100.00
CONT_ASSIGN33500
ALWAYS33900

54 logic unused_req_chk; 55 unreachable assign unused_req_chk = req_chk_i; 56 57 if (EnRzHs) begin : gen_rz_hs_protocol 58 ////////////////// 59 // RZ protocol // 60 ////////////////// 61 62 // Types 63 typedef enum logic { 64 LoSt, HiSt 65 } rz_fsm_e; 66 67 // Signals 68 rz_fsm_e src_fsm_d, src_fsm_q; 69 rz_fsm_e dst_fsm_d, dst_fsm_q; 70 logic src_ack, dst_ack; 71 logic src_req, dst_req; 72 73 // REQ-side FSM (SRC domain) 74 always_comb begin : src_fsm 75 src_fsm_d = src_fsm_q; 76 src_ack_o = 1'b0; 77 src_req = 1'b0; 78 79 unique case (src_fsm_q) 80 LoSt: begin 81 // Wait for the ack to go back to zero before starting 82 // a new transaction. 83 if (!src_ack && src_req_i) begin 84 src_fsm_d = HiSt; 85 end 86 end 87 HiSt: begin 88 src_req = 1'b1; 89 // Forward the acknowledgement. 90 src_ack_o = src_ack; 91 // If request drops out, we go back to LoSt. 92 // If DST side asserts ack, we also go back to LoSt. 93 if (!src_req_i || src_ack) begin 94 src_fsm_d = LoSt; 95 end 96 end 97 //VCS coverage off 98 // pragma coverage off 99 default: ; 100 //VCS coverage on 101 // pragma coverage on 102 endcase 103 end 104 105 // Move ACK over to SRC domain. 106 prim_flop_2sync #( 107 .Width(1) 108 ) ack_sync ( 109 .clk_i (clk_src_i), 110 .rst_ni (rst_src_ni), 111 .d_i (dst_ack), 112 .q_o (src_ack) 113 ); 114 115 // Registers 116 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin 117 if (!rst_src_ni) begin 118 src_fsm_q <= LoSt; 119 end else begin 120 src_fsm_q <= src_fsm_d; 121 end 122 end 123 124 // ACK-side FSM (DST domain) 125 always_comb begin : dst_fsm 126 dst_fsm_d = dst_fsm_q; 127 dst_req_o = 1'b0; 128 dst_ack = 1'b0; 129 130 unique case (dst_fsm_q) 131 LoSt: begin 132 if (dst_req) begin 133 // Forward the request. 134 dst_req_o = 1'b1; 135 // Wait for the request and acknowledge to be asserted 136 // before responding to the SRC side. 137 if (dst_ack_i) begin 138 dst_fsm_d = HiSt; 139 end 140 end 141 end 142 HiSt: begin 143 dst_ack = 1'b1; 144 // Wait for the request to drop back to zero. 145 if (!dst_req) begin 146 dst_fsm_d = LoSt; 147 end 148 end 149 //VCS coverage off 150 // pragma coverage off 151 default: ; 152 //VCS coverage on 153 // pragma coverage on 154 endcase 155 end 156 157 // Move REQ over to DST domain. 158 prim_flop_2sync #( 159 .Width(1) 160 ) req_sync ( 161 .clk_i (clk_dst_i), 162 .rst_ni (rst_dst_ni), 163 .d_i (src_req), 164 .q_o (dst_req) 165 ); 166 167 // Registers 168 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin 169 if (!rst_dst_ni) begin 170 dst_fsm_q <= LoSt; 171 end else begin 172 dst_fsm_q <= dst_fsm_d; 173 end 174 end 175 176 end else begin : gen_nrz_hs_protocol 177 ////////////////// 178 // NRZ protocol // 179 ////////////////// 180 181 // Types 182 typedef enum logic { 183 EVEN, ODD 184 } sync_reqack_fsm_e; 185 186 // Signals 187 sync_reqack_fsm_e src_fsm_ns, src_fsm_cs; 188 sync_reqack_fsm_e dst_fsm_ns, dst_fsm_cs; 189 190 logic src_req_d, src_req_q, src_ack; 191 logic dst_ack_d, dst_ack_q, dst_req; 192 logic src_handshake, dst_handshake; 193 194 1/1 assign src_handshake = src_req_i & src_ack_o; Tests: T7 T8 T35  195 1/1 assign dst_handshake = dst_req_o & dst_ack_i; Tests: T7 T8 T35  196 197 // Move REQ over to DST domain. 198 prim_flop_2sync #( 199 .Width(1) 200 ) req_sync ( 201 .clk_i (clk_dst_i), 202 .rst_ni (rst_dst_ni), 203 .d_i (src_req_q), 204 .q_o (dst_req) 205 ); 206 207 // Move ACK over to SRC domain. 208 prim_flop_2sync #( 209 .Width(1) 210 ) ack_sync ( 211 .clk_i (clk_src_i), 212 .rst_ni (rst_src_ni), 213 .d_i (dst_ack_q), 214 .q_o (src_ack) 215 ); 216 217 // REQ-side FSM (SRC domain) 218 always_comb begin : src_fsm 219 1/1 src_fsm_ns = src_fsm_cs; Tests: T7 T8 T35  220 221 // By default, we keep the internal REQ value and don't ACK. 222 1/1 src_req_d = src_req_q; Tests: T7 T8 T35  223 1/1 src_ack_o = 1'b0; Tests: T7 T8 T35  224 225 1/1 unique case (src_fsm_cs) Tests: T7 T8 T35  226 227 EVEN: begin 228 // Simply forward REQ and ACK. 229 1/1 src_req_d = src_req_i; Tests: T7 T8 T35  230 1/1 src_ack_o = src_ack; Tests: T7 T8 T35  231 232 // The handshake is done for exactly 1 clock cycle. 233 1/1 if (src_handshake) begin Tests: T7 T8 T35  234 1/1 src_fsm_ns = ODD; Tests: T7 T8 T35  235 end MISSING_ELSE 236 end 237 238 ODD: begin 239 // Internal REQ and ACK have inverted meaning now. If src_req_i is high again, this 240 // signals a new transaction. 241 1/1 src_req_d = ~src_req_i; Tests: T7 T8 T35  242 1/1 src_ack_o = ~src_ack; Tests: T7 T8 T35  243 244 // The handshake is done for exactly 1 clock cycle. 245 1/1 if (src_handshake) begin Tests: T7 T8 T35  246 1/1 src_fsm_ns = EVEN; Tests: T7 T8 T35  247 end MISSING_ELSE 248 end 249 250 //VCS coverage off 251 // pragma coverage off 252 253 default: ; 254 255 //VCS coverage on 256 // pragma coverage on 257 258 endcase 259 end 260 261 // ACK-side FSM (DST domain) 262 always_comb begin : dst_fsm 263 1/1 dst_fsm_ns = dst_fsm_cs; Tests: T7 T8 T35  264 265 // By default, we don't REQ and keep the internal ACK. 266 1/1 dst_req_o = 1'b0; Tests: T7 T8 T35  267 1/1 dst_ack_d = dst_ack_q; Tests: T7 T8 T35  268 269 1/1 unique case (dst_fsm_cs) Tests: T7 T8 T35  270 271 EVEN: begin 272 // Simply forward REQ and ACK. 273 1/1 dst_req_o = dst_req; Tests: T7 T8 T35  274 1/1 dst_ack_d = dst_ack_i; Tests: T7 T8 T35  275 276 // The handshake is done for exactly 1 clock cycle. 277 1/1 if (dst_handshake) begin Tests: T7 T8 T35  278 1/1 dst_fsm_ns = ODD; Tests: T7 T8 T35  279 end MISSING_ELSE 280 end 281 282 ODD: begin 283 // Internal REQ and ACK have inverted meaning now. If dst_req goes low, this signals a new 284 // transaction. 285 1/1 dst_req_o = ~dst_req; Tests: T7 T8 T35  286 1/1 dst_ack_d = ~dst_ack_i; Tests: T7 T8 T35  287 288 // The handshake is done for exactly 1 clock cycle. 289 1/1 if (dst_handshake) begin Tests: T7 T8 T35  290 1/1 dst_fsm_ns = EVEN; Tests: T7 T8 T35  291 end MISSING_ELSE 292 end 293 294 //VCS coverage off 295 // pragma coverage off 296 297 default: ; 298 299 //VCS coverage on 300 // pragma coverage on 301 302 endcase 303 end 304 305 // Registers 306 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin 307 1/1 if (!rst_src_ni) begin Tests: T4 T5 T6  308 1/1 src_fsm_cs <= EVEN; Tests: T4 T5 T6  309 1/1 src_req_q <= 1'b0; Tests: T4 T5 T6  310 end else begin 311 1/1 src_fsm_cs <= src_fsm_ns; Tests: T4 T5 T6  312 1/1 src_req_q <= src_req_d; Tests: T4 T5 T6  313 end 314 end 315 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin 316 1/1 if (!rst_dst_ni) begin Tests: T4 T5 T6  317 1/1 dst_fsm_cs <= EVEN; Tests: T4 T5 T6  318 1/1 dst_ack_q <= 1'b0; Tests: T4 T5 T6  319 end else begin 320 1/1 dst_fsm_cs <= dst_fsm_ns; Tests: T4 T5 T6  321 1/1 dst_ack_q <= dst_ack_d; Tests: T4 T5 T6  322 end 323 end 324 end 325 326 //////////////// 327 // Assertions // 328 //////////////// 329 330 `ifdef INC_ASSERT 331 //VCS coverage off 332 // pragma coverage off 333 334 logic effective_rst_n; 335 unreachable assign effective_rst_n = rst_src_ni && rst_dst_ni; 336 337 logic chk_flag; 338 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin 339 unreachable if (!effective_rst_n) begin 340 unreachable chk_flag <= '0; 341 unreachable end else if (src_req_i && !chk_flag) begin 342 unreachable chk_flag <= 1'b1; 343 end ==> MISSING_ELSE

Cond Coverage for Instance : tb.dut.u_io_div4_meas.u_err_sync
TotalCoveredPercent
Conditions4375.00
Logical4375.00
Non-Logical00
Event00

 LINE       194
 EXPRESSION (src_req_i & src_ack_o)
             ----1----   ----2----
-1--2-StatusTests
01Not Covered
10CoveredT7,T8,T35
11CoveredT7,T8,T35

 LINE       195
 EXPRESSION (dst_req_o & dst_ack_i)
             ----1----   ----2----
-1--2-StatusTestsExclude Annotation
01Excluded VC_COV_UNR
10Excluded VC_COV_UNR
11CoveredT7,T8,T35

Branch Coverage for Instance : tb.dut.u_io_div4_meas.u_err_sync
Line No.TotalCoveredPercent
Branches 12 12 100.00
CASE 225 4 4 100.00
CASE 269 4 4 100.00
IF 307 2 2 100.00
IF 316 2 2 100.00


225 unique case (src_fsm_cs) -1- 226 227 EVEN: begin 228 // Simply forward REQ and ACK. 229 src_req_d = src_req_i; 230 src_ack_o = src_ack; 231 232 // The handshake is done for exactly 1 clock cycle. 233 if (src_handshake) begin -2- 234 src_fsm_ns = ODD; ==> 235 end MISSING_ELSE ==> 236 end 237 238 ODD: begin 239 // Internal REQ and ACK have inverted meaning now. If src_req_i is high again, this 240 // signals a new transaction. 241 src_req_d = ~src_req_i; 242 src_ack_o = ~src_ack; 243 244 // The handshake is done for exactly 1 clock cycle. 245 if (src_handshake) begin -3- 246 src_fsm_ns = EVEN; ==> 247 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
EVEN 1 - Covered T7,T8,T35
EVEN 0 - Covered T7,T8,T35
ODD - 1 Covered T7,T8,T35
ODD - 0 Covered T7,T8,T35


269 unique case (dst_fsm_cs) -1- 270 271 EVEN: begin 272 // Simply forward REQ and ACK. 273 dst_req_o = dst_req; 274 dst_ack_d = dst_ack_i; 275 276 // The handshake is done for exactly 1 clock cycle. 277 if (dst_handshake) begin -2- 278 dst_fsm_ns = ODD; ==> 279 end MISSING_ELSE ==> 280 end 281 282 ODD: begin 283 // Internal REQ and ACK have inverted meaning now. If dst_req goes low, this signals a new 284 // transaction. 285 dst_req_o = ~dst_req; 286 dst_ack_d = ~dst_ack_i; 287 288 // The handshake is done for exactly 1 clock cycle. 289 if (dst_handshake) begin -3- 290 dst_fsm_ns = EVEN; ==> 291 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
EVEN 1 - Covered T7,T8,T35
EVEN 0 - Covered T7,T8,T35
ODD - 1 Covered T7,T8,T35
ODD - 0 Covered T7,T8,T35


307 if (!rst_src_ni) begin -1- 308 src_fsm_cs <= EVEN; ==> 309 src_req_q <= 1'b0; 310 end else begin 311 src_fsm_cs <= src_fsm_ns; ==>

Branches:
-1-StatusTests
1 Covered T4,T5,T6
0 Covered T4,T5,T6


316 if (!rst_dst_ni) begin -1- 317 dst_fsm_cs <= EVEN; ==> 318 dst_ack_q <= 1'b0; 319 end else begin 320 dst_fsm_cs <= dst_fsm_ns; ==>

Branches:
-1-StatusTests
1 Covered T4,T5,T6
0 Covered T4,T5,T6


Assert Coverage for Instance : tb.dut.u_io_div4_meas.u_err_sync
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
SyncReqAckAckNeedsReq 39604799 1567 0 0
SyncReqAckHoldReq 22209072 1566 0 0


SyncReqAckAckNeedsReq
NameAttemptsReal SuccessesFailuresIncomplete
Total 39604799 1567 0 0
T7 54981 3 0 0
T8 0 8 0 0
T9 0 13 0 0
T11 0 4 0 0
T14 0 8 0 0
T15 0 13 0 0
T16 0 3 0 0
T18 1129 0 0 0
T19 14804 0 0 0
T20 1824 0 0 0
T21 1695 0 0 0
T22 32155 0 0 0
T23 1901 0 0 0
T24 1667 0 0 0
T25 80392 0 0 0
T26 753 0 0 0
T35 0 7 0 0
T36 0 10 0 0
T46 0 4 0 0

SyncReqAckHoldReq
NameAttemptsReal SuccessesFailuresIncomplete
Total 22209072 1566 0 0
T7 59956 3 0 0
T8 0 8 0 0
T9 0 13 0 0
T11 0 4 0 0
T14 0 8 0 0
T15 0 13 0 0
T16 0 3 0 0
T18 1070 0 0 0
T19 12085 0 0 0
T20 431 0 0 0
T21 411 0 0 0
T22 24020 0 0 0
T23 5134 0 0 0
T24 8546 0 0 0
T25 10950 0 0 0
T26 704 0 0 0
T35 0 7 0 0
T36 0 10 0 0
T46 0 4 0 0

Line Coverage for Instance : tb.dut.u_main_meas.u_err_sync
Line No.TotalCoveredPercent
TOTAL3636100.00
CONT_ASSIGN5500
CONT_ASSIGN19411100.00
CONT_ASSIGN19511100.00
ALWAYS2191212100.00
ALWAYS2631212100.00
ALWAYS30755100.00
ALWAYS31655100.00
CONT_ASSIGN33500
ALWAYS33900

54 logic unused_req_chk; 55 unreachable assign unused_req_chk = req_chk_i; 56 57 if (EnRzHs) begin : gen_rz_hs_protocol 58 ////////////////// 59 // RZ protocol // 60 ////////////////// 61 62 // Types 63 typedef enum logic { 64 LoSt, HiSt 65 } rz_fsm_e; 66 67 // Signals 68 rz_fsm_e src_fsm_d, src_fsm_q; 69 rz_fsm_e dst_fsm_d, dst_fsm_q; 70 logic src_ack, dst_ack; 71 logic src_req, dst_req; 72 73 // REQ-side FSM (SRC domain) 74 always_comb begin : src_fsm 75 src_fsm_d = src_fsm_q; 76 src_ack_o = 1'b0; 77 src_req = 1'b0; 78 79 unique case (src_fsm_q) 80 LoSt: begin 81 // Wait for the ack to go back to zero before starting 82 // a new transaction. 83 if (!src_ack && src_req_i) begin 84 src_fsm_d = HiSt; 85 end 86 end 87 HiSt: begin 88 src_req = 1'b1; 89 // Forward the acknowledgement. 90 src_ack_o = src_ack; 91 // If request drops out, we go back to LoSt. 92 // If DST side asserts ack, we also go back to LoSt. 93 if (!src_req_i || src_ack) begin 94 src_fsm_d = LoSt; 95 end 96 end 97 //VCS coverage off 98 // pragma coverage off 99 default: ; 100 //VCS coverage on 101 // pragma coverage on 102 endcase 103 end 104 105 // Move ACK over to SRC domain. 106 prim_flop_2sync #( 107 .Width(1) 108 ) ack_sync ( 109 .clk_i (clk_src_i), 110 .rst_ni (rst_src_ni), 111 .d_i (dst_ack), 112 .q_o (src_ack) 113 ); 114 115 // Registers 116 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin 117 if (!rst_src_ni) begin 118 src_fsm_q <= LoSt; 119 end else begin 120 src_fsm_q <= src_fsm_d; 121 end 122 end 123 124 // ACK-side FSM (DST domain) 125 always_comb begin : dst_fsm 126 dst_fsm_d = dst_fsm_q; 127 dst_req_o = 1'b0; 128 dst_ack = 1'b0; 129 130 unique case (dst_fsm_q) 131 LoSt: begin 132 if (dst_req) begin 133 // Forward the request. 134 dst_req_o = 1'b1; 135 // Wait for the request and acknowledge to be asserted 136 // before responding to the SRC side. 137 if (dst_ack_i) begin 138 dst_fsm_d = HiSt; 139 end 140 end 141 end 142 HiSt: begin 143 dst_ack = 1'b1; 144 // Wait for the request to drop back to zero. 145 if (!dst_req) begin 146 dst_fsm_d = LoSt; 147 end 148 end 149 //VCS coverage off 150 // pragma coverage off 151 default: ; 152 //VCS coverage on 153 // pragma coverage on 154 endcase 155 end 156 157 // Move REQ over to DST domain. 158 prim_flop_2sync #( 159 .Width(1) 160 ) req_sync ( 161 .clk_i (clk_dst_i), 162 .rst_ni (rst_dst_ni), 163 .d_i (src_req), 164 .q_o (dst_req) 165 ); 166 167 // Registers 168 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin 169 if (!rst_dst_ni) begin 170 dst_fsm_q <= LoSt; 171 end else begin 172 dst_fsm_q <= dst_fsm_d; 173 end 174 end 175 176 end else begin : gen_nrz_hs_protocol 177 ////////////////// 178 // NRZ protocol // 179 ////////////////// 180 181 // Types 182 typedef enum logic { 183 EVEN, ODD 184 } sync_reqack_fsm_e; 185 186 // Signals 187 sync_reqack_fsm_e src_fsm_ns, src_fsm_cs; 188 sync_reqack_fsm_e dst_fsm_ns, dst_fsm_cs; 189 190 logic src_req_d, src_req_q, src_ack; 191 logic dst_ack_d, dst_ack_q, dst_req; 192 logic src_handshake, dst_handshake; 193 194 1/1 assign src_handshake = src_req_i & src_ack_o; Tests: T27 T7 T35  195 1/1 assign dst_handshake = dst_req_o & dst_ack_i; Tests: T27 T7 T35  196 197 // Move REQ over to DST domain. 198 prim_flop_2sync #( 199 .Width(1) 200 ) req_sync ( 201 .clk_i (clk_dst_i), 202 .rst_ni (rst_dst_ni), 203 .d_i (src_req_q), 204 .q_o (dst_req) 205 ); 206 207 // Move ACK over to SRC domain. 208 prim_flop_2sync #( 209 .Width(1) 210 ) ack_sync ( 211 .clk_i (clk_src_i), 212 .rst_ni (rst_src_ni), 213 .d_i (dst_ack_q), 214 .q_o (src_ack) 215 ); 216 217 // REQ-side FSM (SRC domain) 218 always_comb begin : src_fsm 219 1/1 src_fsm_ns = src_fsm_cs; Tests: T27 T7 T35  220 221 // By default, we keep the internal REQ value and don't ACK. 222 1/1 src_req_d = src_req_q; Tests: T27 T7 T35  223 1/1 src_ack_o = 1'b0; Tests: T27 T7 T35  224 225 1/1 unique case (src_fsm_cs) Tests: T27 T7 T35  226 227 EVEN: begin 228 // Simply forward REQ and ACK. 229 1/1 src_req_d = src_req_i; Tests: T27 T7 T35  230 1/1 src_ack_o = src_ack; Tests: T27 T7 T35  231 232 // The handshake is done for exactly 1 clock cycle. 233 1/1 if (src_handshake) begin Tests: T27 T7 T35  234 1/1 src_fsm_ns = ODD; Tests: T27 T7 T35  235 end MISSING_ELSE 236 end 237 238 ODD: begin 239 // Internal REQ and ACK have inverted meaning now. If src_req_i is high again, this 240 // signals a new transaction. 241 1/1 src_req_d = ~src_req_i; Tests: T27 T7 T35  242 1/1 src_ack_o = ~src_ack; Tests: T27 T7 T35  243 244 // The handshake is done for exactly 1 clock cycle. 245 1/1 if (src_handshake) begin Tests: T27 T7 T35  246 1/1 src_fsm_ns = EVEN; Tests: T27 T7 T35  247 end MISSING_ELSE 248 end 249 250 //VCS coverage off 251 // pragma coverage off 252 253 default: ; 254 255 //VCS coverage on 256 // pragma coverage on 257 258 endcase 259 end 260 261 // ACK-side FSM (DST domain) 262 always_comb begin : dst_fsm 263 1/1 dst_fsm_ns = dst_fsm_cs; Tests: T27 T7 T35  264 265 // By default, we don't REQ and keep the internal ACK. 266 1/1 dst_req_o = 1'b0; Tests: T27 T7 T35  267 1/1 dst_ack_d = dst_ack_q; Tests: T27 T7 T35  268 269 1/1 unique case (dst_fsm_cs) Tests: T27 T7 T35  270 271 EVEN: begin 272 // Simply forward REQ and ACK. 273 1/1 dst_req_o = dst_req; Tests: T27 T7 T35  274 1/1 dst_ack_d = dst_ack_i; Tests: T27 T7 T35  275 276 // The handshake is done for exactly 1 clock cycle. 277 1/1 if (dst_handshake) begin Tests: T27 T7 T35  278 1/1 dst_fsm_ns = ODD; Tests: T27 T7 T35  279 end MISSING_ELSE 280 end 281 282 ODD: begin 283 // Internal REQ and ACK have inverted meaning now. If dst_req goes low, this signals a new 284 // transaction. 285 1/1 dst_req_o = ~dst_req; Tests: T27 T7 T35  286 1/1 dst_ack_d = ~dst_ack_i; Tests: T27 T7 T35  287 288 // The handshake is done for exactly 1 clock cycle. 289 1/1 if (dst_handshake) begin Tests: T27 T7 T35  290 1/1 dst_fsm_ns = EVEN; Tests: T27 T7 T35  291 end MISSING_ELSE 292 end 293 294 //VCS coverage off 295 // pragma coverage off 296 297 default: ; 298 299 //VCS coverage on 300 // pragma coverage on 301 302 endcase 303 end 304 305 // Registers 306 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin 307 1/1 if (!rst_src_ni) begin Tests: T4 T5 T6  308 1/1 src_fsm_cs <= EVEN; Tests: T4 T5 T6  309 1/1 src_req_q <= 1'b0; Tests: T4 T5 T6  310 end else begin 311 1/1 src_fsm_cs <= src_fsm_ns; Tests: T4 T5 T6  312 1/1 src_req_q <= src_req_d; Tests: T4 T5 T6  313 end 314 end 315 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin 316 1/1 if (!rst_dst_ni) begin Tests: T4 T5 T6  317 1/1 dst_fsm_cs <= EVEN; Tests: T4 T5 T6  318 1/1 dst_ack_q <= 1'b0; Tests: T4 T5 T6  319 end else begin 320 1/1 dst_fsm_cs <= dst_fsm_ns; Tests: T4 T5 T6  321 1/1 dst_ack_q <= dst_ack_d; Tests: T4 T5 T6  322 end 323 end 324 end 325 326 //////////////// 327 // Assertions // 328 //////////////// 329 330 `ifdef INC_ASSERT 331 //VCS coverage off 332 // pragma coverage off 333 334 logic effective_rst_n; 335 unreachable assign effective_rst_n = rst_src_ni && rst_dst_ni; 336 337 logic chk_flag; 338 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin 339 unreachable if (!effective_rst_n) begin 340 unreachable chk_flag <= '0; 341 unreachable end else if (src_req_i && !chk_flag) begin 342 unreachable chk_flag <= 1'b1; 343 end ==> MISSING_ELSE

Cond Coverage for Instance : tb.dut.u_main_meas.u_err_sync
TotalCoveredPercent
Conditions4375.00
Logical4375.00
Non-Logical00
Event00

 LINE       194
 EXPRESSION (src_req_i & src_ack_o)
             ----1----   ----2----
-1--2-StatusTests
01Not Covered
10CoveredT27,T7,T35
11CoveredT27,T7,T35

 LINE       195
 EXPRESSION (dst_req_o & dst_ack_i)
             ----1----   ----2----
-1--2-StatusTestsExclude Annotation
01Excluded VC_COV_UNR
10Excluded VC_COV_UNR
11CoveredT27,T7,T35

Branch Coverage for Instance : tb.dut.u_main_meas.u_err_sync
Line No.TotalCoveredPercent
Branches 12 12 100.00
CASE 225 4 4 100.00
CASE 269 4 4 100.00
IF 307 2 2 100.00
IF 316 2 2 100.00


225 unique case (src_fsm_cs) -1- 226 227 EVEN: begin 228 // Simply forward REQ and ACK. 229 src_req_d = src_req_i; 230 src_ack_o = src_ack; 231 232 // The handshake is done for exactly 1 clock cycle. 233 if (src_handshake) begin -2- 234 src_fsm_ns = ODD; ==> 235 end MISSING_ELSE ==> 236 end 237 238 ODD: begin 239 // Internal REQ and ACK have inverted meaning now. If src_req_i is high again, this 240 // signals a new transaction. 241 src_req_d = ~src_req_i; 242 src_ack_o = ~src_ack; 243 244 // The handshake is done for exactly 1 clock cycle. 245 if (src_handshake) begin -3- 246 src_fsm_ns = EVEN; ==> 247 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
EVEN 1 - Covered T27,T7,T35
EVEN 0 - Covered T27,T7,T35
ODD - 1 Covered T27,T7,T35
ODD - 0 Covered T27,T7,T35


269 unique case (dst_fsm_cs) -1- 270 271 EVEN: begin 272 // Simply forward REQ and ACK. 273 dst_req_o = dst_req; 274 dst_ack_d = dst_ack_i; 275 276 // The handshake is done for exactly 1 clock cycle. 277 if (dst_handshake) begin -2- 278 dst_fsm_ns = ODD; ==> 279 end MISSING_ELSE ==> 280 end 281 282 ODD: begin 283 // Internal REQ and ACK have inverted meaning now. If dst_req goes low, this signals a new 284 // transaction. 285 dst_req_o = ~dst_req; 286 dst_ack_d = ~dst_ack_i; 287 288 // The handshake is done for exactly 1 clock cycle. 289 if (dst_handshake) begin -3- 290 dst_fsm_ns = EVEN; ==> 291 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
EVEN 1 - Covered T27,T7,T35
EVEN 0 - Covered T27,T7,T35
ODD - 1 Covered T27,T7,T35
ODD - 0 Covered T27,T7,T35


307 if (!rst_src_ni) begin -1- 308 src_fsm_cs <= EVEN; ==> 309 src_req_q <= 1'b0; 310 end else begin 311 src_fsm_cs <= src_fsm_ns; ==>

Branches:
-1-StatusTests
1 Covered T4,T5,T6
0 Covered T4,T5,T6


316 if (!rst_dst_ni) begin -1- 317 dst_fsm_cs <= EVEN; ==> 318 dst_ack_q <= 1'b0; 319 end else begin 320 dst_fsm_cs <= dst_fsm_ns; ==>

Branches:
-1-StatusTests
1 Covered T4,T5,T6
0 Covered T4,T5,T6


Assert Coverage for Instance : tb.dut.u_main_meas.u_err_sync
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
SyncReqAckAckNeedsReq 39604799 1547 0 0
SyncReqAckHoldReq 99737448 1547 0 0


SyncReqAckAckNeedsReq
NameAttemptsReal SuccessesFailuresIncomplete
Total 39604799 1547 0 0
T7 0 25 0 0
T9 0 12 0 0
T10 10140 0 0 0
T11 0 14 0 0
T12 0 11 0 0
T13 0 3 0 0
T15 0 4 0 0
T16 0 7 0 0
T27 33429 3 0 0
T35 0 17 0 0
T36 0 4 0 0
T37 2274 0 0 0
T38 2564 0 0 0
T39 6813 0 0 0
T40 652 0 0 0
T41 752 0 0 0
T42 2815 0 0 0
T43 2088 0 0 0
T44 32206 0 0 0

SyncReqAckHoldReq
NameAttemptsReal SuccessesFailuresIncomplete
Total 99737448 1547 0 0
T7 0 25 0 0
T9 0 12 0 0
T10 39002 0 0 0
T11 0 14 0 0
T12 0 11 0 0
T13 0 3 0 0
T15 0 4 0 0
T16 0 7 0 0
T27 68221 3 0 0
T35 0 17 0 0
T36 0 4 0 0
T37 8122 0 0 0
T38 19723 0 0 0
T39 16391 0 0 0
T40 2721 0 0 0
T41 5598 0 0 0
T42 56321 0 0 0
T43 20892 0 0 0
T44 68901 0 0 0

Line Coverage for Instance : tb.dut.u_usb_meas.u_err_sync
Line No.TotalCoveredPercent
TOTAL3636100.00
CONT_ASSIGN5500
CONT_ASSIGN19411100.00
CONT_ASSIGN19511100.00
ALWAYS2191212100.00
ALWAYS2631212100.00
ALWAYS30755100.00
ALWAYS31655100.00
CONT_ASSIGN33500
ALWAYS33900

54 logic unused_req_chk; 55 unreachable assign unused_req_chk = req_chk_i; 56 57 if (EnRzHs) begin : gen_rz_hs_protocol 58 ////////////////// 59 // RZ protocol // 60 ////////////////// 61 62 // Types 63 typedef enum logic { 64 LoSt, HiSt 65 } rz_fsm_e; 66 67 // Signals 68 rz_fsm_e src_fsm_d, src_fsm_q; 69 rz_fsm_e dst_fsm_d, dst_fsm_q; 70 logic src_ack, dst_ack; 71 logic src_req, dst_req; 72 73 // REQ-side FSM (SRC domain) 74 always_comb begin : src_fsm 75 src_fsm_d = src_fsm_q; 76 src_ack_o = 1'b0; 77 src_req = 1'b0; 78 79 unique case (src_fsm_q) 80 LoSt: begin 81 // Wait for the ack to go back to zero before starting 82 // a new transaction. 83 if (!src_ack && src_req_i) begin 84 src_fsm_d = HiSt; 85 end 86 end 87 HiSt: begin 88 src_req = 1'b1; 89 // Forward the acknowledgement. 90 src_ack_o = src_ack; 91 // If request drops out, we go back to LoSt. 92 // If DST side asserts ack, we also go back to LoSt. 93 if (!src_req_i || src_ack) begin 94 src_fsm_d = LoSt; 95 end 96 end 97 //VCS coverage off 98 // pragma coverage off 99 default: ; 100 //VCS coverage on 101 // pragma coverage on 102 endcase 103 end 104 105 // Move ACK over to SRC domain. 106 prim_flop_2sync #( 107 .Width(1) 108 ) ack_sync ( 109 .clk_i (clk_src_i), 110 .rst_ni (rst_src_ni), 111 .d_i (dst_ack), 112 .q_o (src_ack) 113 ); 114 115 // Registers 116 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin 117 if (!rst_src_ni) begin 118 src_fsm_q <= LoSt; 119 end else begin 120 src_fsm_q <= src_fsm_d; 121 end 122 end 123 124 // ACK-side FSM (DST domain) 125 always_comb begin : dst_fsm 126 dst_fsm_d = dst_fsm_q; 127 dst_req_o = 1'b0; 128 dst_ack = 1'b0; 129 130 unique case (dst_fsm_q) 131 LoSt: begin 132 if (dst_req) begin 133 // Forward the request. 134 dst_req_o = 1'b1; 135 // Wait for the request and acknowledge to be asserted 136 // before responding to the SRC side. 137 if (dst_ack_i) begin 138 dst_fsm_d = HiSt; 139 end 140 end 141 end 142 HiSt: begin 143 dst_ack = 1'b1; 144 // Wait for the request to drop back to zero. 145 if (!dst_req) begin 146 dst_fsm_d = LoSt; 147 end 148 end 149 //VCS coverage off 150 // pragma coverage off 151 default: ; 152 //VCS coverage on 153 // pragma coverage on 154 endcase 155 end 156 157 // Move REQ over to DST domain. 158 prim_flop_2sync #( 159 .Width(1) 160 ) req_sync ( 161 .clk_i (clk_dst_i), 162 .rst_ni (rst_dst_ni), 163 .d_i (src_req), 164 .q_o (dst_req) 165 ); 166 167 // Registers 168 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin 169 if (!rst_dst_ni) begin 170 dst_fsm_q <= LoSt; 171 end else begin 172 dst_fsm_q <= dst_fsm_d; 173 end 174 end 175 176 end else begin : gen_nrz_hs_protocol 177 ////////////////// 178 // NRZ protocol // 179 ////////////////// 180 181 // Types 182 typedef enum logic { 183 EVEN, ODD 184 } sync_reqack_fsm_e; 185 186 // Signals 187 sync_reqack_fsm_e src_fsm_ns, src_fsm_cs; 188 sync_reqack_fsm_e dst_fsm_ns, dst_fsm_cs; 189 190 logic src_req_d, src_req_q, src_ack; 191 logic dst_ack_d, dst_ack_q, dst_req; 192 logic src_handshake, dst_handshake; 193 194 1/1 assign src_handshake = src_req_i & src_ack_o; Tests: T27 T7 T35  195 1/1 assign dst_handshake = dst_req_o & dst_ack_i; Tests: T27 T7 T35  196 197 // Move REQ over to DST domain. 198 prim_flop_2sync #( 199 .Width(1) 200 ) req_sync ( 201 .clk_i (clk_dst_i), 202 .rst_ni (rst_dst_ni), 203 .d_i (src_req_q), 204 .q_o (dst_req) 205 ); 206 207 // Move ACK over to SRC domain. 208 prim_flop_2sync #( 209 .Width(1) 210 ) ack_sync ( 211 .clk_i (clk_src_i), 212 .rst_ni (rst_src_ni), 213 .d_i (dst_ack_q), 214 .q_o (src_ack) 215 ); 216 217 // REQ-side FSM (SRC domain) 218 always_comb begin : src_fsm 219 1/1 src_fsm_ns = src_fsm_cs; Tests: T27 T7 T35  220 221 // By default, we keep the internal REQ value and don't ACK. 222 1/1 src_req_d = src_req_q; Tests: T27 T7 T35  223 1/1 src_ack_o = 1'b0; Tests: T27 T7 T35  224 225 1/1 unique case (src_fsm_cs) Tests: T27 T7 T35  226 227 EVEN: begin 228 // Simply forward REQ and ACK. 229 1/1 src_req_d = src_req_i; Tests: T27 T7 T35  230 1/1 src_ack_o = src_ack; Tests: T27 T7 T35  231 232 // The handshake is done for exactly 1 clock cycle. 233 1/1 if (src_handshake) begin Tests: T27 T7 T35  234 1/1 src_fsm_ns = ODD; Tests: T27 T7 T35  235 end MISSING_ELSE 236 end 237 238 ODD: begin 239 // Internal REQ and ACK have inverted meaning now. If src_req_i is high again, this 240 // signals a new transaction. 241 1/1 src_req_d = ~src_req_i; Tests: T27 T7 T35  242 1/1 src_ack_o = ~src_ack; Tests: T27 T7 T35  243 244 // The handshake is done for exactly 1 clock cycle. 245 1/1 if (src_handshake) begin Tests: T27 T7 T35  246 1/1 src_fsm_ns = EVEN; Tests: T27 T7 T35  247 end MISSING_ELSE 248 end 249 250 //VCS coverage off 251 // pragma coverage off 252 253 default: ; 254 255 //VCS coverage on 256 // pragma coverage on 257 258 endcase 259 end 260 261 // ACK-side FSM (DST domain) 262 always_comb begin : dst_fsm 263 1/1 dst_fsm_ns = dst_fsm_cs; Tests: T27 T7 T35  264 265 // By default, we don't REQ and keep the internal ACK. 266 1/1 dst_req_o = 1'b0; Tests: T27 T7 T35  267 1/1 dst_ack_d = dst_ack_q; Tests: T27 T7 T35  268 269 1/1 unique case (dst_fsm_cs) Tests: T27 T7 T35  270 271 EVEN: begin 272 // Simply forward REQ and ACK. 273 1/1 dst_req_o = dst_req; Tests: T27 T7 T35  274 1/1 dst_ack_d = dst_ack_i; Tests: T27 T7 T35  275 276 // The handshake is done for exactly 1 clock cycle. 277 1/1 if (dst_handshake) begin Tests: T27 T7 T35  278 1/1 dst_fsm_ns = ODD; Tests: T27 T7 T35  279 end MISSING_ELSE 280 end 281 282 ODD: begin 283 // Internal REQ and ACK have inverted meaning now. If dst_req goes low, this signals a new 284 // transaction. 285 1/1 dst_req_o = ~dst_req; Tests: T27 T7 T35  286 1/1 dst_ack_d = ~dst_ack_i; Tests: T27 T7 T35  287 288 // The handshake is done for exactly 1 clock cycle. 289 1/1 if (dst_handshake) begin Tests: T27 T7 T35  290 1/1 dst_fsm_ns = EVEN; Tests: T27 T7 T35  291 end MISSING_ELSE 292 end 293 294 //VCS coverage off 295 // pragma coverage off 296 297 default: ; 298 299 //VCS coverage on 300 // pragma coverage on 301 302 endcase 303 end 304 305 // Registers 306 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin 307 1/1 if (!rst_src_ni) begin Tests: T4 T5 T6  308 1/1 src_fsm_cs <= EVEN; Tests: T4 T5 T6  309 1/1 src_req_q <= 1'b0; Tests: T4 T5 T6  310 end else begin 311 1/1 src_fsm_cs <= src_fsm_ns; Tests: T4 T5 T6  312 1/1 src_req_q <= src_req_d; Tests: T4 T5 T6  313 end 314 end 315 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin 316 1/1 if (!rst_dst_ni) begin Tests: T4 T5 T6  317 1/1 dst_fsm_cs <= EVEN; Tests: T4 T5 T6  318 1/1 dst_ack_q <= 1'b0; Tests: T4 T5 T6  319 end else begin 320 1/1 dst_fsm_cs <= dst_fsm_ns; Tests: T4 T5 T6  321 1/1 dst_ack_q <= dst_ack_d; Tests: T4 T5 T6  322 end 323 end 324 end 325 326 //////////////// 327 // Assertions // 328 //////////////// 329 330 `ifdef INC_ASSERT 331 //VCS coverage off 332 // pragma coverage off 333 334 logic effective_rst_n; 335 unreachable assign effective_rst_n = rst_src_ni && rst_dst_ni; 336 337 logic chk_flag; 338 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin 339 unreachable if (!effective_rst_n) begin 340 unreachable chk_flag <= '0; 341 unreachable end else if (src_req_i && !chk_flag) begin 342 unreachable chk_flag <= 1'b1; 343 end ==> MISSING_ELSE

Cond Coverage for Instance : tb.dut.u_usb_meas.u_err_sync
TotalCoveredPercent
Conditions4375.00
Logical4375.00
Non-Logical00
Event00

 LINE       194
 EXPRESSION (src_req_i & src_ack_o)
             ----1----   ----2----
-1--2-StatusTests
01Not Covered
10CoveredT27,T7,T35
11CoveredT27,T7,T35

 LINE       195
 EXPRESSION (dst_req_o & dst_ack_i)
             ----1----   ----2----
-1--2-StatusTestsExclude Annotation
01Excluded VC_COV_UNR
10Excluded VC_COV_UNR
11CoveredT27,T7,T35

Branch Coverage for Instance : tb.dut.u_usb_meas.u_err_sync
Line No.TotalCoveredPercent
Branches 12 12 100.00
CASE 225 4 4 100.00
CASE 269 4 4 100.00
IF 307 2 2 100.00
IF 316 2 2 100.00


225 unique case (src_fsm_cs) -1- 226 227 EVEN: begin 228 // Simply forward REQ and ACK. 229 src_req_d = src_req_i; 230 src_ack_o = src_ack; 231 232 // The handshake is done for exactly 1 clock cycle. 233 if (src_handshake) begin -2- 234 src_fsm_ns = ODD; ==> 235 end MISSING_ELSE ==> 236 end 237 238 ODD: begin 239 // Internal REQ and ACK have inverted meaning now. If src_req_i is high again, this 240 // signals a new transaction. 241 src_req_d = ~src_req_i; 242 src_ack_o = ~src_ack; 243 244 // The handshake is done for exactly 1 clock cycle. 245 if (src_handshake) begin -3- 246 src_fsm_ns = EVEN; ==> 247 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
EVEN 1 - Covered T27,T7,T35
EVEN 0 - Covered T27,T7,T35
ODD - 1 Covered T27,T7,T35
ODD - 0 Covered T27,T7,T35


269 unique case (dst_fsm_cs) -1- 270 271 EVEN: begin 272 // Simply forward REQ and ACK. 273 dst_req_o = dst_req; 274 dst_ack_d = dst_ack_i; 275 276 // The handshake is done for exactly 1 clock cycle. 277 if (dst_handshake) begin -2- 278 dst_fsm_ns = ODD; ==> 279 end MISSING_ELSE ==> 280 end 281 282 ODD: begin 283 // Internal REQ and ACK have inverted meaning now. If dst_req goes low, this signals a new 284 // transaction. 285 dst_req_o = ~dst_req; 286 dst_ack_d = ~dst_ack_i; 287 288 // The handshake is done for exactly 1 clock cycle. 289 if (dst_handshake) begin -3- 290 dst_fsm_ns = EVEN; ==> 291 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
EVEN 1 - Covered T27,T7,T35
EVEN 0 - Covered T27,T7,T35
ODD - 1 Covered T27,T7,T35
ODD - 0 Covered T27,T7,T35


307 if (!rst_src_ni) begin -1- 308 src_fsm_cs <= EVEN; ==> 309 src_req_q <= 1'b0; 310 end else begin 311 src_fsm_cs <= src_fsm_ns; ==>

Branches:
-1-StatusTests
1 Covered T4,T5,T6
0 Covered T4,T5,T6


316 if (!rst_dst_ni) begin -1- 317 dst_fsm_cs <= EVEN; ==> 318 dst_ack_q <= 1'b0; 319 end else begin 320 dst_fsm_cs <= dst_fsm_ns; ==>

Branches:
-1-StatusTests
1 Covered T4,T5,T6
0 Covered T4,T5,T6


Assert Coverage for Instance : tb.dut.u_usb_meas.u_err_sync
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
SyncReqAckAckNeedsReq 39604799 1561 0 0
SyncReqAckHoldReq 47836459 1561 0 0


SyncReqAckAckNeedsReq
NameAttemptsReal SuccessesFailuresIncomplete
Total 39604799 1561 0 0
T7 0 3 0 0
T9 0 11 0 0
T10 10140 0 0 0
T11 0 4 0 0
T13 0 18 0 0
T16 0 14 0 0
T27 33429 7 0 0
T35 0 6 0 0
T36 0 3 0 0
T37 2274 0 0 0
T38 2564 0 0 0
T39 6813 0 0 0
T40 652 0 0 0
T41 752 0 0 0
T42 2815 0 0 0
T43 2088 0 0 0
T44 32206 0 0 0
T46 0 3 0 0
T64 0 4 0 0

SyncReqAckHoldReq
NameAttemptsReal SuccessesFailuresIncomplete
Total 47836459 1561 0 0
T7 0 3 0 0
T9 0 11 0 0
T10 18721 0 0 0
T11 0 4 0 0
T13 0 18 0 0
T16 0 14 0 0
T27 32746 7 0 0
T35 0 6 0 0
T36 0 3 0 0
T37 3899 0 0 0
T38 9467 0 0 0
T39 13627 0 0 0
T40 1306 0 0 0
T41 2746 0 0 0
T42 27035 0 0 0
T43 10028 0 0 0
T44 35953 0 0 0
T46 0 3 0 0
T64 0 4 0 0

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