Line Coverage for Module :
tlul_adapter_host ( parameter MAX_REQS=2,EnableDataIntgGen=1,EnableRspDataIntgCheck=0,WordSize=2,OutstandingReqCntW=2,g_multiple_reqs.ReqNumW=1 + MAX_REQS=2,EnableDataIntgGen=0,EnableRspDataIntgCheck=0,WordSize=2,OutstandingReqCntW=2,g_multiple_reqs.ReqNumW=1 )
Line Coverage for Module self-instances :
| Line No. | Total | Covered | Percent |
TOTAL | | 23 | 21 | 91.30 |
ALWAYS | 71 | 3 | 3 | 100.00 |
ALWAYS | 79 | 5 | 5 | 100.00 |
CONT_ASSIGN | 90 | 1 | 1 | 100.00 |
CONT_ASSIGN | 95 | 1 | 1 | 100.00 |
CONT_ASSIGN | 97 | 1 | 1 | 100.00 |
CONT_ASSIGN | 117 | 1 | 1 | 100.00 |
CONT_ASSIGN | 119 | 1 | 1 | 100.00 |
CONT_ASSIGN | 120 | 1 | 1 | 100.00 |
CONT_ASSIGN | 121 | 1 | 1 | 100.00 |
ALWAYS | 133 | 4 | 3 | 75.00 |
CONT_ASSIGN | 142 | 1 | 1 | 100.00 |
CONT_ASSIGN | 146 | 1 | 1 | 100.00 |
CONT_ASSIGN | 150 | 1 | 0 | 0.00 |
CONT_ASSIGN | 154 | 1 | 1 | 100.00 |
ALWAYS | 169 | 0 | 0 | |
ALWAYS | 179 | 0 | 0 | |
70 always_ff @(posedge clk_i or negedge rst_ni) begin
71 1/1 if (!rst_ni) begin
Tests: T1 T2 T3
72 1/1 source_q <= '0;
Tests: T1 T2 T3
73 end else begin
74 1/1 source_q <= source_d;
Tests: T1 T2 T3
75 end
76 end
77
78 always_comb begin
79 1/1 source_d = source_q;
Tests: T1 T2 T3
80
81 1/1 if (req_i && gnt_o) begin
Tests: T1 T2 T3
82 1/1 if (source_q == MaxSource[ReqNumW-1:0]) begin
Tests: T1 T2 T3
83 1/1 source_d = '0;
Tests: T1 T2 T3
84 end else begin
85 1/1 source_d = source_q + ReqNumOne;
Tests: T1 T2 T3
86 end
87 end
MISSING_ELSE
88 end
89
90 1/1 assign tl_source = top_pkg::TL_AIW'(source_q);
Tests: T1 T2 T3
91 end
92
93 // For TL-UL Get opcode all active bytes must have their mask bit set, so all reads get all tl_be
94 // bits set. For writes the supplied be_i is used as the mask.
95 1/1 assign tl_be = ~we_i ? {top_pkg::TL_DBW{1'b1}} : be_i;
Tests: T1 T2 T3
96
97 1/1 assign tl_out = '{
Tests: T1 T2 T3
98 a_valid: req_i,
99 a_opcode: (~we_i) ? Get :
100 (&be_i) ? PutFullData :
101 PutPartialData,
102 a_param: 3'h0,
103 a_size: top_pkg::TL_SZW'(WordSize),
104 a_mask: tl_be,
105 a_source: tl_source,
106 a_address: {addr_i[31:WordSize], {WordSize{1'b0}}},
107 a_data: wdata_i,
108 a_user: '{default: '0, data_intg: wdata_intg_i, instr_type: instr_type_i, rsvd: user_rsvd_i},
109 d_ready: 1'b1
110 };
111
112 tlul_cmd_intg_gen #(.EnableDataIntgGen (EnableDataIntgGen)) u_cmd_intg_gen (
113 .tl_i(tl_out),
114 .tl_o(tl_o)
115 );
116
117 1/1 assign gnt_o = tl_i.a_ready;
Tests: T1 T2 T3
118
119 1/1 assign valid_o = tl_i.d_valid;
Tests: T1 T2 T3
120 1/1 assign rdata_o = tl_i.d_data;
Tests: T1 T2 T3
121 1/1 assign rdata_intg_o = tl_i.d_user.data_intg;
Tests: T1 T2 T3
122
123 logic intg_err;
124 tlul_rsp_intg_chk #(
125 .EnableRspDataIntgCheck(EnableRspDataIntgCheck)
126 ) u_rsp_chk (
127 .tl_i,
128 .err_o(intg_err)
129 );
130
131 logic intg_err_q;
132 always_ff @(posedge clk_i or negedge rst_ni) begin
133 1/1 if (!rst_ni) begin
Tests: T1 T2 T3
134 1/1 intg_err_q <= '0;
Tests: T1 T2 T3
135 1/1 end else if (intg_err) begin
Tests: T1 T2 T3
136 0/1 ==> intg_err_q <= 1'b1;
137 end
MISSING_ELSE
138 end
139
140 // err_o is transactional. This allows the host to continue
141 // debug without receiving an endless stream of errors.
142 1/1 assign err_o = tl_i.d_error | intg_err;
Tests: T1 T2 T3
143
144 // intg_err_o is permanent once detected, and should be used
145 // to trigger alerts
146 1/1 assign intg_err_o = intg_err_q | intg_err;
Tests: T1 T2 T3
147
148 // Addresses are assumed to be word-aligned, and the bottom bits are ignored
149 logic unused_addr_bottom_bits;
150 0/1 ==> assign unused_addr_bottom_bits = ^addr_i[WordSize-1:0];
151
152 // Explicitly ignore unused fields of tl_i
153 logic unused_tl_i_fields;
154 1/1 assign unused_tl_i_fields = ^{tl_i.d_opcode, tl_i.d_param,
Tests: T1 T2 T3
155 tl_i.d_size, tl_i.d_source, tl_i.d_sink,
156 tl_i.d_user};
157
158 `ifdef INC_ASSERT
159 //VCS coverage off
160 // pragma coverage off
161 localparam int OutstandingReqCntW =
162 (MAX_REQS == 2 ** $clog2(MAX_REQS)) ? $clog2(MAX_REQS) + 1 : $clog2(MAX_REQS);
163 localparam logic [OutstandingReqCntW-1:0] OutstandingReqCntOne = OutstandingReqCntW'(1'b1);
164
165 logic [OutstandingReqCntW-1:0] outstanding_reqs_q;
166 logic [OutstandingReqCntW-1:0] outstanding_reqs_d;
167
168 always_comb begin
169 unreachable outstanding_reqs_d = outstanding_reqs_q;
170
171 unreachable if ((req_i && gnt_o) && !valid_o) begin
172 unreachable outstanding_reqs_d = outstanding_reqs_q + OutstandingReqCntOne;
173 unreachable end else if (!(req_i && gnt_o) && valid_o) begin
174 unreachable outstanding_reqs_d = outstanding_reqs_q - OutstandingReqCntOne;
175 end
==> MISSING_ELSE
176 end
177
178 always_ff @(posedge clk_i or negedge rst_ni) begin
179 unreachable if (!rst_ni) begin
180 unreachable outstanding_reqs_q <= '0;
181 end else begin
182 unreachable outstanding_reqs_q <= outstanding_reqs_d;
Line Coverage for Module :
tlul_adapter_host ( parameter MAX_REQS=8,EnableDataIntgGen=0,EnableRspDataIntgCheck=0,WordSize=2,OutstandingReqCntW=4,g_multiple_reqs.ReqNumW=3 )
Line Coverage for Module self-instances :
| Line No. | Total | Covered | Percent |
TOTAL | | 22 | 20 | 90.91 |
ALWAYS | 71 | 3 | 3 | 100.00 |
ALWAYS | 79 | 5 | 5 | 100.00 |
CONT_ASSIGN | 90 | 1 | 1 | 100.00 |
CONT_ASSIGN | 95 | 0 | 0 | |
CONT_ASSIGN | 97 | 1 | 1 | 100.00 |
CONT_ASSIGN | 117 | 1 | 1 | 100.00 |
CONT_ASSIGN | 119 | 1 | 1 | 100.00 |
CONT_ASSIGN | 120 | 1 | 1 | 100.00 |
CONT_ASSIGN | 121 | 1 | 1 | 100.00 |
ALWAYS | 133 | 4 | 3 | 75.00 |
CONT_ASSIGN | 142 | 1 | 1 | 100.00 |
CONT_ASSIGN | 146 | 1 | 1 | 100.00 |
CONT_ASSIGN | 150 | 1 | 0 | 0.00 |
CONT_ASSIGN | 154 | 1 | 1 | 100.00 |
ALWAYS | 169 | 0 | 0 | |
ALWAYS | 179 | 0 | 0 | |
70 always_ff @(posedge clk_i or negedge rst_ni) begin
71 1/1 if (!rst_ni) begin
Tests: T1 T2 T3
72 1/1 source_q <= '0;
Tests: T1 T2 T3
73 end else begin
74 1/1 source_q <= source_d;
Tests: T1 T2 T3
75 end
76 end
77
78 always_comb begin
79 1/1 source_d = source_q;
Tests: T1 T2 T3
80
81 1/1 if (req_i && gnt_o) begin
Tests: T1 T2 T3
82 1/1 if (source_q == MaxSource[ReqNumW-1:0]) begin
Tests: T1 T2 T3
83 1/1 source_d = '0;
Tests: T1 T2 T3
84 end else begin
85 1/1 source_d = source_q + ReqNumOne;
Tests: T1 T2 T3
86 end
87 end
MISSING_ELSE
88 end
89
90 1/1 assign tl_source = top_pkg::TL_AIW'(source_q);
Tests: T1 T2 T3
91 end
92
93 // For TL-UL Get opcode all active bytes must have their mask bit set, so all reads get all tl_be
94 // bits set. For writes the supplied be_i is used as the mask.
95 unreachable assign tl_be = ~we_i ? {top_pkg::TL_DBW{1'b1}} : be_i;
96
97 1/1 assign tl_out = '{
Tests: T1 T2 T3
98 a_valid: req_i,
99 a_opcode: (~we_i) ? Get :
100 (&be_i) ? PutFullData :
101 PutPartialData,
102 a_param: 3'h0,
103 a_size: top_pkg::TL_SZW'(WordSize),
104 a_mask: tl_be,
105 a_source: tl_source,
106 a_address: {addr_i[31:WordSize], {WordSize{1'b0}}},
107 a_data: wdata_i,
108 a_user: '{default: '0, data_intg: wdata_intg_i, instr_type: instr_type_i, rsvd: user_rsvd_i},
109 d_ready: 1'b1
110 };
111
112 tlul_cmd_intg_gen #(.EnableDataIntgGen (EnableDataIntgGen)) u_cmd_intg_gen (
113 .tl_i(tl_out),
114 .tl_o(tl_o)
115 );
116
117 1/1 assign gnt_o = tl_i.a_ready;
Tests: T1 T2 T3
118
119 1/1 assign valid_o = tl_i.d_valid;
Tests: T1 T2 T3
120 1/1 assign rdata_o = tl_i.d_data;
Tests: T1 T2 T3
121 1/1 assign rdata_intg_o = tl_i.d_user.data_intg;
Tests: T1 T2 T3
122
123 logic intg_err;
124 tlul_rsp_intg_chk #(
125 .EnableRspDataIntgCheck(EnableRspDataIntgCheck)
126 ) u_rsp_chk (
127 .tl_i,
128 .err_o(intg_err)
129 );
130
131 logic intg_err_q;
132 always_ff @(posedge clk_i or negedge rst_ni) begin
133 1/1 if (!rst_ni) begin
Tests: T1 T2 T3
134 1/1 intg_err_q <= '0;
Tests: T1 T2 T3
135 1/1 end else if (intg_err) begin
Tests: T1 T2 T3
136 0/1 ==> intg_err_q <= 1'b1;
137 end
MISSING_ELSE
138 end
139
140 // err_o is transactional. This allows the host to continue
141 // debug without receiving an endless stream of errors.
142 1/1 assign err_o = tl_i.d_error | intg_err;
Tests: T1 T2 T3
143
144 // intg_err_o is permanent once detected, and should be used
145 // to trigger alerts
146 1/1 assign intg_err_o = intg_err_q | intg_err;
Tests: T1 T2 T3
147
148 // Addresses are assumed to be word-aligned, and the bottom bits are ignored
149 logic unused_addr_bottom_bits;
150 0/1 ==> assign unused_addr_bottom_bits = ^addr_i[WordSize-1:0];
151
152 // Explicitly ignore unused fields of tl_i
153 logic unused_tl_i_fields;
154 1/1 assign unused_tl_i_fields = ^{tl_i.d_opcode, tl_i.d_param,
Tests: T1 T2 T3
155 tl_i.d_size, tl_i.d_source, tl_i.d_sink,
156 tl_i.d_user};
157
158 `ifdef INC_ASSERT
159 //VCS coverage off
160 // pragma coverage off
161 localparam int OutstandingReqCntW =
162 (MAX_REQS == 2 ** $clog2(MAX_REQS)) ? $clog2(MAX_REQS) + 1 : $clog2(MAX_REQS);
163 localparam logic [OutstandingReqCntW-1:0] OutstandingReqCntOne = OutstandingReqCntW'(1'b1);
164
165 logic [OutstandingReqCntW-1:0] outstanding_reqs_q;
166 logic [OutstandingReqCntW-1:0] outstanding_reqs_d;
167
168 always_comb begin
169 unreachable outstanding_reqs_d = outstanding_reqs_q;
170
171 unreachable if ((req_i && gnt_o) && !valid_o) begin
172 unreachable outstanding_reqs_d = outstanding_reqs_q + OutstandingReqCntOne;
173 unreachable end else if (!(req_i && gnt_o) && valid_o) begin
174 unreachable outstanding_reqs_d = outstanding_reqs_q - OutstandingReqCntOne;
175 end
==> MISSING_ELSE
176 end
177
178 always_ff @(posedge clk_i or negedge rst_ni) begin
179 unreachable if (!rst_ni) begin
180 unreachable outstanding_reqs_q <= '0;
181 end else begin
182 unreachable outstanding_reqs_q <= outstanding_reqs_d;
Cond Coverage for Module :
tlul_adapter_host ( parameter MAX_REQS=8,EnableDataIntgGen=0,EnableRspDataIntgCheck=0,WordSize=2,OutstandingReqCntW=4,g_multiple_reqs.ReqNumW=3 )
Cond Coverage for Module self-instances :
| Total | Covered | Percent |
Conditions | 13 | 9 | 69.23 |
Logical | 13 | 9 | 69.23 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 81
EXPRESSION (req_i && gnt_o)
--1-- --2--
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 82
EXPRESSION (g_multiple_reqs.source_q == g_multiple_reqs.MaxSource[(g_multiple_reqs.ReqNumW - 1):0])
--------------------------------------------1-------------------------------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 95
EXPRESSION (((~we_i)) ? ({top_pkg::TL_DBW {1'b1}}) : be_i)
----1----
-1- | Status | Tests |
0 | Unreachable | |
1 | Covered | T1,T2,T3 |
LINE 97
EXPRESSION (((~we_i)) ? Get : (((&be_i)) ? PutFullData : PutPartialData))
----1----
-1- | Status | Tests |
0 | Unreachable | |
1 | Covered | T1,T2,T3 |
LINE 97
SUB-EXPRESSION (((&be_i)) ? PutFullData : PutPartialData)
----1----
-1- | Status | Tests |
0 | Unreachable | |
1 | Unreachable | |
LINE 142
EXPRESSION (tl_i.d_error | intg_err)
------1----- ----2---
-1- | -2- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Not Covered | |
1 | 0 | Covered | T192,T245,T213 |
LINE 146
EXPRESSION (intg_err_q | intg_err)
-----1---- ----2---
-1- | -2- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Not Covered | |
1 | 0 | Not Covered | |
Cond Coverage for Module :
tlul_adapter_host ( parameter MAX_REQS=2,EnableDataIntgGen=1,EnableRspDataIntgCheck=0,WordSize=2,OutstandingReqCntW=2,g_multiple_reqs.ReqNumW=1 + MAX_REQS=2,EnableDataIntgGen=0,EnableRspDataIntgCheck=0,WordSize=2,OutstandingReqCntW=2,g_multiple_reqs.ReqNumW=1 )
Cond Coverage for Module self-instances :
| Total | Covered | Percent |
Conditions | 17 | 14 | 82.35 |
Logical | 17 | 14 | 82.35 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 81
EXPRESSION (req_i && gnt_o)
--1-- --2--
-1- | -2- | Status | Tests |
0 | 1 | Covered | T35,T97,T98 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 82
EXPRESSION (g_multiple_reqs.source_q == g_multiple_reqs.MaxSource[0])
-----------------------------1----------------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 95
EXPRESSION (((~we_i)) ? ({top_pkg::TL_DBW {1'b1}}) : be_i)
----1----
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 97
EXPRESSION (((~we_i)) ? Get : (((&be_i)) ? PutFullData : PutPartialData))
----1----
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 97
SUB-EXPRESSION (((&be_i)) ? PutFullData : PutPartialData)
----1----
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 142
EXPRESSION (tl_i.d_error | intg_err)
------1----- ----2---
-1- | -2- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Not Covered | |
1 | 0 | Covered | T83,T229,T246 |
LINE 146
EXPRESSION (intg_err_q | intg_err)
-----1---- ----2---
-1- | -2- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Not Covered | |
1 | 0 | Not Covered | |
Branch Coverage for Module :
tlul_adapter_host ( parameter MAX_REQS=2,EnableDataIntgGen=1,EnableRspDataIntgCheck=0,WordSize=2,OutstandingReqCntW=2,g_multiple_reqs.ReqNumW=1 + MAX_REQS=2,EnableDataIntgGen=0,EnableRspDataIntgCheck=0,WordSize=2,OutstandingReqCntW=2,g_multiple_reqs.ReqNumW=1 )
Branch Coverage for Module self-instances :
| Line No. | Total | Covered | Percent |
Branches |
|
10 |
9 |
90.00 |
TERNARY |
95 |
2 |
2 |
100.00 |
IF |
133 |
3 |
2 |
66.67 |
IF |
71 |
2 |
2 |
100.00 |
IF |
81 |
3 |
3 |
100.00 |
95 assign tl_be = ~we_i ? {top_pkg::TL_DBW{1'b1}} : be_i;
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T1,T2,T3 |
133 if (!rst_ni) begin
-1-
134 intg_err_q <= '0;
==>
135 end else if (intg_err) begin
-2-
136 intg_err_q <= 1'b1;
==>
137 end
MISSING_ELSE
==>
Branches:
-1- | -2- | Status | Tests |
1 |
- |
Covered |
T1,T2,T3 |
0 |
1 |
Not Covered |
|
0 |
0 |
Covered |
T1,T2,T3 |
71 if (!rst_ni) begin
-1-
72 source_q <= '0;
==>
73 end else begin
74 source_q <= source_d;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T1,T2,T3 |
81 if (req_i && gnt_o) begin
-1-
82 if (source_q == MaxSource[ReqNumW-1:0]) begin
-2-
83 source_d = '0;
==>
84 end else begin
85 source_d = source_q + ReqNumOne;
==>
86 end
87 end
MISSING_ELSE
==>
Branches:
-1- | -2- | Status | Tests |
1 |
1 |
Covered |
T1,T2,T3 |
1 |
0 |
Covered |
T1,T2,T3 |
0 |
- |
Covered |
T1,T2,T3 |
Branch Coverage for Module :
tlul_adapter_host ( parameter MAX_REQS=8,EnableDataIntgGen=0,EnableRspDataIntgCheck=0,WordSize=2,OutstandingReqCntW=4,g_multiple_reqs.ReqNumW=3 )
Branch Coverage for Module self-instances :
| Line No. | Total | Covered | Percent |
Branches |
|
9 |
8 |
88.89 |
TERNARY |
95 |
1 |
1 |
100.00 |
IF |
133 |
3 |
2 |
66.67 |
IF |
71 |
2 |
2 |
100.00 |
IF |
81 |
3 |
3 |
100.00 |
95 assign tl_be = ~we_i ? {top_pkg::TL_DBW{1'b1}} : be_i;
-1-
==>
==> (Unreachable)
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Unreachable |
|
133 if (!rst_ni) begin
-1-
134 intg_err_q <= '0;
==>
135 end else if (intg_err) begin
-2-
136 intg_err_q <= 1'b1;
==>
137 end
MISSING_ELSE
==>
Branches:
-1- | -2- | Status | Tests |
1 |
- |
Covered |
T1,T2,T3 |
0 |
1 |
Not Covered |
|
0 |
0 |
Covered |
T1,T2,T3 |
71 if (!rst_ni) begin
-1-
72 source_q <= '0;
==>
73 end else begin
74 source_q <= source_d;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T1,T2,T3 |
81 if (req_i && gnt_o) begin
-1-
82 if (source_q == MaxSource[ReqNumW-1:0]) begin
-2-
83 source_d = '0;
==>
84 end else begin
85 source_d = source_q + ReqNumOne;
==>
86 end
87 end
MISSING_ELSE
==>
Branches:
-1- | -2- | Status | Tests |
1 |
1 |
Covered |
T1,T2,T3 |
1 |
0 |
Covered |
T1,T2,T3 |
0 |
- |
Covered |
T1,T2,T3 |
Assert Coverage for Module :
tlul_adapter_host
Assertion Details
DontExceeedMaxReqs
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
982453386 |
102316951 |
0 |
0 |
T1 |
84550 |
3946 |
0 |
0 |
T2 |
182304 |
13708 |
0 |
0 |
T3 |
230402 |
83116 |
0 |
0 |
T4 |
221726 |
19482 |
0 |
0 |
T5 |
167680 |
15821 |
0 |
0 |
T6 |
232234 |
22968 |
0 |
0 |
T30 |
185560 |
16637 |
0 |
0 |
T68 |
438640 |
44876 |
0 |
0 |
T104 |
197076 |
20034 |
0 |
0 |
T105 |
135780 |
10639 |
0 |
0 |
Line Coverage for Instance : tb.dut.top_earlgrey.u_rv_core_ibex.tl_adapter_host_i_ibex
| Line No. | Total | Covered | Percent |
TOTAL | | 22 | 20 | 90.91 |
ALWAYS | 71 | 3 | 3 | 100.00 |
ALWAYS | 79 | 5 | 5 | 100.00 |
CONT_ASSIGN | 90 | 1 | 1 | 100.00 |
CONT_ASSIGN | 95 | 0 | 0 | |
CONT_ASSIGN | 97 | 1 | 1 | 100.00 |
CONT_ASSIGN | 117 | 1 | 1 | 100.00 |
CONT_ASSIGN | 119 | 1 | 1 | 100.00 |
CONT_ASSIGN | 120 | 1 | 1 | 100.00 |
CONT_ASSIGN | 121 | 1 | 1 | 100.00 |
ALWAYS | 133 | 4 | 3 | 75.00 |
CONT_ASSIGN | 142 | 1 | 1 | 100.00 |
CONT_ASSIGN | 146 | 1 | 1 | 100.00 |
CONT_ASSIGN | 150 | 1 | 0 | 0.00 |
CONT_ASSIGN | 154 | 1 | 1 | 100.00 |
ALWAYS | 169 | 0 | 0 | |
ALWAYS | 179 | 0 | 0 | |
70 always_ff @(posedge clk_i or negedge rst_ni) begin
71 1/1 if (!rst_ni) begin
Tests: T1 T2 T3
72 1/1 source_q <= '0;
Tests: T1 T2 T3
73 end else begin
74 1/1 source_q <= source_d;
Tests: T1 T2 T3
75 end
76 end
77
78 always_comb begin
79 1/1 source_d = source_q;
Tests: T1 T2 T3
80
81 1/1 if (req_i && gnt_o) begin
Tests: T1 T2 T3
82 1/1 if (source_q == MaxSource[ReqNumW-1:0]) begin
Tests: T1 T2 T3
83 1/1 source_d = '0;
Tests: T1 T2 T3
84 end else begin
85 1/1 source_d = source_q + ReqNumOne;
Tests: T1 T2 T3
86 end
87 end
MISSING_ELSE
88 end
89
90 1/1 assign tl_source = top_pkg::TL_AIW'(source_q);
Tests: T1 T2 T3
91 end
92
93 // For TL-UL Get opcode all active bytes must have their mask bit set, so all reads get all tl_be
94 // bits set. For writes the supplied be_i is used as the mask.
95 unreachable assign tl_be = ~we_i ? {top_pkg::TL_DBW{1'b1}} : be_i;
96
97 1/1 assign tl_out = '{
Tests: T1 T2 T3
98 a_valid: req_i,
99 a_opcode: (~we_i) ? Get :
100 (&be_i) ? PutFullData :
101 PutPartialData,
102 a_param: 3'h0,
103 a_size: top_pkg::TL_SZW'(WordSize),
104 a_mask: tl_be,
105 a_source: tl_source,
106 a_address: {addr_i[31:WordSize], {WordSize{1'b0}}},
107 a_data: wdata_i,
108 a_user: '{default: '0, data_intg: wdata_intg_i, instr_type: instr_type_i, rsvd: user_rsvd_i},
109 d_ready: 1'b1
110 };
111
112 tlul_cmd_intg_gen #(.EnableDataIntgGen (EnableDataIntgGen)) u_cmd_intg_gen (
113 .tl_i(tl_out),
114 .tl_o(tl_o)
115 );
116
117 1/1 assign gnt_o = tl_i.a_ready;
Tests: T1 T2 T3
118
119 1/1 assign valid_o = tl_i.d_valid;
Tests: T1 T2 T3
120 1/1 assign rdata_o = tl_i.d_data;
Tests: T1 T2 T3
121 1/1 assign rdata_intg_o = tl_i.d_user.data_intg;
Tests: T1 T2 T3
122
123 logic intg_err;
124 tlul_rsp_intg_chk #(
125 .EnableRspDataIntgCheck(EnableRspDataIntgCheck)
126 ) u_rsp_chk (
127 .tl_i,
128 .err_o(intg_err)
129 );
130
131 logic intg_err_q;
132 always_ff @(posedge clk_i or negedge rst_ni) begin
133 1/1 if (!rst_ni) begin
Tests: T1 T2 T3
134 1/1 intg_err_q <= '0;
Tests: T1 T2 T3
135 1/1 end else if (intg_err) begin
Tests: T1 T2 T3
136 0/1 ==> intg_err_q <= 1'b1;
137 end
MISSING_ELSE
138 end
139
140 // err_o is transactional. This allows the host to continue
141 // debug without receiving an endless stream of errors.
142 1/1 assign err_o = tl_i.d_error | intg_err;
Tests: T1 T2 T3
143
144 // intg_err_o is permanent once detected, and should be used
145 // to trigger alerts
146 1/1 assign intg_err_o = intg_err_q | intg_err;
Tests: T1 T2 T3
147
148 // Addresses are assumed to be word-aligned, and the bottom bits are ignored
149 logic unused_addr_bottom_bits;
150 0/1 ==> assign unused_addr_bottom_bits = ^addr_i[WordSize-1:0];
151
152 // Explicitly ignore unused fields of tl_i
153 logic unused_tl_i_fields;
154 1/1 assign unused_tl_i_fields = ^{tl_i.d_opcode, tl_i.d_param,
Tests: T1 T2 T3
155 tl_i.d_size, tl_i.d_source, tl_i.d_sink,
156 tl_i.d_user};
157
158 `ifdef INC_ASSERT
159 //VCS coverage off
160 // pragma coverage off
161 localparam int OutstandingReqCntW =
162 (MAX_REQS == 2 ** $clog2(MAX_REQS)) ? $clog2(MAX_REQS) + 1 : $clog2(MAX_REQS);
163 localparam logic [OutstandingReqCntW-1:0] OutstandingReqCntOne = OutstandingReqCntW'(1'b1);
164
165 logic [OutstandingReqCntW-1:0] outstanding_reqs_q;
166 logic [OutstandingReqCntW-1:0] outstanding_reqs_d;
167
168 always_comb begin
169 unreachable outstanding_reqs_d = outstanding_reqs_q;
170
171 unreachable if ((req_i && gnt_o) && !valid_o) begin
172 unreachable outstanding_reqs_d = outstanding_reqs_q + OutstandingReqCntOne;
173 unreachable end else if (!(req_i && gnt_o) && valid_o) begin
174 unreachable outstanding_reqs_d = outstanding_reqs_q - OutstandingReqCntOne;
175 end
==> MISSING_ELSE
176 end
177
178 always_ff @(posedge clk_i or negedge rst_ni) begin
179 unreachable if (!rst_ni) begin
180 unreachable outstanding_reqs_q <= '0;
181 end else begin
182 unreachable outstanding_reqs_q <= outstanding_reqs_d;
Cond Coverage for Instance : tb.dut.top_earlgrey.u_rv_core_ibex.tl_adapter_host_i_ibex
| Total | Covered | Percent |
Conditions | 13 | 9 | 69.23 |
Logical | 13 | 9 | 69.23 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 81
EXPRESSION (req_i && gnt_o)
--1-- --2--
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 82
EXPRESSION (g_multiple_reqs.source_q == g_multiple_reqs.MaxSource[(g_multiple_reqs.ReqNumW - 1):0])
--------------------------------------------1-------------------------------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 95
EXPRESSION (((~we_i)) ? ({top_pkg::TL_DBW {1'b1}}) : be_i)
----1----
-1- | Status | Tests |
0 | Unreachable | |
1 | Covered | T1,T2,T3 |
LINE 97
EXPRESSION (((~we_i)) ? Get : (((&be_i)) ? PutFullData : PutPartialData))
----1----
-1- | Status | Tests |
0 | Unreachable | |
1 | Covered | T1,T2,T3 |
LINE 97
SUB-EXPRESSION (((&be_i)) ? PutFullData : PutPartialData)
----1----
-1- | Status | Tests |
0 | Unreachable | |
1 | Unreachable | |
LINE 142
EXPRESSION (tl_i.d_error | intg_err)
------1----- ----2---
-1- | -2- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Not Covered | |
1 | 0 | Covered | T192,T245,T213 |
LINE 146
EXPRESSION (intg_err_q | intg_err)
-----1---- ----2---
-1- | -2- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Not Covered | |
1 | 0 | Not Covered | |
Branch Coverage for Instance : tb.dut.top_earlgrey.u_rv_core_ibex.tl_adapter_host_i_ibex
| Line No. | Total | Covered | Percent |
Branches |
|
9 |
8 |
88.89 |
TERNARY |
95 |
1 |
1 |
100.00 |
IF |
133 |
3 |
2 |
66.67 |
IF |
71 |
2 |
2 |
100.00 |
IF |
81 |
3 |
3 |
100.00 |
95 assign tl_be = ~we_i ? {top_pkg::TL_DBW{1'b1}} : be_i;
-1-
==>
==> (Unreachable)
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Unreachable |
|
133 if (!rst_ni) begin
-1-
134 intg_err_q <= '0;
==>
135 end else if (intg_err) begin
-2-
136 intg_err_q <= 1'b1;
==>
137 end
MISSING_ELSE
==>
Branches:
-1- | -2- | Status | Tests |
1 |
- |
Covered |
T1,T2,T3 |
0 |
1 |
Not Covered |
|
0 |
0 |
Covered |
T1,T2,T3 |
71 if (!rst_ni) begin
-1-
72 source_q <= '0;
==>
73 end else begin
74 source_q <= source_d;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T1,T2,T3 |
81 if (req_i && gnt_o) begin
-1-
82 if (source_q == MaxSource[ReqNumW-1:0]) begin
-2-
83 source_d = '0;
==>
84 end else begin
85 source_d = source_q + ReqNumOne;
==>
86 end
87 end
MISSING_ELSE
==>
Branches:
-1- | -2- | Status | Tests |
1 |
1 |
Covered |
T1,T2,T3 |
1 |
0 |
Covered |
T1,T2,T3 |
0 |
- |
Covered |
T1,T2,T3 |
Assert Coverage for Instance : tb.dut.top_earlgrey.u_rv_core_ibex.tl_adapter_host_i_ibex
Assertion Details
DontExceeedMaxReqs
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
491226693 |
59413671 |
0 |
0 |
T1 |
42275 |
3485 |
0 |
0 |
T2 |
91152 |
9245 |
0 |
0 |
T3 |
115201 |
75597 |
0 |
0 |
T4 |
110863 |
12771 |
0 |
0 |
T5 |
83840 |
11232 |
0 |
0 |
T6 |
116117 |
12981 |
0 |
0 |
T30 |
92780 |
10482 |
0 |
0 |
T68 |
219320 |
24038 |
0 |
0 |
T104 |
98538 |
12006 |
0 |
0 |
T105 |
67890 |
6643 |
0 |
0 |
Line Coverage for Instance : tb.dut.top_earlgrey.u_rv_core_ibex.tl_adapter_host_d_ibex
| Line No. | Total | Covered | Percent |
TOTAL | | 23 | 21 | 91.30 |
ALWAYS | 71 | 3 | 3 | 100.00 |
ALWAYS | 79 | 5 | 5 | 100.00 |
CONT_ASSIGN | 90 | 1 | 1 | 100.00 |
CONT_ASSIGN | 95 | 1 | 1 | 100.00 |
CONT_ASSIGN | 97 | 1 | 1 | 100.00 |
CONT_ASSIGN | 117 | 1 | 1 | 100.00 |
CONT_ASSIGN | 119 | 1 | 1 | 100.00 |
CONT_ASSIGN | 120 | 1 | 1 | 100.00 |
CONT_ASSIGN | 121 | 1 | 1 | 100.00 |
ALWAYS | 133 | 4 | 3 | 75.00 |
CONT_ASSIGN | 142 | 1 | 1 | 100.00 |
CONT_ASSIGN | 146 | 1 | 1 | 100.00 |
CONT_ASSIGN | 150 | 1 | 0 | 0.00 |
CONT_ASSIGN | 154 | 1 | 1 | 100.00 |
ALWAYS | 169 | 0 | 0 | |
ALWAYS | 179 | 0 | 0 | |
70 always_ff @(posedge clk_i or negedge rst_ni) begin
71 1/1 if (!rst_ni) begin
Tests: T1 T2 T3
72 1/1 source_q <= '0;
Tests: T1 T2 T3
73 end else begin
74 1/1 source_q <= source_d;
Tests: T1 T2 T3
75 end
76 end
77
78 always_comb begin
79 1/1 source_d = source_q;
Tests: T1 T2 T3
80
81 1/1 if (req_i && gnt_o) begin
Tests: T1 T2 T3
82 1/1 if (source_q == MaxSource[ReqNumW-1:0]) begin
Tests: T1 T2 T3
83 1/1 source_d = '0;
Tests: T1 T2 T3
84 end else begin
85 1/1 source_d = source_q + ReqNumOne;
Tests: T1 T2 T3
86 end
87 end
MISSING_ELSE
88 end
89
90 1/1 assign tl_source = top_pkg::TL_AIW'(source_q);
Tests: T1 T2 T3
91 end
92
93 // For TL-UL Get opcode all active bytes must have their mask bit set, so all reads get all tl_be
94 // bits set. For writes the supplied be_i is used as the mask.
95 1/1 assign tl_be = ~we_i ? {top_pkg::TL_DBW{1'b1}} : be_i;
Tests: T1 T2 T3
96
97 1/1 assign tl_out = '{
Tests: T1 T2 T3
98 a_valid: req_i,
99 a_opcode: (~we_i) ? Get :
100 (&be_i) ? PutFullData :
101 PutPartialData,
102 a_param: 3'h0,
103 a_size: top_pkg::TL_SZW'(WordSize),
104 a_mask: tl_be,
105 a_source: tl_source,
106 a_address: {addr_i[31:WordSize], {WordSize{1'b0}}},
107 a_data: wdata_i,
108 a_user: '{default: '0, data_intg: wdata_intg_i, instr_type: instr_type_i, rsvd: user_rsvd_i},
109 d_ready: 1'b1
110 };
111
112 tlul_cmd_intg_gen #(.EnableDataIntgGen (EnableDataIntgGen)) u_cmd_intg_gen (
113 .tl_i(tl_out),
114 .tl_o(tl_o)
115 );
116
117 1/1 assign gnt_o = tl_i.a_ready;
Tests: T1 T2 T3
118
119 1/1 assign valid_o = tl_i.d_valid;
Tests: T1 T2 T3
120 1/1 assign rdata_o = tl_i.d_data;
Tests: T1 T2 T3
121 1/1 assign rdata_intg_o = tl_i.d_user.data_intg;
Tests: T1 T2 T3
122
123 logic intg_err;
124 tlul_rsp_intg_chk #(
125 .EnableRspDataIntgCheck(EnableRspDataIntgCheck)
126 ) u_rsp_chk (
127 .tl_i,
128 .err_o(intg_err)
129 );
130
131 logic intg_err_q;
132 always_ff @(posedge clk_i or negedge rst_ni) begin
133 1/1 if (!rst_ni) begin
Tests: T1 T2 T3
134 1/1 intg_err_q <= '0;
Tests: T1 T2 T3
135 1/1 end else if (intg_err) begin
Tests: T1 T2 T3
136 0/1 ==> intg_err_q <= 1'b1;
137 end
MISSING_ELSE
138 end
139
140 // err_o is transactional. This allows the host to continue
141 // debug without receiving an endless stream of errors.
142 1/1 assign err_o = tl_i.d_error | intg_err;
Tests: T1 T2 T3
143
144 // intg_err_o is permanent once detected, and should be used
145 // to trigger alerts
146 1/1 assign intg_err_o = intg_err_q | intg_err;
Tests: T1 T2 T3
147
148 // Addresses are assumed to be word-aligned, and the bottom bits are ignored
149 logic unused_addr_bottom_bits;
150 0/1 ==> assign unused_addr_bottom_bits = ^addr_i[WordSize-1:0];
151
152 // Explicitly ignore unused fields of tl_i
153 logic unused_tl_i_fields;
154 1/1 assign unused_tl_i_fields = ^{tl_i.d_opcode, tl_i.d_param,
Tests: T1 T2 T3
155 tl_i.d_size, tl_i.d_source, tl_i.d_sink,
156 tl_i.d_user};
157
158 `ifdef INC_ASSERT
159 //VCS coverage off
160 // pragma coverage off
161 localparam int OutstandingReqCntW =
162 (MAX_REQS == 2 ** $clog2(MAX_REQS)) ? $clog2(MAX_REQS) + 1 : $clog2(MAX_REQS);
163 localparam logic [OutstandingReqCntW-1:0] OutstandingReqCntOne = OutstandingReqCntW'(1'b1);
164
165 logic [OutstandingReqCntW-1:0] outstanding_reqs_q;
166 logic [OutstandingReqCntW-1:0] outstanding_reqs_d;
167
168 always_comb begin
169 unreachable outstanding_reqs_d = outstanding_reqs_q;
170
171 unreachable if ((req_i && gnt_o) && !valid_o) begin
172 unreachable outstanding_reqs_d = outstanding_reqs_q + OutstandingReqCntOne;
173 unreachable end else if (!(req_i && gnt_o) && valid_o) begin
174 unreachable outstanding_reqs_d = outstanding_reqs_q - OutstandingReqCntOne;
175 end
==> MISSING_ELSE
176 end
177
178 always_ff @(posedge clk_i or negedge rst_ni) begin
179 unreachable if (!rst_ni) begin
180 unreachable outstanding_reqs_q <= '0;
181 end else begin
182 unreachable outstanding_reqs_q <= outstanding_reqs_d;
Cond Coverage for Instance : tb.dut.top_earlgrey.u_rv_core_ibex.tl_adapter_host_d_ibex
| Total | Covered | Percent |
Conditions | 17 | 14 | 82.35 |
Logical | 17 | 14 | 82.35 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 81
EXPRESSION (req_i && gnt_o)
--1-- --2--
-1- | -2- | Status | Tests |
0 | 1 | Covered | T35,T97,T98 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 82
EXPRESSION (g_multiple_reqs.source_q == g_multiple_reqs.MaxSource[0])
-----------------------------1----------------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 95
EXPRESSION (((~we_i)) ? ({top_pkg::TL_DBW {1'b1}}) : be_i)
----1----
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 97
EXPRESSION (((~we_i)) ? Get : (((&be_i)) ? PutFullData : PutPartialData))
----1----
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 97
SUB-EXPRESSION (((&be_i)) ? PutFullData : PutPartialData)
----1----
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 142
EXPRESSION (tl_i.d_error | intg_err)
------1----- ----2---
-1- | -2- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Not Covered | |
1 | 0 | Covered | T83,T229,T246 |
LINE 146
EXPRESSION (intg_err_q | intg_err)
-----1---- ----2---
-1- | -2- | Status | Tests |
0 | 0 | Covered | T1,T2,T3 |
0 | 1 | Not Covered | |
1 | 0 | Not Covered | |
Branch Coverage for Instance : tb.dut.top_earlgrey.u_rv_core_ibex.tl_adapter_host_d_ibex
| Line No. | Total | Covered | Percent |
Branches |
|
10 |
9 |
90.00 |
TERNARY |
95 |
2 |
2 |
100.00 |
IF |
133 |
3 |
2 |
66.67 |
IF |
71 |
2 |
2 |
100.00 |
IF |
81 |
3 |
3 |
100.00 |
95 assign tl_be = ~we_i ? {top_pkg::TL_DBW{1'b1}} : be_i;
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T1,T2,T3 |
133 if (!rst_ni) begin
-1-
134 intg_err_q <= '0;
==>
135 end else if (intg_err) begin
-2-
136 intg_err_q <= 1'b1;
==>
137 end
MISSING_ELSE
==>
Branches:
-1- | -2- | Status | Tests |
1 |
- |
Covered |
T1,T2,T3 |
0 |
1 |
Not Covered |
|
0 |
0 |
Covered |
T1,T2,T3 |
71 if (!rst_ni) begin
-1-
72 source_q <= '0;
==>
73 end else begin
74 source_q <= source_d;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T1,T2,T3 |
81 if (req_i && gnt_o) begin
-1-
82 if (source_q == MaxSource[ReqNumW-1:0]) begin
-2-
83 source_d = '0;
==>
84 end else begin
85 source_d = source_q + ReqNumOne;
==>
86 end
87 end
MISSING_ELSE
==>
Branches:
-1- | -2- | Status | Tests |
1 |
1 |
Covered |
T1,T2,T3 |
1 |
0 |
Covered |
T1,T2,T3 |
0 |
- |
Covered |
T1,T2,T3 |
Assert Coverage for Instance : tb.dut.top_earlgrey.u_rv_core_ibex.tl_adapter_host_d_ibex
Assertion Details
DontExceeedMaxReqs
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
491226693 |
42903280 |
0 |
0 |
T1 |
42275 |
461 |
0 |
0 |
T2 |
91152 |
4463 |
0 |
0 |
T3 |
115201 |
7519 |
0 |
0 |
T4 |
110863 |
6711 |
0 |
0 |
T5 |
83840 |
4589 |
0 |
0 |
T6 |
116117 |
9987 |
0 |
0 |
T30 |
92780 |
6155 |
0 |
0 |
T68 |
219320 |
20838 |
0 |
0 |
T104 |
98538 |
8028 |
0 |
0 |
T105 |
67890 |
3996 |
0 |
0 |