Line Coverage for Module :
tlul_socket_m1 ( parameter M=3,HReqPass=7,HRspPass=7,HReqDepth=0,HRspDepth=0,DReqPass=1,DRspPass=0,DReqDepth=1,DRspDepth=1,IDW=8,STIDW=2 + M=3,HReqPass=7,HRspPass=7,HReqDepth=0,HRspDepth=0,DReqPass=0,DRspPass=0,DReqDepth=1,DRspDepth=1,IDW=8,STIDW=2 + M=3,HReqPass=7,HRspPass=7,HReqDepth=0,HRspDepth=0,DReqPass=1,DRspPass=1,DReqDepth=0,DRspDepth=0,IDW=8,STIDW=2 )
Line Coverage for Module self-instances :
| Line No. | Total | Covered | Percent |
TOTAL | | 25 | 25 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 3/3 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 3/3 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 3/3 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 3/3 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 3/3 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 3/3 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 3/3 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
Line Coverage for Module :
tlul_socket_m1 ( parameter M=2,HReqPass=3,HRspPass=3,HReqDepth=0,HRspDepth=0,DReqPass=0,DRspPass=0,DReqDepth=1,DRspDepth=1,IDW=8,STIDW=1 + M=2,HReqPass=3,HRspPass=3,HReqDepth=0,HRspDepth=0,DReqPass=1,DRspPass=1,DReqDepth=0,DRspDepth=0,IDW=8,STIDW=1 )
Line Coverage for Module self-instances :
| Line No. | Total | Covered | Percent |
TOTAL | | 18 | 18 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 2/2 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 2/2 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 2/2 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 2/2 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 2/2 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 2/2 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 2/2 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3
Cond Coverage for Module :
tlul_socket_m1 ( parameter M=3,HReqPass=7,HRspPass=7,HReqDepth=0,HRspDepth=0,DReqPass=1,DRspPass=0,DReqDepth=1,DRspDepth=1,IDW=8,STIDW=2 + M=3,HReqPass=7,HRspPass=7,HReqDepth=0,HRspDepth=0,DReqPass=0,DRspPass=0,DReqDepth=1,DRspDepth=1,IDW=8,STIDW=2 + M=3,HReqPass=7,HRspPass=7,HReqDepth=0,HRspDepth=0,DReqPass=1,DRspPass=1,DReqDepth=0,DRspDepth=0,IDW=8,STIDW=2 )
Cond Coverage for Module self-instances :
| Total | Covered | Percent |
Conditions | 33 | 33 | 100.00 |
Logical | 33 | 33 | 100.00 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T3,T8,T12 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 2))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T3,T8,T12 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 2)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T3,T9 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T3,T8 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T3,T8,T12 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[2].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 2) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T2,T3 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T3,T8,T12 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 2)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Cond Coverage for Module :
tlul_socket_m1 ( parameter M=2,HReqPass=3,HRspPass=3,HReqDepth=0,HRspDepth=0,DReqPass=0,DRspPass=0,DReqDepth=1,DRspDepth=1,IDW=8,STIDW=1 + M=2,HReqPass=3,HRspPass=3,HReqDepth=0,HRspDepth=0,DReqPass=1,DRspPass=1,DReqDepth=0,DRspDepth=0,IDW=8,STIDW=1 )
Cond Coverage for Module self-instances :
| Total | Covered | Percent |
Conditions | 22 | 20 | 90.91 |
Logical | 22 | 20 | 90.91 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T3,T8 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T3,T7 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Module :
tlul_socket_m1
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
2147483647 |
19360755 |
0 |
0 |
T1 |
257370 |
689 |
0 |
0 |
T2 |
50952 |
331 |
0 |
0 |
T3 |
420336 |
2566 |
0 |
0 |
T7 |
458832 |
2773 |
0 |
0 |
T8 |
105648 |
1928 |
0 |
0 |
T9 |
111768 |
1196 |
0 |
0 |
T10 |
239208 |
573 |
0 |
0 |
T11 |
59928 |
413 |
0 |
0 |
T12 |
1021560 |
3580 |
0 |
0 |
T13 |
842256 |
3289 |
0 |
0 |
T25 |
274309 |
10 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
2147483647 |
11523431 |
0 |
0 |
T1 |
268560 |
220 |
0 |
0 |
T2 |
50952 |
195 |
0 |
0 |
T3 |
420336 |
1003 |
0 |
0 |
T7 |
458832 |
1157 |
0 |
0 |
T8 |
105648 |
998 |
0 |
0 |
T9 |
111768 |
607 |
0 |
0 |
T10 |
239208 |
267 |
0 |
0 |
T11 |
59928 |
180 |
0 |
0 |
T12 |
1021560 |
1751 |
0 |
0 |
T13 |
842256 |
1209 |
0 |
0 |
gen_host_fifo[2].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1043501080 |
3009557 |
0 |
0 |
T1 |
44760 |
108 |
0 |
0 |
T2 |
8492 |
29 |
0 |
0 |
T3 |
70056 |
301 |
0 |
0 |
T7 |
76472 |
400 |
0 |
0 |
T8 |
17608 |
172 |
0 |
0 |
T9 |
18628 |
114 |
0 |
0 |
T10 |
39868 |
98 |
0 |
0 |
T11 |
9988 |
23 |
0 |
0 |
T12 |
170260 |
650 |
0 |
0 |
T13 |
140376 |
480 |
0 |
0 |
maxM
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
21600 |
21600 |
0 |
0 |
T1 |
24 |
24 |
0 |
0 |
T2 |
24 |
24 |
0 |
0 |
T3 |
24 |
24 |
0 |
0 |
T7 |
24 |
24 |
0 |
0 |
T8 |
24 |
24 |
0 |
0 |
T9 |
24 |
24 |
0 |
0 |
T10 |
24 |
24 |
0 |
0 |
T11 |
24 |
24 |
0 |
0 |
T12 |
24 |
24 |
0 |
0 |
T13 |
24 |
24 |
0 |
0 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
2147483647 |
98672956 |
0 |
0 |
T1 |
268560 |
1749 |
0 |
0 |
T2 |
50952 |
494 |
0 |
0 |
T3 |
420336 |
6551 |
0 |
0 |
T7 |
458832 |
10320 |
0 |
0 |
T8 |
105648 |
2672 |
0 |
0 |
T9 |
111768 |
1863 |
0 |
0 |
T10 |
239208 |
2234 |
0 |
0 |
T11 |
59928 |
528 |
0 |
0 |
T12 |
1021560 |
14634 |
0 |
0 |
T13 |
842256 |
5393 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_sm1_28
| Line No. | Total | Covered | Percent |
TOTAL | | 25 | 25 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 3/3 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 3/3 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 3/3 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 3/3 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 3/3 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 3/3 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 3/3 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
Cond Coverage for Instance : tb.dut.u_sm1_28
| Total | Covered | Percent |
Conditions | 33 | 29 | 87.88 |
Logical | 33 | 29 | 87.88 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 2))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 2)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T3,T7 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T3,T7 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[2].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 2) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T3,T7,T12 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 2)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_sm1_28
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
1480002 |
0 |
0 |
T1 |
11190 |
73 |
0 |
0 |
T2 |
2123 |
42 |
0 |
0 |
T3 |
17514 |
247 |
0 |
0 |
T7 |
19118 |
306 |
0 |
0 |
T8 |
4402 |
224 |
0 |
0 |
T9 |
4657 |
150 |
0 |
0 |
T10 |
9967 |
57 |
0 |
0 |
T11 |
2497 |
45 |
0 |
0 |
T12 |
42565 |
313 |
0 |
0 |
T13 |
35094 |
265 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
413763 |
0 |
0 |
T1 |
11190 |
8 |
0 |
0 |
T2 |
2123 |
4 |
0 |
0 |
T3 |
17514 |
50 |
0 |
0 |
T7 |
19118 |
70 |
0 |
0 |
T8 |
4402 |
36 |
0 |
0 |
T9 |
4657 |
26 |
0 |
0 |
T10 |
9967 |
5 |
0 |
0 |
T11 |
2497 |
9 |
0 |
0 |
T12 |
42565 |
35 |
0 |
0 |
T13 |
35094 |
24 |
0 |
0 |
gen_host_fifo[2].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
525154 |
0 |
0 |
T1 |
11190 |
5 |
0 |
0 |
T2 |
2123 |
7 |
0 |
0 |
T3 |
17514 |
56 |
0 |
0 |
T7 |
19118 |
63 |
0 |
0 |
T8 |
4402 |
35 |
0 |
0 |
T9 |
4657 |
24 |
0 |
0 |
T10 |
9967 |
7 |
0 |
0 |
T11 |
2497 |
8 |
0 |
0 |
T12 |
42565 |
64 |
0 |
0 |
T13 |
35094 |
43 |
0 |
0 |
maxM
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
900 |
900 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
T11 |
1 |
1 |
0 |
0 |
T12 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
12895639 |
0 |
0 |
T1 |
11190 |
335 |
0 |
0 |
T2 |
2123 |
53 |
0 |
0 |
T3 |
17514 |
1021 |
0 |
0 |
T7 |
19118 |
1722 |
0 |
0 |
T8 |
4402 |
286 |
0 |
0 |
T9 |
4657 |
197 |
0 |
0 |
T10 |
9967 |
369 |
0 |
0 |
T11 |
2497 |
62 |
0 |
0 |
T12 |
42565 |
2139 |
0 |
0 |
T13 |
35094 |
838 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_sm1_29
| Line No. | Total | Covered | Percent |
TOTAL | | 25 | 25 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 3/3 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 3/3 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 3/3 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 3/3 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 3/3 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 3/3 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 3/3 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
Cond Coverage for Instance : tb.dut.u_sm1_29
| Total | Covered | Percent |
Conditions | 33 | 29 | 87.88 |
Logical | 33 | 29 | 87.88 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 2))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 2)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T3,T7 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T3,T8,T7 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[2].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 2) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T7,T12,T13 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 2)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_sm1_29
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
1633183 |
0 |
0 |
T1 |
11190 |
53 |
0 |
0 |
T2 |
2123 |
56 |
0 |
0 |
T3 |
17514 |
227 |
0 |
0 |
T7 |
19118 |
263 |
0 |
0 |
T8 |
4402 |
308 |
0 |
0 |
T9 |
4657 |
183 |
0 |
0 |
T10 |
9967 |
28 |
0 |
0 |
T11 |
2497 |
84 |
0 |
0 |
T12 |
42565 |
332 |
0 |
0 |
T13 |
35094 |
245 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
475293 |
0 |
0 |
T1 |
11190 |
2 |
0 |
0 |
T2 |
2123 |
6 |
0 |
0 |
T3 |
17514 |
14 |
0 |
0 |
T7 |
19118 |
42 |
0 |
0 |
T8 |
4402 |
46 |
0 |
0 |
T9 |
4657 |
25 |
0 |
0 |
T10 |
9967 |
9 |
0 |
0 |
T11 |
2497 |
13 |
0 |
0 |
T12 |
42565 |
39 |
0 |
0 |
T13 |
35094 |
45 |
0 |
0 |
gen_host_fifo[2].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
564481 |
0 |
0 |
T1 |
11190 |
19 |
0 |
0 |
T2 |
2123 |
5 |
0 |
0 |
T3 |
17514 |
64 |
0 |
0 |
T7 |
19118 |
61 |
0 |
0 |
T8 |
4402 |
51 |
0 |
0 |
T9 |
4657 |
35 |
0 |
0 |
T10 |
9967 |
4 |
0 |
0 |
T11 |
2497 |
5 |
0 |
0 |
T12 |
42565 |
93 |
0 |
0 |
T13 |
35094 |
36 |
0 |
0 |
maxM
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
900 |
900 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
T11 |
1 |
1 |
0 |
0 |
T12 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
12558818 |
0 |
0 |
T1 |
11190 |
259 |
0 |
0 |
T2 |
2123 |
57 |
0 |
0 |
T3 |
17514 |
980 |
0 |
0 |
T7 |
19118 |
1570 |
0 |
0 |
T8 |
4402 |
315 |
0 |
0 |
T9 |
4657 |
226 |
0 |
0 |
T10 |
9967 |
299 |
0 |
0 |
T11 |
2497 |
77 |
0 |
0 |
T12 |
42565 |
1999 |
0 |
0 |
T13 |
35094 |
539 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_sm1_31
| Line No. | Total | Covered | Percent |
TOTAL | | 25 | 25 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 3/3 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 3/3 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 3/3 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 3/3 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 3/3 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 3/3 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 3/3 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
Cond Coverage for Instance : tb.dut.u_sm1_31
| Total | Covered | Percent |
Conditions | 33 | 29 | 87.88 |
Logical | 33 | 29 | 87.88 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 2))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 2)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T3,T7 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T3,T8 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[2].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 2) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T7,T10 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 2)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_sm1_31
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
1616376 |
0 |
0 |
T1 |
11190 |
69 |
0 |
0 |
T2 |
2123 |
64 |
0 |
0 |
T3 |
17514 |
239 |
0 |
0 |
T7 |
19118 |
318 |
0 |
0 |
T8 |
4402 |
328 |
0 |
0 |
T9 |
4657 |
153 |
0 |
0 |
T10 |
9967 |
32 |
0 |
0 |
T11 |
2497 |
68 |
0 |
0 |
T12 |
42565 |
405 |
0 |
0 |
T13 |
35094 |
333 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
459365 |
0 |
0 |
T1 |
11190 |
2 |
0 |
0 |
T2 |
2123 |
1 |
0 |
0 |
T3 |
17514 |
50 |
0 |
0 |
T7 |
19118 |
42 |
0 |
0 |
T8 |
4402 |
44 |
0 |
0 |
T9 |
4657 |
25 |
0 |
0 |
T10 |
9967 |
4 |
0 |
0 |
T11 |
2497 |
6 |
0 |
0 |
T12 |
42565 |
89 |
0 |
0 |
T13 |
35094 |
34 |
0 |
0 |
gen_host_fifo[2].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
550676 |
0 |
0 |
T1 |
11190 |
5 |
0 |
0 |
T2 |
2123 |
9 |
0 |
0 |
T3 |
17514 |
23 |
0 |
0 |
T7 |
19118 |
48 |
0 |
0 |
T8 |
4402 |
49 |
0 |
0 |
T9 |
4657 |
26 |
0 |
0 |
T10 |
9967 |
11 |
0 |
0 |
T11 |
2497 |
4 |
0 |
0 |
T12 |
42565 |
104 |
0 |
0 |
T13 |
35094 |
34 |
0 |
0 |
maxM
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
900 |
900 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
T11 |
1 |
1 |
0 |
0 |
T12 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
11410971 |
0 |
0 |
T1 |
11190 |
339 |
0 |
0 |
T2 |
2123 |
60 |
0 |
0 |
T3 |
17514 |
1027 |
0 |
0 |
T7 |
19118 |
1570 |
0 |
0 |
T8 |
4402 |
325 |
0 |
0 |
T9 |
4657 |
196 |
0 |
0 |
T10 |
9967 |
294 |
0 |
0 |
T11 |
2497 |
59 |
0 |
0 |
T12 |
42565 |
2170 |
0 |
0 |
T13 |
35094 |
693 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_sm1_33
| Line No. | Total | Covered | Percent |
TOTAL | | 18 | 18 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 2/2 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 2/2 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 2/2 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 2/2 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 2/2 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 2/2 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 2/2 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3
Cond Coverage for Instance : tb.dut.u_sm1_33
| Total | Covered | Percent |
Conditions | 22 | 20 | 90.91 |
Logical | 22 | 20 | 90.91 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T3,T8 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T3,T7,T10 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_sm1_33
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
247915 |
0 |
0 |
T1 |
11190 |
6 |
0 |
0 |
T2 |
2123 |
2 |
0 |
0 |
T3 |
17514 |
14 |
0 |
0 |
T7 |
19118 |
24 |
0 |
0 |
T8 |
4402 |
54 |
0 |
0 |
T9 |
4657 |
31 |
0 |
0 |
T10 |
9967 |
6 |
0 |
0 |
T11 |
2497 |
6 |
0 |
0 |
T12 |
42565 |
33 |
0 |
0 |
T13 |
35094 |
41 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
310920 |
0 |
0 |
T1 |
11190 |
7 |
0 |
0 |
T2 |
2123 |
13 |
0 |
0 |
T3 |
17514 |
11 |
0 |
0 |
T7 |
19118 |
41 |
0 |
0 |
T8 |
4402 |
31 |
0 |
0 |
T9 |
4657 |
24 |
0 |
0 |
T10 |
9967 |
5 |
0 |
0 |
T11 |
2497 |
6 |
0 |
0 |
T12 |
42565 |
82 |
0 |
0 |
T13 |
35094 |
20 |
0 |
0 |
maxM
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
900 |
900 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
T11 |
1 |
1 |
0 |
0 |
T12 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
2487664 |
0 |
0 |
T1 |
11190 |
33 |
0 |
0 |
T2 |
2123 |
15 |
0 |
0 |
T3 |
17514 |
88 |
0 |
0 |
T7 |
19118 |
250 |
0 |
0 |
T8 |
4402 |
80 |
0 |
0 |
T9 |
4657 |
55 |
0 |
0 |
T10 |
9967 |
55 |
0 |
0 |
T11 |
2497 |
12 |
0 |
0 |
T12 |
42565 |
285 |
0 |
0 |
T13 |
35094 |
112 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_sm1_34
| Line No. | Total | Covered | Percent |
TOTAL | | 18 | 18 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 2/2 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 2/2 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 2/2 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 2/2 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 2/2 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 2/2 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 2/2 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3
Cond Coverage for Instance : tb.dut.u_sm1_34
| Total | Covered | Percent |
Conditions | 22 | 20 | 90.91 |
Logical | 22 | 20 | 90.91 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T3,T7,T12 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T7,T12 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_sm1_34
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
300123 |
0 |
0 |
T1 |
11190 |
2 |
0 |
0 |
T2 |
2123 |
3 |
0 |
0 |
T3 |
17514 |
14 |
0 |
0 |
T7 |
19118 |
29 |
0 |
0 |
T8 |
4402 |
32 |
0 |
0 |
T9 |
4657 |
24 |
0 |
0 |
T10 |
9967 |
0 |
0 |
0 |
T11 |
2497 |
6 |
0 |
0 |
T12 |
42565 |
51 |
0 |
0 |
T13 |
35094 |
33 |
0 |
0 |
T25 |
0 |
4 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
360371 |
0 |
0 |
T1 |
11190 |
11 |
0 |
0 |
T2 |
2123 |
15 |
0 |
0 |
T3 |
17514 |
38 |
0 |
0 |
T7 |
19118 |
47 |
0 |
0 |
T8 |
4402 |
31 |
0 |
0 |
T9 |
4657 |
25 |
0 |
0 |
T10 |
9967 |
13 |
0 |
0 |
T11 |
2497 |
11 |
0 |
0 |
T12 |
42565 |
45 |
0 |
0 |
T13 |
35094 |
53 |
0 |
0 |
maxM
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
900 |
900 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
T11 |
1 |
1 |
0 |
0 |
T12 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
2354636 |
0 |
0 |
T1 |
11190 |
25 |
0 |
0 |
T2 |
2123 |
18 |
0 |
0 |
T3 |
17514 |
134 |
0 |
0 |
T7 |
19118 |
290 |
0 |
0 |
T8 |
4402 |
62 |
0 |
0 |
T9 |
4657 |
49 |
0 |
0 |
T10 |
9967 |
7 |
0 |
0 |
T11 |
2497 |
16 |
0 |
0 |
T12 |
42565 |
413 |
0 |
0 |
T13 |
35094 |
113 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_sm1_36
| Line No. | Total | Covered | Percent |
TOTAL | | 18 | 18 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 2/2 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 2/2 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 2/2 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 2/2 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 2/2 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 2/2 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 2/2 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3
Cond Coverage for Instance : tb.dut.u_sm1_36
| Total | Covered | Percent |
Conditions | 22 | 20 | 90.91 |
Logical | 22 | 20 | 90.91 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T3,T8 |
1 | 0 | 1 | Covered | T2,T3,T8 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T25,T27,T28 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_sm1_36
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
790758 |
0 |
0 |
T1 |
11190 |
12 |
0 |
0 |
T2 |
2123 |
5 |
0 |
0 |
T3 |
17514 |
11 |
0 |
0 |
T7 |
19118 |
49 |
0 |
0 |
T8 |
4402 |
57 |
0 |
0 |
T9 |
4657 |
36 |
0 |
0 |
T10 |
9967 |
3 |
0 |
0 |
T11 |
2497 |
37 |
0 |
0 |
T12 |
42565 |
108 |
0 |
0 |
T13 |
35094 |
34 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
943204 |
0 |
0 |
T1 |
11190 |
10 |
0 |
0 |
T2 |
2123 |
21 |
0 |
0 |
T3 |
17514 |
19 |
0 |
0 |
T7 |
19118 |
69 |
0 |
0 |
T8 |
4402 |
77 |
0 |
0 |
T9 |
4657 |
25 |
0 |
0 |
T10 |
9967 |
22 |
0 |
0 |
T11 |
2497 |
5 |
0 |
0 |
T12 |
42565 |
136 |
0 |
0 |
T13 |
35094 |
58 |
0 |
0 |
maxM
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
900 |
900 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
T11 |
1 |
1 |
0 |
0 |
T12 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
3228155 |
0 |
0 |
T1 |
11190 |
24 |
0 |
0 |
T2 |
2123 |
12 |
0 |
0 |
T3 |
17514 |
102 |
0 |
0 |
T7 |
19118 |
173 |
0 |
0 |
T8 |
4402 |
59 |
0 |
0 |
T9 |
4657 |
51 |
0 |
0 |
T10 |
9967 |
29 |
0 |
0 |
T11 |
2497 |
18 |
0 |
0 |
T12 |
42565 |
311 |
0 |
0 |
T13 |
35094 |
106 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_sm1_38
| Line No. | Total | Covered | Percent |
TOTAL | | 18 | 18 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 2/2 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 2/2 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 2/2 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 2/2 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 2/2 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 2/2 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 2/2 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3
Cond Coverage for Instance : tb.dut.u_sm1_38
| Total | Covered | Percent |
Conditions | 22 | 20 | 90.91 |
Logical | 22 | 20 | 90.91 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T3,T7 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T7,T12 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_sm1_38
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
673679 |
0 |
0 |
T1 |
11190 |
6 |
0 |
0 |
T2 |
2123 |
16 |
0 |
0 |
T3 |
17514 |
244 |
0 |
0 |
T7 |
19118 |
54 |
0 |
0 |
T8 |
4402 |
67 |
0 |
0 |
T9 |
4657 |
27 |
0 |
0 |
T10 |
9967 |
8 |
0 |
0 |
T11 |
2497 |
14 |
0 |
0 |
T12 |
42565 |
42 |
0 |
0 |
T13 |
35094 |
65 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
804605 |
0 |
0 |
T1 |
11190 |
6 |
0 |
0 |
T2 |
2123 |
4 |
0 |
0 |
T3 |
17514 |
233 |
0 |
0 |
T7 |
19118 |
47 |
0 |
0 |
T8 |
4402 |
61 |
0 |
0 |
T9 |
4657 |
36 |
0 |
0 |
T10 |
9967 |
11 |
0 |
0 |
T11 |
2497 |
5 |
0 |
0 |
T12 |
42565 |
48 |
0 |
0 |
T13 |
35094 |
50 |
0 |
0 |
maxM
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
900 |
900 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
T11 |
1 |
1 |
0 |
0 |
T12 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
3163492 |
0 |
0 |
T1 |
11190 |
25 |
0 |
0 |
T2 |
2123 |
10 |
0 |
0 |
T3 |
17514 |
102 |
0 |
0 |
T7 |
19118 |
151 |
0 |
0 |
T8 |
4402 |
78 |
0 |
0 |
T9 |
4657 |
63 |
0 |
0 |
T10 |
9967 |
84 |
0 |
0 |
T11 |
2497 |
14 |
0 |
0 |
T12 |
42565 |
204 |
0 |
0 |
T13 |
35094 |
124 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_sm1_40
| Line No. | Total | Covered | Percent |
TOTAL | | 18 | 18 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 2/2 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 2/2 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 2/2 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 2/2 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 2/2 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 2/2 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 2/2 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3
Cond Coverage for Instance : tb.dut.u_sm1_40
| Total | Covered | Percent |
Conditions | 22 | 20 | 90.91 |
Logical | 22 | 20 | 90.91 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T3,T7 |
1 | 0 | 1 | Covered | T2,T3,T8 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T7,T12,T25 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_sm1_40
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
597984 |
0 |
0 |
T1 |
11190 |
7 |
0 |
0 |
T2 |
2123 |
5 |
0 |
0 |
T3 |
17514 |
16 |
0 |
0 |
T7 |
19118 |
15 |
0 |
0 |
T8 |
4402 |
51 |
0 |
0 |
T9 |
4657 |
29 |
0 |
0 |
T10 |
9967 |
3 |
0 |
0 |
T11 |
2497 |
10 |
0 |
0 |
T12 |
42565 |
27 |
0 |
0 |
T13 |
35094 |
28 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
687154 |
0 |
0 |
T1 |
11190 |
4 |
0 |
0 |
T2 |
2123 |
15 |
0 |
0 |
T3 |
17514 |
46 |
0 |
0 |
T7 |
19118 |
33 |
0 |
0 |
T8 |
4402 |
41 |
0 |
0 |
T9 |
4657 |
26 |
0 |
0 |
T10 |
9967 |
36 |
0 |
0 |
T11 |
2497 |
12 |
0 |
0 |
T12 |
42565 |
59 |
0 |
0 |
T13 |
35094 |
43 |
0 |
0 |
maxM
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
900 |
900 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
T11 |
1 |
1 |
0 |
0 |
T12 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
2091652 |
0 |
0 |
T1 |
11190 |
17 |
0 |
0 |
T2 |
2123 |
17 |
0 |
0 |
T3 |
17514 |
86 |
0 |
0 |
T7 |
19118 |
147 |
0 |
0 |
T8 |
4402 |
70 |
0 |
0 |
T9 |
4657 |
46 |
0 |
0 |
T10 |
9967 |
34 |
0 |
0 |
T11 |
2497 |
15 |
0 |
0 |
T12 |
42565 |
189 |
0 |
0 |
T13 |
35094 |
80 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_sm1_42
| Line No. | Total | Covered | Percent |
TOTAL | | 18 | 18 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 2/2 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 2/2 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 2/2 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 2/2 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T2 T3 T8 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 2/2 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 2/2 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 2/2 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3
Cond Coverage for Instance : tb.dut.u_sm1_42
| Total | Covered | Percent |
Conditions | 22 | 20 | 90.91 |
Logical | 22 | 20 | 90.91 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T2,T3,T8 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T2,T3,T8 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T3,T7,T10 |
1 | 0 | 1 | Covered | T2,T3,T8 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T2,T3,T8 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T3,T7,T10 |
1 | 0 | 1 | Covered | T2,T3,T8 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_sm1_42
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
679068 |
0 |
0 |
T2 |
2123 |
2 |
0 |
0 |
T3 |
17514 |
33 |
0 |
0 |
T7 |
19118 |
25 |
0 |
0 |
T8 |
4402 |
42 |
0 |
0 |
T9 |
4657 |
21 |
0 |
0 |
T10 |
9967 |
24 |
0 |
0 |
T11 |
2497 |
6 |
0 |
0 |
T12 |
42565 |
70 |
0 |
0 |
T13 |
35094 |
193 |
0 |
0 |
T25 |
274309 |
6 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
737366 |
0 |
0 |
T1 |
11190 |
5 |
0 |
0 |
T2 |
2123 |
8 |
0 |
0 |
T3 |
17514 |
61 |
0 |
0 |
T7 |
19118 |
29 |
0 |
0 |
T8 |
4402 |
46 |
0 |
0 |
T9 |
4657 |
21 |
0 |
0 |
T10 |
9967 |
3 |
0 |
0 |
T11 |
2497 |
5 |
0 |
0 |
T12 |
42565 |
70 |
0 |
0 |
T13 |
35094 |
96 |
0 |
0 |
maxM
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
900 |
900 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
T11 |
1 |
1 |
0 |
0 |
T12 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
2716360 |
0 |
0 |
T1 |
11190 |
5 |
0 |
0 |
T2 |
2123 |
10 |
0 |
0 |
T3 |
17514 |
93 |
0 |
0 |
T7 |
19118 |
228 |
0 |
0 |
T8 |
4402 |
70 |
0 |
0 |
T9 |
4657 |
42 |
0 |
0 |
T10 |
9967 |
107 |
0 |
0 |
T11 |
2497 |
11 |
0 |
0 |
T12 |
42565 |
365 |
0 |
0 |
T13 |
35094 |
155 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_sm1_43
| Line No. | Total | Covered | Percent |
TOTAL | | 18 | 18 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 2/2 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 2/2 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 2/2 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 2/2 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 2/2 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 2/2 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 2/2 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3
Cond Coverage for Instance : tb.dut.u_sm1_43
| Total | Covered | Percent |
Conditions | 22 | 20 | 90.91 |
Logical | 22 | 20 | 90.91 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T3,T8 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T7,T12 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_sm1_43
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
249452 |
0 |
0 |
T1 |
11190 |
9 |
0 |
0 |
T2 |
2123 |
9 |
0 |
0 |
T3 |
17514 |
33 |
0 |
0 |
T7 |
19118 |
20 |
0 |
0 |
T8 |
4402 |
36 |
0 |
0 |
T9 |
4657 |
33 |
0 |
0 |
T10 |
9967 |
2 |
0 |
0 |
T11 |
2497 |
11 |
0 |
0 |
T12 |
42565 |
40 |
0 |
0 |
T13 |
35094 |
37 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
316075 |
0 |
0 |
T1 |
11190 |
9 |
0 |
0 |
T2 |
2123 |
10 |
0 |
0 |
T3 |
17514 |
18 |
0 |
0 |
T7 |
19118 |
41 |
0 |
0 |
T8 |
4402 |
35 |
0 |
0 |
T9 |
4657 |
26 |
0 |
0 |
T10 |
9967 |
6 |
0 |
0 |
T11 |
2497 |
9 |
0 |
0 |
T12 |
42565 |
67 |
0 |
0 |
T13 |
35094 |
56 |
0 |
0 |
maxM
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
900 |
900 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
T11 |
1 |
1 |
0 |
0 |
T12 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
2183483 |
0 |
0 |
T1 |
11190 |
46 |
0 |
0 |
T2 |
2123 |
18 |
0 |
0 |
T3 |
17514 |
135 |
0 |
0 |
T7 |
19118 |
174 |
0 |
0 |
T8 |
4402 |
67 |
0 |
0 |
T9 |
4657 |
59 |
0 |
0 |
T10 |
9967 |
17 |
0 |
0 |
T11 |
2497 |
19 |
0 |
0 |
T12 |
42565 |
330 |
0 |
0 |
T13 |
35094 |
121 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_sm1_44
| Line No. | Total | Covered | Percent |
TOTAL | | 18 | 18 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 2/2 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 2/2 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 2/2 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 2/2 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 2/2 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 2/2 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 2/2 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3
Cond Coverage for Instance : tb.dut.u_sm1_44
| Total | Covered | Percent |
Conditions | 22 | 20 | 90.91 |
Logical | 22 | 20 | 90.91 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T3,T8 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T7,T12,T13 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_sm1_44
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
286493 |
0 |
0 |
T1 |
11190 |
5 |
0 |
0 |
T2 |
2123 |
4 |
0 |
0 |
T3 |
17514 |
28 |
0 |
0 |
T7 |
19118 |
18 |
0 |
0 |
T8 |
4402 |
45 |
0 |
0 |
T9 |
4657 |
25 |
0 |
0 |
T10 |
9967 |
10 |
0 |
0 |
T11 |
2497 |
2 |
0 |
0 |
T12 |
42565 |
30 |
0 |
0 |
T13 |
35094 |
25 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
356343 |
0 |
0 |
T1 |
11190 |
5 |
0 |
0 |
T2 |
2123 |
3 |
0 |
0 |
T3 |
17514 |
13 |
0 |
0 |
T7 |
19118 |
66 |
0 |
0 |
T8 |
4402 |
48 |
0 |
0 |
T9 |
4657 |
22 |
0 |
0 |
T10 |
9967 |
17 |
0 |
0 |
T11 |
2497 |
5 |
0 |
0 |
T12 |
42565 |
46 |
0 |
0 |
T13 |
35094 |
35 |
0 |
0 |
maxM
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
900 |
900 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
T11 |
1 |
1 |
0 |
0 |
T12 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
2195237 |
0 |
0 |
T1 |
11190 |
23 |
0 |
0 |
T2 |
2123 |
7 |
0 |
0 |
T3 |
17514 |
173 |
0 |
0 |
T7 |
19118 |
193 |
0 |
0 |
T8 |
4402 |
86 |
0 |
0 |
T9 |
4657 |
47 |
0 |
0 |
T10 |
9967 |
23 |
0 |
0 |
T11 |
2497 |
7 |
0 |
0 |
T12 |
42565 |
238 |
0 |
0 |
T13 |
35094 |
89 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_sm1_45
| Line No. | Total | Covered | Percent |
TOTAL | | 18 | 18 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 2/2 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 2/2 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 2/2 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 2/2 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 2/2 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 2/2 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 2/2 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3
Cond Coverage for Instance : tb.dut.u_sm1_45
| Total | Covered | Percent |
Conditions | 22 | 20 | 90.91 |
Logical | 22 | 20 | 90.91 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T3,T8 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T7,T12 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_sm1_45
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
291246 |
0 |
0 |
T1 |
11190 |
6 |
0 |
0 |
T2 |
2123 |
6 |
0 |
0 |
T3 |
17514 |
18 |
0 |
0 |
T7 |
19118 |
39 |
0 |
0 |
T8 |
4402 |
36 |
0 |
0 |
T9 |
4657 |
30 |
0 |
0 |
T10 |
9967 |
4 |
0 |
0 |
T11 |
2497 |
9 |
0 |
0 |
T12 |
42565 |
54 |
0 |
0 |
T13 |
35094 |
32 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
364357 |
0 |
0 |
T1 |
11190 |
4 |
0 |
0 |
T2 |
2123 |
4 |
0 |
0 |
T3 |
17514 |
16 |
0 |
0 |
T7 |
19118 |
33 |
0 |
0 |
T8 |
4402 |
47 |
0 |
0 |
T9 |
4657 |
25 |
0 |
0 |
T10 |
9967 |
13 |
0 |
0 |
T11 |
2497 |
12 |
0 |
0 |
T12 |
42565 |
57 |
0 |
0 |
T13 |
35094 |
31 |
0 |
0 |
maxM
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
900 |
900 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
T11 |
1 |
1 |
0 |
0 |
T12 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
2674224 |
0 |
0 |
T1 |
11190 |
33 |
0 |
0 |
T2 |
2123 |
9 |
0 |
0 |
T3 |
17514 |
123 |
0 |
0 |
T7 |
19118 |
230 |
0 |
0 |
T8 |
4402 |
78 |
0 |
0 |
T9 |
4657 |
55 |
0 |
0 |
T10 |
9967 |
43 |
0 |
0 |
T11 |
2497 |
20 |
0 |
0 |
T12 |
42565 |
420 |
0 |
0 |
T13 |
35094 |
86 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_sm1_46
| Line No. | Total | Covered | Percent |
TOTAL | | 18 | 18 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 2/2 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 2/2 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 2/2 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 2/2 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 2/2 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 2/2 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 2/2 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3
Cond Coverage for Instance : tb.dut.u_sm1_46
| Total | Covered | Percent |
Conditions | 22 | 20 | 90.91 |
Logical | 22 | 20 | 90.91 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T3,T8 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T3,T7,T12 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_sm1_46
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
264515 |
0 |
0 |
T1 |
11190 |
4 |
0 |
0 |
T2 |
2123 |
6 |
0 |
0 |
T3 |
17514 |
25 |
0 |
0 |
T7 |
19118 |
41 |
0 |
0 |
T8 |
4402 |
52 |
0 |
0 |
T9 |
4657 |
35 |
0 |
0 |
T10 |
9967 |
4 |
0 |
0 |
T11 |
2497 |
3 |
0 |
0 |
T12 |
42565 |
33 |
0 |
0 |
T13 |
35094 |
39 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
328286 |
0 |
0 |
T1 |
11190 |
3 |
0 |
0 |
T2 |
2123 |
6 |
0 |
0 |
T3 |
17514 |
31 |
0 |
0 |
T7 |
19118 |
27 |
0 |
0 |
T8 |
4402 |
37 |
0 |
0 |
T9 |
4657 |
22 |
0 |
0 |
T10 |
9967 |
6 |
0 |
0 |
T11 |
2497 |
10 |
0 |
0 |
T12 |
42565 |
79 |
0 |
0 |
T13 |
35094 |
30 |
0 |
0 |
maxM
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
900 |
900 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
T11 |
1 |
1 |
0 |
0 |
T12 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
1879014 |
0 |
0 |
T1 |
11190 |
13 |
0 |
0 |
T2 |
2123 |
11 |
0 |
0 |
T3 |
17514 |
161 |
0 |
0 |
T7 |
19118 |
216 |
0 |
0 |
T8 |
4402 |
82 |
0 |
0 |
T9 |
4657 |
56 |
0 |
0 |
T10 |
9967 |
44 |
0 |
0 |
T11 |
2497 |
13 |
0 |
0 |
T12 |
42565 |
336 |
0 |
0 |
T13 |
35094 |
135 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_sm1_47
| Line No. | Total | Covered | Percent |
TOTAL | | 18 | 18 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 2/2 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 2/2 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 2/2 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 2/2 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 2/2 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 2/2 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 2/2 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3
Cond Coverage for Instance : tb.dut.u_sm1_47
| Total | Covered | Percent |
Conditions | 22 | 20 | 90.91 |
Logical | 22 | 20 | 90.91 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T3,T8 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T3,T7,T12 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_sm1_47
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
292334 |
0 |
0 |
T1 |
11190 |
7 |
0 |
0 |
T2 |
2123 |
3 |
0 |
0 |
T3 |
17514 |
28 |
0 |
0 |
T7 |
19118 |
43 |
0 |
0 |
T8 |
4402 |
44 |
0 |
0 |
T9 |
4657 |
25 |
0 |
0 |
T10 |
9967 |
6 |
0 |
0 |
T11 |
2497 |
4 |
0 |
0 |
T12 |
42565 |
32 |
0 |
0 |
T13 |
35094 |
51 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
366674 |
0 |
0 |
T1 |
11190 |
6 |
0 |
0 |
T2 |
2123 |
11 |
0 |
0 |
T3 |
17514 |
54 |
0 |
0 |
T7 |
19118 |
53 |
0 |
0 |
T8 |
4402 |
29 |
0 |
0 |
T9 |
4657 |
22 |
0 |
0 |
T10 |
9967 |
4 |
0 |
0 |
T11 |
2497 |
13 |
0 |
0 |
T12 |
42565 |
49 |
0 |
0 |
T13 |
35094 |
30 |
0 |
0 |
maxM
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
900 |
900 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
T11 |
1 |
1 |
0 |
0 |
T12 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
2530191 |
0 |
0 |
T1 |
11190 |
19 |
0 |
0 |
T2 |
2123 |
14 |
0 |
0 |
T3 |
17514 |
160 |
0 |
0 |
T7 |
19118 |
206 |
0 |
0 |
T8 |
4402 |
69 |
0 |
0 |
T9 |
4657 |
47 |
0 |
0 |
T10 |
9967 |
37 |
0 |
0 |
T11 |
2497 |
17 |
0 |
0 |
T12 |
42565 |
265 |
0 |
0 |
T13 |
35094 |
165 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_sm1_48
| Line No. | Total | Covered | Percent |
TOTAL | | 18 | 18 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 2/2 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 2/2 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 2/2 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 2/2 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 2/2 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 2/2 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 2/2 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3
Cond Coverage for Instance : tb.dut.u_sm1_48
| Total | Covered | Percent |
Conditions | 22 | 20 | 90.91 |
Logical | 22 | 20 | 90.91 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T3,T8 |
1 | 0 | 1 | Covered | T2,T3,T8 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T3,T7,T12 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_sm1_48
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
299986 |
0 |
0 |
T1 |
11190 |
5 |
0 |
0 |
T2 |
2123 |
7 |
0 |
0 |
T3 |
17514 |
19 |
0 |
0 |
T7 |
19118 |
49 |
0 |
0 |
T8 |
4402 |
38 |
0 |
0 |
T9 |
4657 |
31 |
0 |
0 |
T10 |
9967 |
6 |
0 |
0 |
T11 |
2497 |
8 |
0 |
0 |
T12 |
42565 |
38 |
0 |
0 |
T13 |
35094 |
30 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
368679 |
0 |
0 |
T1 |
11190 |
6 |
0 |
0 |
T2 |
2123 |
14 |
0 |
0 |
T3 |
17514 |
25 |
0 |
0 |
T7 |
19118 |
38 |
0 |
0 |
T8 |
4402 |
40 |
0 |
0 |
T9 |
4657 |
30 |
0 |
0 |
T10 |
9967 |
6 |
0 |
0 |
T11 |
2497 |
5 |
0 |
0 |
T12 |
42565 |
69 |
0 |
0 |
T13 |
35094 |
40 |
0 |
0 |
maxM
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
900 |
900 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
T11 |
1 |
1 |
0 |
0 |
T12 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
2228747 |
0 |
0 |
T1 |
11190 |
24 |
0 |
0 |
T2 |
2123 |
20 |
0 |
0 |
T3 |
17514 |
176 |
0 |
0 |
T7 |
19118 |
234 |
0 |
0 |
T8 |
4402 |
76 |
0 |
0 |
T9 |
4657 |
59 |
0 |
0 |
T10 |
9967 |
75 |
0 |
0 |
T11 |
2497 |
13 |
0 |
0 |
T12 |
42565 |
310 |
0 |
0 |
T13 |
35094 |
119 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_sm1_49
| Line No. | Total | Covered | Percent |
TOTAL | | 18 | 18 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 2/2 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 2/2 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 2/2 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 2/2 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 2/2 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 2/2 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 2/2 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3
Cond Coverage for Instance : tb.dut.u_sm1_49
| Total | Covered | Percent |
Conditions | 22 | 20 | 90.91 |
Logical | 22 | 20 | 90.91 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T3,T8,T7 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T7,T10,T12 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_sm1_49
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
317337 |
0 |
0 |
T1 |
11190 |
1 |
0 |
0 |
T2 |
2123 |
11 |
0 |
0 |
T3 |
17514 |
23 |
0 |
0 |
T7 |
19118 |
21 |
0 |
0 |
T8 |
4402 |
48 |
0 |
0 |
T9 |
4657 |
24 |
0 |
0 |
T10 |
9967 |
3 |
0 |
0 |
T11 |
2497 |
5 |
0 |
0 |
T12 |
42565 |
52 |
0 |
0 |
T13 |
35094 |
43 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
389548 |
0 |
0 |
T1 |
11190 |
7 |
0 |
0 |
T2 |
2123 |
8 |
0 |
0 |
T3 |
17514 |
11 |
0 |
0 |
T7 |
19118 |
26 |
0 |
0 |
T8 |
4402 |
36 |
0 |
0 |
T9 |
4657 |
24 |
0 |
0 |
T10 |
9967 |
13 |
0 |
0 |
T11 |
2497 |
7 |
0 |
0 |
T12 |
42565 |
50 |
0 |
0 |
T13 |
35094 |
32 |
0 |
0 |
maxM
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
900 |
900 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
T11 |
1 |
1 |
0 |
0 |
T12 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
2697880 |
0 |
0 |
T1 |
11190 |
8 |
0 |
0 |
T2 |
2123 |
18 |
0 |
0 |
T3 |
17514 |
126 |
0 |
0 |
T7 |
19118 |
142 |
0 |
0 |
T8 |
4402 |
79 |
0 |
0 |
T9 |
4657 |
48 |
0 |
0 |
T10 |
9967 |
29 |
0 |
0 |
T11 |
2497 |
12 |
0 |
0 |
T12 |
42565 |
298 |
0 |
0 |
T13 |
35094 |
158 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_sm1_50
| Line No. | Total | Covered | Percent |
TOTAL | | 18 | 18 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 2/2 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 2/2 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 2/2 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 2/2 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 2/2 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 2/2 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 2/2 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3
Cond Coverage for Instance : tb.dut.u_sm1_50
| Total | Covered | Percent |
Conditions | 22 | 20 | 90.91 |
Logical | 22 | 20 | 90.91 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T3,T8,T7 |
1 | 0 | 1 | Covered | T2,T3,T8 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T3,T7,T12 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_sm1_50
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
278024 |
0 |
0 |
T1 |
11190 |
4 |
0 |
0 |
T2 |
2123 |
7 |
0 |
0 |
T3 |
17514 |
23 |
0 |
0 |
T7 |
19118 |
30 |
0 |
0 |
T8 |
4402 |
51 |
0 |
0 |
T9 |
4657 |
33 |
0 |
0 |
T10 |
9967 |
3 |
0 |
0 |
T11 |
2497 |
12 |
0 |
0 |
T12 |
42565 |
40 |
0 |
0 |
T13 |
35094 |
39 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
339386 |
0 |
0 |
T1 |
11190 |
3 |
0 |
0 |
T2 |
2123 |
9 |
0 |
0 |
T3 |
17514 |
21 |
0 |
0 |
T7 |
19118 |
38 |
0 |
0 |
T8 |
4402 |
49 |
0 |
0 |
T9 |
4657 |
25 |
0 |
0 |
T10 |
9967 |
2 |
0 |
0 |
T11 |
2497 |
5 |
0 |
0 |
T12 |
42565 |
66 |
0 |
0 |
T13 |
35094 |
31 |
0 |
0 |
maxM
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
900 |
900 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
T11 |
1 |
1 |
0 |
0 |
T12 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
2422791 |
0 |
0 |
T1 |
11190 |
7 |
0 |
0 |
T2 |
2123 |
15 |
0 |
0 |
T3 |
17514 |
171 |
0 |
0 |
T7 |
19118 |
205 |
0 |
0 |
T8 |
4402 |
94 |
0 |
0 |
T9 |
4657 |
58 |
0 |
0 |
T10 |
9967 |
14 |
0 |
0 |
T11 |
2497 |
16 |
0 |
0 |
T12 |
42565 |
359 |
0 |
0 |
T13 |
35094 |
154 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_sm1_51
| Line No. | Total | Covered | Percent |
TOTAL | | 18 | 18 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 2/2 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 2/2 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 2/2 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 2/2 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 2/2 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 2/2 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 2/2 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3
Cond Coverage for Instance : tb.dut.u_sm1_51
| Total | Covered | Percent |
Conditions | 22 | 20 | 90.91 |
Logical | 22 | 20 | 90.91 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T3,T8 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T3,T7 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_sm1_51
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
269814 |
0 |
0 |
T1 |
11190 |
2 |
0 |
0 |
T2 |
2123 |
11 |
0 |
0 |
T3 |
17514 |
31 |
0 |
0 |
T7 |
19118 |
25 |
0 |
0 |
T8 |
4402 |
32 |
0 |
0 |
T9 |
4657 |
29 |
0 |
0 |
T10 |
9967 |
5 |
0 |
0 |
T11 |
2497 |
3 |
0 |
0 |
T12 |
42565 |
78 |
0 |
0 |
T13 |
35094 |
66 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
335402 |
0 |
0 |
T1 |
11190 |
27 |
0 |
0 |
T2 |
2123 |
3 |
0 |
0 |
T3 |
17514 |
42 |
0 |
0 |
T7 |
19118 |
27 |
0 |
0 |
T8 |
4402 |
36 |
0 |
0 |
T9 |
4657 |
17 |
0 |
0 |
T10 |
9967 |
8 |
0 |
0 |
T11 |
2497 |
8 |
0 |
0 |
T12 |
42565 |
115 |
0 |
0 |
T13 |
35094 |
88 |
0 |
0 |
maxM
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
900 |
900 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
T11 |
1 |
1 |
0 |
0 |
T12 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
2647601 |
0 |
0 |
T1 |
11190 |
12 |
0 |
0 |
T2 |
2123 |
12 |
0 |
0 |
T3 |
17514 |
185 |
0 |
0 |
T7 |
19118 |
211 |
0 |
0 |
T8 |
4402 |
65 |
0 |
0 |
T9 |
4657 |
46 |
0 |
0 |
T10 |
9967 |
61 |
0 |
0 |
T11 |
2497 |
11 |
0 |
0 |
T12 |
42565 |
464 |
0 |
0 |
T13 |
35094 |
193 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_sm1_52
| Line No. | Total | Covered | Percent |
TOTAL | | 18 | 18 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 2/2 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 2/2 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 2/2 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 2/2 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 2/2 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 2/2 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 2/2 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3
Cond Coverage for Instance : tb.dut.u_sm1_52
| Total | Covered | Percent |
Conditions | 22 | 20 | 90.91 |
Logical | 22 | 20 | 90.91 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T3,T8 |
1 | 0 | 1 | Covered | T2,T3,T8 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T7,T12,T14 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_sm1_52
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
271066 |
0 |
0 |
T1 |
11190 |
6 |
0 |
0 |
T2 |
2123 |
5 |
0 |
0 |
T3 |
17514 |
44 |
0 |
0 |
T7 |
19118 |
19 |
0 |
0 |
T8 |
4402 |
36 |
0 |
0 |
T9 |
4657 |
27 |
0 |
0 |
T10 |
9967 |
21 |
0 |
0 |
T11 |
2497 |
5 |
0 |
0 |
T12 |
42565 |
28 |
0 |
0 |
T13 |
35094 |
42 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
345274 |
0 |
0 |
T1 |
11190 |
3 |
0 |
0 |
T2 |
2123 |
10 |
0 |
0 |
T3 |
17514 |
15 |
0 |
0 |
T7 |
19118 |
21 |
0 |
0 |
T8 |
4402 |
39 |
0 |
0 |
T9 |
4657 |
28 |
0 |
0 |
T10 |
9967 |
3 |
0 |
0 |
T11 |
2497 |
7 |
0 |
0 |
T12 |
42565 |
44 |
0 |
0 |
T13 |
35094 |
64 |
0 |
0 |
maxM
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
900 |
900 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
T11 |
1 |
1 |
0 |
0 |
T12 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
2454230 |
0 |
0 |
T1 |
11190 |
29 |
0 |
0 |
T2 |
2123 |
14 |
0 |
0 |
T3 |
17514 |
131 |
0 |
0 |
T7 |
19118 |
127 |
0 |
0 |
T8 |
4402 |
70 |
0 |
0 |
T9 |
4657 |
53 |
0 |
0 |
T10 |
9967 |
85 |
0 |
0 |
T11 |
2497 |
11 |
0 |
0 |
T12 |
42565 |
221 |
0 |
0 |
T13 |
35094 |
84 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_sm1_53
| Line No. | Total | Covered | Percent |
TOTAL | | 18 | 18 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 2/2 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 2/2 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 2/2 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 2/2 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 2/2 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 2/2 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 2/2 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3
Cond Coverage for Instance : tb.dut.u_sm1_53
| Total | Covered | Percent |
Conditions | 22 | 20 | 90.91 |
Logical | 22 | 20 | 90.91 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T3,T7 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T3,T7 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_sm1_53
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
316592 |
0 |
0 |
T1 |
11190 |
5 |
0 |
0 |
T2 |
2123 |
4 |
0 |
0 |
T3 |
17514 |
12 |
0 |
0 |
T7 |
19118 |
24 |
0 |
0 |
T8 |
4402 |
21 |
0 |
0 |
T9 |
4657 |
29 |
0 |
0 |
T10 |
9967 |
4 |
0 |
0 |
T11 |
2497 |
9 |
0 |
0 |
T12 |
42565 |
58 |
0 |
0 |
T13 |
35094 |
43 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
395584 |
0 |
0 |
T1 |
11190 |
31 |
0 |
0 |
T2 |
2123 |
11 |
0 |
0 |
T3 |
17514 |
24 |
0 |
0 |
T7 |
19118 |
39 |
0 |
0 |
T8 |
4402 |
42 |
0 |
0 |
T9 |
4657 |
24 |
0 |
0 |
T10 |
9967 |
8 |
0 |
0 |
T11 |
2497 |
3 |
0 |
0 |
T12 |
42565 |
38 |
0 |
0 |
T13 |
35094 |
29 |
0 |
0 |
maxM
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
900 |
900 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
T11 |
1 |
1 |
0 |
0 |
T12 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
2183632 |
0 |
0 |
T1 |
11190 |
19 |
0 |
0 |
T2 |
2123 |
15 |
0 |
0 |
T3 |
17514 |
136 |
0 |
0 |
T7 |
19118 |
167 |
0 |
0 |
T8 |
4402 |
63 |
0 |
0 |
T9 |
4657 |
53 |
0 |
0 |
T10 |
9967 |
37 |
0 |
0 |
T11 |
2497 |
11 |
0 |
0 |
T12 |
42565 |
412 |
0 |
0 |
T13 |
35094 |
119 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_sm1_54
| Line No. | Total | Covered | Percent |
TOTAL | | 18 | 18 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 2/2 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 2/2 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 2/2 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 2/2 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 2/2 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 2/2 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 2/2 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3
Cond Coverage for Instance : tb.dut.u_sm1_54
| Total | Covered | Percent |
Conditions | 22 | 20 | 90.91 |
Logical | 22 | 20 | 90.91 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T3,T8,T7 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T7,T12 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_sm1_54
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
281860 |
0 |
0 |
T1 |
11190 |
3 |
0 |
0 |
T2 |
2123 |
3 |
0 |
0 |
T3 |
17514 |
12 |
0 |
0 |
T7 |
19118 |
51 |
0 |
0 |
T8 |
4402 |
46 |
0 |
0 |
T9 |
4657 |
22 |
0 |
0 |
T10 |
9967 |
6 |
0 |
0 |
T11 |
2497 |
3 |
0 |
0 |
T12 |
42565 |
38 |
0 |
0 |
T13 |
35094 |
45 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
348108 |
0 |
0 |
T1 |
11190 |
9 |
0 |
0 |
T2 |
2123 |
9 |
0 |
0 |
T3 |
17514 |
18 |
0 |
0 |
T7 |
19118 |
22 |
0 |
0 |
T8 |
4402 |
37 |
0 |
0 |
T9 |
4657 |
30 |
0 |
0 |
T10 |
9967 |
7 |
0 |
0 |
T11 |
2497 |
6 |
0 |
0 |
T12 |
42565 |
59 |
0 |
0 |
T13 |
35094 |
38 |
0 |
0 |
maxM
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
900 |
900 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
T11 |
1 |
1 |
0 |
0 |
T12 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
2952910 |
0 |
0 |
T1 |
11190 |
24 |
0 |
0 |
T2 |
2123 |
12 |
0 |
0 |
T3 |
17514 |
95 |
0 |
0 |
T7 |
19118 |
231 |
0 |
0 |
T8 |
4402 |
78 |
0 |
0 |
T9 |
4657 |
52 |
0 |
0 |
T10 |
9967 |
61 |
0 |
0 |
T11 |
2497 |
9 |
0 |
0 |
T12 |
42565 |
361 |
0 |
0 |
T13 |
35094 |
100 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_sm1_55
| Line No. | Total | Covered | Percent |
TOTAL | | 18 | 18 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 2/2 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 2/2 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 2/2 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 2/2 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 2/2 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 2/2 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 2/2 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3
Cond Coverage for Instance : tb.dut.u_sm1_55
| Total | Covered | Percent |
Conditions | 22 | 20 | 90.91 |
Logical | 22 | 20 | 90.91 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T3,T7 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T7,T10 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_sm1_55
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
263834 |
0 |
0 |
T1 |
11190 |
13 |
0 |
0 |
T2 |
2123 |
4 |
0 |
0 |
T3 |
17514 |
19 |
0 |
0 |
T7 |
19118 |
26 |
0 |
0 |
T8 |
4402 |
28 |
0 |
0 |
T9 |
4657 |
26 |
0 |
0 |
T10 |
9967 |
2 |
0 |
0 |
T11 |
2497 |
9 |
0 |
0 |
T12 |
42565 |
52 |
0 |
0 |
T13 |
35094 |
34 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
325259 |
0 |
0 |
T1 |
11190 |
8 |
0 |
0 |
T2 |
2123 |
4 |
0 |
0 |
T3 |
17514 |
30 |
0 |
0 |
T7 |
19118 |
52 |
0 |
0 |
T8 |
4402 |
36 |
0 |
0 |
T9 |
4657 |
27 |
0 |
0 |
T10 |
9967 |
16 |
0 |
0 |
T11 |
2497 |
7 |
0 |
0 |
T12 |
42565 |
41 |
0 |
0 |
T13 |
35094 |
20 |
0 |
0 |
maxM
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
900 |
900 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
T11 |
1 |
1 |
0 |
0 |
T12 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
2567106 |
0 |
0 |
T1 |
11190 |
48 |
0 |
0 |
T2 |
2123 |
8 |
0 |
0 |
T3 |
17514 |
143 |
0 |
0 |
T7 |
19118 |
250 |
0 |
0 |
T8 |
4402 |
63 |
0 |
0 |
T9 |
4657 |
53 |
0 |
0 |
T10 |
9967 |
29 |
0 |
0 |
T11 |
2497 |
15 |
0 |
0 |
T12 |
42565 |
344 |
0 |
0 |
T13 |
35094 |
79 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_sm1_56
| Line No. | Total | Covered | Percent |
TOTAL | | 18 | 18 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 2/2 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 2/2 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 2/2 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 2/2 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 2/2 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 2/2 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 2/2 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3
Cond Coverage for Instance : tb.dut.u_sm1_56
| Total | Covered | Percent |
Conditions | 22 | 20 | 90.91 |
Logical | 22 | 20 | 90.91 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T3,T8 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T7,T12,T13 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_sm1_56
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
305076 |
0 |
0 |
T1 |
11190 |
2 |
0 |
0 |
T2 |
2123 |
6 |
0 |
0 |
T3 |
17514 |
28 |
0 |
0 |
T7 |
19118 |
27 |
0 |
0 |
T8 |
4402 |
34 |
0 |
0 |
T9 |
4657 |
25 |
0 |
0 |
T10 |
9967 |
4 |
0 |
0 |
T11 |
2497 |
10 |
0 |
0 |
T12 |
42565 |
42 |
0 |
0 |
T13 |
35094 |
42 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
384681 |
0 |
0 |
T1 |
11190 |
4 |
0 |
0 |
T2 |
2123 |
5 |
0 |
0 |
T3 |
17514 |
33 |
0 |
0 |
T7 |
19118 |
40 |
0 |
0 |
T8 |
4402 |
38 |
0 |
0 |
T9 |
4657 |
28 |
0 |
0 |
T10 |
9967 |
28 |
0 |
0 |
T11 |
2497 |
5 |
0 |
0 |
T12 |
42565 |
86 |
0 |
0 |
T13 |
35094 |
35 |
0 |
0 |
maxM
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
900 |
900 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
T11 |
1 |
1 |
0 |
0 |
T12 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
1972496 |
0 |
0 |
T1 |
11190 |
14 |
0 |
0 |
T2 |
2123 |
10 |
0 |
0 |
T3 |
17514 |
126 |
0 |
0 |
T7 |
19118 |
214 |
0 |
0 |
T8 |
4402 |
67 |
0 |
0 |
T9 |
4657 |
51 |
0 |
0 |
T10 |
9967 |
45 |
0 |
0 |
T11 |
2497 |
14 |
0 |
0 |
T12 |
42565 |
337 |
0 |
0 |
T13 |
35094 |
170 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_sm1_30
| Line No. | Total | Covered | Percent |
TOTAL | | 25 | 25 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 3/3 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 3/3 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 3/3 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 3/3 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 3/3 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 3/3 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 3/3 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
Cond Coverage for Instance : tb.dut.u_sm1_30
| Total | Covered | Percent |
Conditions | 33 | 33 | 100.00 |
Logical | 33 | 33 | 100.00 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T3,T8,T12 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T3,T8,T12 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 2))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T3,T8,T12 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 2)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T3,T9 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T3,T8,T12 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T3,T8 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T3,T8,T12 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[2].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 2) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T2,T3 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T3,T8,T12 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 2)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_sm1_30
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
7354038 |
0 |
0 |
T1 |
11190 |
389 |
0 |
0 |
T2 |
2123 |
50 |
0 |
0 |
T3 |
17514 |
1178 |
0 |
0 |
T7 |
19118 |
1257 |
0 |
0 |
T8 |
4402 |
218 |
0 |
0 |
T9 |
4657 |
148 |
0 |
0 |
T10 |
9967 |
332 |
0 |
0 |
T11 |
2497 |
44 |
0 |
0 |
T12 |
42565 |
1584 |
0 |
0 |
T13 |
35094 |
1484 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
1367734 |
0 |
0 |
T1 |
11190 |
40 |
0 |
0 |
T2 |
2123 |
1 |
0 |
0 |
T3 |
17514 |
130 |
0 |
0 |
T7 |
19118 |
214 |
0 |
0 |
T8 |
4402 |
36 |
0 |
0 |
T9 |
4657 |
24 |
0 |
0 |
T10 |
9967 |
22 |
0 |
0 |
T11 |
2497 |
6 |
0 |
0 |
T12 |
42565 |
282 |
0 |
0 |
T13 |
35094 |
227 |
0 |
0 |
gen_host_fifo[2].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
1369246 |
0 |
0 |
T1 |
11190 |
79 |
0 |
0 |
T2 |
2123 |
8 |
0 |
0 |
T3 |
17514 |
158 |
0 |
0 |
T7 |
19118 |
228 |
0 |
0 |
T8 |
4402 |
37 |
0 |
0 |
T9 |
4657 |
29 |
0 |
0 |
T10 |
9967 |
76 |
0 |
0 |
T11 |
2497 |
6 |
0 |
0 |
T12 |
42565 |
389 |
0 |
0 |
T13 |
35094 |
367 |
0 |
0 |
maxM
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
900 |
900 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
T11 |
1 |
1 |
0 |
0 |
T12 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
260875270 |
12176027 |
0 |
0 |
T1 |
11190 |
368 |
0 |
0 |
T2 |
2123 |
59 |
0 |
0 |
T3 |
17514 |
877 |
0 |
0 |
T7 |
19118 |
1419 |
0 |
0 |
T8 |
4402 |
290 |
0 |
0 |
T9 |
4657 |
201 |
0 |
0 |
T10 |
9967 |
356 |
0 |
0 |
T11 |
2497 |
56 |
0 |
0 |
T12 |
42565 |
1864 |
0 |
0 |
T13 |
35094 |
861 |
0 |
0 |