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 | T9,T14,T17 |
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 | T9,T14,T17 |
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,T2,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 | T2,T8,T11 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T9,T14,T17 |
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 | T9,T14,T17 |
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 | T2,T7,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,T8,T11 |
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 |
22748732 |
0 |
0 |
T1 |
34848 |
204 |
0 |
0 |
T2 |
206712 |
490 |
0 |
0 |
T3 |
62856 |
896 |
0 |
0 |
T7 |
5455368 |
504 |
0 |
0 |
T8 |
1583760 |
9409 |
0 |
0 |
T9 |
47928 |
311 |
0 |
0 |
T10 |
56712 |
373 |
0 |
0 |
T11 |
1112736 |
7642 |
0 |
0 |
T12 |
10687824 |
23309 |
0 |
0 |
T13 |
204528 |
2208 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
2147483647 |
12008974 |
0 |
0 |
T1 |
34848 |
168 |
0 |
0 |
T2 |
206712 |
237 |
0 |
0 |
T3 |
62856 |
472 |
0 |
0 |
T7 |
5455368 |
194 |
0 |
0 |
T8 |
1583760 |
4581 |
0 |
0 |
T9 |
47928 |
170 |
0 |
0 |
T10 |
56712 |
161 |
0 |
0 |
T11 |
1112736 |
3031 |
0 |
0 |
T12 |
10687824 |
4353 |
0 |
0 |
T13 |
204528 |
1247 |
0 |
0 |
gen_host_fifo[2].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1674663736 |
3616356 |
0 |
0 |
T1 |
5808 |
25 |
0 |
0 |
T2 |
34452 |
87 |
0 |
0 |
T3 |
10476 |
75 |
0 |
0 |
T7 |
909228 |
32 |
0 |
0 |
T8 |
263960 |
1389 |
0 |
0 |
T9 |
7988 |
32 |
0 |
0 |
T10 |
9452 |
20 |
0 |
0 |
T11 |
185456 |
962 |
0 |
0 |
T12 |
1781304 |
4418 |
0 |
0 |
T13 |
34088 |
200 |
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 |
160395006 |
0 |
0 |
T1 |
34848 |
374 |
0 |
0 |
T2 |
206712 |
855 |
0 |
0 |
T3 |
62856 |
1246 |
0 |
0 |
T7 |
5455368 |
4806 |
0 |
0 |
T8 |
1583760 |
23010 |
0 |
0 |
T9 |
47928 |
458 |
0 |
0 |
T10 |
56712 |
476 |
0 |
0 |
T11 |
1112736 |
11870 |
0 |
0 |
T12 |
10687824 |
73947 |
0 |
0 |
T13 |
204528 |
3236 |
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,T2,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 | T2,T8,T11 |
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 | T8,T11,T23 |
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 |
418665934 |
1649947 |
0 |
0 |
T1 |
1452 |
32 |
0 |
0 |
T2 |
8613 |
66 |
0 |
0 |
T3 |
2619 |
122 |
0 |
0 |
T7 |
227307 |
62 |
0 |
0 |
T8 |
65990 |
1001 |
0 |
0 |
T9 |
1997 |
50 |
0 |
0 |
T10 |
2363 |
57 |
0 |
0 |
T11 |
46364 |
719 |
0 |
0 |
T12 |
445326 |
993 |
0 |
0 |
T13 |
8522 |
276 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
418665934 |
380148 |
0 |
0 |
T1 |
1452 |
9 |
0 |
0 |
T2 |
8613 |
5 |
0 |
0 |
T3 |
2619 |
23 |
0 |
0 |
T7 |
227307 |
7 |
0 |
0 |
T8 |
65990 |
140 |
0 |
0 |
T9 |
1997 |
6 |
0 |
0 |
T10 |
2363 |
9 |
0 |
0 |
T11 |
46364 |
121 |
0 |
0 |
T12 |
445326 |
72 |
0 |
0 |
T13 |
8522 |
43 |
0 |
0 |
gen_host_fifo[2].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
418665934 |
490128 |
0 |
0 |
T1 |
1452 |
12 |
0 |
0 |
T2 |
8613 |
2 |
0 |
0 |
T3 |
2619 |
21 |
0 |
0 |
T7 |
227307 |
4 |
0 |
0 |
T8 |
65990 |
217 |
0 |
0 |
T9 |
1997 |
11 |
0 |
0 |
T10 |
2363 |
5 |
0 |
0 |
T11 |
46364 |
107 |
0 |
0 |
T12 |
445326 |
203 |
0 |
0 |
T13 |
8522 |
49 |
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 |
418665934 |
21043811 |
0 |
0 |
T1 |
1452 |
53 |
0 |
0 |
T2 |
8613 |
152 |
0 |
0 |
T3 |
2619 |
163 |
0 |
0 |
T7 |
227307 |
49 |
0 |
0 |
T8 |
65990 |
2093 |
0 |
0 |
T9 |
1997 |
67 |
0 |
0 |
T10 |
2363 |
71 |
0 |
0 |
T11 |
46364 |
1647 |
0 |
0 |
T12 |
445326 |
6668 |
0 |
0 |
T13 |
8522 |
365 |
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,T2,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 | T8,T11,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 |
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 | T8,T11,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_29
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
418665934 |
1809847 |
0 |
0 |
T1 |
1452 |
19 |
0 |
0 |
T2 |
8613 |
74 |
0 |
0 |
T3 |
2619 |
131 |
0 |
0 |
T7 |
227307 |
53 |
0 |
0 |
T8 |
65990 |
894 |
0 |
0 |
T9 |
1997 |
46 |
0 |
0 |
T10 |
2363 |
52 |
0 |
0 |
T11 |
46364 |
864 |
0 |
0 |
T12 |
445326 |
2870 |
0 |
0 |
T13 |
8522 |
363 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
418665934 |
464834 |
0 |
0 |
T1 |
1452 |
4 |
0 |
0 |
T2 |
8613 |
1 |
0 |
0 |
T3 |
2619 |
9 |
0 |
0 |
T7 |
227307 |
5 |
0 |
0 |
T8 |
65990 |
80 |
0 |
0 |
T9 |
1997 |
6 |
0 |
0 |
T10 |
2363 |
7 |
0 |
0 |
T11 |
46364 |
127 |
0 |
0 |
T12 |
445326 |
7 |
0 |
0 |
T13 |
8522 |
57 |
0 |
0 |
gen_host_fifo[2].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
418665934 |
574811 |
0 |
0 |
T1 |
1452 |
2 |
0 |
0 |
T2 |
8613 |
18 |
0 |
0 |
T3 |
2619 |
20 |
0 |
0 |
T7 |
227307 |
3 |
0 |
0 |
T8 |
65990 |
198 |
0 |
0 |
T9 |
1997 |
12 |
0 |
0 |
T10 |
2363 |
5 |
0 |
0 |
T11 |
46364 |
156 |
0 |
0 |
T12 |
445326 |
874 |
0 |
0 |
T13 |
8522 |
47 |
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 |
418665934 |
19236108 |
0 |
0 |
T1 |
1452 |
22 |
0 |
0 |
T2 |
8613 |
95 |
0 |
0 |
T3 |
2619 |
119 |
0 |
0 |
T7 |
227307 |
47 |
0 |
0 |
T8 |
65990 |
1851 |
0 |
0 |
T9 |
1997 |
55 |
0 |
0 |
T10 |
2363 |
53 |
0 |
0 |
T11 |
46364 |
1551 |
0 |
0 |
T12 |
445326 |
8606 |
0 |
0 |
T13 |
8522 |
392 |
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,T2,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 | T2,T8,T11 |
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,T8,T11 |
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 |
418665934 |
1827503 |
0 |
0 |
T1 |
1452 |
33 |
0 |
0 |
T2 |
8613 |
37 |
0 |
0 |
T3 |
2619 |
140 |
0 |
0 |
T7 |
227307 |
45 |
0 |
0 |
T8 |
65990 |
999 |
0 |
0 |
T9 |
1997 |
44 |
0 |
0 |
T10 |
2363 |
45 |
0 |
0 |
T11 |
46364 |
732 |
0 |
0 |
T12 |
445326 |
1425 |
0 |
0 |
T13 |
8522 |
337 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
418665934 |
462931 |
0 |
0 |
T1 |
1452 |
6 |
0 |
0 |
T2 |
8613 |
9 |
0 |
0 |
T3 |
2619 |
17 |
0 |
0 |
T7 |
227307 |
10 |
0 |
0 |
T8 |
65990 |
178 |
0 |
0 |
T9 |
1997 |
5 |
0 |
0 |
T10 |
2363 |
13 |
0 |
0 |
T11 |
46364 |
124 |
0 |
0 |
T12 |
445326 |
6 |
0 |
0 |
T13 |
8522 |
55 |
0 |
0 |
gen_host_fifo[2].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
418665934 |
573306 |
0 |
0 |
T1 |
1452 |
9 |
0 |
0 |
T2 |
8613 |
10 |
0 |
0 |
T3 |
2619 |
17 |
0 |
0 |
T7 |
227307 |
2 |
0 |
0 |
T8 |
65990 |
199 |
0 |
0 |
T9 |
1997 |
4 |
0 |
0 |
T10 |
2363 |
8 |
0 |
0 |
T11 |
46364 |
136 |
0 |
0 |
T12 |
445326 |
5 |
0 |
0 |
T13 |
8522 |
57 |
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 |
418665934 |
18643188 |
0 |
0 |
T1 |
1452 |
39 |
0 |
0 |
T2 |
8613 |
84 |
0 |
0 |
T3 |
2619 |
135 |
0 |
0 |
T7 |
227307 |
647 |
0 |
0 |
T8 |
65990 |
2342 |
0 |
0 |
T9 |
1997 |
46 |
0 |
0 |
T10 |
2363 |
56 |
0 |
0 |
T11 |
46364 |
1438 |
0 |
0 |
T12 |
445326 |
7887 |
0 |
0 |
T13 |
8522 |
378 |
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 | T2,T8,T11 |
1 | 0 | 1 | Covered | T1,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 | T8,T11,T23 |
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 |
418665934 |
288042 |
0 |
0 |
T1 |
1452 |
6 |
0 |
0 |
T2 |
8613 |
4 |
0 |
0 |
T3 |
2619 |
15 |
0 |
0 |
T7 |
227307 |
19 |
0 |
0 |
T8 |
65990 |
120 |
0 |
0 |
T9 |
1997 |
9 |
0 |
0 |
T10 |
2363 |
7 |
0 |
0 |
T11 |
46364 |
91 |
0 |
0 |
T12 |
445326 |
4 |
0 |
0 |
T13 |
8522 |
43 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
418665934 |
384887 |
0 |
0 |
T1 |
1452 |
7 |
0 |
0 |
T2 |
8613 |
6 |
0 |
0 |
T3 |
2619 |
12 |
0 |
0 |
T7 |
227307 |
2 |
0 |
0 |
T8 |
65990 |
154 |
0 |
0 |
T9 |
1997 |
7 |
0 |
0 |
T10 |
2363 |
5 |
0 |
0 |
T11 |
46364 |
102 |
0 |
0 |
T12 |
445326 |
314 |
0 |
0 |
T13 |
8522 |
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 |
418665934 |
3768089 |
0 |
0 |
T1 |
1452 |
13 |
0 |
0 |
T2 |
8613 |
17 |
0 |
0 |
T3 |
2619 |
24 |
0 |
0 |
T7 |
227307 |
11 |
0 |
0 |
T8 |
65990 |
789 |
0 |
0 |
T9 |
1997 |
15 |
0 |
0 |
T10 |
2363 |
11 |
0 |
0 |
T11 |
46364 |
303 |
0 |
0 |
T12 |
445326 |
1090 |
0 |
0 |
T13 |
8522 |
70 |
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 | T2,T8,T11 |
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,T8,T11 |
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 |
418665934 |
274083 |
0 |
0 |
T1 |
1452 |
8 |
0 |
0 |
T2 |
8613 |
4 |
0 |
0 |
T3 |
2619 |
13 |
0 |
0 |
T7 |
227307 |
9 |
0 |
0 |
T8 |
65990 |
108 |
0 |
0 |
T9 |
1997 |
2 |
0 |
0 |
T10 |
2363 |
7 |
0 |
0 |
T11 |
46364 |
84 |
0 |
0 |
T12 |
445326 |
4 |
0 |
0 |
T13 |
8522 |
45 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
418665934 |
368345 |
0 |
0 |
T1 |
1452 |
6 |
0 |
0 |
T2 |
8613 |
11 |
0 |
0 |
T3 |
2619 |
20 |
0 |
0 |
T7 |
227307 |
10 |
0 |
0 |
T8 |
65990 |
123 |
0 |
0 |
T9 |
1997 |
7 |
0 |
0 |
T10 |
2363 |
8 |
0 |
0 |
T11 |
46364 |
102 |
0 |
0 |
T12 |
445326 |
4 |
0 |
0 |
T13 |
8522 |
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 |
418665934 |
4755017 |
0 |
0 |
T1 |
1452 |
14 |
0 |
0 |
T2 |
8613 |
14 |
0 |
0 |
T3 |
2619 |
33 |
0 |
0 |
T7 |
227307 |
499 |
0 |
0 |
T8 |
65990 |
646 |
0 |
0 |
T9 |
1997 |
9 |
0 |
0 |
T10 |
2363 |
14 |
0 |
0 |
T11 |
46364 |
248 |
0 |
0 |
T12 |
445326 |
708 |
0 |
0 |
T13 |
8522 |
83 |
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 | T2,T8,T11 |
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 | T2,T23,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_36
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
418665934 |
626857 |
0 |
0 |
T1 |
1452 |
1 |
0 |
0 |
T2 |
8613 |
2 |
0 |
0 |
T3 |
2619 |
18 |
0 |
0 |
T7 |
227307 |
9 |
0 |
0 |
T8 |
65990 |
191 |
0 |
0 |
T9 |
1997 |
13 |
0 |
0 |
T10 |
2363 |
7 |
0 |
0 |
T11 |
46364 |
124 |
0 |
0 |
T12 |
445326 |
6 |
0 |
0 |
T13 |
8522 |
73 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
418665934 |
730113 |
0 |
0 |
T1 |
1452 |
3 |
0 |
0 |
T2 |
8613 |
11 |
0 |
0 |
T3 |
2619 |
42 |
0 |
0 |
T7 |
227307 |
11 |
0 |
0 |
T8 |
65990 |
385 |
0 |
0 |
T9 |
1997 |
9 |
0 |
0 |
T10 |
2363 |
12 |
0 |
0 |
T11 |
46364 |
161 |
0 |
0 |
T12 |
445326 |
2 |
0 |
0 |
T13 |
8522 |
130 |
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 |
418665934 |
5337236 |
0 |
0 |
T1 |
1452 |
4 |
0 |
0 |
T2 |
8613 |
24 |
0 |
0 |
T3 |
2619 |
31 |
0 |
0 |
T7 |
227307 |
16 |
0 |
0 |
T8 |
65990 |
654 |
0 |
0 |
T9 |
1997 |
13 |
0 |
0 |
T10 |
2363 |
14 |
0 |
0 |
T11 |
46364 |
233 |
0 |
0 |
T12 |
445326 |
1590 |
0 |
0 |
T13 |
8522 |
92 |
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 | T2,T8,T11 |
1 | 0 | 1 | Covered | T1,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 | T8,T11,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 |
418665934 |
629777 |
0 |
0 |
T1 |
1452 |
4 |
0 |
0 |
T2 |
8613 |
1 |
0 |
0 |
T3 |
2619 |
20 |
0 |
0 |
T7 |
227307 |
14 |
0 |
0 |
T8 |
65990 |
96 |
0 |
0 |
T9 |
1997 |
3 |
0 |
0 |
T10 |
2363 |
16 |
0 |
0 |
T11 |
46364 |
69 |
0 |
0 |
T12 |
445326 |
3 |
0 |
0 |
T13 |
8522 |
92 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
418665934 |
736785 |
0 |
0 |
T1 |
1452 |
1 |
0 |
0 |
T2 |
8613 |
8 |
0 |
0 |
T3 |
2619 |
21 |
0 |
0 |
T7 |
227307 |
1 |
0 |
0 |
T8 |
65990 |
132 |
0 |
0 |
T9 |
1997 |
18 |
0 |
0 |
T10 |
2363 |
15 |
0 |
0 |
T11 |
46364 |
135 |
0 |
0 |
T12 |
445326 |
4 |
0 |
0 |
T13 |
8522 |
80 |
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 |
418665934 |
3433713 |
0 |
0 |
T1 |
1452 |
5 |
0 |
0 |
T2 |
8613 |
9 |
0 |
0 |
T3 |
2619 |
32 |
0 |
0 |
T7 |
227307 |
11 |
0 |
0 |
T8 |
65990 |
575 |
0 |
0 |
T9 |
1997 |
11 |
0 |
0 |
T10 |
2363 |
17 |
0 |
0 |
T11 |
46364 |
194 |
0 |
0 |
T12 |
445326 |
720 |
0 |
0 |
T13 |
8522 |
103 |
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 | T2,T8,T11 |
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 | T8,T11,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_40
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
418665934 |
709871 |
0 |
0 |
T1 |
1452 |
5 |
0 |
0 |
T2 |
8613 |
10 |
0 |
0 |
T3 |
2619 |
26 |
0 |
0 |
T7 |
227307 |
36 |
0 |
0 |
T8 |
65990 |
138 |
0 |
0 |
T9 |
1997 |
6 |
0 |
0 |
T10 |
2363 |
30 |
0 |
0 |
T11 |
46364 |
196 |
0 |
0 |
T12 |
445326 |
7 |
0 |
0 |
T13 |
8522 |
45 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
418665934 |
808012 |
0 |
0 |
T1 |
1452 |
21 |
0 |
0 |
T2 |
8613 |
12 |
0 |
0 |
T3 |
2619 |
25 |
0 |
0 |
T7 |
227307 |
39 |
0 |
0 |
T8 |
65990 |
112 |
0 |
0 |
T9 |
1997 |
9 |
0 |
0 |
T10 |
2363 |
16 |
0 |
0 |
T11 |
46364 |
147 |
0 |
0 |
T12 |
445326 |
159 |
0 |
0 |
T13 |
8522 |
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 |
418665934 |
4457568 |
0 |
0 |
T1 |
1452 |
18 |
0 |
0 |
T2 |
8613 |
44 |
0 |
0 |
T3 |
2619 |
34 |
0 |
0 |
T7 |
227307 |
16 |
0 |
0 |
T8 |
65990 |
629 |
0 |
0 |
T9 |
1997 |
12 |
0 |
0 |
T10 |
2363 |
20 |
0 |
0 |
T11 |
46364 |
254 |
0 |
0 |
T12 |
445326 |
4039 |
0 |
0 |
T13 |
8522 |
91 |
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: 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_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 | 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 | T2,T8,T11 |
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 | T2,T12,T24 |
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_42
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
418665934 |
629562 |
0 |
0 |
T1 |
1452 |
6 |
0 |
0 |
T2 |
8613 |
6 |
0 |
0 |
T3 |
2619 |
19 |
0 |
0 |
T7 |
227307 |
20 |
0 |
0 |
T8 |
65990 |
158 |
0 |
0 |
T9 |
1997 |
16 |
0 |
0 |
T10 |
2363 |
3 |
0 |
0 |
T11 |
46364 |
119 |
0 |
0 |
T12 |
445326 |
8 |
0 |
0 |
T13 |
8522 |
40 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
418665934 |
717320 |
0 |
0 |
T1 |
1452 |
5 |
0 |
0 |
T2 |
8613 |
5 |
0 |
0 |
T3 |
2619 |
43 |
0 |
0 |
T7 |
227307 |
4 |
0 |
0 |
T8 |
65990 |
382 |
0 |
0 |
T9 |
1997 |
8 |
0 |
0 |
T10 |
2363 |
9 |
0 |
0 |
T11 |
46364 |
52 |
0 |
0 |
T12 |
445326 |
5 |
0 |
0 |
T13 |
8522 |
47 |
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 |
418665934 |
4910063 |
0 |
0 |
T1 |
1452 |
11 |
0 |
0 |
T2 |
8613 |
25 |
0 |
0 |
T3 |
2619 |
37 |
0 |
0 |
T7 |
227307 |
12 |
0 |
0 |
T8 |
65990 |
746 |
0 |
0 |
T9 |
1997 |
14 |
0 |
0 |
T10 |
2363 |
9 |
0 |
0 |
T11 |
46364 |
210 |
0 |
0 |
T12 |
445326 |
2498 |
0 |
0 |
T13 |
8522 |
79 |
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 | T2,T8,T11 |
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,T8,T11 |
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 |
418665934 |
277372 |
0 |
0 |
T1 |
1452 |
10 |
0 |
0 |
T2 |
8613 |
7 |
0 |
0 |
T3 |
2619 |
16 |
0 |
0 |
T7 |
227307 |
4 |
0 |
0 |
T8 |
65990 |
99 |
0 |
0 |
T9 |
1997 |
8 |
0 |
0 |
T10 |
2363 |
9 |
0 |
0 |
T11 |
46364 |
84 |
0 |
0 |
T12 |
445326 |
4 |
0 |
0 |
T13 |
8522 |
43 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
418665934 |
372307 |
0 |
0 |
T1 |
1452 |
6 |
0 |
0 |
T2 |
8613 |
8 |
0 |
0 |
T3 |
2619 |
17 |
0 |
0 |
T7 |
227307 |
3 |
0 |
0 |
T8 |
65990 |
116 |
0 |
0 |
T9 |
1997 |
8 |
0 |
0 |
T10 |
2363 |
3 |
0 |
0 |
T11 |
46364 |
97 |
0 |
0 |
T12 |
445326 |
7 |
0 |
0 |
T13 |
8522 |
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 |
418665934 |
3311009 |
0 |
0 |
T1 |
1452 |
14 |
0 |
0 |
T2 |
8613 |
19 |
0 |
0 |
T3 |
2619 |
31 |
0 |
0 |
T7 |
227307 |
375 |
0 |
0 |
T8 |
65990 |
722 |
0 |
0 |
T9 |
1997 |
16 |
0 |
0 |
T10 |
2363 |
12 |
0 |
0 |
T11 |
46364 |
280 |
0 |
0 |
T12 |
445326 |
1590 |
0 |
0 |
T13 |
8522 |
75 |
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 | T2,T8,T11 |
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,T8,T11 |
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 |
418665934 |
271666 |
0 |
0 |
T1 |
1452 |
8 |
0 |
0 |
T2 |
8613 |
7 |
0 |
0 |
T3 |
2619 |
15 |
0 |
0 |
T7 |
227307 |
6 |
0 |
0 |
T8 |
65990 |
110 |
0 |
0 |
T9 |
1997 |
7 |
0 |
0 |
T10 |
2363 |
10 |
0 |
0 |
T11 |
46364 |
89 |
0 |
0 |
T12 |
445326 |
4 |
0 |
0 |
T13 |
8522 |
36 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
418665934 |
367386 |
0 |
0 |
T1 |
1452 |
2 |
0 |
0 |
T2 |
8613 |
9 |
0 |
0 |
T3 |
2619 |
20 |
0 |
0 |
T7 |
227307 |
8 |
0 |
0 |
T8 |
65990 |
171 |
0 |
0 |
T9 |
1997 |
7 |
0 |
0 |
T10 |
2363 |
4 |
0 |
0 |
T11 |
46364 |
92 |
0 |
0 |
T12 |
445326 |
4 |
0 |
0 |
T13 |
8522 |
54 |
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 |
418665934 |
4166432 |
0 |
0 |
T1 |
1452 |
10 |
0 |
0 |
T2 |
8613 |
16 |
0 |
0 |
T3 |
2619 |
33 |
0 |
0 |
T7 |
227307 |
30 |
0 |
0 |
T8 |
65990 |
753 |
0 |
0 |
T9 |
1997 |
13 |
0 |
0 |
T10 |
2363 |
13 |
0 |
0 |
T11 |
46364 |
272 |
0 |
0 |
T12 |
445326 |
1402 |
0 |
0 |
T13 |
8522 |
88 |
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 | T2,T8,T11 |
1 | 0 | 1 | Covered | T1,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 | T8,T11,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 |
418665934 |
278315 |
0 |
0 |
T1 |
1452 |
4 |
0 |
0 |
T2 |
8613 |
5 |
0 |
0 |
T3 |
2619 |
11 |
0 |
0 |
T7 |
227307 |
11 |
0 |
0 |
T8 |
65990 |
107 |
0 |
0 |
T9 |
1997 |
3 |
0 |
0 |
T10 |
2363 |
8 |
0 |
0 |
T11 |
46364 |
87 |
0 |
0 |
T12 |
445326 |
3 |
0 |
0 |
T13 |
8522 |
46 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
418665934 |
371957 |
0 |
0 |
T1 |
1452 |
11 |
0 |
0 |
T2 |
8613 |
7 |
0 |
0 |
T3 |
2619 |
20 |
0 |
0 |
T7 |
227307 |
6 |
0 |
0 |
T8 |
65990 |
135 |
0 |
0 |
T9 |
1997 |
4 |
0 |
0 |
T10 |
2363 |
6 |
0 |
0 |
T11 |
46364 |
87 |
0 |
0 |
T12 |
445326 |
4 |
0 |
0 |
T13 |
8522 |
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 |
418665934 |
3582818 |
0 |
0 |
T1 |
1452 |
15 |
0 |
0 |
T2 |
8613 |
16 |
0 |
0 |
T3 |
2619 |
31 |
0 |
0 |
T7 |
227307 |
12 |
0 |
0 |
T8 |
65990 |
740 |
0 |
0 |
T9 |
1997 |
7 |
0 |
0 |
T10 |
2363 |
14 |
0 |
0 |
T11 |
46364 |
312 |
0 |
0 |
T12 |
445326 |
1432 |
0 |
0 |
T13 |
8522 |
77 |
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 | T7,T8,T11 |
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 | T8,T11,T23 |
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 |
418665934 |
271575 |
0 |
0 |
T1 |
1452 |
4 |
0 |
0 |
T2 |
8613 |
9 |
0 |
0 |
T3 |
2619 |
19 |
0 |
0 |
T7 |
227307 |
5 |
0 |
0 |
T8 |
65990 |
125 |
0 |
0 |
T9 |
1997 |
4 |
0 |
0 |
T10 |
2363 |
8 |
0 |
0 |
T11 |
46364 |
82 |
0 |
0 |
T12 |
445326 |
8 |
0 |
0 |
T13 |
8522 |
38 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
418665934 |
347670 |
0 |
0 |
T1 |
1452 |
7 |
0 |
0 |
T2 |
8613 |
6 |
0 |
0 |
T3 |
2619 |
12 |
0 |
0 |
T7 |
227307 |
5 |
0 |
0 |
T8 |
65990 |
146 |
0 |
0 |
T9 |
1997 |
5 |
0 |
0 |
T10 |
2363 |
7 |
0 |
0 |
T11 |
46364 |
132 |
0 |
0 |
T12 |
445326 |
4 |
0 |
0 |
T13 |
8522 |
49 |
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 |
418665934 |
4047048 |
0 |
0 |
T1 |
1452 |
11 |
0 |
0 |
T2 |
8613 |
15 |
0 |
0 |
T3 |
2619 |
29 |
0 |
0 |
T7 |
227307 |
19 |
0 |
0 |
T8 |
65990 |
789 |
0 |
0 |
T9 |
1997 |
9 |
0 |
0 |
T10 |
2363 |
14 |
0 |
0 |
T11 |
46364 |
297 |
0 |
0 |
T12 |
445326 |
2700 |
0 |
0 |
T13 |
8522 |
83 |
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 | T2,T8,T11 |
1 | 0 | 1 | Covered | T1,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,T8,T11 |
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 |
418665934 |
246321 |
0 |
0 |
T1 |
1452 |
5 |
0 |
0 |
T2 |
8613 |
4 |
0 |
0 |
T3 |
2619 |
27 |
0 |
0 |
T7 |
227307 |
10 |
0 |
0 |
T8 |
65990 |
61 |
0 |
0 |
T9 |
1997 |
2 |
0 |
0 |
T10 |
2363 |
2 |
0 |
0 |
T11 |
46364 |
147 |
0 |
0 |
T12 |
445326 |
7 |
0 |
0 |
T13 |
8522 |
45 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
418665934 |
333803 |
0 |
0 |
T1 |
1452 |
8 |
0 |
0 |
T2 |
8613 |
11 |
0 |
0 |
T3 |
2619 |
17 |
0 |
0 |
T7 |
227307 |
4 |
0 |
0 |
T8 |
65990 |
118 |
0 |
0 |
T9 |
1997 |
3 |
0 |
0 |
T10 |
2363 |
3 |
0 |
0 |
T11 |
46364 |
65 |
0 |
0 |
T12 |
445326 |
325 |
0 |
0 |
T13 |
8522 |
44 |
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 |
418665934 |
4090793 |
0 |
0 |
T1 |
1452 |
13 |
0 |
0 |
T2 |
8613 |
26 |
0 |
0 |
T3 |
2619 |
40 |
0 |
0 |
T7 |
227307 |
299 |
0 |
0 |
T8 |
65990 |
551 |
0 |
0 |
T9 |
1997 |
5 |
0 |
0 |
T10 |
2363 |
5 |
0 |
0 |
T11 |
46364 |
331 |
0 |
0 |
T12 |
445326 |
3209 |
0 |
0 |
T13 |
8522 |
82 |
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 | T8,T11,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 | T11,T23,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_48
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
418665934 |
259037 |
0 |
0 |
T1 |
1452 |
5 |
0 |
0 |
T2 |
8613 |
1 |
0 |
0 |
T3 |
2619 |
16 |
0 |
0 |
T7 |
227307 |
1 |
0 |
0 |
T8 |
65990 |
130 |
0 |
0 |
T9 |
1997 |
8 |
0 |
0 |
T10 |
2363 |
6 |
0 |
0 |
T11 |
46364 |
73 |
0 |
0 |
T12 |
445326 |
4 |
0 |
0 |
T13 |
8522 |
31 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
418665934 |
327863 |
0 |
0 |
T1 |
1452 |
6 |
0 |
0 |
T2 |
8613 |
10 |
0 |
0 |
T3 |
2619 |
17 |
0 |
0 |
T7 |
227307 |
8 |
0 |
0 |
T8 |
65990 |
151 |
0 |
0 |
T9 |
1997 |
10 |
0 |
0 |
T10 |
2363 |
4 |
0 |
0 |
T11 |
46364 |
122 |
0 |
0 |
T12 |
445326 |
3 |
0 |
0 |
T13 |
8522 |
41 |
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 |
418665934 |
3913481 |
0 |
0 |
T1 |
1452 |
11 |
0 |
0 |
T2 |
8613 |
11 |
0 |
0 |
T3 |
2619 |
32 |
0 |
0 |
T7 |
227307 |
3 |
0 |
0 |
T8 |
65990 |
742 |
0 |
0 |
T9 |
1997 |
17 |
0 |
0 |
T10 |
2363 |
10 |
0 |
0 |
T11 |
46364 |
257 |
0 |
0 |
T12 |
445326 |
777 |
0 |
0 |
T13 |
8522 |
68 |
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 | T2,T8,T11 |
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,T8,T11 |
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 |
418665934 |
264205 |
0 |
0 |
T1 |
1452 |
1 |
0 |
0 |
T2 |
8613 |
3 |
0 |
0 |
T3 |
2619 |
11 |
0 |
0 |
T7 |
227307 |
6 |
0 |
0 |
T8 |
65990 |
142 |
0 |
0 |
T9 |
1997 |
5 |
0 |
0 |
T10 |
2363 |
7 |
0 |
0 |
T11 |
46364 |
92 |
0 |
0 |
T12 |
445326 |
3 |
0 |
0 |
T13 |
8522 |
46 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
418665934 |
350551 |
0 |
0 |
T1 |
1452 |
5 |
0 |
0 |
T2 |
8613 |
10 |
0 |
0 |
T3 |
2619 |
12 |
0 |
0 |
T7 |
227307 |
11 |
0 |
0 |
T8 |
65990 |
159 |
0 |
0 |
T9 |
1997 |
6 |
0 |
0 |
T10 |
2363 |
5 |
0 |
0 |
T11 |
46364 |
111 |
0 |
0 |
T12 |
445326 |
3 |
0 |
0 |
T13 |
8522 |
54 |
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 |
418665934 |
4139661 |
0 |
0 |
T1 |
1452 |
6 |
0 |
0 |
T2 |
8613 |
27 |
0 |
0 |
T3 |
2619 |
22 |
0 |
0 |
T7 |
227307 |
1324 |
0 |
0 |
T8 |
65990 |
874 |
0 |
0 |
T9 |
1997 |
11 |
0 |
0 |
T10 |
2363 |
11 |
0 |
0 |
T11 |
46364 |
283 |
0 |
0 |
T12 |
445326 |
1721 |
0 |
0 |
T13 |
8522 |
93 |
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 | T2,T8,T11 |
1 | 0 | 1 | Covered | T1,T3,T7 |
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,T8,T11 |
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 |
418665934 |
294643 |
0 |
0 |
T1 |
1452 |
5 |
0 |
0 |
T2 |
8613 |
3 |
0 |
0 |
T3 |
2619 |
22 |
0 |
0 |
T7 |
227307 |
6 |
0 |
0 |
T8 |
65990 |
114 |
0 |
0 |
T9 |
1997 |
13 |
0 |
0 |
T10 |
2363 |
14 |
0 |
0 |
T11 |
46364 |
65 |
0 |
0 |
T12 |
445326 |
6 |
0 |
0 |
T13 |
8522 |
32 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
418665934 |
411111 |
0 |
0 |
T1 |
1452 |
8 |
0 |
0 |
T2 |
8613 |
6 |
0 |
0 |
T3 |
2619 |
17 |
0 |
0 |
T7 |
227307 |
6 |
0 |
0 |
T8 |
65990 |
107 |
0 |
0 |
T9 |
1997 |
4 |
0 |
0 |
T10 |
2363 |
3 |
0 |
0 |
T11 |
46364 |
105 |
0 |
0 |
T12 |
445326 |
7 |
0 |
0 |
T13 |
8522 |
42 |
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 |
418665934 |
4687284 |
0 |
0 |
T1 |
1452 |
13 |
0 |
0 |
T2 |
8613 |
20 |
0 |
0 |
T3 |
2619 |
38 |
0 |
0 |
T7 |
227307 |
344 |
0 |
0 |
T8 |
65990 |
745 |
0 |
0 |
T9 |
1997 |
16 |
0 |
0 |
T10 |
2363 |
15 |
0 |
0 |
T11 |
46364 |
224 |
0 |
0 |
T12 |
445326 |
2812 |
0 |
0 |
T13 |
8522 |
72 |
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 | T8,T11,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 | T7,T8,T11 |
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 |
418665934 |
289649 |
0 |
0 |
T1 |
1452 |
2 |
0 |
0 |
T2 |
8613 |
4 |
0 |
0 |
T3 |
2619 |
15 |
0 |
0 |
T7 |
227307 |
9 |
0 |
0 |
T8 |
65990 |
106 |
0 |
0 |
T9 |
1997 |
5 |
0 |
0 |
T10 |
2363 |
4 |
0 |
0 |
T11 |
46364 |
73 |
0 |
0 |
T12 |
445326 |
8 |
0 |
0 |
T13 |
8522 |
66 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
418665934 |
387701 |
0 |
0 |
T1 |
1452 |
7 |
0 |
0 |
T2 |
8613 |
31 |
0 |
0 |
T3 |
2619 |
23 |
0 |
0 |
T7 |
227307 |
6 |
0 |
0 |
T8 |
65990 |
114 |
0 |
0 |
T9 |
1997 |
5 |
0 |
0 |
T10 |
2363 |
4 |
0 |
0 |
T11 |
46364 |
73 |
0 |
0 |
T12 |
445326 |
5 |
0 |
0 |
T13 |
8522 |
74 |
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 |
418665934 |
3787995 |
0 |
0 |
T1 |
1452 |
9 |
0 |
0 |
T2 |
8613 |
22 |
0 |
0 |
T3 |
2619 |
37 |
0 |
0 |
T7 |
227307 |
640 |
0 |
0 |
T8 |
65990 |
658 |
0 |
0 |
T9 |
1997 |
10 |
0 |
0 |
T10 |
2363 |
8 |
0 |
0 |
T11 |
46364 |
214 |
0 |
0 |
T12 |
445326 |
2120 |
0 |
0 |
T13 |
8522 |
136 |
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 | T2,T8,T11 |
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 | T11,T23,T17 |
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 |
418665934 |
273691 |
0 |
0 |
T1 |
1452 |
3 |
0 |
0 |
T2 |
8613 |
3 |
0 |
0 |
T3 |
2619 |
34 |
0 |
0 |
T7 |
227307 |
6 |
0 |
0 |
T8 |
65990 |
115 |
0 |
0 |
T9 |
1997 |
4 |
0 |
0 |
T10 |
2363 |
8 |
0 |
0 |
T11 |
46364 |
61 |
0 |
0 |
T12 |
445326 |
9 |
0 |
0 |
T13 |
8522 |
32 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
418665934 |
362252 |
0 |
0 |
T1 |
1452 |
5 |
0 |
0 |
T2 |
8613 |
22 |
0 |
0 |
T3 |
2619 |
9 |
0 |
0 |
T7 |
227307 |
2 |
0 |
0 |
T8 |
65990 |
179 |
0 |
0 |
T9 |
1997 |
12 |
0 |
0 |
T10 |
2363 |
1 |
0 |
0 |
T11 |
46364 |
87 |
0 |
0 |
T12 |
445326 |
2 |
0 |
0 |
T13 |
8522 |
48 |
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 |
418665934 |
3732276 |
0 |
0 |
T1 |
1452 |
8 |
0 |
0 |
T2 |
8613 |
21 |
0 |
0 |
T3 |
2619 |
38 |
0 |
0 |
T7 |
227307 |
7 |
0 |
0 |
T8 |
65990 |
763 |
0 |
0 |
T9 |
1997 |
16 |
0 |
0 |
T10 |
2363 |
9 |
0 |
0 |
T11 |
46364 |
267 |
0 |
0 |
T12 |
445326 |
4030 |
0 |
0 |
T13 |
8522 |
77 |
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 | T8,T11,T12 |
1 | 0 | 1 | Covered | T1,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 | T8,T11,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_53
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
418665934 |
288842 |
0 |
0 |
T1 |
1452 |
6 |
0 |
0 |
T2 |
8613 |
7 |
0 |
0 |
T3 |
2619 |
27 |
0 |
0 |
T7 |
227307 |
9 |
0 |
0 |
T8 |
65990 |
90 |
0 |
0 |
T9 |
1997 |
7 |
0 |
0 |
T10 |
2363 |
7 |
0 |
0 |
T11 |
46364 |
72 |
0 |
0 |
T12 |
445326 |
5 |
0 |
0 |
T13 |
8522 |
53 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
418665934 |
369981 |
0 |
0 |
T1 |
1452 |
9 |
0 |
0 |
T2 |
8613 |
7 |
0 |
0 |
T3 |
2619 |
14 |
0 |
0 |
T7 |
227307 |
11 |
0 |
0 |
T8 |
65990 |
141 |
0 |
0 |
T9 |
1997 |
10 |
0 |
0 |
T10 |
2363 |
4 |
0 |
0 |
T11 |
46364 |
53 |
0 |
0 |
T12 |
445326 |
146 |
0 |
0 |
T13 |
8522 |
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 |
418665934 |
3369089 |
0 |
0 |
T1 |
1452 |
14 |
0 |
0 |
T2 |
8613 |
14 |
0 |
0 |
T3 |
2619 |
39 |
0 |
0 |
T7 |
227307 |
15 |
0 |
0 |
T8 |
65990 |
573 |
0 |
0 |
T9 |
1997 |
16 |
0 |
0 |
T10 |
2363 |
11 |
0 |
0 |
T11 |
46364 |
243 |
0 |
0 |
T12 |
445326 |
1984 |
0 |
0 |
T13 |
8522 |
91 |
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 | T2,T8,T11 |
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,T8,T11 |
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 |
418665934 |
297670 |
0 |
0 |
T1 |
1452 |
5 |
0 |
0 |
T2 |
8613 |
5 |
0 |
0 |
T3 |
2619 |
17 |
0 |
0 |
T7 |
227307 |
7 |
0 |
0 |
T8 |
65990 |
99 |
0 |
0 |
T9 |
1997 |
3 |
0 |
0 |
T10 |
2363 |
10 |
0 |
0 |
T11 |
46364 |
91 |
0 |
0 |
T12 |
445326 |
13 |
0 |
0 |
T13 |
8522 |
43 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
418665934 |
397949 |
0 |
0 |
T1 |
1452 |
8 |
0 |
0 |
T2 |
8613 |
6 |
0 |
0 |
T3 |
2619 |
26 |
0 |
0 |
T7 |
227307 |
10 |
0 |
0 |
T8 |
65990 |
193 |
0 |
0 |
T9 |
1997 |
9 |
0 |
0 |
T10 |
2363 |
3 |
0 |
0 |
T11 |
46364 |
111 |
0 |
0 |
T12 |
445326 |
5 |
0 |
0 |
T13 |
8522 |
47 |
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 |
418665934 |
3379383 |
0 |
0 |
T1 |
1452 |
13 |
0 |
0 |
T2 |
8613 |
32 |
0 |
0 |
T3 |
2619 |
42 |
0 |
0 |
T7 |
227307 |
88 |
0 |
0 |
T8 |
65990 |
743 |
0 |
0 |
T9 |
1997 |
12 |
0 |
0 |
T10 |
2363 |
11 |
0 |
0 |
T11 |
46364 |
357 |
0 |
0 |
T12 |
445326 |
4435 |
0 |
0 |
T13 |
8522 |
88 |
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 | T8,T11,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 | T7,T8,T11 |
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 |
418665934 |
272998 |
0 |
0 |
T1 |
1452 |
1 |
0 |
0 |
T2 |
8613 |
3 |
0 |
0 |
T3 |
2619 |
22 |
0 |
0 |
T7 |
227307 |
7 |
0 |
0 |
T8 |
65990 |
129 |
0 |
0 |
T9 |
1997 |
10 |
0 |
0 |
T10 |
2363 |
6 |
0 |
0 |
T11 |
46364 |
119 |
0 |
0 |
T12 |
445326 |
5 |
0 |
0 |
T13 |
8522 |
50 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
418665934 |
345457 |
0 |
0 |
T1 |
1452 |
8 |
0 |
0 |
T2 |
8613 |
6 |
0 |
0 |
T3 |
2619 |
17 |
0 |
0 |
T7 |
227307 |
2 |
0 |
0 |
T8 |
65990 |
120 |
0 |
0 |
T9 |
1997 |
5 |
0 |
0 |
T10 |
2363 |
5 |
0 |
0 |
T11 |
46364 |
99 |
0 |
0 |
T12 |
445326 |
3 |
0 |
0 |
T13 |
8522 |
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 |
418665934 |
4035609 |
0 |
0 |
T1 |
1452 |
9 |
0 |
0 |
T2 |
8613 |
9 |
0 |
0 |
T3 |
2619 |
37 |
0 |
0 |
T7 |
227307 |
290 |
0 |
0 |
T8 |
65990 |
797 |
0 |
0 |
T9 |
1997 |
13 |
0 |
0 |
T10 |
2363 |
11 |
0 |
0 |
T11 |
46364 |
291 |
0 |
0 |
T12 |
445326 |
974 |
0 |
0 |
T13 |
8522 |
98 |
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 | T8,T11,T12 |
1 | 0 | 1 | Covered | T1,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 | T8,T11,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_56
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
418665934 |
250324 |
0 |
0 |
T1 |
1452 |
1 |
0 |
0 |
T2 |
8613 |
1 |
0 |
0 |
T3 |
2619 |
23 |
0 |
0 |
T7 |
227307 |
8 |
0 |
0 |
T8 |
65990 |
124 |
0 |
0 |
T9 |
1997 |
3 |
0 |
0 |
T10 |
2363 |
10 |
0 |
0 |
T11 |
46364 |
66 |
0 |
0 |
T12 |
445326 |
6 |
0 |
0 |
T13 |
8522 |
45 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
418665934 |
322611 |
0 |
0 |
T1 |
1452 |
8 |
0 |
0 |
T2 |
8613 |
13 |
0 |
0 |
T3 |
2619 |
19 |
0 |
0 |
T7 |
227307 |
1 |
0 |
0 |
T8 |
65990 |
132 |
0 |
0 |
T9 |
1997 |
3 |
0 |
0 |
T10 |
2363 |
4 |
0 |
0 |
T11 |
46364 |
128 |
0 |
0 |
T12 |
445326 |
3 |
0 |
0 |
T13 |
8522 |
49 |
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 |
418665934 |
4189774 |
0 |
0 |
T1 |
1452 |
9 |
0 |
0 |
T2 |
8613 |
8 |
0 |
0 |
T3 |
2619 |
38 |
0 |
0 |
T7 |
227307 |
9 |
0 |
0 |
T8 |
65990 |
711 |
0 |
0 |
T9 |
1997 |
6 |
0 |
0 |
T10 |
2363 |
14 |
0 |
0 |
T11 |
46364 |
282 |
0 |
0 |
T12 |
445326 |
2497 |
0 |
0 |
T13 |
8522 |
87 |
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 | T9,T14,T17 |
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 | T9,T14,T17 |
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 | T9,T14,T17 |
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,T2,T8 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T9,T14,T17 |
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 | T2,T8,T11 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T9,T14,T17 |
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 | T9,T14,T17 |
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 |
418665934 |
10466935 |
0 |
0 |
T1 |
1452 |
30 |
0 |
0 |
T2 |
8613 |
224 |
0 |
0 |
T3 |
2619 |
117 |
0 |
0 |
T7 |
227307 |
142 |
0 |
0 |
T8 |
65990 |
4153 |
0 |
0 |
T9 |
1997 |
40 |
0 |
0 |
T10 |
2363 |
40 |
0 |
0 |
T11 |
46364 |
3443 |
0 |
0 |
T12 |
445326 |
17904 |
0 |
0 |
T13 |
8522 |
288 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
418665934 |
1887000 |
0 |
0 |
T1 |
1452 |
8 |
0 |
0 |
T2 |
8613 |
17 |
0 |
0 |
T3 |
2619 |
20 |
0 |
0 |
T7 |
227307 |
22 |
0 |
0 |
T8 |
65990 |
913 |
0 |
0 |
T9 |
1997 |
4 |
0 |
0 |
T10 |
2363 |
11 |
0 |
0 |
T11 |
46364 |
598 |
0 |
0 |
T12 |
445326 |
3259 |
0 |
0 |
T13 |
8522 |
38 |
0 |
0 |
gen_host_fifo[2].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
418665934 |
1978111 |
0 |
0 |
T1 |
1452 |
2 |
0 |
0 |
T2 |
8613 |
57 |
0 |
0 |
T3 |
2619 |
17 |
0 |
0 |
T7 |
227307 |
23 |
0 |
0 |
T8 |
65990 |
775 |
0 |
0 |
T9 |
1997 |
5 |
0 |
0 |
T10 |
2363 |
2 |
0 |
0 |
T11 |
46364 |
563 |
0 |
0 |
T12 |
445326 |
3336 |
0 |
0 |
T13 |
8522 |
47 |
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 |
418665934 |
20377561 |
0 |
0 |
T1 |
1452 |
40 |
0 |
0 |
T2 |
8613 |
135 |
0 |
0 |
T3 |
2619 |
151 |
0 |
0 |
T7 |
227307 |
43 |
0 |
0 |
T8 |
65990 |
2524 |
0 |
0 |
T9 |
1997 |
49 |
0 |
0 |
T10 |
2363 |
53 |
0 |
0 |
T11 |
46364 |
1882 |
0 |
0 |
T12 |
445326 |
8458 |
0 |
0 |
T13 |
8522 |
368 |
0 |
0 |