Line Coverage for Module :
prim_pulse_sync
| Line No. | Total | Covered | Percent |
TOTAL | | 7 | 7 | 100.00 |
ALWAYS | 31 | 3 | 3 | 100.00 |
CONT_ASSIGN | 49 | 0 | 0 | |
CONT_ASSIGN | 52 | 0 | 0 | |
ALWAYS | 55 | 0 | 0 | |
ALWAYS | 89 | 3 | 3 | 100.00 |
CONT_ASSIGN | 97 | 1 | 1 | 100.00 |
30 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin
31 1/1 if (!rst_src_ni) begin
Tests: T4 T5 T6
32 1/1 src_level <= 1'b0;
Tests: T4 T5 T6
33 end else begin
34 1/1 src_level <= src_level ^ src_pulse_i;
Tests: T4 T5 T6
35 end
36 end
37
38
39 // source active must come far enough such that the destination domain has time
40 // to create a valid pulse.
41 `ifdef INC_ASSERT
42 //VCS coverage off
43 // pragma coverage off
44
45 // source active flag tracks whether there is an ongoing "toggle" event.
46 // Until this toggle event is accepted by the destination domain (negative edge of
47 // of the pulse output), the source side cannot toggle again.
48 logic effective_rst_n;
49 unreachable assign effective_rst_n = rst_src_ni && dst_pulse_o;
50
51 logic src_active_flag_d, src_active_flag_q;
52 unreachable assign src_active_flag_d = src_pulse_i || src_active_flag_q;
53
54 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin
55 unreachable if (!effective_rst_n) begin
56 unreachable src_active_flag_q <= '0;
57 end else begin
58 unreachable src_active_flag_q <= src_active_flag_d;
59 end
60 end
61
62 //VCS coverage on
63 // pragma coverage on
64
65 `ASSERT(SrcPulseCheck_M, src_pulse_i |-> !src_active_flag_q, clk_src_i, !rst_src_ni)
66 `endif
67
68 //////////////////////////////////////////////////////////
69 // synchronize level signal to destination clock domain //
70 //////////////////////////////////////////////////////////
71 logic dst_level;
72
73 prim_flop_2sync #(.Width(1)) prim_flop_2sync (
74 // source clock domain
75 .d_i (src_level),
76 // destination clock domain
77 .clk_i (clk_dst_i),
78 .rst_ni (rst_dst_ni),
79 .q_o (dst_level)
80 );
81
82 ////////////////////////////////////////
83 // convert level signal back to pulse //
84 ////////////////////////////////////////
85 logic dst_level_q;
86
87 // delay dst_level by 1 cycle
88 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin
89 1/1 if (!rst_dst_ni) begin
Tests: T4 T5 T6
90 1/1 dst_level_q <= 1'b0;
Tests: T4 T5 T6
91 end else begin
92 1/1 dst_level_q <= dst_level;
Tests: T4 T5 T6
93 end
94 end
95
96 // edge detection
97 1/1 assign dst_pulse_o = dst_level_q ^ dst_level;
Tests: T1 T2 T3
Cond Coverage for Module :
prim_pulse_sync
| Total | Covered | Percent |
Conditions | 8 | 8 | 100.00 |
Logical | 8 | 8 | 100.00 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 34
EXPRESSION (src_level ^ src_pulse_i)
----1---- -----2-----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 97
EXPRESSION (dst_level_q ^ dst_level)
-----1----- ----2----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
Branch Coverage for Module :
prim_pulse_sync
| Line No. | Total | Covered | Percent |
Branches |
|
4 |
4 |
100.00 |
IF |
31 |
2 |
2 |
100.00 |
IF |
89 |
2 |
2 |
100.00 |
31 if (!rst_src_ni) begin
-1-
32 src_level <= 1'b0;
==>
33 end else begin
34 src_level <= src_level ^ src_pulse_i;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
89 if (!rst_dst_ni) begin
-1-
90 dst_level_q <= 1'b0;
==>
91 end else begin
92 dst_level_q <= dst_level;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
Assert Coverage for Module :
prim_pulse_sync
Assertion Details
DstPulseCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1339345197 |
449143 |
0 |
0 |
T1 |
90169 |
64 |
0 |
0 |
T2 |
128047 |
138 |
0 |
0 |
T3 |
0 |
200 |
0 |
0 |
T7 |
0 |
200 |
0 |
0 |
T10 |
0 |
400 |
0 |
0 |
T11 |
0 |
1210 |
0 |
0 |
T24 |
0 |
68 |
0 |
0 |
T34 |
14932 |
0 |
0 |
0 |
T35 |
0 |
397 |
0 |
0 |
T36 |
0 |
191 |
0 |
0 |
T37 |
10429 |
0 |
0 |
0 |
T38 |
0 |
980 |
0 |
0 |
T39 |
0 |
10 |
0 |
0 |
T40 |
0 |
416 |
0 |
0 |
T42 |
13374 |
0 |
0 |
0 |
T43 |
10241 |
0 |
0 |
0 |
T44 |
43182 |
0 |
0 |
0 |
T45 |
121543 |
0 |
0 |
0 |
T46 |
8803 |
0 |
0 |
0 |
T47 |
53524 |
0 |
0 |
0 |
T65 |
19472 |
2 |
0 |
0 |
T66 |
8650 |
3 |
0 |
0 |
T69 |
5866 |
1 |
0 |
0 |
T70 |
19246 |
1 |
0 |
0 |
T120 |
0 |
68 |
0 |
0 |
T121 |
17478 |
5 |
0 |
0 |
T122 |
7104 |
2 |
0 |
0 |
T123 |
14668 |
2 |
0 |
0 |
T124 |
9496 |
1 |
0 |
0 |
T125 |
12056 |
0 |
0 |
0 |
T126 |
7085 |
0 |
0 |
0 |
T127 |
26542 |
0 |
0 |
0 |
SrcPulseCheck_M
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1171392851 |
444401 |
0 |
0 |
T1 |
47900 |
64 |
0 |
0 |
T2 |
52285 |
138 |
0 |
0 |
T3 |
0 |
200 |
0 |
0 |
T7 |
0 |
200 |
0 |
0 |
T10 |
0 |
400 |
0 |
0 |
T11 |
0 |
1210 |
0 |
0 |
T24 |
0 |
68 |
0 |
0 |
T34 |
4754 |
0 |
0 |
0 |
T35 |
0 |
397 |
0 |
0 |
T36 |
0 |
191 |
0 |
0 |
T37 |
6141 |
0 |
0 |
0 |
T38 |
0 |
980 |
0 |
0 |
T39 |
0 |
10 |
0 |
0 |
T40 |
0 |
416 |
0 |
0 |
T42 |
3918 |
0 |
0 |
0 |
T43 |
5584 |
0 |
0 |
0 |
T44 |
11279 |
0 |
0 |
0 |
T45 |
39649 |
0 |
0 |
0 |
T46 |
3305 |
0 |
0 |
0 |
T47 |
17338 |
0 |
0 |
0 |
T65 |
8108 |
2 |
0 |
0 |
T66 |
3568 |
3 |
0 |
0 |
T69 |
11926 |
1 |
0 |
0 |
T70 |
7658 |
1 |
0 |
0 |
T120 |
0 |
68 |
0 |
0 |
T121 |
7418 |
5 |
0 |
0 |
T122 |
37172 |
2 |
0 |
0 |
T123 |
25636 |
2 |
0 |
0 |
T124 |
18772 |
1 |
0 |
0 |
T125 |
5575 |
0 |
0 |
0 |
T126 |
3061 |
0 |
0 |
0 |
T127 |
10822 |
0 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_reg.u_io_meas_ctrl_en_cdc.u_src_to_dst_req
| Line No. | Total | Covered | Percent |
TOTAL | | 7 | 7 | 100.00 |
ALWAYS | 31 | 3 | 3 | 100.00 |
CONT_ASSIGN | 49 | 0 | 0 | |
CONT_ASSIGN | 52 | 0 | 0 | |
ALWAYS | 55 | 0 | 0 | |
ALWAYS | 89 | 3 | 3 | 100.00 |
CONT_ASSIGN | 97 | 1 | 1 | 100.00 |
30 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin
31 1/1 if (!rst_src_ni) begin
Tests: T4 T5 T6
32 1/1 src_level <= 1'b0;
Tests: T4 T5 T6
33 end else begin
34 1/1 src_level <= src_level ^ src_pulse_i;
Tests: T4 T5 T6
35 end
36 end
37
38
39 // source active must come far enough such that the destination domain has time
40 // to create a valid pulse.
41 `ifdef INC_ASSERT
42 //VCS coverage off
43 // pragma coverage off
44
45 // source active flag tracks whether there is an ongoing "toggle" event.
46 // Until this toggle event is accepted by the destination domain (negative edge of
47 // of the pulse output), the source side cannot toggle again.
48 logic effective_rst_n;
49 unreachable assign effective_rst_n = rst_src_ni && dst_pulse_o;
50
51 logic src_active_flag_d, src_active_flag_q;
52 unreachable assign src_active_flag_d = src_pulse_i || src_active_flag_q;
53
54 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin
55 unreachable if (!effective_rst_n) begin
56 unreachable src_active_flag_q <= '0;
57 end else begin
58 unreachable src_active_flag_q <= src_active_flag_d;
59 end
60 end
61
62 //VCS coverage on
63 // pragma coverage on
64
65 `ASSERT(SrcPulseCheck_M, src_pulse_i |-> !src_active_flag_q, clk_src_i, !rst_src_ni)
66 `endif
67
68 //////////////////////////////////////////////////////////
69 // synchronize level signal to destination clock domain //
70 //////////////////////////////////////////////////////////
71 logic dst_level;
72
73 prim_flop_2sync #(.Width(1)) prim_flop_2sync (
74 // source clock domain
75 .d_i (src_level),
76 // destination clock domain
77 .clk_i (clk_dst_i),
78 .rst_ni (rst_dst_ni),
79 .q_o (dst_level)
80 );
81
82 ////////////////////////////////////////
83 // convert level signal back to pulse //
84 ////////////////////////////////////////
85 logic dst_level_q;
86
87 // delay dst_level by 1 cycle
88 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin
89 1/1 if (!rst_dst_ni) begin
Tests: T4 T5 T6
90 1/1 dst_level_q <= 1'b0;
Tests: T4 T5 T6
91 end else begin
92 1/1 dst_level_q <= dst_level;
Tests: T4 T5 T6
93 end
94 end
95
96 // edge detection
97 1/1 assign dst_pulse_o = dst_level_q ^ dst_level;
Tests: T1 T2 T3
Cond Coverage for Instance : tb.dut.u_reg.u_io_meas_ctrl_en_cdc.u_src_to_dst_req
| Total | Covered | Percent |
Conditions | 8 | 8 | 100.00 |
Logical | 8 | 8 | 100.00 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 34
EXPRESSION (src_level ^ src_pulse_i)
----1---- -----2-----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 97
EXPRESSION (dst_level_q ^ dst_level)
-----1----- ----2----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
Branch Coverage for Instance : tb.dut.u_reg.u_io_meas_ctrl_en_cdc.u_src_to_dst_req
| Line No. | Total | Covered | Percent |
Branches |
|
4 |
4 |
100.00 |
IF |
31 |
2 |
2 |
100.00 |
IF |
89 |
2 |
2 |
100.00 |
31 if (!rst_src_ni) begin
-1-
32 src_level <= 1'b0;
==>
33 end else begin
34 src_level <= src_level ^ src_pulse_i;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
89 if (!rst_dst_ni) begin
-1-
90 dst_level_q <= 1'b0;
==>
91 end else begin
92 dst_level_q <= dst_level;
==>
Branches:
-1- | Status | Tests |
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_src_to_dst_req
Assertion Details
DstPulseCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
79169317 |
11516 |
0 |
0 |
T1 |
18775 |
4 |
0 |
0 |
T2 |
25455 |
6 |
0 |
0 |
T3 |
0 |
40 |
0 |
0 |
T7 |
0 |
40 |
0 |
0 |
T10 |
0 |
32 |
0 |
0 |
T11 |
0 |
70 |
0 |
0 |
T24 |
0 |
4 |
0 |
0 |
T34 |
3611 |
0 |
0 |
0 |
T35 |
0 |
24 |
0 |
0 |
T37 |
2117 |
0 |
0 |
0 |
T38 |
0 |
36 |
0 |
0 |
T39 |
0 |
2 |
0 |
0 |
T42 |
3384 |
0 |
0 |
0 |
T43 |
2170 |
0 |
0 |
0 |
T44 |
11078 |
0 |
0 |
0 |
T45 |
31818 |
0 |
0 |
0 |
T46 |
2141 |
0 |
0 |
0 |
T47 |
13243 |
0 |
0 |
0 |
SrcPulseCheck_M
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
36655700 |
11516 |
0 |
0 |
T1 |
19167 |
4 |
0 |
0 |
T2 |
19643 |
6 |
0 |
0 |
T3 |
0 |
40 |
0 |
0 |
T7 |
0 |
40 |
0 |
0 |
T10 |
0 |
32 |
0 |
0 |
T11 |
0 |
70 |
0 |
0 |
T24 |
0 |
4 |
0 |
0 |
T34 |
902 |
0 |
0 |
0 |
T35 |
0 |
24 |
0 |
0 |
T37 |
2205 |
0 |
0 |
0 |
T38 |
0 |
36 |
0 |
0 |
T39 |
0 |
2 |
0 |
0 |
T42 |
634 |
0 |
0 |
0 |
T43 |
1920 |
0 |
0 |
0 |
T44 |
1269 |
0 |
0 |
0 |
T45 |
8285 |
0 |
0 |
0 |
T46 |
825 |
0 |
0 |
0 |
T47 |
3448 |
0 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_reg.u_io_meas_ctrl_shadowed_cdc.u_src_to_dst_req
| Line No. | Total | Covered | Percent |
TOTAL | | 7 | 7 | 100.00 |
ALWAYS | 31 | 3 | 3 | 100.00 |
CONT_ASSIGN | 49 | 0 | 0 | |
CONT_ASSIGN | 52 | 0 | 0 | |
ALWAYS | 55 | 0 | 0 | |
ALWAYS | 89 | 3 | 3 | 100.00 |
CONT_ASSIGN | 97 | 1 | 1 | 100.00 |
30 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin
31 1/1 if (!rst_src_ni) begin
Tests: T4 T5 T6
32 1/1 src_level <= 1'b0;
Tests: T4 T5 T6
33 end else begin
34 1/1 src_level <= src_level ^ src_pulse_i;
Tests: T4 T5 T6
35 end
36 end
37
38
39 // source active must come far enough such that the destination domain has time
40 // to create a valid pulse.
41 `ifdef INC_ASSERT
42 //VCS coverage off
43 // pragma coverage off
44
45 // source active flag tracks whether there is an ongoing "toggle" event.
46 // Until this toggle event is accepted by the destination domain (negative edge of
47 // of the pulse output), the source side cannot toggle again.
48 logic effective_rst_n;
49 unreachable assign effective_rst_n = rst_src_ni && dst_pulse_o;
50
51 logic src_active_flag_d, src_active_flag_q;
52 unreachable assign src_active_flag_d = src_pulse_i || src_active_flag_q;
53
54 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin
55 unreachable if (!effective_rst_n) begin
56 unreachable src_active_flag_q <= '0;
57 end else begin
58 unreachable src_active_flag_q <= src_active_flag_d;
59 end
60 end
61
62 //VCS coverage on
63 // pragma coverage on
64
65 `ASSERT(SrcPulseCheck_M, src_pulse_i |-> !src_active_flag_q, clk_src_i, !rst_src_ni)
66 `endif
67
68 //////////////////////////////////////////////////////////
69 // synchronize level signal to destination clock domain //
70 //////////////////////////////////////////////////////////
71 logic dst_level;
72
73 prim_flop_2sync #(.Width(1)) prim_flop_2sync (
74 // source clock domain
75 .d_i (src_level),
76 // destination clock domain
77 .clk_i (clk_dst_i),
78 .rst_ni (rst_dst_ni),
79 .q_o (dst_level)
80 );
81
82 ////////////////////////////////////////
83 // convert level signal back to pulse //
84 ////////////////////////////////////////
85 logic dst_level_q;
86
87 // delay dst_level by 1 cycle
88 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin
89 1/1 if (!rst_dst_ni) begin
Tests: T4 T5 T6
90 1/1 dst_level_q <= 1'b0;
Tests: T4 T5 T6
91 end else begin
92 1/1 dst_level_q <= dst_level;
Tests: T4 T5 T6
93 end
94 end
95
96 // edge detection
97 1/1 assign dst_pulse_o = dst_level_q ^ dst_level;
Tests: T1 T2 T3
Cond Coverage for Instance : tb.dut.u_reg.u_io_meas_ctrl_shadowed_cdc.u_src_to_dst_req
| Total | Covered | Percent |
Conditions | 8 | 8 | 100.00 |
Logical | 8 | 8 | 100.00 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 34
EXPRESSION (src_level ^ src_pulse_i)
----1---- -----2-----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 97
EXPRESSION (dst_level_q ^ dst_level)
-----1----- ----2----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
Branch Coverage for Instance : tb.dut.u_reg.u_io_meas_ctrl_shadowed_cdc.u_src_to_dst_req
| Line No. | Total | Covered | Percent |
Branches |
|
4 |
4 |
100.00 |
IF |
31 |
2 |
2 |
100.00 |
IF |
89 |
2 |
2 |
100.00 |
31 if (!rst_src_ni) begin
-1-
32 src_level <= 1'b0;
==>
33 end else begin
34 src_level <= src_level ^ src_pulse_i;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
89 if (!rst_dst_ni) begin
-1-
90 dst_level_q <= 1'b0;
==>
91 end else begin
92 dst_level_q <= dst_level;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
Assert Coverage for Instance : tb.dut.u_reg.u_io_meas_ctrl_shadowed_cdc.u_src_to_dst_req
Assertion Details
DstPulseCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
79169317 |
17235 |
0 |
0 |
T1 |
18775 |
4 |
0 |
0 |
T2 |
25455 |
6 |
0 |
0 |
T3 |
0 |
80 |
0 |
0 |
T7 |
0 |
80 |
0 |
0 |
T10 |
0 |
32 |
0 |
0 |
T11 |
0 |
70 |
0 |
0 |
T24 |
0 |
4 |
0 |
0 |
T34 |
3611 |
0 |
0 |
0 |
T35 |
0 |
24 |
0 |
0 |
T37 |
2117 |
0 |
0 |
0 |
T38 |
0 |
36 |
0 |
0 |
T39 |
0 |
4 |
0 |
0 |
T42 |
3384 |
0 |
0 |
0 |
T43 |
2170 |
0 |
0 |
0 |
T44 |
11078 |
0 |
0 |
0 |
T45 |
31818 |
0 |
0 |
0 |
T46 |
2141 |
0 |
0 |
0 |
T47 |
13243 |
0 |
0 |
0 |
SrcPulseCheck_M
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
36655700 |
17248 |
0 |
0 |
T1 |
19167 |
4 |
0 |
0 |
T2 |
19643 |
6 |
0 |
0 |
T3 |
0 |
80 |
0 |
0 |
T7 |
0 |
80 |
0 |
0 |
T10 |
0 |
32 |
0 |
0 |
T11 |
0 |
70 |
0 |
0 |
T24 |
0 |
4 |
0 |
0 |
T34 |
902 |
0 |
0 |
0 |
T35 |
0 |
24 |
0 |
0 |
T37 |
2205 |
0 |
0 |
0 |
T38 |
0 |
36 |
0 |
0 |
T39 |
0 |
4 |
0 |
0 |
T42 |
634 |
0 |
0 |
0 |
T43 |
1920 |
0 |
0 |
0 |
T44 |
1269 |
0 |
0 |
0 |
T45 |
8285 |
0 |
0 |
0 |
T46 |
825 |
0 |
0 |
0 |
T47 |
3448 |
0 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_reg.u_io_meas_ctrl_shadowed_cdc.u_arb.gen_passthru.u_dst_to_src_ack
| Line No. | Total | Covered | Percent |
TOTAL | | 7 | 7 | 100.00 |
ALWAYS | 31 | 3 | 3 | 100.00 |
CONT_ASSIGN | 49 | 0 | 0 | |
CONT_ASSIGN | 52 | 0 | 0 | |
ALWAYS | 55 | 0 | 0 | |
ALWAYS | 89 | 3 | 3 | 100.00 |
CONT_ASSIGN | 97 | 1 | 1 | 100.00 |
30 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin
31 1/1 if (!rst_src_ni) begin
Tests: T4 T5 T6
32 1/1 src_level <= 1'b0;
Tests: T4 T5 T6
33 end else begin
34 1/1 src_level <= src_level ^ src_pulse_i;
Tests: T4 T5 T6
35 end
36 end
37
38
39 // source active must come far enough such that the destination domain has time
40 // to create a valid pulse.
41 `ifdef INC_ASSERT
42 //VCS coverage off
43 // pragma coverage off
44
45 // source active flag tracks whether there is an ongoing "toggle" event.
46 // Until this toggle event is accepted by the destination domain (negative edge of
47 // of the pulse output), the source side cannot toggle again.
48 logic effective_rst_n;
49 unreachable assign effective_rst_n = rst_src_ni && dst_pulse_o;
50
51 logic src_active_flag_d, src_active_flag_q;
52 unreachable assign src_active_flag_d = src_pulse_i || src_active_flag_q;
53
54 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin
55 unreachable if (!effective_rst_n) begin
56 unreachable src_active_flag_q <= '0;
57 end else begin
58 unreachable src_active_flag_q <= src_active_flag_d;
59 end
60 end
61
62 //VCS coverage on
63 // pragma coverage on
64
65 `ASSERT(SrcPulseCheck_M, src_pulse_i |-> !src_active_flag_q, clk_src_i, !rst_src_ni)
66 `endif
67
68 //////////////////////////////////////////////////////////
69 // synchronize level signal to destination clock domain //
70 //////////////////////////////////////////////////////////
71 logic dst_level;
72
73 prim_flop_2sync #(.Width(1)) prim_flop_2sync (
74 // source clock domain
75 .d_i (src_level),
76 // destination clock domain
77 .clk_i (clk_dst_i),
78 .rst_ni (rst_dst_ni),
79 .q_o (dst_level)
80 );
81
82 ////////////////////////////////////////
83 // convert level signal back to pulse //
84 ////////////////////////////////////////
85 logic dst_level_q;
86
87 // delay dst_level by 1 cycle
88 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin
89 1/1 if (!rst_dst_ni) begin
Tests: T4 T5 T6
90 1/1 dst_level_q <= 1'b0;
Tests: T4 T5 T6
91 end else begin
92 1/1 dst_level_q <= dst_level;
Tests: T4 T5 T6
93 end
94 end
95
96 // edge detection
97 1/1 assign dst_pulse_o = dst_level_q ^ dst_level;
Tests: T1 T2 T3
Cond Coverage for Instance : tb.dut.u_reg.u_io_meas_ctrl_shadowed_cdc.u_arb.gen_passthru.u_dst_to_src_ack
| Total | Covered | Percent |
Conditions | 8 | 8 | 100.00 |
Logical | 8 | 8 | 100.00 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 34
EXPRESSION (src_level ^ src_pulse_i)
----1---- -----2-----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 97
EXPRESSION (dst_level_q ^ dst_level)
-----1----- ----2----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
Branch Coverage for Instance : tb.dut.u_reg.u_io_meas_ctrl_shadowed_cdc.u_arb.gen_passthru.u_dst_to_src_ack
| Line No. | Total | Covered | Percent |
Branches |
|
4 |
4 |
100.00 |
IF |
31 |
2 |
2 |
100.00 |
IF |
89 |
2 |
2 |
100.00 |
31 if (!rst_src_ni) begin
-1-
32 src_level <= 1'b0;
==>
33 end else begin
34 src_level <= src_level ^ src_pulse_i;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
89 if (!rst_dst_ni) begin
-1-
90 dst_level_q <= 1'b0;
==>
91 end else begin
92 dst_level_q <= dst_level;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
Assert Coverage for Instance : tb.dut.u_reg.u_io_meas_ctrl_shadowed_cdc.u_arb.gen_passthru.u_dst_to_src_ack
Assertion Details
DstPulseCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
36655700 |
17228 |
0 |
0 |
T1 |
19167 |
4 |
0 |
0 |
T2 |
19643 |
6 |
0 |
0 |
T3 |
0 |
80 |
0 |
0 |
T7 |
0 |
80 |
0 |
0 |
T10 |
0 |
32 |
0 |
0 |
T11 |
0 |
70 |
0 |
0 |
T24 |
0 |
4 |
0 |
0 |
T34 |
902 |
0 |
0 |
0 |
T35 |
0 |
24 |
0 |
0 |
T37 |
2205 |
0 |
0 |
0 |
T38 |
0 |
36 |
0 |
0 |
T39 |
0 |
4 |
0 |
0 |
T42 |
634 |
0 |
0 |
0 |
T43 |
1920 |
0 |
0 |
0 |
T44 |
1269 |
0 |
0 |
0 |
T45 |
8285 |
0 |
0 |
0 |
T46 |
825 |
0 |
0 |
0 |
T47 |
3448 |
0 |
0 |
0 |
SrcPulseCheck_M
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
79169317 |
17236 |
0 |
0 |
T1 |
18775 |
4 |
0 |
0 |
T2 |
25455 |
6 |
0 |
0 |
T3 |
0 |
80 |
0 |
0 |
T7 |
0 |
80 |
0 |
0 |
T10 |
0 |
32 |
0 |
0 |
T11 |
0 |
70 |
0 |
0 |
T24 |
0 |
4 |
0 |
0 |
T34 |
3611 |
0 |
0 |
0 |
T35 |
0 |
24 |
0 |
0 |
T37 |
2117 |
0 |
0 |
0 |
T38 |
0 |
36 |
0 |
0 |
T39 |
0 |
4 |
0 |
0 |
T42 |
3384 |
0 |
0 |
0 |
T43 |
2170 |
0 |
0 |
0 |
T44 |
11078 |
0 |
0 |
0 |
T45 |
31818 |
0 |
0 |
0 |
T46 |
2141 |
0 |
0 |
0 |
T47 |
13243 |
0 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_reg.u_io_div2_meas_ctrl_en_cdc.u_src_to_dst_req
| Line No. | Total | Covered | Percent |
TOTAL | | 7 | 7 | 100.00 |
ALWAYS | 31 | 3 | 3 | 100.00 |
CONT_ASSIGN | 49 | 0 | 0 | |
CONT_ASSIGN | 52 | 0 | 0 | |
ALWAYS | 55 | 0 | 0 | |
ALWAYS | 89 | 3 | 3 | 100.00 |
CONT_ASSIGN | 97 | 1 | 1 | 100.00 |
30 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin
31 1/1 if (!rst_src_ni) begin
Tests: T4 T5 T6
32 1/1 src_level <= 1'b0;
Tests: T4 T5 T6
33 end else begin
34 1/1 src_level <= src_level ^ src_pulse_i;
Tests: T4 T5 T6
35 end
36 end
37
38
39 // source active must come far enough such that the destination domain has time
40 // to create a valid pulse.
41 `ifdef INC_ASSERT
42 //VCS coverage off
43 // pragma coverage off
44
45 // source active flag tracks whether there is an ongoing "toggle" event.
46 // Until this toggle event is accepted by the destination domain (negative edge of
47 // of the pulse output), the source side cannot toggle again.
48 logic effective_rst_n;
49 unreachable assign effective_rst_n = rst_src_ni && dst_pulse_o;
50
51 logic src_active_flag_d, src_active_flag_q;
52 unreachable assign src_active_flag_d = src_pulse_i || src_active_flag_q;
53
54 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin
55 unreachable if (!effective_rst_n) begin
56 unreachable src_active_flag_q <= '0;
57 end else begin
58 unreachable src_active_flag_q <= src_active_flag_d;
59 end
60 end
61
62 //VCS coverage on
63 // pragma coverage on
64
65 `ASSERT(SrcPulseCheck_M, src_pulse_i |-> !src_active_flag_q, clk_src_i, !rst_src_ni)
66 `endif
67
68 //////////////////////////////////////////////////////////
69 // synchronize level signal to destination clock domain //
70 //////////////////////////////////////////////////////////
71 logic dst_level;
72
73 prim_flop_2sync #(.Width(1)) prim_flop_2sync (
74 // source clock domain
75 .d_i (src_level),
76 // destination clock domain
77 .clk_i (clk_dst_i),
78 .rst_ni (rst_dst_ni),
79 .q_o (dst_level)
80 );
81
82 ////////////////////////////////////////
83 // convert level signal back to pulse //
84 ////////////////////////////////////////
85 logic dst_level_q;
86
87 // delay dst_level by 1 cycle
88 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin
89 1/1 if (!rst_dst_ni) begin
Tests: T4 T5 T6
90 1/1 dst_level_q <= 1'b0;
Tests: T4 T5 T6
91 end else begin
92 1/1 dst_level_q <= dst_level;
Tests: T4 T5 T6
93 end
94 end
95
96 // edge detection
97 1/1 assign dst_pulse_o = dst_level_q ^ dst_level;
Tests: T1 T2 T3
Cond Coverage for Instance : tb.dut.u_reg.u_io_div2_meas_ctrl_en_cdc.u_src_to_dst_req
| Total | Covered | Percent |
Conditions | 8 | 8 | 100.00 |
Logical | 8 | 8 | 100.00 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 34
EXPRESSION (src_level ^ src_pulse_i)
----1---- -----2-----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 97
EXPRESSION (dst_level_q ^ dst_level)
-----1----- ----2----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
Branch Coverage for Instance : tb.dut.u_reg.u_io_div2_meas_ctrl_en_cdc.u_src_to_dst_req
| Line No. | Total | Covered | Percent |
Branches |
|
4 |
4 |
100.00 |
IF |
31 |
2 |
2 |
100.00 |
IF |
89 |
2 |
2 |
100.00 |
31 if (!rst_src_ni) begin
-1-
32 src_level <= 1'b0;
==>
33 end else begin
34 src_level <= src_level ^ src_pulse_i;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
89 if (!rst_dst_ni) begin
-1-
90 dst_level_q <= 1'b0;
==>
91 end else begin
92 dst_level_q <= dst_level;
==>
Branches:
-1- | Status | Tests |
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_src_to_dst_req
Assertion Details
DstPulseCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
38590100 |
11516 |
0 |
0 |
T1 |
9334 |
4 |
0 |
0 |
T2 |
12695 |
6 |
0 |
0 |
T3 |
0 |
40 |
0 |
0 |
T7 |
0 |
40 |
0 |
0 |
T10 |
0 |
32 |
0 |
0 |
T11 |
0 |
70 |
0 |
0 |
T24 |
0 |
4 |
0 |
0 |
T34 |
1902 |
0 |
0 |
0 |
T35 |
0 |
24 |
0 |
0 |
T37 |
1115 |
0 |
0 |
0 |
T38 |
0 |
36 |
0 |
0 |
T39 |
0 |
2 |
0 |
0 |
T42 |
1666 |
0 |
0 |
0 |
T43 |
1112 |
0 |
0 |
0 |
T44 |
5513 |
0 |
0 |
0 |
T45 |
13799 |
0 |
0 |
0 |
T46 |
1031 |
0 |
0 |
0 |
T47 |
6582 |
0 |
0 |
0 |
SrcPulseCheck_M
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
36655700 |
11516 |
0 |
0 |
T1 |
19167 |
4 |
0 |
0 |
T2 |
19643 |
6 |
0 |
0 |
T3 |
0 |
40 |
0 |
0 |
T7 |
0 |
40 |
0 |
0 |
T10 |
0 |
32 |
0 |
0 |
T11 |
0 |
70 |
0 |
0 |
T24 |
0 |
4 |
0 |
0 |
T34 |
902 |
0 |
0 |
0 |
T35 |
0 |
24 |
0 |
0 |
T37 |
2205 |
0 |
0 |
0 |
T38 |
0 |
36 |
0 |
0 |
T39 |
0 |
2 |
0 |
0 |
T42 |
634 |
0 |
0 |
0 |
T43 |
1920 |
0 |
0 |
0 |
T44 |
1269 |
0 |
0 |
0 |
T45 |
8285 |
0 |
0 |
0 |
T46 |
825 |
0 |
0 |
0 |
T47 |
3448 |
0 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_reg.u_io_div2_meas_ctrl_shadowed_cdc.u_src_to_dst_req
| Line No. | Total | Covered | Percent |
TOTAL | | 7 | 7 | 100.00 |
ALWAYS | 31 | 3 | 3 | 100.00 |
CONT_ASSIGN | 49 | 0 | 0 | |
CONT_ASSIGN | 52 | 0 | 0 | |
ALWAYS | 55 | 0 | 0 | |
ALWAYS | 89 | 3 | 3 | 100.00 |
CONT_ASSIGN | 97 | 1 | 1 | 100.00 |
30 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin
31 1/1 if (!rst_src_ni) begin
Tests: T4 T5 T6
32 1/1 src_level <= 1'b0;
Tests: T4 T5 T6
33 end else begin
34 1/1 src_level <= src_level ^ src_pulse_i;
Tests: T4 T5 T6
35 end
36 end
37
38
39 // source active must come far enough such that the destination domain has time
40 // to create a valid pulse.
41 `ifdef INC_ASSERT
42 //VCS coverage off
43 // pragma coverage off
44
45 // source active flag tracks whether there is an ongoing "toggle" event.
46 // Until this toggle event is accepted by the destination domain (negative edge of
47 // of the pulse output), the source side cannot toggle again.
48 logic effective_rst_n;
49 unreachable assign effective_rst_n = rst_src_ni && dst_pulse_o;
50
51 logic src_active_flag_d, src_active_flag_q;
52 unreachable assign src_active_flag_d = src_pulse_i || src_active_flag_q;
53
54 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin
55 unreachable if (!effective_rst_n) begin
56 unreachable src_active_flag_q <= '0;
57 end else begin
58 unreachable src_active_flag_q <= src_active_flag_d;
59 end
60 end
61
62 //VCS coverage on
63 // pragma coverage on
64
65 `ASSERT(SrcPulseCheck_M, src_pulse_i |-> !src_active_flag_q, clk_src_i, !rst_src_ni)
66 `endif
67
68 //////////////////////////////////////////////////////////
69 // synchronize level signal to destination clock domain //
70 //////////////////////////////////////////////////////////
71 logic dst_level;
72
73 prim_flop_2sync #(.Width(1)) prim_flop_2sync (
74 // source clock domain
75 .d_i (src_level),
76 // destination clock domain
77 .clk_i (clk_dst_i),
78 .rst_ni (rst_dst_ni),
79 .q_o (dst_level)
80 );
81
82 ////////////////////////////////////////
83 // convert level signal back to pulse //
84 ////////////////////////////////////////
85 logic dst_level_q;
86
87 // delay dst_level by 1 cycle
88 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin
89 1/1 if (!rst_dst_ni) begin
Tests: T4 T5 T6
90 1/1 dst_level_q <= 1'b0;
Tests: T4 T5 T6
91 end else begin
92 1/1 dst_level_q <= dst_level;
Tests: T4 T5 T6
93 end
94 end
95
96 // edge detection
97 1/1 assign dst_pulse_o = dst_level_q ^ dst_level;
Tests: T1 T2 T3
Cond Coverage for Instance : tb.dut.u_reg.u_io_div2_meas_ctrl_shadowed_cdc.u_src_to_dst_req
| Total | Covered | Percent |
Conditions | 8 | 8 | 100.00 |
Logical | 8 | 8 | 100.00 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 34
EXPRESSION (src_level ^ src_pulse_i)
----1---- -----2-----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 97
EXPRESSION (dst_level_q ^ dst_level)
-----1----- ----2----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
Branch Coverage for Instance : tb.dut.u_reg.u_io_div2_meas_ctrl_shadowed_cdc.u_src_to_dst_req
| Line No. | Total | Covered | Percent |
Branches |
|
4 |
4 |
100.00 |
IF |
31 |
2 |
2 |
100.00 |
IF |
89 |
2 |
2 |
100.00 |
31 if (!rst_src_ni) begin
-1-
32 src_level <= 1'b0;
==>
33 end else begin
34 src_level <= src_level ^ src_pulse_i;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
89 if (!rst_dst_ni) begin
-1-
90 dst_level_q <= 1'b0;
==>
91 end else begin
92 dst_level_q <= dst_level;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
Assert Coverage for Instance : tb.dut.u_reg.u_io_div2_meas_ctrl_shadowed_cdc.u_src_to_dst_req
Assertion Details
DstPulseCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
38590100 |
17160 |
0 |
0 |
T1 |
9334 |
4 |
0 |
0 |
T2 |
12695 |
6 |
0 |
0 |
T3 |
0 |
80 |
0 |
0 |
T7 |
0 |
80 |
0 |
0 |
T10 |
0 |
32 |
0 |
0 |
T11 |
0 |
70 |
0 |
0 |
T24 |
0 |
4 |
0 |
0 |
T34 |
1902 |
0 |
0 |
0 |
T35 |
0 |
24 |
0 |
0 |
T37 |
1115 |
0 |
0 |
0 |
T38 |
0 |
36 |
0 |
0 |
T39 |
0 |
4 |
0 |
0 |
T42 |
1666 |
0 |
0 |
0 |
T43 |
1112 |
0 |
0 |
0 |
T44 |
5513 |
0 |
0 |
0 |
T45 |
13799 |
0 |
0 |
0 |
T46 |
1031 |
0 |
0 |
0 |
T47 |
6582 |
0 |
0 |
0 |
SrcPulseCheck_M
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
36655700 |
17180 |
0 |
0 |
T1 |
19167 |
4 |
0 |
0 |
T2 |
19643 |
6 |
0 |
0 |
T3 |
0 |
80 |
0 |
0 |
T7 |
0 |
80 |
0 |
0 |
T10 |
0 |
32 |
0 |
0 |
T11 |
0 |
70 |
0 |
0 |
T24 |
0 |
4 |
0 |
0 |
T34 |
902 |
0 |
0 |
0 |
T35 |
0 |
24 |
0 |
0 |
T37 |
2205 |
0 |
0 |
0 |
T38 |
0 |
36 |
0 |
0 |
T39 |
0 |
4 |
0 |
0 |
T42 |
634 |
0 |
0 |
0 |
T43 |
1920 |
0 |
0 |
0 |
T44 |
1269 |
0 |
0 |
0 |
T45 |
8285 |
0 |
0 |
0 |
T46 |
825 |
0 |
0 |
0 |
T47 |
3448 |
0 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_reg.u_io_div2_meas_ctrl_shadowed_cdc.u_arb.gen_passthru.u_dst_to_src_ack
| Line No. | Total | Covered | Percent |
TOTAL | | 7 | 7 | 100.00 |
ALWAYS | 31 | 3 | 3 | 100.00 |
CONT_ASSIGN | 49 | 0 | 0 | |
CONT_ASSIGN | 52 | 0 | 0 | |
ALWAYS | 55 | 0 | 0 | |
ALWAYS | 89 | 3 | 3 | 100.00 |
CONT_ASSIGN | 97 | 1 | 1 | 100.00 |
30 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin
31 1/1 if (!rst_src_ni) begin
Tests: T4 T5 T6
32 1/1 src_level <= 1'b0;
Tests: T4 T5 T6
33 end else begin
34 1/1 src_level <= src_level ^ src_pulse_i;
Tests: T4 T5 T6
35 end
36 end
37
38
39 // source active must come far enough such that the destination domain has time
40 // to create a valid pulse.
41 `ifdef INC_ASSERT
42 //VCS coverage off
43 // pragma coverage off
44
45 // source active flag tracks whether there is an ongoing "toggle" event.
46 // Until this toggle event is accepted by the destination domain (negative edge of
47 // of the pulse output), the source side cannot toggle again.
48 logic effective_rst_n;
49 unreachable assign effective_rst_n = rst_src_ni && dst_pulse_o;
50
51 logic src_active_flag_d, src_active_flag_q;
52 unreachable assign src_active_flag_d = src_pulse_i || src_active_flag_q;
53
54 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin
55 unreachable if (!effective_rst_n) begin
56 unreachable src_active_flag_q <= '0;
57 end else begin
58 unreachable src_active_flag_q <= src_active_flag_d;
59 end
60 end
61
62 //VCS coverage on
63 // pragma coverage on
64
65 `ASSERT(SrcPulseCheck_M, src_pulse_i |-> !src_active_flag_q, clk_src_i, !rst_src_ni)
66 `endif
67
68 //////////////////////////////////////////////////////////
69 // synchronize level signal to destination clock domain //
70 //////////////////////////////////////////////////////////
71 logic dst_level;
72
73 prim_flop_2sync #(.Width(1)) prim_flop_2sync (
74 // source clock domain
75 .d_i (src_level),
76 // destination clock domain
77 .clk_i (clk_dst_i),
78 .rst_ni (rst_dst_ni),
79 .q_o (dst_level)
80 );
81
82 ////////////////////////////////////////
83 // convert level signal back to pulse //
84 ////////////////////////////////////////
85 logic dst_level_q;
86
87 // delay dst_level by 1 cycle
88 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin
89 1/1 if (!rst_dst_ni) begin
Tests: T4 T5 T6
90 1/1 dst_level_q <= 1'b0;
Tests: T4 T5 T6
91 end else begin
92 1/1 dst_level_q <= dst_level;
Tests: T4 T5 T6
93 end
94 end
95
96 // edge detection
97 1/1 assign dst_pulse_o = dst_level_q ^ dst_level;
Tests: T1 T2 T3
Cond Coverage for Instance : tb.dut.u_reg.u_io_div2_meas_ctrl_shadowed_cdc.u_arb.gen_passthru.u_dst_to_src_ack
| Total | Covered | Percent |
Conditions | 8 | 8 | 100.00 |
Logical | 8 | 8 | 100.00 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 34
EXPRESSION (src_level ^ src_pulse_i)
----1---- -----2-----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 97
EXPRESSION (dst_level_q ^ dst_level)
-----1----- ----2----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
Branch Coverage for Instance : tb.dut.u_reg.u_io_div2_meas_ctrl_shadowed_cdc.u_arb.gen_passthru.u_dst_to_src_ack
| Line No. | Total | Covered | Percent |
Branches |
|
4 |
4 |
100.00 |
IF |
31 |
2 |
2 |
100.00 |
IF |
89 |
2 |
2 |
100.00 |
31 if (!rst_src_ni) begin
-1-
32 src_level <= 1'b0;
==>
33 end else begin
34 src_level <= src_level ^ src_pulse_i;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
89 if (!rst_dst_ni) begin
-1-
90 dst_level_q <= 1'b0;
==>
91 end else begin
92 dst_level_q <= dst_level;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
Assert Coverage for Instance : tb.dut.u_reg.u_io_div2_meas_ctrl_shadowed_cdc.u_arb.gen_passthru.u_dst_to_src_ack
Assertion Details
DstPulseCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
36655700 |
17154 |
0 |
0 |
T1 |
19167 |
4 |
0 |
0 |
T2 |
19643 |
6 |
0 |
0 |
T3 |
0 |
80 |
0 |
0 |
T7 |
0 |
80 |
0 |
0 |
T10 |
0 |
32 |
0 |
0 |
T11 |
0 |
70 |
0 |
0 |
T24 |
0 |
4 |
0 |
0 |
T34 |
902 |
0 |
0 |
0 |
T35 |
0 |
24 |
0 |
0 |
T37 |
2205 |
0 |
0 |
0 |
T38 |
0 |
36 |
0 |
0 |
T39 |
0 |
4 |
0 |
0 |
T42 |
634 |
0 |
0 |
0 |
T43 |
1920 |
0 |
0 |
0 |
T44 |
1269 |
0 |
0 |
0 |
T45 |
8285 |
0 |
0 |
0 |
T46 |
825 |
0 |
0 |
0 |
T47 |
3448 |
0 |
0 |
0 |
SrcPulseCheck_M
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
38590100 |
17160 |
0 |
0 |
T1 |
9334 |
4 |
0 |
0 |
T2 |
12695 |
6 |
0 |
0 |
T3 |
0 |
80 |
0 |
0 |
T7 |
0 |
80 |
0 |
0 |
T10 |
0 |
32 |
0 |
0 |
T11 |
0 |
70 |
0 |
0 |
T24 |
0 |
4 |
0 |
0 |
T34 |
1902 |
0 |
0 |
0 |
T35 |
0 |
24 |
0 |
0 |
T37 |
1115 |
0 |
0 |
0 |
T38 |
0 |
36 |
0 |
0 |
T39 |
0 |
4 |
0 |
0 |
T42 |
1666 |
0 |
0 |
0 |
T43 |
1112 |
0 |
0 |
0 |
T44 |
5513 |
0 |
0 |
0 |
T45 |
13799 |
0 |
0 |
0 |
T46 |
1031 |
0 |
0 |
0 |
T47 |
6582 |
0 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_reg.u_io_div4_meas_ctrl_en_cdc.u_src_to_dst_req
| Line No. | Total | Covered | Percent |
TOTAL | | 7 | 7 | 100.00 |
ALWAYS | 31 | 3 | 3 | 100.00 |
CONT_ASSIGN | 49 | 0 | 0 | |
CONT_ASSIGN | 52 | 0 | 0 | |
ALWAYS | 55 | 0 | 0 | |
ALWAYS | 89 | 3 | 3 | 100.00 |
CONT_ASSIGN | 97 | 1 | 1 | 100.00 |
30 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin
31 1/1 if (!rst_src_ni) begin
Tests: T4 T5 T6
32 1/1 src_level <= 1'b0;
Tests: T4 T5 T6
33 end else begin
34 1/1 src_level <= src_level ^ src_pulse_i;
Tests: T4 T5 T6
35 end
36 end
37
38
39 // source active must come far enough such that the destination domain has time
40 // to create a valid pulse.
41 `ifdef INC_ASSERT
42 //VCS coverage off
43 // pragma coverage off
44
45 // source active flag tracks whether there is an ongoing "toggle" event.
46 // Until this toggle event is accepted by the destination domain (negative edge of
47 // of the pulse output), the source side cannot toggle again.
48 logic effective_rst_n;
49 unreachable assign effective_rst_n = rst_src_ni && dst_pulse_o;
50
51 logic src_active_flag_d, src_active_flag_q;
52 unreachable assign src_active_flag_d = src_pulse_i || src_active_flag_q;
53
54 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin
55 unreachable if (!effective_rst_n) begin
56 unreachable src_active_flag_q <= '0;
57 end else begin
58 unreachable src_active_flag_q <= src_active_flag_d;
59 end
60 end
61
62 //VCS coverage on
63 // pragma coverage on
64
65 `ASSERT(SrcPulseCheck_M, src_pulse_i |-> !src_active_flag_q, clk_src_i, !rst_src_ni)
66 `endif
67
68 //////////////////////////////////////////////////////////
69 // synchronize level signal to destination clock domain //
70 //////////////////////////////////////////////////////////
71 logic dst_level;
72
73 prim_flop_2sync #(.Width(1)) prim_flop_2sync (
74 // source clock domain
75 .d_i (src_level),
76 // destination clock domain
77 .clk_i (clk_dst_i),
78 .rst_ni (rst_dst_ni),
79 .q_o (dst_level)
80 );
81
82 ////////////////////////////////////////
83 // convert level signal back to pulse //
84 ////////////////////////////////////////
85 logic dst_level_q;
86
87 // delay dst_level by 1 cycle
88 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin
89 1/1 if (!rst_dst_ni) begin
Tests: T4 T5 T6
90 1/1 dst_level_q <= 1'b0;
Tests: T4 T5 T6
91 end else begin
92 1/1 dst_level_q <= dst_level;
Tests: T4 T5 T6
93 end
94 end
95
96 // edge detection
97 1/1 assign dst_pulse_o = dst_level_q ^ dst_level;
Tests: T1 T2 T3
Cond Coverage for Instance : tb.dut.u_reg.u_io_div4_meas_ctrl_en_cdc.u_src_to_dst_req
| Total | Covered | Percent |
Conditions | 8 | 8 | 100.00 |
Logical | 8 | 8 | 100.00 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 34
EXPRESSION (src_level ^ src_pulse_i)
----1---- -----2-----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 97
EXPRESSION (dst_level_q ^ dst_level)
-----1----- ----2----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
Branch Coverage for Instance : tb.dut.u_reg.u_io_div4_meas_ctrl_en_cdc.u_src_to_dst_req
| Line No. | Total | Covered | Percent |
Branches |
|
4 |
4 |
100.00 |
IF |
31 |
2 |
2 |
100.00 |
IF |
89 |
2 |
2 |
100.00 |
31 if (!rst_src_ni) begin
-1-
32 src_level <= 1'b0;
==>
33 end else begin
34 src_level <= src_level ^ src_pulse_i;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
89 if (!rst_dst_ni) begin
-1-
90 dst_level_q <= 1'b0;
==>
91 end else begin
92 dst_level_q <= dst_level;
==>
Branches:
-1- | Status | Tests |
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_src_to_dst_req
Assertion Details
DstPulseCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
19294625 |
11516 |
0 |
0 |
T1 |
4667 |
4 |
0 |
0 |
T2 |
6347 |
6 |
0 |
0 |
T3 |
0 |
40 |
0 |
0 |
T7 |
0 |
40 |
0 |
0 |
T10 |
0 |
32 |
0 |
0 |
T11 |
0 |
70 |
0 |
0 |
T24 |
0 |
4 |
0 |
0 |
T34 |
951 |
0 |
0 |
0 |
T35 |
0 |
24 |
0 |
0 |
T37 |
557 |
0 |
0 |
0 |
T38 |
0 |
36 |
0 |
0 |
T39 |
0 |
2 |
0 |
0 |
T42 |
833 |
0 |
0 |
0 |
T43 |
555 |
0 |
0 |
0 |
T44 |
2756 |
0 |
0 |
0 |
T45 |
6899 |
0 |
0 |
0 |
T46 |
515 |
0 |
0 |
0 |
T47 |
3291 |
0 |
0 |
0 |
SrcPulseCheck_M
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
36655700 |
11516 |
0 |
0 |
T1 |
19167 |
4 |
0 |
0 |
T2 |
19643 |
6 |
0 |
0 |
T3 |
0 |
40 |
0 |
0 |
T7 |
0 |
40 |
0 |
0 |
T10 |
0 |
32 |
0 |
0 |
T11 |
0 |
70 |
0 |
0 |
T24 |
0 |
4 |
0 |
0 |
T34 |
902 |
0 |
0 |
0 |
T35 |
0 |
24 |
0 |
0 |
T37 |
2205 |
0 |
0 |
0 |
T38 |
0 |
36 |
0 |
0 |
T39 |
0 |
2 |
0 |
0 |
T42 |
634 |
0 |
0 |
0 |
T43 |
1920 |
0 |
0 |
0 |
T44 |
1269 |
0 |
0 |
0 |
T45 |
8285 |
0 |
0 |
0 |
T46 |
825 |
0 |
0 |
0 |
T47 |
3448 |
0 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_reg.u_io_div4_meas_ctrl_shadowed_cdc.u_src_to_dst_req
| Line No. | Total | Covered | Percent |
TOTAL | | 7 | 7 | 100.00 |
ALWAYS | 31 | 3 | 3 | 100.00 |
CONT_ASSIGN | 49 | 0 | 0 | |
CONT_ASSIGN | 52 | 0 | 0 | |
ALWAYS | 55 | 0 | 0 | |
ALWAYS | 89 | 3 | 3 | 100.00 |
CONT_ASSIGN | 97 | 1 | 1 | 100.00 |
30 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin
31 1/1 if (!rst_src_ni) begin
Tests: T4 T5 T6
32 1/1 src_level <= 1'b0;
Tests: T4 T5 T6
33 end else begin
34 1/1 src_level <= src_level ^ src_pulse_i;
Tests: T4 T5 T6
35 end
36 end
37
38
39 // source active must come far enough such that the destination domain has time
40 // to create a valid pulse.
41 `ifdef INC_ASSERT
42 //VCS coverage off
43 // pragma coverage off
44
45 // source active flag tracks whether there is an ongoing "toggle" event.
46 // Until this toggle event is accepted by the destination domain (negative edge of
47 // of the pulse output), the source side cannot toggle again.
48 logic effective_rst_n;
49 unreachable assign effective_rst_n = rst_src_ni && dst_pulse_o;
50
51 logic src_active_flag_d, src_active_flag_q;
52 unreachable assign src_active_flag_d = src_pulse_i || src_active_flag_q;
53
54 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin
55 unreachable if (!effective_rst_n) begin
56 unreachable src_active_flag_q <= '0;
57 end else begin
58 unreachable src_active_flag_q <= src_active_flag_d;
59 end
60 end
61
62 //VCS coverage on
63 // pragma coverage on
64
65 `ASSERT(SrcPulseCheck_M, src_pulse_i |-> !src_active_flag_q, clk_src_i, !rst_src_ni)
66 `endif
67
68 //////////////////////////////////////////////////////////
69 // synchronize level signal to destination clock domain //
70 //////////////////////////////////////////////////////////
71 logic dst_level;
72
73 prim_flop_2sync #(.Width(1)) prim_flop_2sync (
74 // source clock domain
75 .d_i (src_level),
76 // destination clock domain
77 .clk_i (clk_dst_i),
78 .rst_ni (rst_dst_ni),
79 .q_o (dst_level)
80 );
81
82 ////////////////////////////////////////
83 // convert level signal back to pulse //
84 ////////////////////////////////////////
85 logic dst_level_q;
86
87 // delay dst_level by 1 cycle
88 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin
89 1/1 if (!rst_dst_ni) begin
Tests: T4 T5 T6
90 1/1 dst_level_q <= 1'b0;
Tests: T4 T5 T6
91 end else begin
92 1/1 dst_level_q <= dst_level;
Tests: T4 T5 T6
93 end
94 end
95
96 // edge detection
97 1/1 assign dst_pulse_o = dst_level_q ^ dst_level;
Tests: T1 T2 T3
Cond Coverage for Instance : tb.dut.u_reg.u_io_div4_meas_ctrl_shadowed_cdc.u_src_to_dst_req
| Total | Covered | Percent |
Conditions | 8 | 8 | 100.00 |
Logical | 8 | 8 | 100.00 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 34
EXPRESSION (src_level ^ src_pulse_i)
----1---- -----2-----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 97
EXPRESSION (dst_level_q ^ dst_level)
-----1----- ----2----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
Branch Coverage for Instance : tb.dut.u_reg.u_io_div4_meas_ctrl_shadowed_cdc.u_src_to_dst_req
| Line No. | Total | Covered | Percent |
Branches |
|
4 |
4 |
100.00 |
IF |
31 |
2 |
2 |
100.00 |
IF |
89 |
2 |
2 |
100.00 |
31 if (!rst_src_ni) begin
-1-
32 src_level <= 1'b0;
==>
33 end else begin
34 src_level <= src_level ^ src_pulse_i;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
89 if (!rst_dst_ni) begin
-1-
90 dst_level_q <= 1'b0;
==>
91 end else begin
92 dst_level_q <= dst_level;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
Assert Coverage for Instance : tb.dut.u_reg.u_io_div4_meas_ctrl_shadowed_cdc.u_src_to_dst_req
Assertion Details
DstPulseCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
19294625 |
17278 |
0 |
0 |
T1 |
4667 |
4 |
0 |
0 |
T2 |
6347 |
6 |
0 |
0 |
T3 |
0 |
80 |
0 |
0 |
T7 |
0 |
80 |
0 |
0 |
T10 |
0 |
32 |
0 |
0 |
T11 |
0 |
70 |
0 |
0 |
T24 |
0 |
4 |
0 |
0 |
T34 |
951 |
0 |
0 |
0 |
T35 |
0 |
24 |
0 |
0 |
T37 |
557 |
0 |
0 |
0 |
T38 |
0 |
36 |
0 |
0 |
T39 |
0 |
4 |
0 |
0 |
T42 |
833 |
0 |
0 |
0 |
T43 |
555 |
0 |
0 |
0 |
T44 |
2756 |
0 |
0 |
0 |
T45 |
6899 |
0 |
0 |
0 |
T46 |
515 |
0 |
0 |
0 |
T47 |
3291 |
0 |
0 |
0 |
SrcPulseCheck_M
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
36655700 |
17301 |
0 |
0 |
T1 |
19167 |
4 |
0 |
0 |
T2 |
19643 |
6 |
0 |
0 |
T3 |
0 |
80 |
0 |
0 |
T7 |
0 |
80 |
0 |
0 |
T10 |
0 |
32 |
0 |
0 |
T11 |
0 |
70 |
0 |
0 |
T24 |
0 |
4 |
0 |
0 |
T34 |
902 |
0 |
0 |
0 |
T35 |
0 |
24 |
0 |
0 |
T37 |
2205 |
0 |
0 |
0 |
T38 |
0 |
36 |
0 |
0 |
T39 |
0 |
4 |
0 |
0 |
T42 |
634 |
0 |
0 |
0 |
T43 |
1920 |
0 |
0 |
0 |
T44 |
1269 |
0 |
0 |
0 |
T45 |
8285 |
0 |
0 |
0 |
T46 |
825 |
0 |
0 |
0 |
T47 |
3448 |
0 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_reg.u_io_div4_meas_ctrl_shadowed_cdc.u_arb.gen_passthru.u_dst_to_src_ack
| Line No. | Total | Covered | Percent |
TOTAL | | 7 | 7 | 100.00 |
ALWAYS | 31 | 3 | 3 | 100.00 |
CONT_ASSIGN | 49 | 0 | 0 | |
CONT_ASSIGN | 52 | 0 | 0 | |
ALWAYS | 55 | 0 | 0 | |
ALWAYS | 89 | 3 | 3 | 100.00 |
CONT_ASSIGN | 97 | 1 | 1 | 100.00 |
30 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin
31 1/1 if (!rst_src_ni) begin
Tests: T4 T5 T6
32 1/1 src_level <= 1'b0;
Tests: T4 T5 T6
33 end else begin
34 1/1 src_level <= src_level ^ src_pulse_i;
Tests: T4 T5 T6
35 end
36 end
37
38
39 // source active must come far enough such that the destination domain has time
40 // to create a valid pulse.
41 `ifdef INC_ASSERT
42 //VCS coverage off
43 // pragma coverage off
44
45 // source active flag tracks whether there is an ongoing "toggle" event.
46 // Until this toggle event is accepted by the destination domain (negative edge of
47 // of the pulse output), the source side cannot toggle again.
48 logic effective_rst_n;
49 unreachable assign effective_rst_n = rst_src_ni && dst_pulse_o;
50
51 logic src_active_flag_d, src_active_flag_q;
52 unreachable assign src_active_flag_d = src_pulse_i || src_active_flag_q;
53
54 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin
55 unreachable if (!effective_rst_n) begin
56 unreachable src_active_flag_q <= '0;
57 end else begin
58 unreachable src_active_flag_q <= src_active_flag_d;
59 end
60 end
61
62 //VCS coverage on
63 // pragma coverage on
64
65 `ASSERT(SrcPulseCheck_M, src_pulse_i |-> !src_active_flag_q, clk_src_i, !rst_src_ni)
66 `endif
67
68 //////////////////////////////////////////////////////////
69 // synchronize level signal to destination clock domain //
70 //////////////////////////////////////////////////////////
71 logic dst_level;
72
73 prim_flop_2sync #(.Width(1)) prim_flop_2sync (
74 // source clock domain
75 .d_i (src_level),
76 // destination clock domain
77 .clk_i (clk_dst_i),
78 .rst_ni (rst_dst_ni),
79 .q_o (dst_level)
80 );
81
82 ////////////////////////////////////////
83 // convert level signal back to pulse //
84 ////////////////////////////////////////
85 logic dst_level_q;
86
87 // delay dst_level by 1 cycle
88 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin
89 1/1 if (!rst_dst_ni) begin
Tests: T4 T5 T6
90 1/1 dst_level_q <= 1'b0;
Tests: T4 T5 T6
91 end else begin
92 1/1 dst_level_q <= dst_level;
Tests: T4 T5 T6
93 end
94 end
95
96 // edge detection
97 1/1 assign dst_pulse_o = dst_level_q ^ dst_level;
Tests: T1 T2 T3
Cond Coverage for Instance : tb.dut.u_reg.u_io_div4_meas_ctrl_shadowed_cdc.u_arb.gen_passthru.u_dst_to_src_ack
| Total | Covered | Percent |
Conditions | 8 | 8 | 100.00 |
Logical | 8 | 8 | 100.00 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 34
EXPRESSION (src_level ^ src_pulse_i)
----1---- -----2-----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 97
EXPRESSION (dst_level_q ^ dst_level)
-----1----- ----2----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
Branch Coverage for Instance : tb.dut.u_reg.u_io_div4_meas_ctrl_shadowed_cdc.u_arb.gen_passthru.u_dst_to_src_ack
| Line No. | Total | Covered | Percent |
Branches |
|
4 |
4 |
100.00 |
IF |
31 |
2 |
2 |
100.00 |
IF |
89 |
2 |
2 |
100.00 |
31 if (!rst_src_ni) begin
-1-
32 src_level <= 1'b0;
==>
33 end else begin
34 src_level <= src_level ^ src_pulse_i;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
89 if (!rst_dst_ni) begin
-1-
90 dst_level_q <= 1'b0;
==>
91 end else begin
92 dst_level_q <= dst_level;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
Assert Coverage for Instance : tb.dut.u_reg.u_io_div4_meas_ctrl_shadowed_cdc.u_arb.gen_passthru.u_dst_to_src_ack
Assertion Details
DstPulseCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
36655700 |
17275 |
0 |
0 |
T1 |
19167 |
4 |
0 |
0 |
T2 |
19643 |
6 |
0 |
0 |
T3 |
0 |
80 |
0 |
0 |
T7 |
0 |
80 |
0 |
0 |
T10 |
0 |
32 |
0 |
0 |
T11 |
0 |
70 |
0 |
0 |
T24 |
0 |
4 |
0 |
0 |
T34 |
902 |
0 |
0 |
0 |
T35 |
0 |
24 |
0 |
0 |
T37 |
2205 |
0 |
0 |
0 |
T38 |
0 |
36 |
0 |
0 |
T39 |
0 |
4 |
0 |
0 |
T42 |
634 |
0 |
0 |
0 |
T43 |
1920 |
0 |
0 |
0 |
T44 |
1269 |
0 |
0 |
0 |
T45 |
8285 |
0 |
0 |
0 |
T46 |
825 |
0 |
0 |
0 |
T47 |
3448 |
0 |
0 |
0 |
SrcPulseCheck_M
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
19294625 |
17281 |
0 |
0 |
T1 |
4667 |
4 |
0 |
0 |
T2 |
6347 |
6 |
0 |
0 |
T3 |
0 |
80 |
0 |
0 |
T7 |
0 |
80 |
0 |
0 |
T10 |
0 |
32 |
0 |
0 |
T11 |
0 |
70 |
0 |
0 |
T24 |
0 |
4 |
0 |
0 |
T34 |
951 |
0 |
0 |
0 |
T35 |
0 |
24 |
0 |
0 |
T37 |
557 |
0 |
0 |
0 |
T38 |
0 |
36 |
0 |
0 |
T39 |
0 |
4 |
0 |
0 |
T42 |
833 |
0 |
0 |
0 |
T43 |
555 |
0 |
0 |
0 |
T44 |
2756 |
0 |
0 |
0 |
T45 |
6899 |
0 |
0 |
0 |
T46 |
515 |
0 |
0 |
0 |
T47 |
3291 |
0 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_reg.u_main_meas_ctrl_en_cdc.u_src_to_dst_req
| Line No. | Total | Covered | Percent |
TOTAL | | 7 | 7 | 100.00 |
ALWAYS | 31 | 3 | 3 | 100.00 |
CONT_ASSIGN | 49 | 0 | 0 | |
CONT_ASSIGN | 52 | 0 | 0 | |
ALWAYS | 55 | 0 | 0 | |
ALWAYS | 89 | 3 | 3 | 100.00 |
CONT_ASSIGN | 97 | 1 | 1 | 100.00 |
30 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin
31 1/1 if (!rst_src_ni) begin
Tests: T4 T5 T6
32 1/1 src_level <= 1'b0;
Tests: T4 T5 T6
33 end else begin
34 1/1 src_level <= src_level ^ src_pulse_i;
Tests: T4 T5 T6
35 end
36 end
37
38
39 // source active must come far enough such that the destination domain has time
40 // to create a valid pulse.
41 `ifdef INC_ASSERT
42 //VCS coverage off
43 // pragma coverage off
44
45 // source active flag tracks whether there is an ongoing "toggle" event.
46 // Until this toggle event is accepted by the destination domain (negative edge of
47 // of the pulse output), the source side cannot toggle again.
48 logic effective_rst_n;
49 unreachable assign effective_rst_n = rst_src_ni && dst_pulse_o;
50
51 logic src_active_flag_d, src_active_flag_q;
52 unreachable assign src_active_flag_d = src_pulse_i || src_active_flag_q;
53
54 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin
55 unreachable if (!effective_rst_n) begin
56 unreachable src_active_flag_q <= '0;
57 end else begin
58 unreachable src_active_flag_q <= src_active_flag_d;
59 end
60 end
61
62 //VCS coverage on
63 // pragma coverage on
64
65 `ASSERT(SrcPulseCheck_M, src_pulse_i |-> !src_active_flag_q, clk_src_i, !rst_src_ni)
66 `endif
67
68 //////////////////////////////////////////////////////////
69 // synchronize level signal to destination clock domain //
70 //////////////////////////////////////////////////////////
71 logic dst_level;
72
73 prim_flop_2sync #(.Width(1)) prim_flop_2sync (
74 // source clock domain
75 .d_i (src_level),
76 // destination clock domain
77 .clk_i (clk_dst_i),
78 .rst_ni (rst_dst_ni),
79 .q_o (dst_level)
80 );
81
82 ////////////////////////////////////////
83 // convert level signal back to pulse //
84 ////////////////////////////////////////
85 logic dst_level_q;
86
87 // delay dst_level by 1 cycle
88 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin
89 1/1 if (!rst_dst_ni) begin
Tests: T4 T5 T6
90 1/1 dst_level_q <= 1'b0;
Tests: T4 T5 T6
91 end else begin
92 1/1 dst_level_q <= dst_level;
Tests: T4 T5 T6
93 end
94 end
95
96 // edge detection
97 1/1 assign dst_pulse_o = dst_level_q ^ dst_level;
Tests: T1 T2 T3
Cond Coverage for Instance : tb.dut.u_reg.u_main_meas_ctrl_en_cdc.u_src_to_dst_req
| Total | Covered | Percent |
Conditions | 8 | 8 | 100.00 |
Logical | 8 | 8 | 100.00 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 34
EXPRESSION (src_level ^ src_pulse_i)
----1---- -----2-----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 97
EXPRESSION (dst_level_q ^ dst_level)
-----1----- ----2----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
Branch Coverage for Instance : tb.dut.u_reg.u_main_meas_ctrl_en_cdc.u_src_to_dst_req
| Line No. | Total | Covered | Percent |
Branches |
|
4 |
4 |
100.00 |
IF |
31 |
2 |
2 |
100.00 |
IF |
89 |
2 |
2 |
100.00 |
31 if (!rst_src_ni) begin
-1-
32 src_level <= 1'b0;
==>
33 end else begin
34 src_level <= src_level ^ src_pulse_i;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
89 if (!rst_dst_ni) begin
-1-
90 dst_level_q <= 1'b0;
==>
91 end else begin
92 dst_level_q <= dst_level;
==>
Branches:
-1- | Status | Tests |
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_src_to_dst_req
Assertion Details
DstPulseCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
87383546 |
11516 |
0 |
0 |
T1 |
19558 |
4 |
0 |
0 |
T2 |
38517 |
6 |
0 |
0 |
T3 |
0 |
40 |
0 |
0 |
T7 |
0 |
40 |
0 |
0 |
T10 |
0 |
32 |
0 |
0 |
T11 |
0 |
70 |
0 |
0 |
T24 |
0 |
4 |
0 |
0 |
T34 |
3762 |
0 |
0 |
0 |
T35 |
0 |
24 |
0 |
0 |
T37 |
2205 |
0 |
0 |
0 |
T38 |
0 |
36 |
0 |
0 |
T39 |
0 |
2 |
0 |
0 |
T42 |
3525 |
0 |
0 |
0 |
T43 |
2260 |
0 |
0 |
0 |
T44 |
11540 |
0 |
0 |
0 |
T45 |
33144 |
0 |
0 |
0 |
T46 |
2229 |
0 |
0 |
0 |
T47 |
13796 |
0 |
0 |
0 |
SrcPulseCheck_M
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
36655700 |
11516 |
0 |
0 |
T1 |
19167 |
4 |
0 |
0 |
T2 |
19643 |
6 |
0 |
0 |
T3 |
0 |
40 |
0 |
0 |
T7 |
0 |
40 |
0 |
0 |
T10 |
0 |
32 |
0 |
0 |
T11 |
0 |
70 |
0 |
0 |
T24 |
0 |
4 |
0 |
0 |
T34 |
902 |
0 |
0 |
0 |
T35 |
0 |
24 |
0 |
0 |
T37 |
2205 |
0 |
0 |
0 |
T38 |
0 |
36 |
0 |
0 |
T39 |
0 |
2 |
0 |
0 |
T42 |
634 |
0 |
0 |
0 |
T43 |
1920 |
0 |
0 |
0 |
T44 |
1269 |
0 |
0 |
0 |
T45 |
8285 |
0 |
0 |
0 |
T46 |
825 |
0 |
0 |
0 |
T47 |
3448 |
0 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_reg.u_main_meas_ctrl_shadowed_cdc.u_src_to_dst_req
| Line No. | Total | Covered | Percent |
TOTAL | | 7 | 7 | 100.00 |
ALWAYS | 31 | 3 | 3 | 100.00 |
CONT_ASSIGN | 49 | 0 | 0 | |
CONT_ASSIGN | 52 | 0 | 0 | |
ALWAYS | 55 | 0 | 0 | |
ALWAYS | 89 | 3 | 3 | 100.00 |
CONT_ASSIGN | 97 | 1 | 1 | 100.00 |
30 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin
31 1/1 if (!rst_src_ni) begin
Tests: T4 T5 T6
32 1/1 src_level <= 1'b0;
Tests: T4 T5 T6
33 end else begin
34 1/1 src_level <= src_level ^ src_pulse_i;
Tests: T4 T5 T6
35 end
36 end
37
38
39 // source active must come far enough such that the destination domain has time
40 // to create a valid pulse.
41 `ifdef INC_ASSERT
42 //VCS coverage off
43 // pragma coverage off
44
45 // source active flag tracks whether there is an ongoing "toggle" event.
46 // Until this toggle event is accepted by the destination domain (negative edge of
47 // of the pulse output), the source side cannot toggle again.
48 logic effective_rst_n;
49 unreachable assign effective_rst_n = rst_src_ni && dst_pulse_o;
50
51 logic src_active_flag_d, src_active_flag_q;
52 unreachable assign src_active_flag_d = src_pulse_i || src_active_flag_q;
53
54 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin
55 unreachable if (!effective_rst_n) begin
56 unreachable src_active_flag_q <= '0;
57 end else begin
58 unreachable src_active_flag_q <= src_active_flag_d;
59 end
60 end
61
62 //VCS coverage on
63 // pragma coverage on
64
65 `ASSERT(SrcPulseCheck_M, src_pulse_i |-> !src_active_flag_q, clk_src_i, !rst_src_ni)
66 `endif
67
68 //////////////////////////////////////////////////////////
69 // synchronize level signal to destination clock domain //
70 //////////////////////////////////////////////////////////
71 logic dst_level;
72
73 prim_flop_2sync #(.Width(1)) prim_flop_2sync (
74 // source clock domain
75 .d_i (src_level),
76 // destination clock domain
77 .clk_i (clk_dst_i),
78 .rst_ni (rst_dst_ni),
79 .q_o (dst_level)
80 );
81
82 ////////////////////////////////////////
83 // convert level signal back to pulse //
84 ////////////////////////////////////////
85 logic dst_level_q;
86
87 // delay dst_level by 1 cycle
88 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin
89 1/1 if (!rst_dst_ni) begin
Tests: T4 T5 T6
90 1/1 dst_level_q <= 1'b0;
Tests: T4 T5 T6
91 end else begin
92 1/1 dst_level_q <= dst_level;
Tests: T4 T5 T6
93 end
94 end
95
96 // edge detection
97 1/1 assign dst_pulse_o = dst_level_q ^ dst_level;
Tests: T1 T2 T3
Cond Coverage for Instance : tb.dut.u_reg.u_main_meas_ctrl_shadowed_cdc.u_src_to_dst_req
| Total | Covered | Percent |
Conditions | 8 | 8 | 100.00 |
Logical | 8 | 8 | 100.00 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 34
EXPRESSION (src_level ^ src_pulse_i)
----1---- -----2-----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 97
EXPRESSION (dst_level_q ^ dst_level)
-----1----- ----2----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
Branch Coverage for Instance : tb.dut.u_reg.u_main_meas_ctrl_shadowed_cdc.u_src_to_dst_req
| Line No. | Total | Covered | Percent |
Branches |
|
4 |
4 |
100.00 |
IF |
31 |
2 |
2 |
100.00 |
IF |
89 |
2 |
2 |
100.00 |
31 if (!rst_src_ni) begin
-1-
32 src_level <= 1'b0;
==>
33 end else begin
34 src_level <= src_level ^ src_pulse_i;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
89 if (!rst_dst_ni) begin
-1-
90 dst_level_q <= 1'b0;
==>
91 end else begin
92 dst_level_q <= dst_level;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
Assert Coverage for Instance : tb.dut.u_reg.u_main_meas_ctrl_shadowed_cdc.u_src_to_dst_req
Assertion Details
DstPulseCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
87383546 |
17115 |
0 |
0 |
T1 |
19558 |
4 |
0 |
0 |
T2 |
38517 |
6 |
0 |
0 |
T3 |
0 |
80 |
0 |
0 |
T7 |
0 |
80 |
0 |
0 |
T10 |
0 |
32 |
0 |
0 |
T11 |
0 |
70 |
0 |
0 |
T24 |
0 |
4 |
0 |
0 |
T34 |
3762 |
0 |
0 |
0 |
T35 |
0 |
24 |
0 |
0 |
T37 |
2205 |
0 |
0 |
0 |
T38 |
0 |
36 |
0 |
0 |
T39 |
0 |
4 |
0 |
0 |
T42 |
3525 |
0 |
0 |
0 |
T43 |
2260 |
0 |
0 |
0 |
T44 |
11540 |
0 |
0 |
0 |
T45 |
33144 |
0 |
0 |
0 |
T46 |
2229 |
0 |
0 |
0 |
T47 |
13796 |
0 |
0 |
0 |
SrcPulseCheck_M
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
36655700 |
17134 |
0 |
0 |
T1 |
19167 |
4 |
0 |
0 |
T2 |
19643 |
6 |
0 |
0 |
T3 |
0 |
80 |
0 |
0 |
T7 |
0 |
80 |
0 |
0 |
T10 |
0 |
32 |
0 |
0 |
T11 |
0 |
70 |
0 |
0 |
T24 |
0 |
4 |
0 |
0 |
T34 |
902 |
0 |
0 |
0 |
T35 |
0 |
24 |
0 |
0 |
T37 |
2205 |
0 |
0 |
0 |
T38 |
0 |
36 |
0 |
0 |
T39 |
0 |
4 |
0 |
0 |
T42 |
634 |
0 |
0 |
0 |
T43 |
1920 |
0 |
0 |
0 |
T44 |
1269 |
0 |
0 |
0 |
T45 |
8285 |
0 |
0 |
0 |
T46 |
825 |
0 |
0 |
0 |
T47 |
3448 |
0 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_reg.u_main_meas_ctrl_shadowed_cdc.u_arb.gen_passthru.u_dst_to_src_ack
| Line No. | Total | Covered | Percent |
TOTAL | | 7 | 7 | 100.00 |
ALWAYS | 31 | 3 | 3 | 100.00 |
CONT_ASSIGN | 49 | 0 | 0 | |
CONT_ASSIGN | 52 | 0 | 0 | |
ALWAYS | 55 | 0 | 0 | |
ALWAYS | 89 | 3 | 3 | 100.00 |
CONT_ASSIGN | 97 | 1 | 1 | 100.00 |
30 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin
31 1/1 if (!rst_src_ni) begin
Tests: T4 T5 T6
32 1/1 src_level <= 1'b0;
Tests: T4 T5 T6
33 end else begin
34 1/1 src_level <= src_level ^ src_pulse_i;
Tests: T4 T5 T6
35 end
36 end
37
38
39 // source active must come far enough such that the destination domain has time
40 // to create a valid pulse.
41 `ifdef INC_ASSERT
42 //VCS coverage off
43 // pragma coverage off
44
45 // source active flag tracks whether there is an ongoing "toggle" event.
46 // Until this toggle event is accepted by the destination domain (negative edge of
47 // of the pulse output), the source side cannot toggle again.
48 logic effective_rst_n;
49 unreachable assign effective_rst_n = rst_src_ni && dst_pulse_o;
50
51 logic src_active_flag_d, src_active_flag_q;
52 unreachable assign src_active_flag_d = src_pulse_i || src_active_flag_q;
53
54 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin
55 unreachable if (!effective_rst_n) begin
56 unreachable src_active_flag_q <= '0;
57 end else begin
58 unreachable src_active_flag_q <= src_active_flag_d;
59 end
60 end
61
62 //VCS coverage on
63 // pragma coverage on
64
65 `ASSERT(SrcPulseCheck_M, src_pulse_i |-> !src_active_flag_q, clk_src_i, !rst_src_ni)
66 `endif
67
68 //////////////////////////////////////////////////////////
69 // synchronize level signal to destination clock domain //
70 //////////////////////////////////////////////////////////
71 logic dst_level;
72
73 prim_flop_2sync #(.Width(1)) prim_flop_2sync (
74 // source clock domain
75 .d_i (src_level),
76 // destination clock domain
77 .clk_i (clk_dst_i),
78 .rst_ni (rst_dst_ni),
79 .q_o (dst_level)
80 );
81
82 ////////////////////////////////////////
83 // convert level signal back to pulse //
84 ////////////////////////////////////////
85 logic dst_level_q;
86
87 // delay dst_level by 1 cycle
88 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin
89 1/1 if (!rst_dst_ni) begin
Tests: T4 T5 T6
90 1/1 dst_level_q <= 1'b0;
Tests: T4 T5 T6
91 end else begin
92 1/1 dst_level_q <= dst_level;
Tests: T4 T5 T6
93 end
94 end
95
96 // edge detection
97 1/1 assign dst_pulse_o = dst_level_q ^ dst_level;
Tests: T1 T2 T3
Cond Coverage for Instance : tb.dut.u_reg.u_main_meas_ctrl_shadowed_cdc.u_arb.gen_passthru.u_dst_to_src_ack
| Total | Covered | Percent |
Conditions | 8 | 8 | 100.00 |
Logical | 8 | 8 | 100.00 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 34
EXPRESSION (src_level ^ src_pulse_i)
----1---- -----2-----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 97
EXPRESSION (dst_level_q ^ dst_level)
-----1----- ----2----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
Branch Coverage for Instance : tb.dut.u_reg.u_main_meas_ctrl_shadowed_cdc.u_arb.gen_passthru.u_dst_to_src_ack
| Line No. | Total | Covered | Percent |
Branches |
|
4 |
4 |
100.00 |
IF |
31 |
2 |
2 |
100.00 |
IF |
89 |
2 |
2 |
100.00 |
31 if (!rst_src_ni) begin
-1-
32 src_level <= 1'b0;
==>
33 end else begin
34 src_level <= src_level ^ src_pulse_i;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
89 if (!rst_dst_ni) begin
-1-
90 dst_level_q <= 1'b0;
==>
91 end else begin
92 dst_level_q <= dst_level;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
Assert Coverage for Instance : tb.dut.u_reg.u_main_meas_ctrl_shadowed_cdc.u_arb.gen_passthru.u_dst_to_src_ack
Assertion Details
DstPulseCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
36655700 |
17109 |
0 |
0 |
T1 |
19167 |
4 |
0 |
0 |
T2 |
19643 |
6 |
0 |
0 |
T3 |
0 |
80 |
0 |
0 |
T7 |
0 |
80 |
0 |
0 |
T10 |
0 |
32 |
0 |
0 |
T11 |
0 |
70 |
0 |
0 |
T24 |
0 |
4 |
0 |
0 |
T34 |
902 |
0 |
0 |
0 |
T35 |
0 |
24 |
0 |
0 |
T37 |
2205 |
0 |
0 |
0 |
T38 |
0 |
36 |
0 |
0 |
T39 |
0 |
4 |
0 |
0 |
T42 |
634 |
0 |
0 |
0 |
T43 |
1920 |
0 |
0 |
0 |
T44 |
1269 |
0 |
0 |
0 |
T45 |
8285 |
0 |
0 |
0 |
T46 |
825 |
0 |
0 |
0 |
T47 |
3448 |
0 |
0 |
0 |
SrcPulseCheck_M
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
87383546 |
17120 |
0 |
0 |
T1 |
19558 |
4 |
0 |
0 |
T2 |
38517 |
6 |
0 |
0 |
T3 |
0 |
80 |
0 |
0 |
T7 |
0 |
80 |
0 |
0 |
T10 |
0 |
32 |
0 |
0 |
T11 |
0 |
70 |
0 |
0 |
T24 |
0 |
4 |
0 |
0 |
T34 |
3762 |
0 |
0 |
0 |
T35 |
0 |
24 |
0 |
0 |
T37 |
2205 |
0 |
0 |
0 |
T38 |
0 |
36 |
0 |
0 |
T39 |
0 |
4 |
0 |
0 |
T42 |
3525 |
0 |
0 |
0 |
T43 |
2260 |
0 |
0 |
0 |
T44 |
11540 |
0 |
0 |
0 |
T45 |
33144 |
0 |
0 |
0 |
T46 |
2229 |
0 |
0 |
0 |
T47 |
13796 |
0 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_reg.u_usb_meas_ctrl_en_cdc.u_src_to_dst_req
| Line No. | Total | Covered | Percent |
TOTAL | | 7 | 7 | 100.00 |
ALWAYS | 31 | 3 | 3 | 100.00 |
CONT_ASSIGN | 49 | 0 | 0 | |
CONT_ASSIGN | 52 | 0 | 0 | |
ALWAYS | 55 | 0 | 0 | |
ALWAYS | 89 | 3 | 3 | 100.00 |
CONT_ASSIGN | 97 | 1 | 1 | 100.00 |
30 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin
31 1/1 if (!rst_src_ni) begin
Tests: T4 T5 T6
32 1/1 src_level <= 1'b0;
Tests: T4 T5 T6
33 end else begin
34 1/1 src_level <= src_level ^ src_pulse_i;
Tests: T4 T5 T6
35 end
36 end
37
38
39 // source active must come far enough such that the destination domain has time
40 // to create a valid pulse.
41 `ifdef INC_ASSERT
42 //VCS coverage off
43 // pragma coverage off
44
45 // source active flag tracks whether there is an ongoing "toggle" event.
46 // Until this toggle event is accepted by the destination domain (negative edge of
47 // of the pulse output), the source side cannot toggle again.
48 logic effective_rst_n;
49 unreachable assign effective_rst_n = rst_src_ni && dst_pulse_o;
50
51 logic src_active_flag_d, src_active_flag_q;
52 unreachable assign src_active_flag_d = src_pulse_i || src_active_flag_q;
53
54 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin
55 unreachable if (!effective_rst_n) begin
56 unreachable src_active_flag_q <= '0;
57 end else begin
58 unreachable src_active_flag_q <= src_active_flag_d;
59 end
60 end
61
62 //VCS coverage on
63 // pragma coverage on
64
65 `ASSERT(SrcPulseCheck_M, src_pulse_i |-> !src_active_flag_q, clk_src_i, !rst_src_ni)
66 `endif
67
68 //////////////////////////////////////////////////////////
69 // synchronize level signal to destination clock domain //
70 //////////////////////////////////////////////////////////
71 logic dst_level;
72
73 prim_flop_2sync #(.Width(1)) prim_flop_2sync (
74 // source clock domain
75 .d_i (src_level),
76 // destination clock domain
77 .clk_i (clk_dst_i),
78 .rst_ni (rst_dst_ni),
79 .q_o (dst_level)
80 );
81
82 ////////////////////////////////////////
83 // convert level signal back to pulse //
84 ////////////////////////////////////////
85 logic dst_level_q;
86
87 // delay dst_level by 1 cycle
88 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin
89 1/1 if (!rst_dst_ni) begin
Tests: T4 T5 T6
90 1/1 dst_level_q <= 1'b0;
Tests: T4 T5 T6
91 end else begin
92 1/1 dst_level_q <= dst_level;
Tests: T4 T5 T6
93 end
94 end
95
96 // edge detection
97 1/1 assign dst_pulse_o = dst_level_q ^ dst_level;
Tests: T1 T2 T3
Cond Coverage for Instance : tb.dut.u_reg.u_usb_meas_ctrl_en_cdc.u_src_to_dst_req
| Total | Covered | Percent |
Conditions | 8 | 8 | 100.00 |
Logical | 8 | 8 | 100.00 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 34
EXPRESSION (src_level ^ src_pulse_i)
----1---- -----2-----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 97
EXPRESSION (dst_level_q ^ dst_level)
-----1----- ----2----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
Branch Coverage for Instance : tb.dut.u_reg.u_usb_meas_ctrl_en_cdc.u_src_to_dst_req
| Line No. | Total | Covered | Percent |
Branches |
|
4 |
4 |
100.00 |
IF |
31 |
2 |
2 |
100.00 |
IF |
89 |
2 |
2 |
100.00 |
31 if (!rst_src_ni) begin
-1-
32 src_level <= 1'b0;
==>
33 end else begin
34 src_level <= src_level ^ src_pulse_i;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
89 if (!rst_dst_ni) begin
-1-
90 dst_level_q <= 1'b0;
==>
91 end else begin
92 dst_level_q <= dst_level;
==>
Branches:
-1- | Status | Tests |
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_src_to_dst_req
Assertion Details
DstPulseCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
41984687 |
11130 |
0 |
0 |
T1 |
9387 |
4 |
0 |
0 |
T2 |
15608 |
6 |
0 |
0 |
T3 |
0 |
23 |
0 |
0 |
T7 |
0 |
20 |
0 |
0 |
T10 |
0 |
32 |
0 |
0 |
T11 |
0 |
70 |
0 |
0 |
T24 |
0 |
4 |
0 |
0 |
T34 |
1805 |
0 |
0 |
0 |
T35 |
0 |
24 |
0 |
0 |
T37 |
1058 |
0 |
0 |
0 |
T38 |
0 |
36 |
0 |
0 |
T39 |
0 |
1 |
0 |
0 |
T42 |
1692 |
0 |
0 |
0 |
T43 |
1085 |
0 |
0 |
0 |
T44 |
5539 |
0 |
0 |
0 |
T45 |
15909 |
0 |
0 |
0 |
T46 |
1070 |
0 |
0 |
0 |
T47 |
6622 |
0 |
0 |
0 |
SrcPulseCheck_M
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
36655700 |
11516 |
0 |
0 |
T1 |
19167 |
4 |
0 |
0 |
T2 |
19643 |
6 |
0 |
0 |
T3 |
0 |
40 |
0 |
0 |
T7 |
0 |
40 |
0 |
0 |
T10 |
0 |
32 |
0 |
0 |
T11 |
0 |
70 |
0 |
0 |
T24 |
0 |
4 |
0 |
0 |
T34 |
902 |
0 |
0 |
0 |
T35 |
0 |
24 |
0 |
0 |
T37 |
2205 |
0 |
0 |
0 |
T38 |
0 |
36 |
0 |
0 |
T39 |
0 |
2 |
0 |
0 |
T42 |
634 |
0 |
0 |
0 |
T43 |
1920 |
0 |
0 |
0 |
T44 |
1269 |
0 |
0 |
0 |
T45 |
8285 |
0 |
0 |
0 |
T46 |
825 |
0 |
0 |
0 |
T47 |
3448 |
0 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_reg.u_usb_meas_ctrl_shadowed_cdc.u_src_to_dst_req
| Line No. | Total | Covered | Percent |
TOTAL | | 7 | 7 | 100.00 |
ALWAYS | 31 | 3 | 3 | 100.00 |
CONT_ASSIGN | 49 | 0 | 0 | |
CONT_ASSIGN | 52 | 0 | 0 | |
ALWAYS | 55 | 0 | 0 | |
ALWAYS | 89 | 3 | 3 | 100.00 |
CONT_ASSIGN | 97 | 1 | 1 | 100.00 |
30 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin
31 1/1 if (!rst_src_ni) begin
Tests: T4 T5 T6
32 1/1 src_level <= 1'b0;
Tests: T4 T5 T6
33 end else begin
34 1/1 src_level <= src_level ^ src_pulse_i;
Tests: T4 T5 T6
35 end
36 end
37
38
39 // source active must come far enough such that the destination domain has time
40 // to create a valid pulse.
41 `ifdef INC_ASSERT
42 //VCS coverage off
43 // pragma coverage off
44
45 // source active flag tracks whether there is an ongoing "toggle" event.
46 // Until this toggle event is accepted by the destination domain (negative edge of
47 // of the pulse output), the source side cannot toggle again.
48 logic effective_rst_n;
49 unreachable assign effective_rst_n = rst_src_ni && dst_pulse_o;
50
51 logic src_active_flag_d, src_active_flag_q;
52 unreachable assign src_active_flag_d = src_pulse_i || src_active_flag_q;
53
54 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin
55 unreachable if (!effective_rst_n) begin
56 unreachable src_active_flag_q <= '0;
57 end else begin
58 unreachable src_active_flag_q <= src_active_flag_d;
59 end
60 end
61
62 //VCS coverage on
63 // pragma coverage on
64
65 `ASSERT(SrcPulseCheck_M, src_pulse_i |-> !src_active_flag_q, clk_src_i, !rst_src_ni)
66 `endif
67
68 //////////////////////////////////////////////////////////
69 // synchronize level signal to destination clock domain //
70 //////////////////////////////////////////////////////////
71 logic dst_level;
72
73 prim_flop_2sync #(.Width(1)) prim_flop_2sync (
74 // source clock domain
75 .d_i (src_level),
76 // destination clock domain
77 .clk_i (clk_dst_i),
78 .rst_ni (rst_dst_ni),
79 .q_o (dst_level)
80 );
81
82 ////////////////////////////////////////
83 // convert level signal back to pulse //
84 ////////////////////////////////////////
85 logic dst_level_q;
86
87 // delay dst_level by 1 cycle
88 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin
89 1/1 if (!rst_dst_ni) begin
Tests: T4 T5 T6
90 1/1 dst_level_q <= 1'b0;
Tests: T4 T5 T6
91 end else begin
92 1/1 dst_level_q <= dst_level;
Tests: T4 T5 T6
93 end
94 end
95
96 // edge detection
97 1/1 assign dst_pulse_o = dst_level_q ^ dst_level;
Tests: T1 T2 T3
Cond Coverage for Instance : tb.dut.u_reg.u_usb_meas_ctrl_shadowed_cdc.u_src_to_dst_req
| Total | Covered | Percent |
Conditions | 8 | 8 | 100.00 |
Logical | 8 | 8 | 100.00 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 34
EXPRESSION (src_level ^ src_pulse_i)
----1---- -----2-----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 97
EXPRESSION (dst_level_q ^ dst_level)
-----1----- ----2----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
Branch Coverage for Instance : tb.dut.u_reg.u_usb_meas_ctrl_shadowed_cdc.u_src_to_dst_req
| Line No. | Total | Covered | Percent |
Branches |
|
4 |
4 |
100.00 |
IF |
31 |
2 |
2 |
100.00 |
IF |
89 |
2 |
2 |
100.00 |
31 if (!rst_src_ni) begin
-1-
32 src_level <= 1'b0;
==>
33 end else begin
34 src_level <= src_level ^ src_pulse_i;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
89 if (!rst_dst_ni) begin
-1-
90 dst_level_q <= 1'b0;
==>
91 end else begin
92 dst_level_q <= dst_level;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
Assert Coverage for Instance : tb.dut.u_reg.u_usb_meas_ctrl_shadowed_cdc.u_src_to_dst_req
Assertion Details
DstPulseCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
41984687 |
17088 |
0 |
0 |
T1 |
9387 |
4 |
0 |
0 |
T2 |
15608 |
6 |
0 |
0 |
T3 |
0 |
80 |
0 |
0 |
T7 |
0 |
60 |
0 |
0 |
T10 |
0 |
32 |
0 |
0 |
T11 |
0 |
70 |
0 |
0 |
T24 |
0 |
4 |
0 |
0 |
T34 |
1805 |
0 |
0 |
0 |
T35 |
0 |
24 |
0 |
0 |
T37 |
1058 |
0 |
0 |
0 |
T38 |
0 |
36 |
0 |
0 |
T39 |
0 |
4 |
0 |
0 |
T42 |
1692 |
0 |
0 |
0 |
T43 |
1085 |
0 |
0 |
0 |
T44 |
5539 |
0 |
0 |
0 |
T45 |
15909 |
0 |
0 |
0 |
T46 |
1070 |
0 |
0 |
0 |
T47 |
6622 |
0 |
0 |
0 |
SrcPulseCheck_M
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
36655700 |
17209 |
0 |
0 |
T1 |
19167 |
4 |
0 |
0 |
T2 |
19643 |
6 |
0 |
0 |
T3 |
0 |
80 |
0 |
0 |
T7 |
0 |
80 |
0 |
0 |
T10 |
0 |
32 |
0 |
0 |
T11 |
0 |
70 |
0 |
0 |
T24 |
0 |
4 |
0 |
0 |
T34 |
902 |
0 |
0 |
0 |
T35 |
0 |
24 |
0 |
0 |
T37 |
2205 |
0 |
0 |
0 |
T38 |
0 |
36 |
0 |
0 |
T39 |
0 |
4 |
0 |
0 |
T42 |
634 |
0 |
0 |
0 |
T43 |
1920 |
0 |
0 |
0 |
T44 |
1269 |
0 |
0 |
0 |
T45 |
8285 |
0 |
0 |
0 |
T46 |
825 |
0 |
0 |
0 |
T47 |
3448 |
0 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_reg.u_usb_meas_ctrl_shadowed_cdc.u_arb.gen_passthru.u_dst_to_src_ack
| Line No. | Total | Covered | Percent |
TOTAL | | 7 | 7 | 100.00 |
ALWAYS | 31 | 3 | 3 | 100.00 |
CONT_ASSIGN | 49 | 0 | 0 | |
CONT_ASSIGN | 52 | 0 | 0 | |
ALWAYS | 55 | 0 | 0 | |
ALWAYS | 89 | 3 | 3 | 100.00 |
CONT_ASSIGN | 97 | 1 | 1 | 100.00 |
30 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin
31 1/1 if (!rst_src_ni) begin
Tests: T4 T5 T6
32 1/1 src_level <= 1'b0;
Tests: T4 T5 T6
33 end else begin
34 1/1 src_level <= src_level ^ src_pulse_i;
Tests: T4 T5 T6
35 end
36 end
37
38
39 // source active must come far enough such that the destination domain has time
40 // to create a valid pulse.
41 `ifdef INC_ASSERT
42 //VCS coverage off
43 // pragma coverage off
44
45 // source active flag tracks whether there is an ongoing "toggle" event.
46 // Until this toggle event is accepted by the destination domain (negative edge of
47 // of the pulse output), the source side cannot toggle again.
48 logic effective_rst_n;
49 unreachable assign effective_rst_n = rst_src_ni && dst_pulse_o;
50
51 logic src_active_flag_d, src_active_flag_q;
52 unreachable assign src_active_flag_d = src_pulse_i || src_active_flag_q;
53
54 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin
55 unreachable if (!effective_rst_n) begin
56 unreachable src_active_flag_q <= '0;
57 end else begin
58 unreachable src_active_flag_q <= src_active_flag_d;
59 end
60 end
61
62 //VCS coverage on
63 // pragma coverage on
64
65 `ASSERT(SrcPulseCheck_M, src_pulse_i |-> !src_active_flag_q, clk_src_i, !rst_src_ni)
66 `endif
67
68 //////////////////////////////////////////////////////////
69 // synchronize level signal to destination clock domain //
70 //////////////////////////////////////////////////////////
71 logic dst_level;
72
73 prim_flop_2sync #(.Width(1)) prim_flop_2sync (
74 // source clock domain
75 .d_i (src_level),
76 // destination clock domain
77 .clk_i (clk_dst_i),
78 .rst_ni (rst_dst_ni),
79 .q_o (dst_level)
80 );
81
82 ////////////////////////////////////////
83 // convert level signal back to pulse //
84 ////////////////////////////////////////
85 logic dst_level_q;
86
87 // delay dst_level by 1 cycle
88 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin
89 1/1 if (!rst_dst_ni) begin
Tests: T4 T5 T6
90 1/1 dst_level_q <= 1'b0;
Tests: T4 T5 T6
91 end else begin
92 1/1 dst_level_q <= dst_level;
Tests: T4 T5 T6
93 end
94 end
95
96 // edge detection
97 1/1 assign dst_pulse_o = dst_level_q ^ dst_level;
Tests: T1 T2 T3
Cond Coverage for Instance : tb.dut.u_reg.u_usb_meas_ctrl_shadowed_cdc.u_arb.gen_passthru.u_dst_to_src_ack
| Total | Covered | Percent |
Conditions | 8 | 8 | 100.00 |
Logical | 8 | 8 | 100.00 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 34
EXPRESSION (src_level ^ src_pulse_i)
----1---- -----2-----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 97
EXPRESSION (dst_level_q ^ dst_level)
-----1----- ----2----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
Branch Coverage for Instance : tb.dut.u_reg.u_usb_meas_ctrl_shadowed_cdc.u_arb.gen_passthru.u_dst_to_src_ack
| Line No. | Total | Covered | Percent |
Branches |
|
4 |
4 |
100.00 |
IF |
31 |
2 |
2 |
100.00 |
IF |
89 |
2 |
2 |
100.00 |
31 if (!rst_src_ni) begin
-1-
32 src_level <= 1'b0;
==>
33 end else begin
34 src_level <= src_level ^ src_pulse_i;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
89 if (!rst_dst_ni) begin
-1-
90 dst_level_q <= 1'b0;
==>
91 end else begin
92 dst_level_q <= dst_level;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
Assert Coverage for Instance : tb.dut.u_reg.u_usb_meas_ctrl_shadowed_cdc.u_arb.gen_passthru.u_dst_to_src_ack
Assertion Details
DstPulseCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
36655700 |
16934 |
0 |
0 |
T1 |
19167 |
4 |
0 |
0 |
T2 |
19643 |
6 |
0 |
0 |
T3 |
0 |
78 |
0 |
0 |
T7 |
0 |
60 |
0 |
0 |
T10 |
0 |
32 |
0 |
0 |
T11 |
0 |
70 |
0 |
0 |
T24 |
0 |
4 |
0 |
0 |
T34 |
902 |
0 |
0 |
0 |
T35 |
0 |
24 |
0 |
0 |
T37 |
2205 |
0 |
0 |
0 |
T38 |
0 |
36 |
0 |
0 |
T39 |
0 |
4 |
0 |
0 |
T42 |
634 |
0 |
0 |
0 |
T43 |
1920 |
0 |
0 |
0 |
T44 |
1269 |
0 |
0 |
0 |
T45 |
8285 |
0 |
0 |
0 |
T46 |
825 |
0 |
0 |
0 |
T47 |
3448 |
0 |
0 |
0 |
SrcPulseCheck_M
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
41984687 |
17104 |
0 |
0 |
T1 |
9387 |
4 |
0 |
0 |
T2 |
15608 |
6 |
0 |
0 |
T3 |
0 |
80 |
0 |
0 |
T7 |
0 |
60 |
0 |
0 |
T10 |
0 |
32 |
0 |
0 |
T11 |
0 |
70 |
0 |
0 |
T24 |
0 |
4 |
0 |
0 |
T34 |
1805 |
0 |
0 |
0 |
T35 |
0 |
24 |
0 |
0 |
T37 |
1058 |
0 |
0 |
0 |
T38 |
0 |
36 |
0 |
0 |
T39 |
0 |
4 |
0 |
0 |
T42 |
1692 |
0 |
0 |
0 |
T43 |
1085 |
0 |
0 |
0 |
T44 |
5539 |
0 |
0 |
0 |
T45 |
15909 |
0 |
0 |
0 |
T46 |
1070 |
0 |
0 |
0 |
T47 |
6622 |
0 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_reg.u_io_meas_ctrl_shadowed_hi_err_update_sync
| Line No. | Total | Covered | Percent |
TOTAL | | 7 | 7 | 100.00 |
ALWAYS | 31 | 3 | 3 | 100.00 |
CONT_ASSIGN | 49 | 0 | 0 | |
CONT_ASSIGN | 52 | 0 | 0 | |
ALWAYS | 55 | 0 | 0 | |
ALWAYS | 89 | 3 | 3 | 100.00 |
CONT_ASSIGN | 97 | 1 | 1 | 100.00 |
30 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin
31 1/1 if (!rst_src_ni) begin
Tests: T4 T5 T6
32 1/1 src_level <= 1'b0;
Tests: T4 T5 T6
33 end else begin
34 1/1 src_level <= src_level ^ src_pulse_i;
Tests: T4 T5 T6
35 end
36 end
37
38
39 // source active must come far enough such that the destination domain has time
40 // to create a valid pulse.
41 `ifdef INC_ASSERT
42 //VCS coverage off
43 // pragma coverage off
44
45 // source active flag tracks whether there is an ongoing "toggle" event.
46 // Until this toggle event is accepted by the destination domain (negative edge of
47 // of the pulse output), the source side cannot toggle again.
48 logic effective_rst_n;
49 unreachable assign effective_rst_n = rst_src_ni && dst_pulse_o;
50
51 logic src_active_flag_d, src_active_flag_q;
52 unreachable assign src_active_flag_d = src_pulse_i || src_active_flag_q;
53
54 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin
55 unreachable if (!effective_rst_n) begin
56 unreachable src_active_flag_q <= '0;
57 end else begin
58 unreachable src_active_flag_q <= src_active_flag_d;
59 end
60 end
61
62 //VCS coverage on
63 // pragma coverage on
64
65 `ASSERT(SrcPulseCheck_M, src_pulse_i |-> !src_active_flag_q, clk_src_i, !rst_src_ni)
66 `endif
67
68 //////////////////////////////////////////////////////////
69 // synchronize level signal to destination clock domain //
70 //////////////////////////////////////////////////////////
71 logic dst_level;
72
73 prim_flop_2sync #(.Width(1)) prim_flop_2sync (
74 // source clock domain
75 .d_i (src_level),
76 // destination clock domain
77 .clk_i (clk_dst_i),
78 .rst_ni (rst_dst_ni),
79 .q_o (dst_level)
80 );
81
82 ////////////////////////////////////////
83 // convert level signal back to pulse //
84 ////////////////////////////////////////
85 logic dst_level_q;
86
87 // delay dst_level by 1 cycle
88 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin
89 1/1 if (!rst_dst_ni) begin
Tests: T4 T5 T6
90 1/1 dst_level_q <= 1'b0;
Tests: T4 T5 T6
91 end else begin
92 1/1 dst_level_q <= dst_level;
Tests: T4 T5 T6
93 end
94 end
95
96 // edge detection
97 1/1 assign dst_pulse_o = dst_level_q ^ dst_level;
Tests: T65 T66 T68
Cond Coverage for Instance : tb.dut.u_reg.u_io_meas_ctrl_shadowed_hi_err_update_sync
| Total | Covered | Percent |
Conditions | 8 | 8 | 100.00 |
Logical | 8 | 8 | 100.00 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 34
EXPRESSION (src_level ^ src_pulse_i)
----1---- -----2-----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T65,T66,T68 |
1 | 0 | Covered | T65,T66,T68 |
1 | 1 | Covered | T66,T121,T127 |
LINE 97
EXPRESSION (dst_level_q ^ dst_level)
-----1----- ----2----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T65,T66,T68 |
1 | 0 | Covered | T66,T121,T127 |
1 | 1 | Covered | T65,T66,T68 |
Branch Coverage for Instance : tb.dut.u_reg.u_io_meas_ctrl_shadowed_hi_err_update_sync
| Line No. | Total | Covered | Percent |
Branches |
|
4 |
4 |
100.00 |
IF |
31 |
2 |
2 |
100.00 |
IF |
89 |
2 |
2 |
100.00 |
31 if (!rst_src_ni) begin
-1-
32 src_level <= 1'b0;
==>
33 end else begin
34 src_level <= src_level ^ src_pulse_i;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
89 if (!rst_dst_ni) begin
-1-
90 dst_level_q <= 1'b0;
==>
91 end else begin
92 dst_level_q <= dst_level;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
Assert Coverage for Instance : tb.dut.u_reg.u_io_meas_ctrl_shadowed_hi_err_update_sync
Assertion Details
DstPulseCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
36655700 |
32 |
0 |
0 |
T65 |
9736 |
1 |
0 |
0 |
T66 |
4325 |
3 |
0 |
0 |
T68 |
4752 |
1 |
0 |
0 |
T70 |
9623 |
2 |
0 |
0 |
T72 |
4502 |
1 |
0 |
0 |
T121 |
8739 |
3 |
0 |
0 |
T123 |
7334 |
1 |
0 |
0 |
T126 |
7085 |
1 |
0 |
0 |
T127 |
13271 |
4 |
0 |
0 |
T128 |
6100 |
1 |
0 |
0 |
SrcPulseCheck_M
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
79169317 |
32 |
0 |
0 |
T65 |
9736 |
1 |
0 |
0 |
T66 |
4151 |
3 |
0 |
0 |
T68 |
9505 |
1 |
0 |
0 |
T70 |
9330 |
2 |
0 |
0 |
T72 |
8643 |
1 |
0 |
0 |
T121 |
8739 |
3 |
0 |
0 |
T123 |
27082 |
1 |
0 |
0 |
T126 |
6939 |
1 |
0 |
0 |
T127 |
12738 |
4 |
0 |
0 |
T128 |
25461 |
1 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_reg.u_io_meas_ctrl_shadowed_lo_err_update_sync
| Line No. | Total | Covered | Percent |
TOTAL | | 7 | 7 | 100.00 |
ALWAYS | 31 | 3 | 3 | 100.00 |
CONT_ASSIGN | 49 | 0 | 0 | |
CONT_ASSIGN | 52 | 0 | 0 | |
ALWAYS | 55 | 0 | 0 | |
ALWAYS | 89 | 3 | 3 | 100.00 |
CONT_ASSIGN | 97 | 1 | 1 | 100.00 |
30 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin
31 1/1 if (!rst_src_ni) begin
Tests: T4 T5 T6
32 1/1 src_level <= 1'b0;
Tests: T4 T5 T6
33 end else begin
34 1/1 src_level <= src_level ^ src_pulse_i;
Tests: T4 T5 T6
35 end
36 end
37
38
39 // source active must come far enough such that the destination domain has time
40 // to create a valid pulse.
41 `ifdef INC_ASSERT
42 //VCS coverage off
43 // pragma coverage off
44
45 // source active flag tracks whether there is an ongoing "toggle" event.
46 // Until this toggle event is accepted by the destination domain (negative edge of
47 // of the pulse output), the source side cannot toggle again.
48 logic effective_rst_n;
49 unreachable assign effective_rst_n = rst_src_ni && dst_pulse_o;
50
51 logic src_active_flag_d, src_active_flag_q;
52 unreachable assign src_active_flag_d = src_pulse_i || src_active_flag_q;
53
54 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin
55 unreachable if (!effective_rst_n) begin
56 unreachable src_active_flag_q <= '0;
57 end else begin
58 unreachable src_active_flag_q <= src_active_flag_d;
59 end
60 end
61
62 //VCS coverage on
63 // pragma coverage on
64
65 `ASSERT(SrcPulseCheck_M, src_pulse_i |-> !src_active_flag_q, clk_src_i, !rst_src_ni)
66 `endif
67
68 //////////////////////////////////////////////////////////
69 // synchronize level signal to destination clock domain //
70 //////////////////////////////////////////////////////////
71 logic dst_level;
72
73 prim_flop_2sync #(.Width(1)) prim_flop_2sync (
74 // source clock domain
75 .d_i (src_level),
76 // destination clock domain
77 .clk_i (clk_dst_i),
78 .rst_ni (rst_dst_ni),
79 .q_o (dst_level)
80 );
81
82 ////////////////////////////////////////
83 // convert level signal back to pulse //
84 ////////////////////////////////////////
85 logic dst_level_q;
86
87 // delay dst_level by 1 cycle
88 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin
89 1/1 if (!rst_dst_ni) begin
Tests: T4 T5 T6
90 1/1 dst_level_q <= 1'b0;
Tests: T4 T5 T6
91 end else begin
92 1/1 dst_level_q <= dst_level;
Tests: T4 T5 T6
93 end
94 end
95
96 // edge detection
97 1/1 assign dst_pulse_o = dst_level_q ^ dst_level;
Tests: T65 T66 T68
Cond Coverage for Instance : tb.dut.u_reg.u_io_meas_ctrl_shadowed_lo_err_update_sync
| Total | Covered | Percent |
Conditions | 8 | 8 | 100.00 |
Logical | 8 | 8 | 100.00 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 34
EXPRESSION (src_level ^ src_pulse_i)
----1---- -----2-----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T65,T66,T68 |
1 | 0 | Covered | T65,T66,T68 |
1 | 1 | Covered | T66,T121,T127 |
LINE 97
EXPRESSION (dst_level_q ^ dst_level)
-----1----- ----2----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T65,T66,T68 |
1 | 0 | Covered | T66,T121,T127 |
1 | 1 | Covered | T65,T66,T68 |
Branch Coverage for Instance : tb.dut.u_reg.u_io_meas_ctrl_shadowed_lo_err_update_sync
| Line No. | Total | Covered | Percent |
Branches |
|
4 |
4 |
100.00 |
IF |
31 |
2 |
2 |
100.00 |
IF |
89 |
2 |
2 |
100.00 |
31 if (!rst_src_ni) begin
-1-
32 src_level <= 1'b0;
==>
33 end else begin
34 src_level <= src_level ^ src_pulse_i;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
89 if (!rst_dst_ni) begin
-1-
90 dst_level_q <= 1'b0;
==>
91 end else begin
92 dst_level_q <= dst_level;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
Assert Coverage for Instance : tb.dut.u_reg.u_io_meas_ctrl_shadowed_lo_err_update_sync
Assertion Details
DstPulseCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
36655700 |
32 |
0 |
0 |
T65 |
9736 |
1 |
0 |
0 |
T66 |
4325 |
2 |
0 |
0 |
T68 |
4752 |
2 |
0 |
0 |
T70 |
9623 |
3 |
0 |
0 |
T72 |
4502 |
1 |
0 |
0 |
T121 |
8739 |
4 |
0 |
0 |
T123 |
7334 |
1 |
0 |
0 |
T125 |
12056 |
1 |
0 |
0 |
T126 |
7085 |
1 |
0 |
0 |
T127 |
13271 |
4 |
0 |
0 |
SrcPulseCheck_M
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
79169317 |
32 |
0 |
0 |
T65 |
9736 |
1 |
0 |
0 |
T66 |
4151 |
2 |
0 |
0 |
T68 |
9505 |
2 |
0 |
0 |
T70 |
9330 |
3 |
0 |
0 |
T72 |
8643 |
1 |
0 |
0 |
T121 |
8739 |
4 |
0 |
0 |
T123 |
27082 |
1 |
0 |
0 |
T125 |
12858 |
1 |
0 |
0 |
T126 |
6939 |
1 |
0 |
0 |
T127 |
12738 |
4 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_reg.u_io_div2_meas_ctrl_shadowed_hi_err_update_sync
| Line No. | Total | Covered | Percent |
TOTAL | | 7 | 7 | 100.00 |
ALWAYS | 31 | 3 | 3 | 100.00 |
CONT_ASSIGN | 49 | 0 | 0 | |
CONT_ASSIGN | 52 | 0 | 0 | |
ALWAYS | 55 | 0 | 0 | |
ALWAYS | 89 | 3 | 3 | 100.00 |
CONT_ASSIGN | 97 | 1 | 1 | 100.00 |
30 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin
31 1/1 if (!rst_src_ni) begin
Tests: T4 T5 T6
32 1/1 src_level <= 1'b0;
Tests: T4 T5 T6
33 end else begin
34 1/1 src_level <= src_level ^ src_pulse_i;
Tests: T4 T5 T6
35 end
36 end
37
38
39 // source active must come far enough such that the destination domain has time
40 // to create a valid pulse.
41 `ifdef INC_ASSERT
42 //VCS coverage off
43 // pragma coverage off
44
45 // source active flag tracks whether there is an ongoing "toggle" event.
46 // Until this toggle event is accepted by the destination domain (negative edge of
47 // of the pulse output), the source side cannot toggle again.
48 logic effective_rst_n;
49 unreachable assign effective_rst_n = rst_src_ni && dst_pulse_o;
50
51 logic src_active_flag_d, src_active_flag_q;
52 unreachable assign src_active_flag_d = src_pulse_i || src_active_flag_q;
53
54 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin
55 unreachable if (!effective_rst_n) begin
56 unreachable src_active_flag_q <= '0;
57 end else begin
58 unreachable src_active_flag_q <= src_active_flag_d;
59 end
60 end
61
62 //VCS coverage on
63 // pragma coverage on
64
65 `ASSERT(SrcPulseCheck_M, src_pulse_i |-> !src_active_flag_q, clk_src_i, !rst_src_ni)
66 `endif
67
68 //////////////////////////////////////////////////////////
69 // synchronize level signal to destination clock domain //
70 //////////////////////////////////////////////////////////
71 logic dst_level;
72
73 prim_flop_2sync #(.Width(1)) prim_flop_2sync (
74 // source clock domain
75 .d_i (src_level),
76 // destination clock domain
77 .clk_i (clk_dst_i),
78 .rst_ni (rst_dst_ni),
79 .q_o (dst_level)
80 );
81
82 ////////////////////////////////////////
83 // convert level signal back to pulse //
84 ////////////////////////////////////////
85 logic dst_level_q;
86
87 // delay dst_level by 1 cycle
88 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin
89 1/1 if (!rst_dst_ni) begin
Tests: T4 T5 T6
90 1/1 dst_level_q <= 1'b0;
Tests: T4 T5 T6
91 end else begin
92 1/1 dst_level_q <= dst_level;
Tests: T4 T5 T6
93 end
94 end
95
96 // edge detection
97 1/1 assign dst_pulse_o = dst_level_q ^ dst_level;
Tests: T65 T66 T69
Cond Coverage for Instance : tb.dut.u_reg.u_io_div2_meas_ctrl_shadowed_hi_err_update_sync
| Total | Covered | Percent |
Conditions | 8 | 8 | 100.00 |
Logical | 8 | 8 | 100.00 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 34
EXPRESSION (src_level ^ src_pulse_i)
----1---- -----2-----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T65,T66,T69 |
1 | 0 | Covered | T65,T66,T69 |
1 | 1 | Covered | T66,T121,T129 |
LINE 97
EXPRESSION (dst_level_q ^ dst_level)
-----1----- ----2----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T65,T66,T69 |
1 | 0 | Covered | T66,T121,T129 |
1 | 1 | Covered | T65,T66,T69 |
Branch Coverage for Instance : tb.dut.u_reg.u_io_div2_meas_ctrl_shadowed_hi_err_update_sync
| Line No. | Total | Covered | Percent |
Branches |
|
4 |
4 |
100.00 |
IF |
31 |
2 |
2 |
100.00 |
IF |
89 |
2 |
2 |
100.00 |
31 if (!rst_src_ni) begin
-1-
32 src_level <= 1'b0;
==>
33 end else begin
34 src_level <= src_level ^ src_pulse_i;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
89 if (!rst_dst_ni) begin
-1-
90 dst_level_q <= 1'b0;
==>
91 end else begin
92 dst_level_q <= dst_level;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
Assert Coverage for Instance : tb.dut.u_reg.u_io_div2_meas_ctrl_shadowed_hi_err_update_sync
Assertion Details
DstPulseCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
36655700 |
35 |
0 |
0 |
T65 |
9736 |
2 |
0 |
0 |
T66 |
4325 |
3 |
0 |
0 |
T69 |
2933 |
1 |
0 |
0 |
T70 |
9623 |
1 |
0 |
0 |
T121 |
8739 |
5 |
0 |
0 |
T122 |
3552 |
2 |
0 |
0 |
T123 |
7334 |
2 |
0 |
0 |
T124 |
4748 |
1 |
0 |
0 |
T125 |
12056 |
1 |
0 |
0 |
T127 |
13271 |
2 |
0 |
0 |
SrcPulseCheck_M
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
38590100 |
35 |
0 |
0 |
T65 |
4054 |
2 |
0 |
0 |
T66 |
1784 |
3 |
0 |
0 |
T69 |
5963 |
1 |
0 |
0 |
T70 |
3829 |
1 |
0 |
0 |
T121 |
3709 |
5 |
0 |
0 |
T122 |
18586 |
2 |
0 |
0 |
T123 |
12818 |
2 |
0 |
0 |
T124 |
9386 |
1 |
0 |
0 |
T125 |
5575 |
1 |
0 |
0 |
T127 |
5411 |
2 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_reg.u_io_div2_meas_ctrl_shadowed_lo_err_update_sync
| Line No. | Total | Covered | Percent |
TOTAL | | 7 | 7 | 100.00 |
ALWAYS | 31 | 3 | 3 | 100.00 |
CONT_ASSIGN | 49 | 0 | 0 | |
CONT_ASSIGN | 52 | 0 | 0 | |
ALWAYS | 55 | 0 | 0 | |
ALWAYS | 89 | 3 | 3 | 100.00 |
CONT_ASSIGN | 97 | 1 | 1 | 100.00 |
30 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin
31 1/1 if (!rst_src_ni) begin
Tests: T4 T5 T6
32 1/1 src_level <= 1'b0;
Tests: T4 T5 T6
33 end else begin
34 1/1 src_level <= src_level ^ src_pulse_i;
Tests: T4 T5 T6
35 end
36 end
37
38
39 // source active must come far enough such that the destination domain has time
40 // to create a valid pulse.
41 `ifdef INC_ASSERT
42 //VCS coverage off
43 // pragma coverage off
44
45 // source active flag tracks whether there is an ongoing "toggle" event.
46 // Until this toggle event is accepted by the destination domain (negative edge of
47 // of the pulse output), the source side cannot toggle again.
48 logic effective_rst_n;
49 unreachable assign effective_rst_n = rst_src_ni && dst_pulse_o;
50
51 logic src_active_flag_d, src_active_flag_q;
52 unreachable assign src_active_flag_d = src_pulse_i || src_active_flag_q;
53
54 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin
55 unreachable if (!effective_rst_n) begin
56 unreachable src_active_flag_q <= '0;
57 end else begin
58 unreachable src_active_flag_q <= src_active_flag_d;
59 end
60 end
61
62 //VCS coverage on
63 // pragma coverage on
64
65 `ASSERT(SrcPulseCheck_M, src_pulse_i |-> !src_active_flag_q, clk_src_i, !rst_src_ni)
66 `endif
67
68 //////////////////////////////////////////////////////////
69 // synchronize level signal to destination clock domain //
70 //////////////////////////////////////////////////////////
71 logic dst_level;
72
73 prim_flop_2sync #(.Width(1)) prim_flop_2sync (
74 // source clock domain
75 .d_i (src_level),
76 // destination clock domain
77 .clk_i (clk_dst_i),
78 .rst_ni (rst_dst_ni),
79 .q_o (dst_level)
80 );
81
82 ////////////////////////////////////////
83 // convert level signal back to pulse //
84 ////////////////////////////////////////
85 logic dst_level_q;
86
87 // delay dst_level by 1 cycle
88 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin
89 1/1 if (!rst_dst_ni) begin
Tests: T4 T5 T6
90 1/1 dst_level_q <= 1'b0;
Tests: T4 T5 T6
91 end else begin
92 1/1 dst_level_q <= dst_level;
Tests: T4 T5 T6
93 end
94 end
95
96 // edge detection
97 1/1 assign dst_pulse_o = dst_level_q ^ dst_level;
Tests: T65 T66 T69
Cond Coverage for Instance : tb.dut.u_reg.u_io_div2_meas_ctrl_shadowed_lo_err_update_sync
| Total | Covered | Percent |
Conditions | 8 | 8 | 100.00 |
Logical | 8 | 8 | 100.00 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 34
EXPRESSION (src_level ^ src_pulse_i)
----1---- -----2-----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T65,T66,T69 |
1 | 0 | Covered | T65,T66,T69 |
1 | 1 | Covered | T66,T69,T123 |
LINE 97
EXPRESSION (dst_level_q ^ dst_level)
-----1----- ----2----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T65,T66,T69 |
1 | 0 | Covered | T66,T69,T123 |
1 | 1 | Covered | T65,T66,T69 |
Branch Coverage for Instance : tb.dut.u_reg.u_io_div2_meas_ctrl_shadowed_lo_err_update_sync
| Line No. | Total | Covered | Percent |
Branches |
|
4 |
4 |
100.00 |
IF |
31 |
2 |
2 |
100.00 |
IF |
89 |
2 |
2 |
100.00 |
31 if (!rst_src_ni) begin
-1-
32 src_level <= 1'b0;
==>
33 end else begin
34 src_level <= src_level ^ src_pulse_i;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
89 if (!rst_dst_ni) begin
-1-
90 dst_level_q <= 1'b0;
==>
91 end else begin
92 dst_level_q <= dst_level;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
Assert Coverage for Instance : tb.dut.u_reg.u_io_div2_meas_ctrl_shadowed_lo_err_update_sync
Assertion Details
DstPulseCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
36655700 |
33 |
0 |
0 |
T65 |
9736 |
1 |
0 |
0 |
T66 |
4325 |
3 |
0 |
0 |
T69 |
2933 |
2 |
0 |
0 |
T70 |
9623 |
2 |
0 |
0 |
T121 |
8739 |
2 |
0 |
0 |
T122 |
3552 |
1 |
0 |
0 |
T123 |
7334 |
3 |
0 |
0 |
T124 |
4748 |
1 |
0 |
0 |
T126 |
7085 |
2 |
0 |
0 |
T127 |
13271 |
1 |
0 |
0 |
SrcPulseCheck_M
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
38590100 |
33 |
0 |
0 |
T65 |
4054 |
1 |
0 |
0 |
T66 |
1784 |
3 |
0 |
0 |
T69 |
5963 |
2 |
0 |
0 |
T70 |
3829 |
2 |
0 |
0 |
T121 |
3709 |
2 |
0 |
0 |
T122 |
18586 |
1 |
0 |
0 |
T123 |
12818 |
3 |
0 |
0 |
T124 |
9386 |
1 |
0 |
0 |
T126 |
3061 |
2 |
0 |
0 |
T127 |
5411 |
1 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_reg.u_io_div4_meas_ctrl_shadowed_hi_err_update_sync
| Line No. | Total | Covered | Percent |
TOTAL | | 7 | 7 | 100.00 |
ALWAYS | 31 | 3 | 3 | 100.00 |
CONT_ASSIGN | 49 | 0 | 0 | |
CONT_ASSIGN | 52 | 0 | 0 | |
ALWAYS | 55 | 0 | 0 | |
ALWAYS | 89 | 3 | 3 | 100.00 |
CONT_ASSIGN | 97 | 1 | 1 | 100.00 |
30 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin
31 1/1 if (!rst_src_ni) begin
Tests: T4 T5 T6
32 1/1 src_level <= 1'b0;
Tests: T4 T5 T6
33 end else begin
34 1/1 src_level <= src_level ^ src_pulse_i;
Tests: T4 T5 T6
35 end
36 end
37
38
39 // source active must come far enough such that the destination domain has time
40 // to create a valid pulse.
41 `ifdef INC_ASSERT
42 //VCS coverage off
43 // pragma coverage off
44
45 // source active flag tracks whether there is an ongoing "toggle" event.
46 // Until this toggle event is accepted by the destination domain (negative edge of
47 // of the pulse output), the source side cannot toggle again.
48 logic effective_rst_n;
49 unreachable assign effective_rst_n = rst_src_ni && dst_pulse_o;
50
51 logic src_active_flag_d, src_active_flag_q;
52 unreachable assign src_active_flag_d = src_pulse_i || src_active_flag_q;
53
54 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin
55 unreachable if (!effective_rst_n) begin
56 unreachable src_active_flag_q <= '0;
57 end else begin
58 unreachable src_active_flag_q <= src_active_flag_d;
59 end
60 end
61
62 //VCS coverage on
63 // pragma coverage on
64
65 `ASSERT(SrcPulseCheck_M, src_pulse_i |-> !src_active_flag_q, clk_src_i, !rst_src_ni)
66 `endif
67
68 //////////////////////////////////////////////////////////
69 // synchronize level signal to destination clock domain //
70 //////////////////////////////////////////////////////////
71 logic dst_level;
72
73 prim_flop_2sync #(.Width(1)) prim_flop_2sync (
74 // source clock domain
75 .d_i (src_level),
76 // destination clock domain
77 .clk_i (clk_dst_i),
78 .rst_ni (rst_dst_ni),
79 .q_o (dst_level)
80 );
81
82 ////////////////////////////////////////
83 // convert level signal back to pulse //
84 ////////////////////////////////////////
85 logic dst_level_q;
86
87 // delay dst_level by 1 cycle
88 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin
89 1/1 if (!rst_dst_ni) begin
Tests: T4 T5 T6
90 1/1 dst_level_q <= 1'b0;
Tests: T4 T5 T6
91 end else begin
92 1/1 dst_level_q <= dst_level;
Tests: T4 T5 T6
93 end
94 end
95
96 // edge detection
97 1/1 assign dst_pulse_o = dst_level_q ^ dst_level;
Tests: T64 T66 T68
Cond Coverage for Instance : tb.dut.u_reg.u_io_div4_meas_ctrl_shadowed_hi_err_update_sync
| Total | Covered | Percent |
Conditions | 8 | 8 | 100.00 |
Logical | 8 | 8 | 100.00 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 34
EXPRESSION (src_level ^ src_pulse_i)
----1---- -----2-----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T64,T66,T68 |
1 | 0 | Covered | T64,T66,T68 |
1 | 1 | Covered | T123,T125,T130 |
LINE 97
EXPRESSION (dst_level_q ^ dst_level)
-----1----- ----2----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T64,T66,T68 |
1 | 0 | Covered | T123,T125,T130 |
1 | 1 | Covered | T64,T66,T68 |
Branch Coverage for Instance : tb.dut.u_reg.u_io_div4_meas_ctrl_shadowed_hi_err_update_sync
| Line No. | Total | Covered | Percent |
Branches |
|
4 |
4 |
100.00 |
IF |
31 |
2 |
2 |
100.00 |
IF |
89 |
2 |
2 |
100.00 |
31 if (!rst_src_ni) begin
-1-
32 src_level <= 1'b0;
==>
33 end else begin
34 src_level <= src_level ^ src_pulse_i;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
89 if (!rst_dst_ni) begin
-1-
90 dst_level_q <= 1'b0;
==>
91 end else begin
92 dst_level_q <= dst_level;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
Assert Coverage for Instance : tb.dut.u_reg.u_io_div4_meas_ctrl_shadowed_hi_err_update_sync
Assertion Details
DstPulseCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
36655700 |
33 |
0 |
0 |
T64 |
6690 |
1 |
0 |
0 |
T66 |
4325 |
1 |
0 |
0 |
T68 |
4752 |
2 |
0 |
0 |
T70 |
9623 |
1 |
0 |
0 |
T71 |
5740 |
1 |
0 |
0 |
T72 |
4502 |
1 |
0 |
0 |
T121 |
8739 |
1 |
0 |
0 |
T123 |
7334 |
3 |
0 |
0 |
T124 |
4748 |
1 |
0 |
0 |
T131 |
8226 |
1 |
0 |
0 |
SrcPulseCheck_M
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
19294625 |
33 |
0 |
0 |
T64 |
1435 |
1 |
0 |
0 |
T66 |
893 |
1 |
0 |
0 |
T68 |
2135 |
2 |
0 |
0 |
T70 |
1913 |
1 |
0 |
0 |
T71 |
1229 |
1 |
0 |
0 |
T72 |
1921 |
1 |
0 |
0 |
T121 |
1855 |
1 |
0 |
0 |
T123 |
6412 |
3 |
0 |
0 |
T124 |
4693 |
1 |
0 |
0 |
T131 |
1845 |
1 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_reg.u_io_div4_meas_ctrl_shadowed_lo_err_update_sync
| Line No. | Total | Covered | Percent |
TOTAL | | 7 | 7 | 100.00 |
ALWAYS | 31 | 3 | 3 | 100.00 |
CONT_ASSIGN | 49 | 0 | 0 | |
CONT_ASSIGN | 52 | 0 | 0 | |
ALWAYS | 55 | 0 | 0 | |
ALWAYS | 89 | 3 | 3 | 100.00 |
CONT_ASSIGN | 97 | 1 | 1 | 100.00 |
30 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin
31 1/1 if (!rst_src_ni) begin
Tests: T4 T5 T6
32 1/1 src_level <= 1'b0;
Tests: T4 T5 T6
33 end else begin
34 1/1 src_level <= src_level ^ src_pulse_i;
Tests: T4 T5 T6
35 end
36 end
37
38
39 // source active must come far enough such that the destination domain has time
40 // to create a valid pulse.
41 `ifdef INC_ASSERT
42 //VCS coverage off
43 // pragma coverage off
44
45 // source active flag tracks whether there is an ongoing "toggle" event.
46 // Until this toggle event is accepted by the destination domain (negative edge of
47 // of the pulse output), the source side cannot toggle again.
48 logic effective_rst_n;
49 unreachable assign effective_rst_n = rst_src_ni && dst_pulse_o;
50
51 logic src_active_flag_d, src_active_flag_q;
52 unreachable assign src_active_flag_d = src_pulse_i || src_active_flag_q;
53
54 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin
55 unreachable if (!effective_rst_n) begin
56 unreachable src_active_flag_q <= '0;
57 end else begin
58 unreachable src_active_flag_q <= src_active_flag_d;
59 end
60 end
61
62 //VCS coverage on
63 // pragma coverage on
64
65 `ASSERT(SrcPulseCheck_M, src_pulse_i |-> !src_active_flag_q, clk_src_i, !rst_src_ni)
66 `endif
67
68 //////////////////////////////////////////////////////////
69 // synchronize level signal to destination clock domain //
70 //////////////////////////////////////////////////////////
71 logic dst_level;
72
73 prim_flop_2sync #(.Width(1)) prim_flop_2sync (
74 // source clock domain
75 .d_i (src_level),
76 // destination clock domain
77 .clk_i (clk_dst_i),
78 .rst_ni (rst_dst_ni),
79 .q_o (dst_level)
80 );
81
82 ////////////////////////////////////////
83 // convert level signal back to pulse //
84 ////////////////////////////////////////
85 logic dst_level_q;
86
87 // delay dst_level by 1 cycle
88 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin
89 1/1 if (!rst_dst_ni) begin
Tests: T4 T5 T6
90 1/1 dst_level_q <= 1'b0;
Tests: T4 T5 T6
91 end else begin
92 1/1 dst_level_q <= dst_level;
Tests: T4 T5 T6
93 end
94 end
95
96 // edge detection
97 1/1 assign dst_pulse_o = dst_level_q ^ dst_level;
Tests: T64 T66 T68
Cond Coverage for Instance : tb.dut.u_reg.u_io_div4_meas_ctrl_shadowed_lo_err_update_sync
| Total | Covered | Percent |
Conditions | 8 | 8 | 100.00 |
Logical | 8 | 8 | 100.00 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 34
EXPRESSION (src_level ^ src_pulse_i)
----1---- -----2-----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T64,T66,T68 |
1 | 0 | Covered | T64,T66,T68 |
1 | 1 | Covered | T70,T125,T130 |
LINE 97
EXPRESSION (dst_level_q ^ dst_level)
-----1----- ----2----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T64,T66,T68 |
1 | 0 | Covered | T70,T125,T130 |
1 | 1 | Covered | T64,T66,T68 |
Branch Coverage for Instance : tb.dut.u_reg.u_io_div4_meas_ctrl_shadowed_lo_err_update_sync
| Line No. | Total | Covered | Percent |
Branches |
|
4 |
4 |
100.00 |
IF |
31 |
2 |
2 |
100.00 |
IF |
89 |
2 |
2 |
100.00 |
31 if (!rst_src_ni) begin
-1-
32 src_level <= 1'b0;
==>
33 end else begin
34 src_level <= src_level ^ src_pulse_i;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
89 if (!rst_dst_ni) begin
-1-
90 dst_level_q <= 1'b0;
==>
91 end else begin
92 dst_level_q <= dst_level;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
Assert Coverage for Instance : tb.dut.u_reg.u_io_div4_meas_ctrl_shadowed_lo_err_update_sync
Assertion Details
DstPulseCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
36655700 |
36 |
0 |
0 |
T64 |
6690 |
1 |
0 |
0 |
T66 |
4325 |
1 |
0 |
0 |
T68 |
4752 |
3 |
0 |
0 |
T70 |
9623 |
2 |
0 |
0 |
T71 |
5740 |
1 |
0 |
0 |
T72 |
4502 |
1 |
0 |
0 |
T121 |
8739 |
1 |
0 |
0 |
T123 |
7334 |
2 |
0 |
0 |
T125 |
12056 |
2 |
0 |
0 |
T131 |
8226 |
1 |
0 |
0 |
SrcPulseCheck_M
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
19294625 |
36 |
0 |
0 |
T64 |
1435 |
1 |
0 |
0 |
T66 |
893 |
1 |
0 |
0 |
T68 |
2135 |
3 |
0 |
0 |
T70 |
1913 |
2 |
0 |
0 |
T71 |
1229 |
1 |
0 |
0 |
T72 |
1921 |
1 |
0 |
0 |
T121 |
1855 |
1 |
0 |
0 |
T123 |
6412 |
2 |
0 |
0 |
T125 |
2788 |
2 |
0 |
0 |
T131 |
1845 |
1 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_reg.u_main_meas_ctrl_shadowed_hi_err_update_sync
| Line No. | Total | Covered | Percent |
TOTAL | | 7 | 7 | 100.00 |
ALWAYS | 31 | 3 | 3 | 100.00 |
CONT_ASSIGN | 49 | 0 | 0 | |
CONT_ASSIGN | 52 | 0 | 0 | |
ALWAYS | 55 | 0 | 0 | |
ALWAYS | 89 | 3 | 3 | 100.00 |
CONT_ASSIGN | 97 | 1 | 1 | 100.00 |
30 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin
31 1/1 if (!rst_src_ni) begin
Tests: T4 T5 T6
32 1/1 src_level <= 1'b0;
Tests: T4 T5 T6
33 end else begin
34 1/1 src_level <= src_level ^ src_pulse_i;
Tests: T4 T5 T6
35 end
36 end
37
38
39 // source active must come far enough such that the destination domain has time
40 // to create a valid pulse.
41 `ifdef INC_ASSERT
42 //VCS coverage off
43 // pragma coverage off
44
45 // source active flag tracks whether there is an ongoing "toggle" event.
46 // Until this toggle event is accepted by the destination domain (negative edge of
47 // of the pulse output), the source side cannot toggle again.
48 logic effective_rst_n;
49 unreachable assign effective_rst_n = rst_src_ni && dst_pulse_o;
50
51 logic src_active_flag_d, src_active_flag_q;
52 unreachable assign src_active_flag_d = src_pulse_i || src_active_flag_q;
53
54 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin
55 unreachable if (!effective_rst_n) begin
56 unreachable src_active_flag_q <= '0;
57 end else begin
58 unreachable src_active_flag_q <= src_active_flag_d;
59 end
60 end
61
62 //VCS coverage on
63 // pragma coverage on
64
65 `ASSERT(SrcPulseCheck_M, src_pulse_i |-> !src_active_flag_q, clk_src_i, !rst_src_ni)
66 `endif
67
68 //////////////////////////////////////////////////////////
69 // synchronize level signal to destination clock domain //
70 //////////////////////////////////////////////////////////
71 logic dst_level;
72
73 prim_flop_2sync #(.Width(1)) prim_flop_2sync (
74 // source clock domain
75 .d_i (src_level),
76 // destination clock domain
77 .clk_i (clk_dst_i),
78 .rst_ni (rst_dst_ni),
79 .q_o (dst_level)
80 );
81
82 ////////////////////////////////////////
83 // convert level signal back to pulse //
84 ////////////////////////////////////////
85 logic dst_level_q;
86
87 // delay dst_level by 1 cycle
88 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin
89 1/1 if (!rst_dst_ni) begin
Tests: T4 T5 T6
90 1/1 dst_level_q <= 1'b0;
Tests: T4 T5 T6
91 end else begin
92 1/1 dst_level_q <= dst_level;
Tests: T4 T5 T6
93 end
94 end
95
96 // edge detection
97 1/1 assign dst_pulse_o = dst_level_q ^ dst_level;
Tests: T64 T65 T67
Cond Coverage for Instance : tb.dut.u_reg.u_main_meas_ctrl_shadowed_hi_err_update_sync
| Total | Covered | Percent |
Conditions | 8 | 8 | 100.00 |
Logical | 8 | 8 | 100.00 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 34
EXPRESSION (src_level ^ src_pulse_i)
----1---- -----2-----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T64,T65,T67 |
1 | 0 | Covered | T64,T65,T67 |
1 | 1 | Covered | T122,T125,T132 |
LINE 97
EXPRESSION (dst_level_q ^ dst_level)
-----1----- ----2----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T64,T65,T67 |
1 | 0 | Covered | T122,T125,T132 |
1 | 1 | Covered | T64,T65,T67 |
Branch Coverage for Instance : tb.dut.u_reg.u_main_meas_ctrl_shadowed_hi_err_update_sync
| Line No. | Total | Covered | Percent |
Branches |
|
4 |
4 |
100.00 |
IF |
31 |
2 |
2 |
100.00 |
IF |
89 |
2 |
2 |
100.00 |
31 if (!rst_src_ni) begin
-1-
32 src_level <= 1'b0;
==>
33 end else begin
34 src_level <= src_level ^ src_pulse_i;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
89 if (!rst_dst_ni) begin
-1-
90 dst_level_q <= 1'b0;
==>
91 end else begin
92 dst_level_q <= dst_level;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
Assert Coverage for Instance : tb.dut.u_reg.u_main_meas_ctrl_shadowed_hi_err_update_sync
Assertion Details
DstPulseCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
36655700 |
28 |
0 |
0 |
T64 |
6690 |
1 |
0 |
0 |
T65 |
9736 |
1 |
0 |
0 |
T67 |
4201 |
1 |
0 |
0 |
T68 |
4752 |
2 |
0 |
0 |
T121 |
8739 |
1 |
0 |
0 |
T122 |
3552 |
3 |
0 |
0 |
T124 |
4748 |
1 |
0 |
0 |
T125 |
12056 |
3 |
0 |
0 |
T126 |
7085 |
2 |
0 |
0 |
T133 |
12022 |
1 |
0 |
0 |
SrcPulseCheck_M
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
87383546 |
28 |
0 |
0 |
T64 |
6690 |
1 |
0 |
0 |
T65 |
10143 |
1 |
0 |
0 |
T67 |
8753 |
1 |
0 |
0 |
T68 |
9902 |
2 |
0 |
0 |
T121 |
9103 |
1 |
0 |
0 |
T122 |
39470 |
3 |
0 |
0 |
T124 |
20645 |
1 |
0 |
0 |
T125 |
13395 |
3 |
0 |
0 |
T126 |
7228 |
2 |
0 |
0 |
T133 |
46240 |
1 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_reg.u_main_meas_ctrl_shadowed_lo_err_update_sync
| Line No. | Total | Covered | Percent |
TOTAL | | 7 | 7 | 100.00 |
ALWAYS | 31 | 3 | 3 | 100.00 |
CONT_ASSIGN | 49 | 0 | 0 | |
CONT_ASSIGN | 52 | 0 | 0 | |
ALWAYS | 55 | 0 | 0 | |
ALWAYS | 89 | 3 | 3 | 100.00 |
CONT_ASSIGN | 97 | 1 | 1 | 100.00 |
30 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin
31 1/1 if (!rst_src_ni) begin
Tests: T4 T5 T6
32 1/1 src_level <= 1'b0;
Tests: T4 T5 T6
33 end else begin
34 1/1 src_level <= src_level ^ src_pulse_i;
Tests: T4 T5 T6
35 end
36 end
37
38
39 // source active must come far enough such that the destination domain has time
40 // to create a valid pulse.
41 `ifdef INC_ASSERT
42 //VCS coverage off
43 // pragma coverage off
44
45 // source active flag tracks whether there is an ongoing "toggle" event.
46 // Until this toggle event is accepted by the destination domain (negative edge of
47 // of the pulse output), the source side cannot toggle again.
48 logic effective_rst_n;
49 unreachable assign effective_rst_n = rst_src_ni && dst_pulse_o;
50
51 logic src_active_flag_d, src_active_flag_q;
52 unreachable assign src_active_flag_d = src_pulse_i || src_active_flag_q;
53
54 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin
55 unreachable if (!effective_rst_n) begin
56 unreachable src_active_flag_q <= '0;
57 end else begin
58 unreachable src_active_flag_q <= src_active_flag_d;
59 end
60 end
61
62 //VCS coverage on
63 // pragma coverage on
64
65 `ASSERT(SrcPulseCheck_M, src_pulse_i |-> !src_active_flag_q, clk_src_i, !rst_src_ni)
66 `endif
67
68 //////////////////////////////////////////////////////////
69 // synchronize level signal to destination clock domain //
70 //////////////////////////////////////////////////////////
71 logic dst_level;
72
73 prim_flop_2sync #(.Width(1)) prim_flop_2sync (
74 // source clock domain
75 .d_i (src_level),
76 // destination clock domain
77 .clk_i (clk_dst_i),
78 .rst_ni (rst_dst_ni),
79 .q_o (dst_level)
80 );
81
82 ////////////////////////////////////////
83 // convert level signal back to pulse //
84 ////////////////////////////////////////
85 logic dst_level_q;
86
87 // delay dst_level by 1 cycle
88 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin
89 1/1 if (!rst_dst_ni) begin
Tests: T4 T5 T6
90 1/1 dst_level_q <= 1'b0;
Tests: T4 T5 T6
91 end else begin
92 1/1 dst_level_q <= dst_level;
Tests: T4 T5 T6
93 end
94 end
95
96 // edge detection
97 1/1 assign dst_pulse_o = dst_level_q ^ dst_level;
Tests: T65 T67 T68
Cond Coverage for Instance : tb.dut.u_reg.u_main_meas_ctrl_shadowed_lo_err_update_sync
| Total | Covered | Percent |
Conditions | 8 | 8 | 100.00 |
Logical | 8 | 8 | 100.00 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 34
EXPRESSION (src_level ^ src_pulse_i)
----1---- -----2-----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T65,T67,T68 |
1 | 0 | Covered | T65,T67,T68 |
1 | 1 | Covered | T122,T125,T132 |
LINE 97
EXPRESSION (dst_level_q ^ dst_level)
-----1----- ----2----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T65,T67,T68 |
1 | 0 | Covered | T122,T125,T132 |
1 | 1 | Covered | T65,T67,T68 |
Branch Coverage for Instance : tb.dut.u_reg.u_main_meas_ctrl_shadowed_lo_err_update_sync
| Line No. | Total | Covered | Percent |
Branches |
|
4 |
4 |
100.00 |
IF |
31 |
2 |
2 |
100.00 |
IF |
89 |
2 |
2 |
100.00 |
31 if (!rst_src_ni) begin
-1-
32 src_level <= 1'b0;
==>
33 end else begin
34 src_level <= src_level ^ src_pulse_i;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
89 if (!rst_dst_ni) begin
-1-
90 dst_level_q <= 1'b0;
==>
91 end else begin
92 dst_level_q <= dst_level;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
Assert Coverage for Instance : tb.dut.u_reg.u_main_meas_ctrl_shadowed_lo_err_update_sync
Assertion Details
DstPulseCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
36655700 |
26 |
0 |
0 |
T65 |
9736 |
1 |
0 |
0 |
T67 |
4201 |
1 |
0 |
0 |
T68 |
4752 |
1 |
0 |
0 |
T70 |
9623 |
1 |
0 |
0 |
T122 |
3552 |
3 |
0 |
0 |
T123 |
7334 |
1 |
0 |
0 |
T125 |
12056 |
4 |
0 |
0 |
T131 |
8226 |
1 |
0 |
0 |
T134 |
7080 |
1 |
0 |
0 |
T135 |
5747 |
1 |
0 |
0 |
SrcPulseCheck_M
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
87383546 |
26 |
0 |
0 |
T65 |
10143 |
1 |
0 |
0 |
T67 |
8753 |
1 |
0 |
0 |
T68 |
9902 |
1 |
0 |
0 |
T70 |
9720 |
1 |
0 |
0 |
T122 |
39470 |
3 |
0 |
0 |
T123 |
28212 |
1 |
0 |
0 |
T125 |
13395 |
4 |
0 |
0 |
T131 |
8481 |
1 |
0 |
0 |
T134 |
7080 |
1 |
0 |
0 |
T135 |
22988 |
1 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_reg.u_usb_meas_ctrl_shadowed_hi_err_update_sync
| Line No. | Total | Covered | Percent |
TOTAL | | 7 | 7 | 100.00 |
ALWAYS | 31 | 3 | 3 | 100.00 |
CONT_ASSIGN | 49 | 0 | 0 | |
CONT_ASSIGN | 52 | 0 | 0 | |
ALWAYS | 55 | 0 | 0 | |
ALWAYS | 89 | 3 | 3 | 100.00 |
CONT_ASSIGN | 97 | 1 | 1 | 100.00 |
30 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin
31 1/1 if (!rst_src_ni) begin
Tests: T4 T5 T6
32 1/1 src_level <= 1'b0;
Tests: T4 T5 T6
33 end else begin
34 1/1 src_level <= src_level ^ src_pulse_i;
Tests: T4 T5 T6
35 end
36 end
37
38
39 // source active must come far enough such that the destination domain has time
40 // to create a valid pulse.
41 `ifdef INC_ASSERT
42 //VCS coverage off
43 // pragma coverage off
44
45 // source active flag tracks whether there is an ongoing "toggle" event.
46 // Until this toggle event is accepted by the destination domain (negative edge of
47 // of the pulse output), the source side cannot toggle again.
48 logic effective_rst_n;
49 unreachable assign effective_rst_n = rst_src_ni && dst_pulse_o;
50
51 logic src_active_flag_d, src_active_flag_q;
52 unreachable assign src_active_flag_d = src_pulse_i || src_active_flag_q;
53
54 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin
55 unreachable if (!effective_rst_n) begin
56 unreachable src_active_flag_q <= '0;
57 end else begin
58 unreachable src_active_flag_q <= src_active_flag_d;
59 end
60 end
61
62 //VCS coverage on
63 // pragma coverage on
64
65 `ASSERT(SrcPulseCheck_M, src_pulse_i |-> !src_active_flag_q, clk_src_i, !rst_src_ni)
66 `endif
67
68 //////////////////////////////////////////////////////////
69 // synchronize level signal to destination clock domain //
70 //////////////////////////////////////////////////////////
71 logic dst_level;
72
73 prim_flop_2sync #(.Width(1)) prim_flop_2sync (
74 // source clock domain
75 .d_i (src_level),
76 // destination clock domain
77 .clk_i (clk_dst_i),
78 .rst_ni (rst_dst_ni),
79 .q_o (dst_level)
80 );
81
82 ////////////////////////////////////////
83 // convert level signal back to pulse //
84 ////////////////////////////////////////
85 logic dst_level_q;
86
87 // delay dst_level by 1 cycle
88 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin
89 1/1 if (!rst_dst_ni) begin
Tests: T4 T5 T6
90 1/1 dst_level_q <= 1'b0;
Tests: T4 T5 T6
91 end else begin
92 1/1 dst_level_q <= dst_level;
Tests: T4 T5 T6
93 end
94 end
95
96 // edge detection
97 1/1 assign dst_pulse_o = dst_level_q ^ dst_level;
Tests: T67 T68 T72
Cond Coverage for Instance : tb.dut.u_reg.u_usb_meas_ctrl_shadowed_hi_err_update_sync
| Total | Covered | Percent |
Conditions | 8 | 8 | 100.00 |
Logical | 8 | 8 | 100.00 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 34
EXPRESSION (src_level ^ src_pulse_i)
----1---- -----2-----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T67,T68,T72 |
1 | 0 | Covered | T67,T68,T72 |
1 | 1 | Covered | T72,T121,T127 |
LINE 97
EXPRESSION (dst_level_q ^ dst_level)
-----1----- ----2----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T67,T68,T72 |
1 | 0 | Covered | T72,T121,T127 |
1 | 1 | Covered | T67,T68,T72 |
Branch Coverage for Instance : tb.dut.u_reg.u_usb_meas_ctrl_shadowed_hi_err_update_sync
| Line No. | Total | Covered | Percent |
Branches |
|
4 |
4 |
100.00 |
IF |
31 |
2 |
2 |
100.00 |
IF |
89 |
2 |
2 |
100.00 |
31 if (!rst_src_ni) begin
-1-
32 src_level <= 1'b0;
==>
33 end else begin
34 src_level <= src_level ^ src_pulse_i;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
89 if (!rst_dst_ni) begin
-1-
90 dst_level_q <= 1'b0;
==>
91 end else begin
92 dst_level_q <= dst_level;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
Assert Coverage for Instance : tb.dut.u_reg.u_usb_meas_ctrl_shadowed_hi_err_update_sync
Assertion Details
DstPulseCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
36655700 |
32 |
0 |
0 |
T67 |
4201 |
2 |
0 |
0 |
T68 |
4752 |
2 |
0 |
0 |
T70 |
9623 |
1 |
0 |
0 |
T72 |
4502 |
2 |
0 |
0 |
T121 |
8739 |
4 |
0 |
0 |
T122 |
3552 |
1 |
0 |
0 |
T123 |
7334 |
2 |
0 |
0 |
T127 |
13271 |
3 |
0 |
0 |
T131 |
8226 |
1 |
0 |
0 |
T133 |
12022 |
1 |
0 |
0 |
SrcPulseCheck_M
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
41984687 |
32 |
0 |
0 |
T67 |
4201 |
2 |
0 |
0 |
T68 |
4752 |
2 |
0 |
0 |
T70 |
4666 |
1 |
0 |
0 |
T72 |
4322 |
2 |
0 |
0 |
T121 |
4370 |
4 |
0 |
0 |
T122 |
18946 |
1 |
0 |
0 |
T123 |
13542 |
2 |
0 |
0 |
T127 |
6369 |
3 |
0 |
0 |
T131 |
4071 |
1 |
0 |
0 |
T133 |
22195 |
1 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_reg.u_usb_meas_ctrl_shadowed_lo_err_update_sync
| Line No. | Total | Covered | Percent |
TOTAL | | 7 | 7 | 100.00 |
ALWAYS | 31 | 3 | 3 | 100.00 |
CONT_ASSIGN | 49 | 0 | 0 | |
CONT_ASSIGN | 52 | 0 | 0 | |
ALWAYS | 55 | 0 | 0 | |
ALWAYS | 89 | 3 | 3 | 100.00 |
CONT_ASSIGN | 97 | 1 | 1 | 100.00 |
30 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin
31 1/1 if (!rst_src_ni) begin
Tests: T4 T5 T6
32 1/1 src_level <= 1'b0;
Tests: T4 T5 T6
33 end else begin
34 1/1 src_level <= src_level ^ src_pulse_i;
Tests: T4 T5 T6
35 end
36 end
37
38
39 // source active must come far enough such that the destination domain has time
40 // to create a valid pulse.
41 `ifdef INC_ASSERT
42 //VCS coverage off
43 // pragma coverage off
44
45 // source active flag tracks whether there is an ongoing "toggle" event.
46 // Until this toggle event is accepted by the destination domain (negative edge of
47 // of the pulse output), the source side cannot toggle again.
48 logic effective_rst_n;
49 unreachable assign effective_rst_n = rst_src_ni && dst_pulse_o;
50
51 logic src_active_flag_d, src_active_flag_q;
52 unreachable assign src_active_flag_d = src_pulse_i || src_active_flag_q;
53
54 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin
55 unreachable if (!effective_rst_n) begin
56 unreachable src_active_flag_q <= '0;
57 end else begin
58 unreachable src_active_flag_q <= src_active_flag_d;
59 end
60 end
61
62 //VCS coverage on
63 // pragma coverage on
64
65 `ASSERT(SrcPulseCheck_M, src_pulse_i |-> !src_active_flag_q, clk_src_i, !rst_src_ni)
66 `endif
67
68 //////////////////////////////////////////////////////////
69 // synchronize level signal to destination clock domain //
70 //////////////////////////////////////////////////////////
71 logic dst_level;
72
73 prim_flop_2sync #(.Width(1)) prim_flop_2sync (
74 // source clock domain
75 .d_i (src_level),
76 // destination clock domain
77 .clk_i (clk_dst_i),
78 .rst_ni (rst_dst_ni),
79 .q_o (dst_level)
80 );
81
82 ////////////////////////////////////////
83 // convert level signal back to pulse //
84 ////////////////////////////////////////
85 logic dst_level_q;
86
87 // delay dst_level by 1 cycle
88 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin
89 1/1 if (!rst_dst_ni) begin
Tests: T4 T5 T6
90 1/1 dst_level_q <= 1'b0;
Tests: T4 T5 T6
91 end else begin
92 1/1 dst_level_q <= dst_level;
Tests: T4 T5 T6
93 end
94 end
95
96 // edge detection
97 1/1 assign dst_pulse_o = dst_level_q ^ dst_level;
Tests: T64 T66 T67
Cond Coverage for Instance : tb.dut.u_reg.u_usb_meas_ctrl_shadowed_lo_err_update_sync
| Total | Covered | Percent |
Conditions | 8 | 8 | 100.00 |
Logical | 8 | 8 | 100.00 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 34
EXPRESSION (src_level ^ src_pulse_i)
----1---- -----2-----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T64,T66,T67 |
1 | 0 | Covered | T64,T66,T67 |
1 | 1 | Covered | T72,T121,T127 |
LINE 97
EXPRESSION (dst_level_q ^ dst_level)
-----1----- ----2----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T64,T66,T67 |
1 | 0 | Covered | T72,T121,T127 |
1 | 1 | Covered | T64,T66,T67 |
Branch Coverage for Instance : tb.dut.u_reg.u_usb_meas_ctrl_shadowed_lo_err_update_sync
| Line No. | Total | Covered | Percent |
Branches |
|
4 |
4 |
100.00 |
IF |
31 |
2 |
2 |
100.00 |
IF |
89 |
2 |
2 |
100.00 |
31 if (!rst_src_ni) begin
-1-
32 src_level <= 1'b0;
==>
33 end else begin
34 src_level <= src_level ^ src_pulse_i;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
89 if (!rst_dst_ni) begin
-1-
90 dst_level_q <= 1'b0;
==>
91 end else begin
92 dst_level_q <= dst_level;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
Assert Coverage for Instance : tb.dut.u_reg.u_usb_meas_ctrl_shadowed_lo_err_update_sync
Assertion Details
DstPulseCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
36655700 |
31 |
0 |
0 |
T64 |
6690 |
1 |
0 |
0 |
T66 |
4325 |
1 |
0 |
0 |
T67 |
4201 |
2 |
0 |
0 |
T68 |
4752 |
1 |
0 |
0 |
T69 |
2933 |
1 |
0 |
0 |
T70 |
9623 |
1 |
0 |
0 |
T72 |
4502 |
2 |
0 |
0 |
T121 |
8739 |
2 |
0 |
0 |
T122 |
3552 |
2 |
0 |
0 |
T131 |
8226 |
1 |
0 |
0 |
SrcPulseCheck_M
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
41984687 |
31 |
0 |
0 |
T64 |
3211 |
1 |
0 |
0 |
T66 |
2076 |
1 |
0 |
0 |
T67 |
4201 |
2 |
0 |
0 |
T68 |
4752 |
1 |
0 |
0 |
T69 |
6399 |
1 |
0 |
0 |
T70 |
4666 |
1 |
0 |
0 |
T72 |
4322 |
2 |
0 |
0 |
T121 |
4370 |
2 |
0 |
0 |
T122 |
18946 |
2 |
0 |
0 |
T131 |
4071 |
1 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_io_meas.u_meas.u_sync_ref
| Line No. | Total | Covered | Percent |
TOTAL | | 7 | 7 | 100.00 |
ALWAYS | 31 | 3 | 3 | 100.00 |
CONT_ASSIGN | 49 | 0 | 0 | |
CONT_ASSIGN | 52 | 0 | 0 | |
ALWAYS | 55 | 0 | 0 | |
ALWAYS | 89 | 3 | 3 | 100.00 |
CONT_ASSIGN | 97 | 1 | 1 | 100.00 |
30 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin
31 1/1 if (!rst_src_ni) begin
Tests: T4 T5 T6
32 1/1 src_level <= 1'b0;
Tests: T4 T5 T6
33 end else begin
34 1/1 src_level <= src_level ^ src_pulse_i;
Tests: T4 T5 T6
35 end
36 end
37
38
39 // source active must come far enough such that the destination domain has time
40 // to create a valid pulse.
41 `ifdef INC_ASSERT
42 //VCS coverage off
43 // pragma coverage off
44
45 // source active flag tracks whether there is an ongoing "toggle" event.
46 // Until this toggle event is accepted by the destination domain (negative edge of
47 // of the pulse output), the source side cannot toggle again.
48 logic effective_rst_n;
49 unreachable assign effective_rst_n = rst_src_ni && dst_pulse_o;
50
51 logic src_active_flag_d, src_active_flag_q;
52 unreachable assign src_active_flag_d = src_pulse_i || src_active_flag_q;
53
54 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin
55 unreachable if (!effective_rst_n) begin
56 unreachable src_active_flag_q <= '0;
57 end else begin
58 unreachable src_active_flag_q <= src_active_flag_d;
59 end
60 end
61
62 //VCS coverage on
63 // pragma coverage on
64
65 `ASSERT(SrcPulseCheck_M, src_pulse_i |-> !src_active_flag_q, clk_src_i, !rst_src_ni)
66 `endif
67
68 //////////////////////////////////////////////////////////
69 // synchronize level signal to destination clock domain //
70 //////////////////////////////////////////////////////////
71 logic dst_level;
72
73 prim_flop_2sync #(.Width(1)) prim_flop_2sync (
74 // source clock domain
75 .d_i (src_level),
76 // destination clock domain
77 .clk_i (clk_dst_i),
78 .rst_ni (rst_dst_ni),
79 .q_o (dst_level)
80 );
81
82 ////////////////////////////////////////
83 // convert level signal back to pulse //
84 ////////////////////////////////////////
85 logic dst_level_q;
86
87 // delay dst_level by 1 cycle
88 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin
89 1/1 if (!rst_dst_ni) begin
Tests: T4 T5 T6
90 1/1 dst_level_q <= 1'b0;
Tests: T4 T5 T6
91 end else begin
92 1/1 dst_level_q <= dst_level;
Tests: T4 T5 T6
93 end
94 end
95
96 // edge detection
97 1/1 assign dst_pulse_o = dst_level_q ^ dst_level;
Tests: T1 T2 T38
Cond Coverage for Instance : tb.dut.u_io_meas.u_meas.u_sync_ref
| Total | Covered | Percent |
Conditions | 8 | 8 | 100.00 |
Logical | 8 | 8 | 100.00 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 34
EXPRESSION (src_level ^ src_pulse_i)
----1---- -----2-----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T38 |
1 | 0 | Covered | T1,T38,T10 |
1 | 1 | Covered | T1,T2,T38 |
LINE 97
EXPRESSION (dst_level_q ^ dst_level)
-----1----- ----2----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T38 |
1 | 0 | Covered | T1,T2,T38 |
1 | 1 | Covered | T1,T2,T38 |
Branch Coverage for Instance : tb.dut.u_io_meas.u_meas.u_sync_ref
| Line No. | Total | Covered | Percent |
Branches |
|
4 |
4 |
100.00 |
IF |
31 |
2 |
2 |
100.00 |
IF |
89 |
2 |
2 |
100.00 |
31 if (!rst_src_ni) begin
-1-
32 src_level <= 1'b0;
==>
33 end else begin
34 src_level <= src_level ^ src_pulse_i;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
89 if (!rst_dst_ni) begin
-1-
90 dst_level_q <= 1'b0;
==>
91 end else begin
92 dst_level_q <= dst_level;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
Assert Coverage for Instance : tb.dut.u_io_meas.u_meas.u_sync_ref
Assertion Details
DstPulseCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
76185638 |
41232 |
0 |
0 |
T1 |
18775 |
13 |
0 |
0 |
T2 |
25455 |
24 |
0 |
0 |
T10 |
0 |
76 |
0 |
0 |
T11 |
0 |
243 |
0 |
0 |
T24 |
0 |
8 |
0 |
0 |
T34 |
3611 |
0 |
0 |
0 |
T35 |
0 |
85 |
0 |
0 |
T36 |
0 |
49 |
0 |
0 |
T37 |
2117 |
0 |
0 |
0 |
T38 |
0 |
206 |
0 |
0 |
T40 |
0 |
89 |
0 |
0 |
T42 |
3384 |
0 |
0 |
0 |
T43 |
2170 |
0 |
0 |
0 |
T44 |
11078 |
0 |
0 |
0 |
T45 |
31818 |
0 |
0 |
0 |
T46 |
2141 |
0 |
0 |
0 |
T47 |
13243 |
0 |
0 |
0 |
T120 |
0 |
17 |
0 |
0 |
SrcPulseCheck_M
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1094272 |
39762 |
0 |
0 |
T1 |
58 |
13 |
0 |
0 |
T2 |
70 |
24 |
0 |
0 |
T10 |
0 |
76 |
0 |
0 |
T11 |
0 |
243 |
0 |
0 |
T24 |
0 |
8 |
0 |
0 |
T34 |
262 |
0 |
0 |
0 |
T35 |
0 |
85 |
0 |
0 |
T36 |
0 |
49 |
0 |
0 |
T37 |
154 |
0 |
0 |
0 |
T38 |
0 |
206 |
0 |
0 |
T40 |
0 |
89 |
0 |
0 |
T42 |
246 |
0 |
0 |
0 |
T43 |
158 |
0 |
0 |
0 |
T44 |
807 |
0 |
0 |
0 |
T45 |
2320 |
0 |
0 |
0 |
T46 |
156 |
0 |
0 |
0 |
T47 |
965 |
0 |
0 |
0 |
T120 |
0 |
17 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_io_div2_meas.u_meas.u_sync_ref
| Line No. | Total | Covered | Percent |
TOTAL | | 7 | 7 | 100.00 |
ALWAYS | 31 | 3 | 3 | 100.00 |
CONT_ASSIGN | 49 | 0 | 0 | |
CONT_ASSIGN | 52 | 0 | 0 | |
ALWAYS | 55 | 0 | 0 | |
ALWAYS | 89 | 3 | 3 | 100.00 |
CONT_ASSIGN | 97 | 1 | 1 | 100.00 |
30 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin
31 1/1 if (!rst_src_ni) begin
Tests: T4 T5 T6
32 1/1 src_level <= 1'b0;
Tests: T4 T5 T6
33 end else begin
34 1/1 src_level <= src_level ^ src_pulse_i;
Tests: T4 T5 T6
35 end
36 end
37
38
39 // source active must come far enough such that the destination domain has time
40 // to create a valid pulse.
41 `ifdef INC_ASSERT
42 //VCS coverage off
43 // pragma coverage off
44
45 // source active flag tracks whether there is an ongoing "toggle" event.
46 // Until this toggle event is accepted by the destination domain (negative edge of
47 // of the pulse output), the source side cannot toggle again.
48 logic effective_rst_n;
49 unreachable assign effective_rst_n = rst_src_ni && dst_pulse_o;
50
51 logic src_active_flag_d, src_active_flag_q;
52 unreachable assign src_active_flag_d = src_pulse_i || src_active_flag_q;
53
54 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin
55 unreachable if (!effective_rst_n) begin
56 unreachable src_active_flag_q <= '0;
57 end else begin
58 unreachable src_active_flag_q <= src_active_flag_d;
59 end
60 end
61
62 //VCS coverage on
63 // pragma coverage on
64
65 `ASSERT(SrcPulseCheck_M, src_pulse_i |-> !src_active_flag_q, clk_src_i, !rst_src_ni)
66 `endif
67
68 //////////////////////////////////////////////////////////
69 // synchronize level signal to destination clock domain //
70 //////////////////////////////////////////////////////////
71 logic dst_level;
72
73 prim_flop_2sync #(.Width(1)) prim_flop_2sync (
74 // source clock domain
75 .d_i (src_level),
76 // destination clock domain
77 .clk_i (clk_dst_i),
78 .rst_ni (rst_dst_ni),
79 .q_o (dst_level)
80 );
81
82 ////////////////////////////////////////
83 // convert level signal back to pulse //
84 ////////////////////////////////////////
85 logic dst_level_q;
86
87 // delay dst_level by 1 cycle
88 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin
89 1/1 if (!rst_dst_ni) begin
Tests: T4 T5 T6
90 1/1 dst_level_q <= 1'b0;
Tests: T4 T5 T6
91 end else begin
92 1/1 dst_level_q <= dst_level;
Tests: T4 T5 T6
93 end
94 end
95
96 // edge detection
97 1/1 assign dst_pulse_o = dst_level_q ^ dst_level;
Tests: T1 T2 T38
Cond Coverage for Instance : tb.dut.u_io_div2_meas.u_meas.u_sync_ref
| Total | Covered | Percent |
Conditions | 8 | 8 | 100.00 |
Logical | 8 | 8 | 100.00 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 34
EXPRESSION (src_level ^ src_pulse_i)
----1---- -----2-----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T38 |
1 | 0 | Covered | T1,T38,T10 |
1 | 1 | Covered | T1,T2,T38 |
LINE 97
EXPRESSION (dst_level_q ^ dst_level)
-----1----- ----2----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T38 |
1 | 0 | Covered | T1,T2,T38 |
1 | 1 | Covered | T1,T2,T38 |
Branch Coverage for Instance : tb.dut.u_io_div2_meas.u_meas.u_sync_ref
| Line No. | Total | Covered | Percent |
Branches |
|
4 |
4 |
100.00 |
IF |
31 |
2 |
2 |
100.00 |
IF |
89 |
2 |
2 |
100.00 |
31 if (!rst_src_ni) begin
-1-
32 src_level <= 1'b0;
==>
33 end else begin
34 src_level <= src_level ^ src_pulse_i;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
89 if (!rst_dst_ni) begin
-1-
90 dst_level_q <= 1'b0;
==>
91 end else begin
92 dst_level_q <= dst_level;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
Assert Coverage for Instance : tb.dut.u_io_div2_meas.u_meas.u_sync_ref
Assertion Details
DstPulseCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
37141130 |
40888 |
0 |
0 |
T1 |
9334 |
13 |
0 |
0 |
T2 |
12695 |
24 |
0 |
0 |
T10 |
0 |
76 |
0 |
0 |
T11 |
0 |
243 |
0 |
0 |
T24 |
0 |
8 |
0 |
0 |
T34 |
1902 |
0 |
0 |
0 |
T35 |
0 |
85 |
0 |
0 |
T36 |
0 |
49 |
0 |
0 |
T37 |
1115 |
0 |
0 |
0 |
T38 |
0 |
206 |
0 |
0 |
T40 |
0 |
89 |
0 |
0 |
T42 |
1666 |
0 |
0 |
0 |
T43 |
1112 |
0 |
0 |
0 |
T44 |
5513 |
0 |
0 |
0 |
T45 |
13799 |
0 |
0 |
0 |
T46 |
1031 |
0 |
0 |
0 |
T47 |
6582 |
0 |
0 |
0 |
T120 |
0 |
17 |
0 |
0 |
SrcPulseCheck_M
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1094272 |
39447 |
0 |
0 |
T1 |
58 |
13 |
0 |
0 |
T2 |
70 |
24 |
0 |
0 |
T10 |
0 |
76 |
0 |
0 |
T11 |
0 |
243 |
0 |
0 |
T24 |
0 |
8 |
0 |
0 |
T34 |
262 |
0 |
0 |
0 |
T35 |
0 |
85 |
0 |
0 |
T36 |
0 |
49 |
0 |
0 |
T37 |
154 |
0 |
0 |
0 |
T38 |
0 |
206 |
0 |
0 |
T40 |
0 |
89 |
0 |
0 |
T42 |
246 |
0 |
0 |
0 |
T43 |
158 |
0 |
0 |
0 |
T44 |
807 |
0 |
0 |
0 |
T45 |
2320 |
0 |
0 |
0 |
T46 |
156 |
0 |
0 |
0 |
T47 |
965 |
0 |
0 |
0 |
T120 |
0 |
17 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_io_div4_meas.u_meas.u_sync_ref
| Line No. | Total | Covered | Percent |
TOTAL | | 7 | 7 | 100.00 |
ALWAYS | 31 | 3 | 3 | 100.00 |
CONT_ASSIGN | 49 | 0 | 0 | |
CONT_ASSIGN | 52 | 0 | 0 | |
ALWAYS | 55 | 0 | 0 | |
ALWAYS | 89 | 3 | 3 | 100.00 |
CONT_ASSIGN | 97 | 1 | 1 | 100.00 |
30 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin
31 1/1 if (!rst_src_ni) begin
Tests: T4 T5 T6
32 1/1 src_level <= 1'b0;
Tests: T4 T5 T6
33 end else begin
34 1/1 src_level <= src_level ^ src_pulse_i;
Tests: T4 T5 T6
35 end
36 end
37
38
39 // source active must come far enough such that the destination domain has time
40 // to create a valid pulse.
41 `ifdef INC_ASSERT
42 //VCS coverage off
43 // pragma coverage off
44
45 // source active flag tracks whether there is an ongoing "toggle" event.
46 // Until this toggle event is accepted by the destination domain (negative edge of
47 // of the pulse output), the source side cannot toggle again.
48 logic effective_rst_n;
49 unreachable assign effective_rst_n = rst_src_ni && dst_pulse_o;
50
51 logic src_active_flag_d, src_active_flag_q;
52 unreachable assign src_active_flag_d = src_pulse_i || src_active_flag_q;
53
54 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin
55 unreachable if (!effective_rst_n) begin
56 unreachable src_active_flag_q <= '0;
57 end else begin
58 unreachable src_active_flag_q <= src_active_flag_d;
59 end
60 end
61
62 //VCS coverage on
63 // pragma coverage on
64
65 `ASSERT(SrcPulseCheck_M, src_pulse_i |-> !src_active_flag_q, clk_src_i, !rst_src_ni)
66 `endif
67
68 //////////////////////////////////////////////////////////
69 // synchronize level signal to destination clock domain //
70 //////////////////////////////////////////////////////////
71 logic dst_level;
72
73 prim_flop_2sync #(.Width(1)) prim_flop_2sync (
74 // source clock domain
75 .d_i (src_level),
76 // destination clock domain
77 .clk_i (clk_dst_i),
78 .rst_ni (rst_dst_ni),
79 .q_o (dst_level)
80 );
81
82 ////////////////////////////////////////
83 // convert level signal back to pulse //
84 ////////////////////////////////////////
85 logic dst_level_q;
86
87 // delay dst_level by 1 cycle
88 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin
89 1/1 if (!rst_dst_ni) begin
Tests: T4 T5 T6
90 1/1 dst_level_q <= 1'b0;
Tests: T4 T5 T6
91 end else begin
92 1/1 dst_level_q <= dst_level;
Tests: T4 T5 T6
93 end
94 end
95
96 // edge detection
97 1/1 assign dst_pulse_o = dst_level_q ^ dst_level;
Tests: T1 T2 T38
Cond Coverage for Instance : tb.dut.u_io_div4_meas.u_meas.u_sync_ref
| Total | Covered | Percent |
Conditions | 8 | 8 | 100.00 |
Logical | 8 | 8 | 100.00 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 34
EXPRESSION (src_level ^ src_pulse_i)
----1---- -----2-----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T38 |
1 | 0 | Covered | T1,T38,T10 |
1 | 1 | Covered | T1,T2,T38 |
LINE 97
EXPRESSION (dst_level_q ^ dst_level)
-----1----- ----2----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T38 |
1 | 0 | Covered | T1,T2,T38 |
1 | 1 | Covered | T1,T2,T38 |
Branch Coverage for Instance : tb.dut.u_io_div4_meas.u_meas.u_sync_ref
| Line No. | Total | Covered | Percent |
Branches |
|
4 |
4 |
100.00 |
IF |
31 |
2 |
2 |
100.00 |
IF |
89 |
2 |
2 |
100.00 |
31 if (!rst_src_ni) begin
-1-
32 src_level <= 1'b0;
==>
33 end else begin
34 src_level <= src_level ^ src_pulse_i;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
89 if (!rst_dst_ni) begin
-1-
90 dst_level_q <= 1'b0;
==>
91 end else begin
92 dst_level_q <= dst_level;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
Assert Coverage for Instance : tb.dut.u_io_div4_meas.u_meas.u_sync_ref
Assertion Details
DstPulseCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
18570137 |
40306 |
0 |
0 |
T1 |
4667 |
13 |
0 |
0 |
T2 |
6347 |
24 |
0 |
0 |
T10 |
0 |
76 |
0 |
0 |
T11 |
0 |
243 |
0 |
0 |
T24 |
0 |
8 |
0 |
0 |
T34 |
951 |
0 |
0 |
0 |
T35 |
0 |
81 |
0 |
0 |
T36 |
0 |
48 |
0 |
0 |
T37 |
557 |
0 |
0 |
0 |
T38 |
0 |
206 |
0 |
0 |
T40 |
0 |
89 |
0 |
0 |
T42 |
833 |
0 |
0 |
0 |
T43 |
555 |
0 |
0 |
0 |
T44 |
2756 |
0 |
0 |
0 |
T45 |
6899 |
0 |
0 |
0 |
T46 |
515 |
0 |
0 |
0 |
T47 |
3291 |
0 |
0 |
0 |
T120 |
0 |
17 |
0 |
0 |
SrcPulseCheck_M
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1094272 |
38925 |
0 |
0 |
T1 |
58 |
13 |
0 |
0 |
T2 |
70 |
24 |
0 |
0 |
T10 |
0 |
76 |
0 |
0 |
T11 |
0 |
243 |
0 |
0 |
T24 |
0 |
8 |
0 |
0 |
T34 |
262 |
0 |
0 |
0 |
T35 |
0 |
81 |
0 |
0 |
T36 |
0 |
48 |
0 |
0 |
T37 |
154 |
0 |
0 |
0 |
T38 |
0 |
206 |
0 |
0 |
T40 |
0 |
89 |
0 |
0 |
T42 |
246 |
0 |
0 |
0 |
T43 |
158 |
0 |
0 |
0 |
T44 |
807 |
0 |
0 |
0 |
T45 |
2320 |
0 |
0 |
0 |
T46 |
156 |
0 |
0 |
0 |
T47 |
965 |
0 |
0 |
0 |
T120 |
0 |
17 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_main_meas.u_meas.u_sync_ref
| Line No. | Total | Covered | Percent |
TOTAL | | 7 | 7 | 100.00 |
ALWAYS | 31 | 3 | 3 | 100.00 |
CONT_ASSIGN | 49 | 0 | 0 | |
CONT_ASSIGN | 52 | 0 | 0 | |
ALWAYS | 55 | 0 | 0 | |
ALWAYS | 89 | 3 | 3 | 100.00 |
CONT_ASSIGN | 97 | 1 | 1 | 100.00 |
30 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin
31 1/1 if (!rst_src_ni) begin
Tests: T4 T5 T6
32 1/1 src_level <= 1'b0;
Tests: T4 T5 T6
33 end else begin
34 1/1 src_level <= src_level ^ src_pulse_i;
Tests: T4 T5 T6
35 end
36 end
37
38
39 // source active must come far enough such that the destination domain has time
40 // to create a valid pulse.
41 `ifdef INC_ASSERT
42 //VCS coverage off
43 // pragma coverage off
44
45 // source active flag tracks whether there is an ongoing "toggle" event.
46 // Until this toggle event is accepted by the destination domain (negative edge of
47 // of the pulse output), the source side cannot toggle again.
48 logic effective_rst_n;
49 unreachable assign effective_rst_n = rst_src_ni && dst_pulse_o;
50
51 logic src_active_flag_d, src_active_flag_q;
52 unreachable assign src_active_flag_d = src_pulse_i || src_active_flag_q;
53
54 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin
55 unreachable if (!effective_rst_n) begin
56 unreachable src_active_flag_q <= '0;
57 end else begin
58 unreachable src_active_flag_q <= src_active_flag_d;
59 end
60 end
61
62 //VCS coverage on
63 // pragma coverage on
64
65 `ASSERT(SrcPulseCheck_M, src_pulse_i |-> !src_active_flag_q, clk_src_i, !rst_src_ni)
66 `endif
67
68 //////////////////////////////////////////////////////////
69 // synchronize level signal to destination clock domain //
70 //////////////////////////////////////////////////////////
71 logic dst_level;
72
73 prim_flop_2sync #(.Width(1)) prim_flop_2sync (
74 // source clock domain
75 .d_i (src_level),
76 // destination clock domain
77 .clk_i (clk_dst_i),
78 .rst_ni (rst_dst_ni),
79 .q_o (dst_level)
80 );
81
82 ////////////////////////////////////////
83 // convert level signal back to pulse //
84 ////////////////////////////////////////
85 logic dst_level_q;
86
87 // delay dst_level by 1 cycle
88 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin
89 1/1 if (!rst_dst_ni) begin
Tests: T4 T5 T6
90 1/1 dst_level_q <= 1'b0;
Tests: T4 T5 T6
91 end else begin
92 1/1 dst_level_q <= dst_level;
Tests: T4 T5 T6
93 end
94 end
95
96 // edge detection
97 1/1 assign dst_pulse_o = dst_level_q ^ dst_level;
Tests: T1 T2 T38
Cond Coverage for Instance : tb.dut.u_main_meas.u_meas.u_sync_ref
| Total | Covered | Percent |
Conditions | 8 | 8 | 100.00 |
Logical | 8 | 8 | 100.00 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 34
EXPRESSION (src_level ^ src_pulse_i)
----1---- -----2-----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T38 |
1 | 0 | Covered | T1,T38,T10 |
1 | 1 | Covered | T1,T2,T38 |
LINE 97
EXPRESSION (dst_level_q ^ dst_level)
-----1----- ----2----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T38 |
1 | 0 | Covered | T1,T2,T38 |
1 | 1 | Covered | T1,T2,T38 |
Branch Coverage for Instance : tb.dut.u_main_meas.u_meas.u_sync_ref
| Line No. | Total | Covered | Percent |
Branches |
|
4 |
4 |
100.00 |
IF |
31 |
2 |
2 |
100.00 |
IF |
89 |
2 |
2 |
100.00 |
31 if (!rst_src_ni) begin
-1-
32 src_level <= 1'b0;
==>
33 end else begin
34 src_level <= src_level ^ src_pulse_i;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
89 if (!rst_dst_ni) begin
-1-
90 dst_level_q <= 1'b0;
==>
91 end else begin
92 dst_level_q <= dst_level;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
Assert Coverage for Instance : tb.dut.u_main_meas.u_meas.u_sync_ref
Assertion Details
DstPulseCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
84275427 |
49143 |
0 |
0 |
T1 |
19558 |
13 |
0 |
0 |
T2 |
38517 |
48 |
0 |
0 |
T10 |
0 |
76 |
0 |
0 |
T11 |
0 |
271 |
0 |
0 |
T24 |
0 |
32 |
0 |
0 |
T34 |
3762 |
0 |
0 |
0 |
T35 |
0 |
74 |
0 |
0 |
T36 |
0 |
45 |
0 |
0 |
T37 |
2205 |
0 |
0 |
0 |
T38 |
0 |
254 |
0 |
0 |
T40 |
0 |
149 |
0 |
0 |
T42 |
3525 |
0 |
0 |
0 |
T43 |
2260 |
0 |
0 |
0 |
T44 |
11540 |
0 |
0 |
0 |
T45 |
33144 |
0 |
0 |
0 |
T46 |
2229 |
0 |
0 |
0 |
T47 |
13796 |
0 |
0 |
0 |
T120 |
0 |
17 |
0 |
0 |
SrcPulseCheck_M
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1135366 |
48636 |
0 |
0 |
T1 |
58 |
13 |
0 |
0 |
T2 |
94 |
48 |
0 |
0 |
T10 |
0 |
76 |
0 |
0 |
T11 |
0 |
271 |
0 |
0 |
T24 |
0 |
32 |
0 |
0 |
T34 |
262 |
0 |
0 |
0 |
T35 |
0 |
74 |
0 |
0 |
T36 |
0 |
45 |
0 |
0 |
T37 |
154 |
0 |
0 |
0 |
T38 |
0 |
254 |
0 |
0 |
T40 |
0 |
149 |
0 |
0 |
T42 |
246 |
0 |
0 |
0 |
T43 |
158 |
0 |
0 |
0 |
T44 |
807 |
0 |
0 |
0 |
T45 |
2320 |
0 |
0 |
0 |
T46 |
156 |
0 |
0 |
0 |
T47 |
965 |
0 |
0 |
0 |
T120 |
0 |
17 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_usb_meas.u_meas.u_sync_ref
| Line No. | Total | Covered | Percent |
TOTAL | | 7 | 7 | 100.00 |
ALWAYS | 31 | 3 | 3 | 100.00 |
CONT_ASSIGN | 49 | 0 | 0 | |
CONT_ASSIGN | 52 | 0 | 0 | |
ALWAYS | 55 | 0 | 0 | |
ALWAYS | 89 | 3 | 3 | 100.00 |
CONT_ASSIGN | 97 | 1 | 1 | 100.00 |
30 always_ff @(posedge clk_src_i or negedge rst_src_ni) begin
31 1/1 if (!rst_src_ni) begin
Tests: T4 T5 T6
32 1/1 src_level <= 1'b0;
Tests: T4 T5 T6
33 end else begin
34 1/1 src_level <= src_level ^ src_pulse_i;
Tests: T4 T5 T6
35 end
36 end
37
38
39 // source active must come far enough such that the destination domain has time
40 // to create a valid pulse.
41 `ifdef INC_ASSERT
42 //VCS coverage off
43 // pragma coverage off
44
45 // source active flag tracks whether there is an ongoing "toggle" event.
46 // Until this toggle event is accepted by the destination domain (negative edge of
47 // of the pulse output), the source side cannot toggle again.
48 logic effective_rst_n;
49 unreachable assign effective_rst_n = rst_src_ni && dst_pulse_o;
50
51 logic src_active_flag_d, src_active_flag_q;
52 unreachable assign src_active_flag_d = src_pulse_i || src_active_flag_q;
53
54 always_ff @(posedge clk_src_i or negedge effective_rst_n) begin
55 unreachable if (!effective_rst_n) begin
56 unreachable src_active_flag_q <= '0;
57 end else begin
58 unreachable src_active_flag_q <= src_active_flag_d;
59 end
60 end
61
62 //VCS coverage on
63 // pragma coverage on
64
65 `ASSERT(SrcPulseCheck_M, src_pulse_i |-> !src_active_flag_q, clk_src_i, !rst_src_ni)
66 `endif
67
68 //////////////////////////////////////////////////////////
69 // synchronize level signal to destination clock domain //
70 //////////////////////////////////////////////////////////
71 logic dst_level;
72
73 prim_flop_2sync #(.Width(1)) prim_flop_2sync (
74 // source clock domain
75 .d_i (src_level),
76 // destination clock domain
77 .clk_i (clk_dst_i),
78 .rst_ni (rst_dst_ni),
79 .q_o (dst_level)
80 );
81
82 ////////////////////////////////////////
83 // convert level signal back to pulse //
84 ////////////////////////////////////////
85 logic dst_level_q;
86
87 // delay dst_level by 1 cycle
88 always_ff @(posedge clk_dst_i or negedge rst_dst_ni) begin
89 1/1 if (!rst_dst_ni) begin
Tests: T4 T5 T6
90 1/1 dst_level_q <= 1'b0;
Tests: T4 T5 T6
91 end else begin
92 1/1 dst_level_q <= dst_level;
Tests: T4 T5 T6
93 end
94 end
95
96 // edge detection
97 1/1 assign dst_pulse_o = dst_level_q ^ dst_level;
Tests: T1 T2 T38
Cond Coverage for Instance : tb.dut.u_usb_meas.u_meas.u_sync_ref
| Total | Covered | Percent |
Conditions | 8 | 8 | 100.00 |
Logical | 8 | 8 | 100.00 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 34
EXPRESSION (src_level ^ src_pulse_i)
----1---- -----2-----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T38 |
1 | 0 | Covered | T1,T38,T10 |
1 | 1 | Covered | T1,T2,T38 |
LINE 97
EXPRESSION (dst_level_q ^ dst_level)
-----1----- ----2----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T4,T5,T6 |
0 | 1 | Covered | T1,T2,T38 |
1 | 0 | Covered | T1,T2,T38 |
1 | 1 | Covered | T1,T2,T38 |
Branch Coverage for Instance : tb.dut.u_usb_meas.u_meas.u_sync_ref
| Line No. | Total | Covered | Percent |
Branches |
|
4 |
4 |
100.00 |
IF |
31 |
2 |
2 |
100.00 |
IF |
89 |
2 |
2 |
100.00 |
31 if (!rst_src_ni) begin
-1-
32 src_level <= 1'b0;
==>
33 end else begin
34 src_level <= src_level ^ src_pulse_i;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
89 if (!rst_dst_ni) begin
-1-
90 dst_level_q <= 1'b0;
==>
91 end else begin
92 dst_level_q <= dst_level;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T4,T5,T6 |
0 |
Covered |
T4,T5,T6 |
Assert Coverage for Instance : tb.dut.u_usb_meas.u_meas.u_sync_ref
Assertion Details
DstPulseCheck_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
40492815 |
48486 |
0 |
0 |
T1 |
9387 |
13 |
0 |
0 |
T2 |
15608 |
36 |
0 |
0 |
T10 |
0 |
76 |
0 |
0 |
T11 |
0 |
254 |
0 |
0 |
T24 |
0 |
32 |
0 |
0 |
T34 |
1805 |
0 |
0 |
0 |
T35 |
0 |
73 |
0 |
0 |
T36 |
0 |
42 |
0 |
0 |
T37 |
1058 |
0 |
0 |
0 |
T38 |
0 |
230 |
0 |
0 |
T40 |
0 |
149 |
0 |
0 |
T42 |
1692 |
0 |
0 |
0 |
T43 |
1085 |
0 |
0 |
0 |
T44 |
5539 |
0 |
0 |
0 |
T45 |
15909 |
0 |
0 |
0 |
T46 |
1070 |
0 |
0 |
0 |
T47 |
6622 |
0 |
0 |
0 |
T120 |
0 |
5 |
0 |
0 |
SrcPulseCheck_M
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1150844 |
47760 |
0 |
0 |
T1 |
58 |
13 |
0 |
0 |
T2 |
82 |
36 |
0 |
0 |
T10 |
0 |
76 |
0 |
0 |
T11 |
0 |
254 |
0 |
0 |
T24 |
0 |
32 |
0 |
0 |
T34 |
262 |
0 |
0 |
0 |
T35 |
0 |
73 |
0 |
0 |
T36 |
0 |
42 |
0 |
0 |
T37 |
154 |
0 |
0 |
0 |
T38 |
0 |
230 |
0 |
0 |
T40 |
0 |
149 |
0 |
0 |
T42 |
246 |
0 |
0 |
0 |
T43 |
158 |
0 |
0 |
0 |
T44 |
807 |
0 |
0 |
0 |
T45 |
2320 |
0 |
0 |
0 |
T46 |
156 |
0 |
0 |
0 |
T47 |
965 |
0 |
0 |
0 |
T120 |
0 |
5 |
0 |
0 |