Line Coverage for Module :
tlul_socket_m1 ( parameter M=3,HReqPass=7,HRspPass=7,HReqDepth=0,HRspDepth=0,DReqPass=1,DRspPass=0,DReqDepth=1,DRspDepth=1,IDW=8,STIDW=2 + M=3,HReqPass=7,HRspPass=7,HReqDepth=0,HRspDepth=0,DReqPass=0,DRspPass=0,DReqDepth=1,DRspDepth=1,IDW=8,STIDW=2 + M=3,HReqPass=7,HRspPass=7,HReqDepth=0,HRspDepth=0,DReqPass=1,DRspPass=1,DReqDepth=0,DRspDepth=0,IDW=8,STIDW=2 )
Line Coverage for Module self-instances :
| Line No. | Total | Covered | Percent |
TOTAL | | 25 | 25 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 3/3 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 3/3 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 3/3 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 3/3 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 3/3 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 3/3 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 3/3 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
Line Coverage for Module :
tlul_socket_m1 ( parameter M=2,HReqPass=3,HRspPass=3,HReqDepth=0,HRspDepth=0,DReqPass=0,DRspPass=0,DReqDepth=1,DRspDepth=1,IDW=8,STIDW=1 + M=2,HReqPass=3,HRspPass=3,HReqDepth=0,HRspDepth=0,DReqPass=1,DRspPass=1,DReqDepth=0,DRspDepth=0,IDW=8,STIDW=1 )
Line Coverage for Module self-instances :
| Line No. | Total | Covered | Percent |
TOTAL | | 18 | 18 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 2/2 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 2/2 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 2/2 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 2/2 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 2/2 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 2/2 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 2/2 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3
Cond Coverage for Module :
tlul_socket_m1 ( parameter M=3,HReqPass=7,HRspPass=7,HReqDepth=0,HRspDepth=0,DReqPass=1,DRspPass=0,DReqDepth=1,DRspDepth=1,IDW=8,STIDW=2 + M=3,HReqPass=7,HRspPass=7,HReqDepth=0,HRspDepth=0,DReqPass=0,DRspPass=0,DReqDepth=1,DRspDepth=1,IDW=8,STIDW=2 + M=3,HReqPass=7,HRspPass=7,HReqDepth=0,HRspDepth=0,DReqPass=1,DRspPass=1,DReqDepth=0,DRspDepth=0,IDW=8,STIDW=2 )
Cond Coverage for Module self-instances :
| Total | Covered | Percent |
Conditions | 33 | 33 | 100.00 |
Logical | 33 | 33 | 100.00 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T3,T11,T7 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 2))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T3,T11,T7 |
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 | T10,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,T9,T13 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T3,T11,T7 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[2].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 2) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T2,T3 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T3,T11,T7 |
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 | T7,T8,T9 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T8,T9,T25 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Module :
tlul_socket_m1
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
2147483647 |
22782856 |
0 |
0 |
T1 |
52728 |
330 |
0 |
0 |
T2 |
67992 |
327 |
0 |
0 |
T3 |
47616 |
358 |
0 |
0 |
T4 |
0 |
1611 |
0 |
0 |
T7 |
271248 |
500 |
0 |
0 |
T8 |
506448 |
10495 |
0 |
0 |
T9 |
579912 |
4693 |
0 |
0 |
T10 |
38208 |
236 |
0 |
0 |
T11 |
48264 |
292 |
0 |
0 |
T12 |
58872 |
401 |
0 |
0 |
T13 |
647856 |
1870 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
2147483647 |
12579659 |
0 |
0 |
T1 |
52728 |
218 |
0 |
0 |
T2 |
67992 |
196 |
0 |
0 |
T3 |
47616 |
198 |
0 |
0 |
T4 |
0 |
1711 |
0 |
0 |
T7 |
271248 |
321 |
0 |
0 |
T8 |
506448 |
8935 |
0 |
0 |
T9 |
579912 |
1951 |
0 |
0 |
T10 |
38208 |
190 |
0 |
0 |
T11 |
48264 |
190 |
0 |
0 |
T12 |
58872 |
176 |
0 |
0 |
T13 |
647856 |
738 |
0 |
0 |
T14 |
0 |
9 |
0 |
0 |
gen_host_fifo[2].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1556415480 |
3737914 |
0 |
0 |
T1 |
8788 |
22 |
0 |
0 |
T2 |
11332 |
27 |
0 |
0 |
T3 |
7936 |
29 |
0 |
0 |
T4 |
0 |
233 |
0 |
0 |
T7 |
45208 |
76 |
0 |
0 |
T8 |
84408 |
0 |
0 |
0 |
T9 |
96652 |
579 |
0 |
0 |
T10 |
6368 |
23 |
0 |
0 |
T11 |
8044 |
31 |
0 |
0 |
T12 |
9812 |
21 |
0 |
0 |
T13 |
107976 |
260 |
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 |
154607299 |
0 |
0 |
T1 |
52728 |
513 |
0 |
0 |
T2 |
67992 |
459 |
0 |
0 |
T3 |
47616 |
532 |
0 |
0 |
T4 |
0 |
2081 |
0 |
0 |
T7 |
271248 |
2069 |
0 |
0 |
T8 |
506448 |
13003 |
0 |
0 |
T9 |
579912 |
6081 |
0 |
0 |
T10 |
38208 |
392 |
0 |
0 |
T11 |
48264 |
464 |
0 |
0 |
T12 |
58872 |
492 |
0 |
0 |
T13 |
647856 |
8106 |
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 | T10,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,T9,T13 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
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,T9,T26 |
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 |
389103870 |
1665549 |
0 |
0 |
T1 |
2197 |
36 |
0 |
0 |
T2 |
2833 |
29 |
0 |
0 |
T3 |
1984 |
51 |
0 |
0 |
T7 |
11302 |
31 |
0 |
0 |
T8 |
21102 |
203 |
0 |
0 |
T9 |
24163 |
563 |
0 |
0 |
T10 |
1592 |
35 |
0 |
0 |
T11 |
2011 |
44 |
0 |
0 |
T12 |
2453 |
35 |
0 |
0 |
T13 |
26994 |
137 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
389103870 |
423818 |
0 |
0 |
T1 |
2197 |
9 |
0 |
0 |
T2 |
2833 |
3 |
0 |
0 |
T3 |
1984 |
10 |
0 |
0 |
T4 |
0 |
68 |
0 |
0 |
T7 |
11302 |
3 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
81 |
0 |
0 |
T10 |
1592 |
7 |
0 |
0 |
T11 |
2011 |
6 |
0 |
0 |
T12 |
2453 |
5 |
0 |
0 |
T13 |
26994 |
69 |
0 |
0 |
gen_host_fifo[2].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
389103870 |
558510 |
0 |
0 |
T1 |
2197 |
6 |
0 |
0 |
T2 |
2833 |
3 |
0 |
0 |
T3 |
1984 |
5 |
0 |
0 |
T4 |
0 |
60 |
0 |
0 |
T7 |
11302 |
11 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
57 |
0 |
0 |
T10 |
1592 |
6 |
0 |
0 |
T11 |
2011 |
6 |
0 |
0 |
T12 |
2453 |
4 |
0 |
0 |
T13 |
26994 |
26 |
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 |
389103870 |
19376672 |
0 |
0 |
T1 |
2197 |
51 |
0 |
0 |
T2 |
2833 |
35 |
0 |
0 |
T3 |
1984 |
66 |
0 |
0 |
T7 |
11302 |
256 |
0 |
0 |
T8 |
21102 |
1338 |
0 |
0 |
T9 |
24163 |
831 |
0 |
0 |
T10 |
1592 |
48 |
0 |
0 |
T11 |
2011 |
56 |
0 |
0 |
T12 |
2453 |
44 |
0 |
0 |
T13 |
26994 |
1062 |
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 | T10,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,T9,T13 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
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,T24,T26 |
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 |
389103870 |
1878585 |
0 |
0 |
T1 |
2197 |
45 |
0 |
0 |
T2 |
2833 |
41 |
0 |
0 |
T3 |
1984 |
63 |
0 |
0 |
T7 |
11302 |
63 |
0 |
0 |
T8 |
21102 |
256 |
0 |
0 |
T9 |
24163 |
460 |
0 |
0 |
T10 |
1592 |
40 |
0 |
0 |
T11 |
2011 |
42 |
0 |
0 |
T12 |
2453 |
59 |
0 |
0 |
T13 |
26994 |
148 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
389103870 |
518275 |
0 |
0 |
T1 |
2197 |
13 |
0 |
0 |
T2 |
2833 |
11 |
0 |
0 |
T3 |
1984 |
6 |
0 |
0 |
T4 |
0 |
81 |
0 |
0 |
T7 |
11302 |
3 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
80 |
0 |
0 |
T10 |
1592 |
5 |
0 |
0 |
T11 |
2011 |
13 |
0 |
0 |
T12 |
2453 |
16 |
0 |
0 |
T13 |
26994 |
23 |
0 |
0 |
gen_host_fifo[2].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
389103870 |
622988 |
0 |
0 |
T1 |
2197 |
3 |
0 |
0 |
T2 |
2833 |
9 |
0 |
0 |
T3 |
1984 |
9 |
0 |
0 |
T4 |
0 |
70 |
0 |
0 |
T7 |
11302 |
4 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
107 |
0 |
0 |
T10 |
1592 |
4 |
0 |
0 |
T11 |
2011 |
10 |
0 |
0 |
T12 |
2453 |
4 |
0 |
0 |
T13 |
26994 |
27 |
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 |
389103870 |
18094672 |
0 |
0 |
T1 |
2197 |
49 |
0 |
0 |
T2 |
2833 |
50 |
0 |
0 |
T3 |
1984 |
63 |
0 |
0 |
T7 |
11302 |
297 |
0 |
0 |
T8 |
21102 |
1181 |
0 |
0 |
T9 |
24163 |
717 |
0 |
0 |
T10 |
1592 |
42 |
0 |
0 |
T11 |
2011 |
54 |
0 |
0 |
T12 |
2453 |
62 |
0 |
0 |
T13 |
26994 |
1084 |
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 | T10,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,T9,T13 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
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 | T9,T26,T27 |
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 |
389103870 |
1824826 |
0 |
0 |
T1 |
2197 |
22 |
0 |
0 |
T2 |
2833 |
41 |
0 |
0 |
T3 |
1984 |
48 |
0 |
0 |
T7 |
11302 |
58 |
0 |
0 |
T8 |
21102 |
225 |
0 |
0 |
T9 |
24163 |
490 |
0 |
0 |
T10 |
1592 |
36 |
0 |
0 |
T11 |
2011 |
48 |
0 |
0 |
T12 |
2453 |
43 |
0 |
0 |
T13 |
26994 |
162 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
389103870 |
491333 |
0 |
0 |
T1 |
2197 |
8 |
0 |
0 |
T2 |
2833 |
6 |
0 |
0 |
T3 |
1984 |
8 |
0 |
0 |
T4 |
0 |
71 |
0 |
0 |
T7 |
11302 |
15 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
71 |
0 |
0 |
T10 |
1592 |
3 |
0 |
0 |
T11 |
2011 |
9 |
0 |
0 |
T12 |
2453 |
6 |
0 |
0 |
T13 |
26994 |
17 |
0 |
0 |
gen_host_fifo[2].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
389103870 |
600924 |
0 |
0 |
T1 |
2197 |
7 |
0 |
0 |
T2 |
2833 |
6 |
0 |
0 |
T3 |
1984 |
8 |
0 |
0 |
T4 |
0 |
56 |
0 |
0 |
T7 |
11302 |
8 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
54 |
0 |
0 |
T10 |
1592 |
6 |
0 |
0 |
T11 |
2011 |
9 |
0 |
0 |
T12 |
2453 |
5 |
0 |
0 |
T13 |
26994 |
20 |
0 |
0 |
maxM
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
900 |
900 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
T11 |
1 |
1 |
0 |
0 |
T12 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
389103870 |
20429254 |
0 |
0 |
T1 |
2197 |
34 |
0 |
0 |
T2 |
2833 |
43 |
0 |
0 |
T3 |
1984 |
53 |
0 |
0 |
T7 |
11302 |
339 |
0 |
0 |
T8 |
21102 |
1397 |
0 |
0 |
T9 |
24163 |
746 |
0 |
0 |
T10 |
1592 |
38 |
0 |
0 |
T11 |
2011 |
51 |
0 |
0 |
T12 |
2453 |
46 |
0 |
0 |
T13 |
26994 |
1222 |
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 | T7,T9,T13 |
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 | T26,T27,T28 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_sm1_33
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
389103870 |
265833 |
0 |
0 |
T1 |
2197 |
8 |
0 |
0 |
T2 |
2833 |
6 |
0 |
0 |
T3 |
1984 |
6 |
0 |
0 |
T4 |
0 |
76 |
0 |
0 |
T7 |
11302 |
12 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
49 |
0 |
0 |
T10 |
1592 |
4 |
0 |
0 |
T11 |
2011 |
5 |
0 |
0 |
T12 |
2453 |
6 |
0 |
0 |
T13 |
26994 |
22 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
389103870 |
347577 |
0 |
0 |
T1 |
2197 |
14 |
0 |
0 |
T2 |
2833 |
4 |
0 |
0 |
T3 |
1984 |
10 |
0 |
0 |
T4 |
0 |
63 |
0 |
0 |
T7 |
11302 |
3 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
76 |
0 |
0 |
T10 |
1592 |
8 |
0 |
0 |
T11 |
2011 |
6 |
0 |
0 |
T12 |
2453 |
9 |
0 |
0 |
T13 |
26994 |
19 |
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 |
389103870 |
3260988 |
0 |
0 |
T1 |
2197 |
22 |
0 |
0 |
T2 |
2833 |
10 |
0 |
0 |
T3 |
1984 |
16 |
0 |
0 |
T4 |
0 |
129 |
0 |
0 |
T7 |
11302 |
64 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
137 |
0 |
0 |
T10 |
1592 |
12 |
0 |
0 |
T11 |
2011 |
11 |
0 |
0 |
T12 |
2453 |
15 |
0 |
0 |
T13 |
26994 |
139 |
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 | T7,T9,T13 |
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 | T9,T26,T27 |
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 |
389103870 |
271984 |
0 |
0 |
T1 |
2197 |
10 |
0 |
0 |
T2 |
2833 |
5 |
0 |
0 |
T3 |
1984 |
9 |
0 |
0 |
T4 |
0 |
58 |
0 |
0 |
T7 |
11302 |
10 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
41 |
0 |
0 |
T10 |
1592 |
1 |
0 |
0 |
T11 |
2011 |
5 |
0 |
0 |
T12 |
2453 |
11 |
0 |
0 |
T13 |
26994 |
34 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
389103870 |
362763 |
0 |
0 |
T1 |
2197 |
9 |
0 |
0 |
T2 |
2833 |
6 |
0 |
0 |
T3 |
1984 |
6 |
0 |
0 |
T4 |
0 |
63 |
0 |
0 |
T7 |
11302 |
4 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
77 |
0 |
0 |
T10 |
1592 |
6 |
0 |
0 |
T11 |
2011 |
5 |
0 |
0 |
T12 |
2453 |
5 |
0 |
0 |
T13 |
26994 |
16 |
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 |
389103870 |
3459617 |
0 |
0 |
T1 |
2197 |
19 |
0 |
0 |
T2 |
2833 |
11 |
0 |
0 |
T3 |
1984 |
14 |
0 |
0 |
T4 |
0 |
116 |
0 |
0 |
T7 |
11302 |
98 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
124 |
0 |
0 |
T10 |
1592 |
7 |
0 |
0 |
T11 |
2011 |
10 |
0 |
0 |
T12 |
2453 |
15 |
0 |
0 |
T13 |
26994 |
188 |
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 | T7,T9,T13 |
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 | T9,T26,T27 |
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 |
389103870 |
835390 |
0 |
0 |
T1 |
2197 |
15 |
0 |
0 |
T2 |
2833 |
11 |
0 |
0 |
T3 |
1984 |
7 |
0 |
0 |
T4 |
0 |
332 |
0 |
0 |
T7 |
11302 |
35 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
48 |
0 |
0 |
T10 |
1592 |
9 |
0 |
0 |
T11 |
2011 |
9 |
0 |
0 |
T12 |
2453 |
3 |
0 |
0 |
T13 |
26994 |
26 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
389103870 |
940737 |
0 |
0 |
T1 |
2197 |
12 |
0 |
0 |
T2 |
2833 |
9 |
0 |
0 |
T3 |
1984 |
13 |
0 |
0 |
T4 |
0 |
345 |
0 |
0 |
T7 |
11302 |
31 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
87 |
0 |
0 |
T10 |
1592 |
33 |
0 |
0 |
T11 |
2011 |
5 |
0 |
0 |
T12 |
2453 |
8 |
0 |
0 |
T13 |
26994 |
19 |
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 |
389103870 |
3433469 |
0 |
0 |
T1 |
2197 |
20 |
0 |
0 |
T2 |
2833 |
16 |
0 |
0 |
T3 |
1984 |
18 |
0 |
0 |
T4 |
0 |
131 |
0 |
0 |
T7 |
11302 |
60 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
192 |
0 |
0 |
T10 |
1592 |
16 |
0 |
0 |
T11 |
2011 |
14 |
0 |
0 |
T12 |
2453 |
11 |
0 |
0 |
T13 |
26994 |
173 |
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 | T7,T9,T13 |
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 | T9,T27,T29 |
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 |
389103870 |
688550 |
0 |
0 |
T1 |
2197 |
22 |
0 |
0 |
T2 |
2833 |
8 |
0 |
0 |
T3 |
1984 |
12 |
0 |
0 |
T4 |
0 |
125 |
0 |
0 |
T7 |
11302 |
3 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
45 |
0 |
0 |
T10 |
1592 |
3 |
0 |
0 |
T11 |
2011 |
14 |
0 |
0 |
T12 |
2453 |
21 |
0 |
0 |
T13 |
26994 |
19 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
389103870 |
830396 |
0 |
0 |
T1 |
2197 |
8 |
0 |
0 |
T2 |
2833 |
25 |
0 |
0 |
T3 |
1984 |
10 |
0 |
0 |
T4 |
0 |
87 |
0 |
0 |
T7 |
11302 |
17 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
64 |
0 |
0 |
T10 |
1592 |
9 |
0 |
0 |
T11 |
2011 |
9 |
0 |
0 |
T12 |
2453 |
2 |
0 |
0 |
T13 |
26994 |
24 |
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 |
389103870 |
4051376 |
0 |
0 |
T1 |
2197 |
20 |
0 |
0 |
T2 |
2833 |
17 |
0 |
0 |
T3 |
1984 |
15 |
0 |
0 |
T4 |
0 |
98 |
0 |
0 |
T7 |
11302 |
24 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
154 |
0 |
0 |
T10 |
1592 |
9 |
0 |
0 |
T11 |
2011 |
9 |
0 |
0 |
T12 |
2453 |
7 |
0 |
0 |
T13 |
26994 |
126 |
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 | T7,T8,T9 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T8,T9,T27 |
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 |
389103870 |
714370 |
0 |
0 |
T1 |
2197 |
22 |
0 |
0 |
T2 |
2833 |
41 |
0 |
0 |
T3 |
1984 |
12 |
0 |
0 |
T7 |
11302 |
3 |
0 |
0 |
T8 |
21102 |
3903 |
0 |
0 |
T9 |
24163 |
38 |
0 |
0 |
T10 |
1592 |
3 |
0 |
0 |
T11 |
2011 |
4 |
0 |
0 |
T12 |
2453 |
31 |
0 |
0 |
T13 |
26994 |
16 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
389103870 |
815316 |
0 |
0 |
T1 |
2197 |
7 |
0 |
0 |
T2 |
2833 |
3 |
0 |
0 |
T3 |
1984 |
13 |
0 |
0 |
T7 |
11302 |
37 |
0 |
0 |
T8 |
21102 |
3936 |
0 |
0 |
T9 |
24163 |
67 |
0 |
0 |
T10 |
1592 |
14 |
0 |
0 |
T11 |
2011 |
15 |
0 |
0 |
T12 |
2453 |
11 |
0 |
0 |
T13 |
26994 |
26 |
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 |
389103870 |
3982454 |
0 |
0 |
T1 |
2197 |
19 |
0 |
0 |
T2 |
2833 |
11 |
0 |
0 |
T3 |
1984 |
22 |
0 |
0 |
T7 |
11302 |
29 |
0 |
0 |
T8 |
21102 |
2297 |
0 |
0 |
T9 |
24163 |
159 |
0 |
0 |
T10 |
1592 |
11 |
0 |
0 |
T11 |
2011 |
12 |
0 |
0 |
T12 |
2453 |
12 |
0 |
0 |
T13 |
26994 |
132 |
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 | T7,T9,T13 |
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 | T26,T27,T30 |
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 |
389103870 |
620783 |
0 |
0 |
T1 |
2197 |
5 |
0 |
0 |
T2 |
2833 |
2 |
0 |
0 |
T3 |
1984 |
5 |
0 |
0 |
T4 |
0 |
150 |
0 |
0 |
T7 |
11302 |
6 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
88 |
0 |
0 |
T10 |
1592 |
2 |
0 |
0 |
T11 |
2011 |
2 |
0 |
0 |
T12 |
2453 |
19 |
0 |
0 |
T13 |
26994 |
26 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
389103870 |
762724 |
0 |
0 |
T1 |
2197 |
16 |
0 |
0 |
T2 |
2833 |
14 |
0 |
0 |
T3 |
1984 |
11 |
0 |
0 |
T4 |
0 |
179 |
0 |
0 |
T7 |
11302 |
6 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
99 |
0 |
0 |
T10 |
1592 |
7 |
0 |
0 |
T11 |
2011 |
5 |
0 |
0 |
T12 |
2453 |
24 |
0 |
0 |
T13 |
26994 |
9 |
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 |
389103870 |
3707929 |
0 |
0 |
T1 |
2197 |
14 |
0 |
0 |
T2 |
2833 |
8 |
0 |
0 |
T3 |
1984 |
12 |
0 |
0 |
T4 |
0 |
133 |
0 |
0 |
T7 |
11302 |
41 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
101 |
0 |
0 |
T10 |
1592 |
9 |
0 |
0 |
T11 |
2011 |
7 |
0 |
0 |
T12 |
2453 |
17 |
0 |
0 |
T13 |
26994 |
213 |
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 | T7,T9,T13 |
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 | T9,T25,T27 |
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 |
389103870 |
280857 |
0 |
0 |
T1 |
2197 |
5 |
0 |
0 |
T2 |
2833 |
11 |
0 |
0 |
T3 |
1984 |
7 |
0 |
0 |
T4 |
0 |
64 |
0 |
0 |
T7 |
11302 |
4 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
59 |
0 |
0 |
T10 |
1592 |
2 |
0 |
0 |
T11 |
2011 |
9 |
0 |
0 |
T12 |
2453 |
11 |
0 |
0 |
T13 |
26994 |
28 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
389103870 |
368397 |
0 |
0 |
T1 |
2197 |
4 |
0 |
0 |
T2 |
2833 |
8 |
0 |
0 |
T3 |
1984 |
9 |
0 |
0 |
T4 |
0 |
61 |
0 |
0 |
T7 |
11302 |
6 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
63 |
0 |
0 |
T10 |
1592 |
11 |
0 |
0 |
T11 |
2011 |
5 |
0 |
0 |
T12 |
2453 |
8 |
0 |
0 |
T13 |
26994 |
14 |
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 |
389103870 |
3939965 |
0 |
0 |
T1 |
2197 |
9 |
0 |
0 |
T2 |
2833 |
18 |
0 |
0 |
T3 |
1984 |
16 |
0 |
0 |
T4 |
0 |
122 |
0 |
0 |
T7 |
11302 |
62 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
155 |
0 |
0 |
T10 |
1592 |
13 |
0 |
0 |
T11 |
2011 |
13 |
0 |
0 |
T12 |
2453 |
18 |
0 |
0 |
T13 |
26994 |
200 |
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 | T7,T9,T13 |
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 | T9,T26,T27 |
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 |
389103870 |
274609 |
0 |
0 |
T1 |
2197 |
6 |
0 |
0 |
T2 |
2833 |
11 |
0 |
0 |
T3 |
1984 |
5 |
0 |
0 |
T4 |
0 |
73 |
0 |
0 |
T7 |
11302 |
3 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
71 |
0 |
0 |
T10 |
1592 |
14 |
0 |
0 |
T11 |
2011 |
6 |
0 |
0 |
T12 |
2453 |
4 |
0 |
0 |
T13 |
26994 |
21 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
389103870 |
351231 |
0 |
0 |
T1 |
2197 |
11 |
0 |
0 |
T2 |
2833 |
7 |
0 |
0 |
T3 |
1984 |
11 |
0 |
0 |
T4 |
0 |
63 |
0 |
0 |
T7 |
11302 |
5 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
61 |
0 |
0 |
T10 |
1592 |
8 |
0 |
0 |
T11 |
2011 |
7 |
0 |
0 |
T12 |
2453 |
6 |
0 |
0 |
T13 |
26994 |
12 |
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 |
389103870 |
3732525 |
0 |
0 |
T1 |
2197 |
17 |
0 |
0 |
T2 |
2833 |
16 |
0 |
0 |
T3 |
1984 |
16 |
0 |
0 |
T4 |
0 |
124 |
0 |
0 |
T7 |
11302 |
26 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
154 |
0 |
0 |
T10 |
1592 |
20 |
0 |
0 |
T11 |
2011 |
13 |
0 |
0 |
T12 |
2453 |
10 |
0 |
0 |
T13 |
26994 |
155 |
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 | T7,T9,T13 |
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 | T26,T27,T31 |
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 |
389103870 |
279409 |
0 |
0 |
T1 |
2197 |
7 |
0 |
0 |
T2 |
2833 |
10 |
0 |
0 |
T3 |
1984 |
7 |
0 |
0 |
T4 |
0 |
60 |
0 |
0 |
T7 |
11302 |
3 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
38 |
0 |
0 |
T10 |
1592 |
3 |
0 |
0 |
T11 |
2011 |
6 |
0 |
0 |
T12 |
2453 |
7 |
0 |
0 |
T13 |
26994 |
16 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
389103870 |
371778 |
0 |
0 |
T1 |
2197 |
6 |
0 |
0 |
T2 |
2833 |
5 |
0 |
0 |
T3 |
1984 |
6 |
0 |
0 |
T4 |
0 |
62 |
0 |
0 |
T7 |
11302 |
11 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
26 |
0 |
0 |
T10 |
1592 |
4 |
0 |
0 |
T11 |
2011 |
14 |
0 |
0 |
T12 |
2453 |
7 |
0 |
0 |
T13 |
26994 |
28 |
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 |
389103870 |
4335967 |
0 |
0 |
T1 |
2197 |
13 |
0 |
0 |
T2 |
2833 |
14 |
0 |
0 |
T3 |
1984 |
12 |
0 |
0 |
T4 |
0 |
118 |
0 |
0 |
T7 |
11302 |
30 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
92 |
0 |
0 |
T10 |
1592 |
7 |
0 |
0 |
T11 |
2011 |
20 |
0 |
0 |
T12 |
2453 |
14 |
0 |
0 |
T13 |
26994 |
144 |
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,T9,T13 |
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 | T26,T27,T31 |
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 |
389103870 |
299120 |
0 |
0 |
T1 |
2197 |
11 |
0 |
0 |
T2 |
2833 |
6 |
0 |
0 |
T3 |
1984 |
4 |
0 |
0 |
T4 |
0 |
67 |
0 |
0 |
T7 |
11302 |
3 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
44 |
0 |
0 |
T10 |
1592 |
6 |
0 |
0 |
T11 |
2011 |
7 |
0 |
0 |
T12 |
2453 |
5 |
0 |
0 |
T13 |
26994 |
22 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
389103870 |
380543 |
0 |
0 |
T1 |
2197 |
7 |
0 |
0 |
T2 |
2833 |
6 |
0 |
0 |
T3 |
1984 |
2 |
0 |
0 |
T4 |
0 |
68 |
0 |
0 |
T7 |
11302 |
5 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
52 |
0 |
0 |
T10 |
1592 |
9 |
0 |
0 |
T11 |
2011 |
5 |
0 |
0 |
T12 |
2453 |
7 |
0 |
0 |
T13 |
26994 |
24 |
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 |
389103870 |
3462186 |
0 |
0 |
T1 |
2197 |
16 |
0 |
0 |
T2 |
2833 |
12 |
0 |
0 |
T3 |
1984 |
6 |
0 |
0 |
T4 |
0 |
128 |
0 |
0 |
T7 |
11302 |
13 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
128 |
0 |
0 |
T10 |
1592 |
14 |
0 |
0 |
T11 |
2011 |
12 |
0 |
0 |
T12 |
2453 |
12 |
0 |
0 |
T13 |
26994 |
211 |
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 | T7,T8,T9 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T8,T9,T26 |
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 |
389103870 |
306977 |
0 |
0 |
T1 |
2197 |
9 |
0 |
0 |
T2 |
2833 |
4 |
0 |
0 |
T3 |
1984 |
11 |
0 |
0 |
T7 |
11302 |
4 |
0 |
0 |
T8 |
21102 |
1308 |
0 |
0 |
T9 |
24163 |
39 |
0 |
0 |
T10 |
1592 |
6 |
0 |
0 |
T11 |
2011 |
5 |
0 |
0 |
T12 |
2453 |
7 |
0 |
0 |
T13 |
26994 |
28 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
389103870 |
408426 |
0 |
0 |
T1 |
2197 |
10 |
0 |
0 |
T2 |
2833 |
9 |
0 |
0 |
T3 |
1984 |
8 |
0 |
0 |
T7 |
11302 |
5 |
0 |
0 |
T8 |
21102 |
1383 |
0 |
0 |
T9 |
24163 |
73 |
0 |
0 |
T10 |
1592 |
5 |
0 |
0 |
T11 |
2011 |
8 |
0 |
0 |
T12 |
2453 |
6 |
0 |
0 |
T13 |
26994 |
16 |
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 |
389103870 |
4482327 |
0 |
0 |
T1 |
2197 |
19 |
0 |
0 |
T2 |
2833 |
13 |
0 |
0 |
T3 |
1984 |
17 |
0 |
0 |
T7 |
11302 |
28 |
0 |
0 |
T8 |
21102 |
2531 |
0 |
0 |
T9 |
24163 |
112 |
0 |
0 |
T10 |
1592 |
11 |
0 |
0 |
T11 |
2011 |
13 |
0 |
0 |
T12 |
2453 |
13 |
0 |
0 |
T13 |
26994 |
160 |
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 | T7,T8,T9 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T8,T27,T31 |
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 |
389103870 |
292078 |
0 |
0 |
T1 |
2197 |
14 |
0 |
0 |
T2 |
2833 |
12 |
0 |
0 |
T3 |
1984 |
12 |
0 |
0 |
T7 |
11302 |
5 |
0 |
0 |
T8 |
21102 |
3122 |
0 |
0 |
T9 |
24163 |
58 |
0 |
0 |
T10 |
1592 |
6 |
0 |
0 |
T11 |
2011 |
4 |
0 |
0 |
T12 |
2453 |
10 |
0 |
0 |
T13 |
26994 |
22 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
389103870 |
382490 |
0 |
0 |
T1 |
2197 |
6 |
0 |
0 |
T2 |
2833 |
7 |
0 |
0 |
T3 |
1984 |
6 |
0 |
0 |
T7 |
11302 |
3 |
0 |
0 |
T8 |
21102 |
3616 |
0 |
0 |
T9 |
24163 |
74 |
0 |
0 |
T10 |
1592 |
7 |
0 |
0 |
T11 |
2011 |
7 |
0 |
0 |
T12 |
2453 |
3 |
0 |
0 |
T13 |
26994 |
23 |
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 |
389103870 |
3795078 |
0 |
0 |
T1 |
2197 |
18 |
0 |
0 |
T2 |
2833 |
19 |
0 |
0 |
T3 |
1984 |
17 |
0 |
0 |
T7 |
11302 |
48 |
0 |
0 |
T8 |
21102 |
2832 |
0 |
0 |
T9 |
24163 |
106 |
0 |
0 |
T10 |
1592 |
13 |
0 |
0 |
T11 |
2011 |
11 |
0 |
0 |
T12 |
2453 |
13 |
0 |
0 |
T13 |
26994 |
173 |
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 | T7,T9,T13 |
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 | T26,T27,T31 |
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 |
389103870 |
284223 |
0 |
0 |
T1 |
2197 |
10 |
0 |
0 |
T2 |
2833 |
6 |
0 |
0 |
T3 |
1984 |
5 |
0 |
0 |
T4 |
0 |
64 |
0 |
0 |
T7 |
11302 |
4 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
44 |
0 |
0 |
T10 |
1592 |
7 |
0 |
0 |
T11 |
2011 |
8 |
0 |
0 |
T12 |
2453 |
10 |
0 |
0 |
T13 |
26994 |
25 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
389103870 |
365710 |
0 |
0 |
T1 |
2197 |
10 |
0 |
0 |
T2 |
2833 |
10 |
0 |
0 |
T3 |
1984 |
4 |
0 |
0 |
T4 |
0 |
65 |
0 |
0 |
T7 |
11302 |
24 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
47 |
0 |
0 |
T10 |
1592 |
8 |
0 |
0 |
T11 |
2011 |
12 |
0 |
0 |
T12 |
2453 |
8 |
0 |
0 |
T13 |
26994 |
20 |
0 |
0 |
maxM
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
900 |
900 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
T11 |
1 |
1 |
0 |
0 |
T12 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
389103870 |
3907783 |
0 |
0 |
T1 |
2197 |
19 |
0 |
0 |
T2 |
2833 |
16 |
0 |
0 |
T3 |
1984 |
8 |
0 |
0 |
T4 |
0 |
122 |
0 |
0 |
T7 |
11302 |
40 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
122 |
0 |
0 |
T10 |
1592 |
14 |
0 |
0 |
T11 |
2011 |
20 |
0 |
0 |
T12 |
2453 |
17 |
0 |
0 |
T13 |
26994 |
216 |
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 | T7,T9,T13 |
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 | T9,T26,T27 |
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 |
389103870 |
310501 |
0 |
0 |
T1 |
2197 |
8 |
0 |
0 |
T2 |
2833 |
5 |
0 |
0 |
T3 |
1984 |
1 |
0 |
0 |
T4 |
0 |
59 |
0 |
0 |
T7 |
11302 |
8 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
66 |
0 |
0 |
T10 |
1592 |
1 |
0 |
0 |
T11 |
2011 |
3 |
0 |
0 |
T12 |
2453 |
12 |
0 |
0 |
T13 |
26994 |
17 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
389103870 |
400811 |
0 |
0 |
T1 |
2197 |
7 |
0 |
0 |
T2 |
2833 |
4 |
0 |
0 |
T3 |
1984 |
8 |
0 |
0 |
T4 |
0 |
52 |
0 |
0 |
T7 |
11302 |
5 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
72 |
0 |
0 |
T10 |
1592 |
11 |
0 |
0 |
T11 |
2011 |
5 |
0 |
0 |
T12 |
2453 |
3 |
0 |
0 |
T13 |
26994 |
23 |
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 |
389103870 |
3965557 |
0 |
0 |
T1 |
2197 |
15 |
0 |
0 |
T2 |
2833 |
9 |
0 |
0 |
T3 |
1984 |
9 |
0 |
0 |
T4 |
0 |
105 |
0 |
0 |
T7 |
11302 |
55 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
164 |
0 |
0 |
T10 |
1592 |
12 |
0 |
0 |
T11 |
2011 |
8 |
0 |
0 |
T12 |
2453 |
15 |
0 |
0 |
T13 |
26994 |
177 |
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 | T7,T9,T13 |
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 | T9,T26,T27 |
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 |
389103870 |
270875 |
0 |
0 |
T1 |
2197 |
17 |
0 |
0 |
T2 |
2833 |
10 |
0 |
0 |
T3 |
1984 |
2 |
0 |
0 |
T4 |
0 |
92 |
0 |
0 |
T7 |
11302 |
3 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
76 |
0 |
0 |
T10 |
1592 |
10 |
0 |
0 |
T11 |
2011 |
6 |
0 |
0 |
T12 |
2453 |
10 |
0 |
0 |
T13 |
26994 |
19 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
389103870 |
360331 |
0 |
0 |
T1 |
2197 |
12 |
0 |
0 |
T2 |
2833 |
13 |
0 |
0 |
T3 |
1984 |
7 |
0 |
0 |
T4 |
0 |
62 |
0 |
0 |
T7 |
11302 |
33 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
59 |
0 |
0 |
T10 |
1592 |
6 |
0 |
0 |
T11 |
2011 |
8 |
0 |
0 |
T12 |
2453 |
6 |
0 |
0 |
T13 |
26994 |
26 |
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 |
389103870 |
3141306 |
0 |
0 |
T1 |
2197 |
26 |
0 |
0 |
T2 |
2833 |
21 |
0 |
0 |
T3 |
1984 |
9 |
0 |
0 |
T4 |
0 |
142 |
0 |
0 |
T7 |
11302 |
38 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
166 |
0 |
0 |
T10 |
1592 |
14 |
0 |
0 |
T11 |
2011 |
14 |
0 |
0 |
T12 |
2453 |
15 |
0 |
0 |
T13 |
26994 |
207 |
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 | T7,T9,T13 |
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 | T9,T27,T31 |
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 |
389103870 |
262060 |
0 |
0 |
T1 |
2197 |
10 |
0 |
0 |
T2 |
2833 |
4 |
0 |
0 |
T3 |
1984 |
8 |
0 |
0 |
T4 |
0 |
82 |
0 |
0 |
T7 |
11302 |
3 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
41 |
0 |
0 |
T10 |
1592 |
1 |
0 |
0 |
T11 |
2011 |
2 |
0 |
0 |
T12 |
2453 |
8 |
0 |
0 |
T13 |
26994 |
22 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
389103870 |
361386 |
0 |
0 |
T1 |
2197 |
8 |
0 |
0 |
T2 |
2833 |
12 |
0 |
0 |
T3 |
1984 |
9 |
0 |
0 |
T4 |
0 |
44 |
0 |
0 |
T7 |
11302 |
9 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
55 |
0 |
0 |
T10 |
1592 |
6 |
0 |
0 |
T11 |
2011 |
5 |
0 |
0 |
T12 |
2453 |
9 |
0 |
0 |
T13 |
26994 |
28 |
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 |
389103870 |
3923516 |
0 |
0 |
T1 |
2197 |
18 |
0 |
0 |
T2 |
2833 |
16 |
0 |
0 |
T3 |
1984 |
16 |
0 |
0 |
T4 |
0 |
116 |
0 |
0 |
T7 |
11302 |
24 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
108 |
0 |
0 |
T10 |
1592 |
7 |
0 |
0 |
T11 |
2011 |
7 |
0 |
0 |
T12 |
2453 |
17 |
0 |
0 |
T13 |
26994 |
176 |
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 | T7,T9,T13 |
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 | T9,T27,T31 |
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 |
389103870 |
300006 |
0 |
0 |
T1 |
2197 |
7 |
0 |
0 |
T2 |
2833 |
3 |
0 |
0 |
T3 |
1984 |
8 |
0 |
0 |
T4 |
0 |
100 |
0 |
0 |
T7 |
11302 |
3 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
69 |
0 |
0 |
T10 |
1592 |
3 |
0 |
0 |
T11 |
2011 |
6 |
0 |
0 |
T12 |
2453 |
11 |
0 |
0 |
T13 |
26994 |
25 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
389103870 |
397940 |
0 |
0 |
T1 |
2197 |
13 |
0 |
0 |
T2 |
2833 |
6 |
0 |
0 |
T3 |
1984 |
10 |
0 |
0 |
T4 |
0 |
62 |
0 |
0 |
T7 |
11302 |
10 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
87 |
0 |
0 |
T10 |
1592 |
3 |
0 |
0 |
T11 |
2011 |
11 |
0 |
0 |
T12 |
2453 |
3 |
0 |
0 |
T13 |
26994 |
14 |
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 |
389103870 |
4471885 |
0 |
0 |
T1 |
2197 |
20 |
0 |
0 |
T2 |
2833 |
9 |
0 |
0 |
T3 |
1984 |
17 |
0 |
0 |
T4 |
0 |
152 |
0 |
0 |
T7 |
11302 |
34 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
132 |
0 |
0 |
T10 |
1592 |
6 |
0 |
0 |
T11 |
2011 |
17 |
0 |
0 |
T12 |
2453 |
13 |
0 |
0 |
T13 |
26994 |
205 |
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 | T7,T9,T13 |
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,T27,T31 |
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 |
389103870 |
265685 |
0 |
0 |
T1 |
2197 |
5 |
0 |
0 |
T2 |
2833 |
7 |
0 |
0 |
T3 |
1984 |
15 |
0 |
0 |
T4 |
0 |
70 |
0 |
0 |
T7 |
11302 |
6 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
52 |
0 |
0 |
T10 |
1592 |
5 |
0 |
0 |
T11 |
2011 |
3 |
0 |
0 |
T12 |
2453 |
18 |
0 |
0 |
T13 |
26994 |
21 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
389103870 |
340748 |
0 |
0 |
T1 |
2197 |
9 |
0 |
0 |
T2 |
2833 |
9 |
0 |
0 |
T3 |
1984 |
9 |
0 |
0 |
T4 |
0 |
53 |
0 |
0 |
T7 |
11302 |
26 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
29 |
0 |
0 |
T10 |
1592 |
8 |
0 |
0 |
T11 |
2011 |
16 |
0 |
0 |
T12 |
2453 |
5 |
0 |
0 |
T13 |
26994 |
18 |
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 |
389103870 |
4262365 |
0 |
0 |
T1 |
2197 |
14 |
0 |
0 |
T2 |
2833 |
14 |
0 |
0 |
T3 |
1984 |
22 |
0 |
0 |
T4 |
0 |
115 |
0 |
0 |
T7 |
11302 |
56 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
146 |
0 |
0 |
T10 |
1592 |
13 |
0 |
0 |
T11 |
2011 |
19 |
0 |
0 |
T12 |
2453 |
20 |
0 |
0 |
T13 |
26994 |
203 |
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 | T7,T9,T13 |
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 | T26,T27,T31 |
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 |
389103870 |
276192 |
0 |
0 |
T1 |
2197 |
5 |
0 |
0 |
T2 |
2833 |
10 |
0 |
0 |
T3 |
1984 |
8 |
0 |
0 |
T4 |
0 |
74 |
0 |
0 |
T7 |
11302 |
4 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
64 |
0 |
0 |
T10 |
1592 |
7 |
0 |
0 |
T11 |
2011 |
6 |
0 |
0 |
T12 |
2453 |
10 |
0 |
0 |
T13 |
26994 |
26 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
389103870 |
373829 |
0 |
0 |
T1 |
2197 |
6 |
0 |
0 |
T2 |
2833 |
7 |
0 |
0 |
T3 |
1984 |
10 |
0 |
0 |
T4 |
0 |
48 |
0 |
0 |
T7 |
11302 |
9 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
49 |
0 |
0 |
T10 |
1592 |
5 |
0 |
0 |
T11 |
2011 |
9 |
0 |
0 |
T12 |
2453 |
8 |
0 |
0 |
T13 |
26994 |
33 |
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 |
389103870 |
3297056 |
0 |
0 |
T1 |
2197 |
11 |
0 |
0 |
T2 |
2833 |
16 |
0 |
0 |
T3 |
1984 |
17 |
0 |
0 |
T4 |
0 |
115 |
0 |
0 |
T7 |
11302 |
50 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
161 |
0 |
0 |
T10 |
1592 |
11 |
0 |
0 |
T11 |
2011 |
14 |
0 |
0 |
T12 |
2453 |
17 |
0 |
0 |
T13 |
26994 |
256 |
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 | T7,T9,T13 |
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 | T26,T32,T27 |
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 |
389103870 |
296583 |
0 |
0 |
T1 |
2197 |
4 |
0 |
0 |
T2 |
2833 |
8 |
0 |
0 |
T3 |
1984 |
4 |
0 |
0 |
T4 |
0 |
65 |
0 |
0 |
T7 |
11302 |
5 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
82 |
0 |
0 |
T10 |
1592 |
8 |
0 |
0 |
T11 |
2011 |
6 |
0 |
0 |
T12 |
2453 |
7 |
0 |
0 |
T13 |
26994 |
21 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
389103870 |
380532 |
0 |
0 |
T1 |
2197 |
9 |
0 |
0 |
T2 |
2833 |
6 |
0 |
0 |
T3 |
1984 |
4 |
0 |
0 |
T4 |
0 |
56 |
0 |
0 |
T7 |
11302 |
4 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
87 |
0 |
0 |
T10 |
1592 |
4 |
0 |
0 |
T11 |
2011 |
5 |
0 |
0 |
T12 |
2453 |
3 |
0 |
0 |
T13 |
26994 |
20 |
0 |
0 |
maxM
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
900 |
900 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
T11 |
1 |
1 |
0 |
0 |
T12 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
389103870 |
3635974 |
0 |
0 |
T1 |
2197 |
13 |
0 |
0 |
T2 |
2833 |
14 |
0 |
0 |
T3 |
1984 |
8 |
0 |
0 |
T4 |
0 |
115 |
0 |
0 |
T7 |
11302 |
49 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
109 |
0 |
0 |
T10 |
1592 |
11 |
0 |
0 |
T11 |
2011 |
11 |
0 |
0 |
T12 |
2453 |
10 |
0 |
0 |
T13 |
26994 |
139 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_sm1_30
| Line No. | Total | Covered | Percent |
TOTAL | | 25 | 25 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 3/3 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 3/3 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 3/3 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 3/3 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 3/3 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 3/3 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 3/3 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3 | T1 T2 T3
Cond Coverage for Instance : tb.dut.u_sm1_30
| Total | Covered | Percent |
Conditions | 33 | 33 | 100.00 |
Logical | 33 | 33 | 100.00 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T3,T11,T7 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T3,T11,T7 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 2))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T3,T11,T7 |
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 | T10,T7,T8 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T3,T11,T7 |
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,T9,T13 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T3,T11,T7 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[2].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 2) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T2,T3 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T3,T11,T7 |
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 |
389103870 |
10017811 |
0 |
0 |
T1 |
2197 |
27 |
0 |
0 |
T2 |
2833 |
36 |
0 |
0 |
T3 |
1984 |
48 |
0 |
0 |
T7 |
11302 |
221 |
0 |
0 |
T8 |
21102 |
1478 |
0 |
0 |
T9 |
24163 |
2068 |
0 |
0 |
T10 |
1592 |
24 |
0 |
0 |
T11 |
2011 |
42 |
0 |
0 |
T12 |
2453 |
43 |
0 |
0 |
T13 |
26994 |
967 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
389103870 |
1842568 |
0 |
0 |
T1 |
2197 |
4 |
0 |
0 |
T2 |
2833 |
6 |
0 |
0 |
T3 |
1984 |
8 |
0 |
0 |
T4 |
0 |
58 |
0 |
0 |
T7 |
11302 |
47 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
415 |
0 |
0 |
T10 |
1592 |
3 |
0 |
0 |
T11 |
2011 |
0 |
0 |
0 |
T12 |
2453 |
8 |
0 |
0 |
T13 |
26994 |
217 |
0 |
0 |
T14 |
0 |
9 |
0 |
0 |
gen_host_fifo[2].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
389103870 |
1955492 |
0 |
0 |
T1 |
2197 |
6 |
0 |
0 |
T2 |
2833 |
9 |
0 |
0 |
T3 |
1984 |
7 |
0 |
0 |
T4 |
0 |
47 |
0 |
0 |
T7 |
11302 |
53 |
0 |
0 |
T8 |
21102 |
0 |
0 |
0 |
T9 |
24163 |
361 |
0 |
0 |
T10 |
1592 |
7 |
0 |
0 |
T11 |
2011 |
6 |
0 |
0 |
T12 |
2453 |
8 |
0 |
0 |
T13 |
26994 |
187 |
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 |
389103870 |
20457378 |
0 |
0 |
T1 |
2197 |
37 |
0 |
0 |
T2 |
2833 |
51 |
0 |
0 |
T3 |
1984 |
63 |
0 |
0 |
T7 |
11302 |
308 |
0 |
0 |
T8 |
21102 |
1427 |
0 |
0 |
T9 |
24163 |
1065 |
0 |
0 |
T10 |
1592 |
34 |
0 |
0 |
T11 |
2011 |
48 |
0 |
0 |
T12 |
2453 |
59 |
0 |
0 |
T13 |
26994 |
1145 |
0 |
0 |