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 | T2,T9,T12 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 2))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T2,T9,T12 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 2)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T2,T3,T7 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T2,T3,T7 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T2,T9,T12 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[2].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 2) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T2,T3 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T2,T9,T12 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 2)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Cond Coverage for Module :
tlul_socket_m1 ( parameter M=2,HReqPass=3,HRspPass=3,HReqDepth=0,HRspDepth=0,DReqPass=0,DRspPass=0,DReqDepth=1,DRspDepth=1,IDW=8,STIDW=1 + M=2,HReqPass=3,HRspPass=3,HReqDepth=0,HRspDepth=0,DReqPass=1,DRspPass=1,DReqDepth=0,DRspDepth=0,IDW=8,STIDW=1 )
Cond Coverage for Module self-instances :
| Total | Covered | Percent |
Conditions | 22 | 20 | 90.91 |
Logical | 22 | 20 | 90.91 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T2,T3,T8 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T2,T3,T7 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Module :
tlul_socket_m1
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
2147483647 |
22958599 |
0 |
0 |
T1 |
49704 |
300 |
0 |
0 |
T2 |
316728 |
635 |
0 |
0 |
T3 |
84576 |
606 |
0 |
0 |
T7 |
320856 |
745 |
0 |
0 |
T8 |
94680 |
4081 |
0 |
0 |
T9 |
48144 |
287 |
0 |
0 |
T10 |
33864 |
279 |
0 |
0 |
T11 |
659880 |
4711 |
0 |
0 |
T12 |
434448 |
5652 |
0 |
0 |
T13 |
99504 |
381 |
0 |
0 |
T14 |
0 |
1482 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
2147483647 |
12841202 |
0 |
0 |
T1 |
49704 |
169 |
0 |
0 |
T2 |
316728 |
169 |
0 |
0 |
T3 |
84576 |
232 |
0 |
0 |
T7 |
320856 |
326 |
0 |
0 |
T8 |
94680 |
2998 |
0 |
0 |
T9 |
48144 |
176 |
0 |
0 |
T10 |
33864 |
138 |
0 |
0 |
T11 |
659880 |
2472 |
0 |
0 |
T12 |
434448 |
3384 |
0 |
0 |
T13 |
99504 |
201 |
0 |
0 |
T14 |
0 |
2640 |
0 |
0 |
T25 |
0 |
2 |
0 |
0 |
gen_host_fifo[2].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1720871224 |
3784476 |
0 |
0 |
T1 |
8284 |
32 |
0 |
0 |
T2 |
52788 |
72 |
0 |
0 |
T3 |
14096 |
66 |
0 |
0 |
T7 |
53476 |
68 |
0 |
0 |
T8 |
15780 |
1419 |
0 |
0 |
T9 |
8024 |
32 |
0 |
0 |
T10 |
5644 |
22 |
0 |
0 |
T11 |
109980 |
754 |
0 |
0 |
T12 |
72408 |
498 |
0 |
0 |
T13 |
16584 |
149 |
0 |
0 |
T14 |
0 |
760 |
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 |
163916995 |
0 |
0 |
T1 |
49704 |
445 |
0 |
0 |
T2 |
316728 |
1119 |
0 |
0 |
T3 |
84576 |
1348 |
0 |
0 |
T7 |
320856 |
2770 |
0 |
0 |
T8 |
94680 |
2318 |
0 |
0 |
T9 |
48144 |
440 |
0 |
0 |
T10 |
33864 |
395 |
0 |
0 |
T11 |
659880 |
7136 |
0 |
0 |
T12 |
434448 |
7488 |
0 |
0 |
T13 |
99504 |
1720 |
0 |
0 |
T14 |
0 |
9294 |
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 | T2,T3,T7 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T2,T7,T10 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
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 | T2,T13,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] == 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 |
430217806 |
1673604 |
0 |
0 |
T1 |
2071 |
22 |
0 |
0 |
T2 |
13197 |
48 |
0 |
0 |
T3 |
3524 |
60 |
0 |
0 |
T7 |
13369 |
53 |
0 |
0 |
T8 |
3945 |
125 |
0 |
0 |
T9 |
2006 |
17 |
0 |
0 |
T10 |
1411 |
40 |
0 |
0 |
T11 |
27495 |
541 |
0 |
0 |
T12 |
18102 |
613 |
0 |
0 |
T13 |
4146 |
33 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
435108 |
0 |
0 |
T1 |
2071 |
8 |
0 |
0 |
T2 |
13197 |
6 |
0 |
0 |
T3 |
3524 |
17 |
0 |
0 |
T7 |
13369 |
20 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
8 |
0 |
0 |
T10 |
1411 |
9 |
0 |
0 |
T11 |
27495 |
73 |
0 |
0 |
T12 |
18102 |
105 |
0 |
0 |
T13 |
4146 |
6 |
0 |
0 |
T14 |
0 |
84 |
0 |
0 |
gen_host_fifo[2].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
559926 |
0 |
0 |
T1 |
2071 |
16 |
0 |
0 |
T2 |
13197 |
2 |
0 |
0 |
T3 |
3524 |
6 |
0 |
0 |
T7 |
13369 |
3 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
6 |
0 |
0 |
T10 |
1411 |
6 |
0 |
0 |
T11 |
27495 |
160 |
0 |
0 |
T12 |
18102 |
123 |
0 |
0 |
T13 |
4146 |
13 |
0 |
0 |
T14 |
0 |
106 |
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 |
430217806 |
18969948 |
0 |
0 |
T1 |
2071 |
46 |
0 |
0 |
T2 |
13197 |
144 |
0 |
0 |
T3 |
3524 |
261 |
0 |
0 |
T7 |
13369 |
390 |
0 |
0 |
T8 |
3945 |
125 |
0 |
0 |
T9 |
2006 |
31 |
0 |
0 |
T10 |
1411 |
55 |
0 |
0 |
T11 |
27495 |
949 |
0 |
0 |
T12 |
18102 |
829 |
0 |
0 |
T13 |
4146 |
185 |
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 | T2,T3,T7 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T2,T3,T7 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[2].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 2) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T3,T7,T11 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 2)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_sm1_29
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
1940553 |
0 |
0 |
T1 |
2071 |
55 |
0 |
0 |
T2 |
13197 |
48 |
0 |
0 |
T3 |
3524 |
79 |
0 |
0 |
T7 |
13369 |
37 |
0 |
0 |
T8 |
3945 |
119 |
0 |
0 |
T9 |
2006 |
37 |
0 |
0 |
T10 |
1411 |
63 |
0 |
0 |
T11 |
27495 |
364 |
0 |
0 |
T12 |
18102 |
799 |
0 |
0 |
T13 |
4146 |
77 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
574711 |
0 |
0 |
T1 |
2071 |
10 |
0 |
0 |
T2 |
13197 |
10 |
0 |
0 |
T3 |
3524 |
5 |
0 |
0 |
T7 |
13369 |
3 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
9 |
0 |
0 |
T10 |
1411 |
10 |
0 |
0 |
T11 |
27495 |
106 |
0 |
0 |
T12 |
18102 |
100 |
0 |
0 |
T13 |
4146 |
7 |
0 |
0 |
T14 |
0 |
77 |
0 |
0 |
gen_host_fifo[2].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
693839 |
0 |
0 |
T1 |
2071 |
6 |
0 |
0 |
T2 |
13197 |
5 |
0 |
0 |
T3 |
3524 |
9 |
0 |
0 |
T7 |
13369 |
14 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
4 |
0 |
0 |
T10 |
1411 |
4 |
0 |
0 |
T11 |
27495 |
138 |
0 |
0 |
T12 |
18102 |
139 |
0 |
0 |
T13 |
4146 |
78 |
0 |
0 |
T14 |
0 |
117 |
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 |
430217806 |
19004217 |
0 |
0 |
T1 |
2071 |
55 |
0 |
0 |
T2 |
13197 |
131 |
0 |
0 |
T3 |
3524 |
315 |
0 |
0 |
T7 |
13369 |
313 |
0 |
0 |
T8 |
3945 |
100 |
0 |
0 |
T9 |
2006 |
41 |
0 |
0 |
T10 |
1411 |
61 |
0 |
0 |
T11 |
27495 |
816 |
0 |
0 |
T12 |
18102 |
817 |
0 |
0 |
T13 |
4146 |
203 |
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 | T2,T3,T7 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T2,T3,T7 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[2].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 2) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T2,T7,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] == 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 |
430217806 |
1806676 |
0 |
0 |
T1 |
2071 |
42 |
0 |
0 |
T2 |
13197 |
37 |
0 |
0 |
T3 |
3524 |
52 |
0 |
0 |
T7 |
13369 |
56 |
0 |
0 |
T8 |
3945 |
1852 |
0 |
0 |
T9 |
2006 |
50 |
0 |
0 |
T10 |
1411 |
53 |
0 |
0 |
T11 |
27495 |
527 |
0 |
0 |
T12 |
18102 |
783 |
0 |
0 |
T13 |
4146 |
33 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
451728 |
0 |
0 |
T1 |
2071 |
6 |
0 |
0 |
T2 |
13197 |
10 |
0 |
0 |
T3 |
3524 |
5 |
0 |
0 |
T7 |
13369 |
2 |
0 |
0 |
T8 |
3945 |
1693 |
0 |
0 |
T9 |
2006 |
4 |
0 |
0 |
T10 |
1411 |
1 |
0 |
0 |
T11 |
27495 |
108 |
0 |
0 |
T12 |
18102 |
118 |
0 |
0 |
T13 |
4146 |
26 |
0 |
0 |
gen_host_fifo[2].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
576577 |
0 |
0 |
T1 |
2071 |
8 |
0 |
0 |
T2 |
13197 |
3 |
0 |
0 |
T3 |
3524 |
10 |
0 |
0 |
T7 |
13369 |
7 |
0 |
0 |
T8 |
3945 |
1419 |
0 |
0 |
T9 |
2006 |
8 |
0 |
0 |
T10 |
1411 |
10 |
0 |
0 |
T11 |
27495 |
81 |
0 |
0 |
T12 |
18102 |
117 |
0 |
0 |
T13 |
4146 |
40 |
0 |
0 |
maxM
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
900 |
900 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
T11 |
1 |
1 |
0 |
0 |
T12 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
18393395 |
0 |
0 |
T1 |
2071 |
44 |
0 |
0 |
T2 |
13197 |
94 |
0 |
0 |
T3 |
3524 |
281 |
0 |
0 |
T7 |
13369 |
385 |
0 |
0 |
T8 |
3945 |
987 |
0 |
0 |
T9 |
2006 |
48 |
0 |
0 |
T10 |
1411 |
53 |
0 |
0 |
T11 |
27495 |
849 |
0 |
0 |
T12 |
18102 |
811 |
0 |
0 |
T13 |
4146 |
264 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_sm1_33
| Line No. | Total | Covered | Percent |
TOTAL | | 18 | 18 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 2/2 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 2/2 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 2/2 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 2/2 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 2/2 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 2/2 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 2/2 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3
Cond Coverage for Instance : tb.dut.u_sm1_33
| Total | Covered | Percent |
Conditions | 22 | 20 | 90.91 |
Logical | 22 | 20 | 90.91 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T2,T3,T7 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T16,T30,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_33
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
281838 |
0 |
0 |
T1 |
2071 |
8 |
0 |
0 |
T2 |
13197 |
9 |
0 |
0 |
T3 |
3524 |
13 |
0 |
0 |
T7 |
13369 |
7 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
7 |
0 |
0 |
T10 |
1411 |
7 |
0 |
0 |
T11 |
27495 |
49 |
0 |
0 |
T12 |
18102 |
100 |
0 |
0 |
T13 |
4146 |
6 |
0 |
0 |
T14 |
0 |
101 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
388112 |
0 |
0 |
T1 |
2071 |
10 |
0 |
0 |
T2 |
13197 |
2 |
0 |
0 |
T3 |
3524 |
9 |
0 |
0 |
T7 |
13369 |
3 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
9 |
0 |
0 |
T10 |
1411 |
10 |
0 |
0 |
T11 |
27495 |
69 |
0 |
0 |
T12 |
18102 |
107 |
0 |
0 |
T13 |
4146 |
4 |
0 |
0 |
T14 |
0 |
79 |
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 |
430217806 |
3933502 |
0 |
0 |
T1 |
2071 |
18 |
0 |
0 |
T2 |
13197 |
19 |
0 |
0 |
T3 |
3524 |
22 |
0 |
0 |
T7 |
13369 |
65 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
15 |
0 |
0 |
T10 |
1411 |
16 |
0 |
0 |
T11 |
27495 |
109 |
0 |
0 |
T12 |
18102 |
196 |
0 |
0 |
T13 |
4146 |
34 |
0 |
0 |
T14 |
0 |
515 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_sm1_34
| Line No. | Total | Covered | Percent |
TOTAL | | 18 | 18 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 2/2 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 2/2 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 2/2 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 2/2 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 2/2 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 2/2 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 2/2 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3
Cond Coverage for Instance : tb.dut.u_sm1_34
| Total | Covered | Percent |
Conditions | 22 | 20 | 90.91 |
Logical | 22 | 20 | 90.91 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T2,T3,T7 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T2,T7,T11 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_sm1_34
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
275197 |
0 |
0 |
T1 |
2071 |
13 |
0 |
0 |
T2 |
13197 |
5 |
0 |
0 |
T3 |
3524 |
3 |
0 |
0 |
T7 |
13369 |
6 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
5 |
0 |
0 |
T10 |
1411 |
5 |
0 |
0 |
T11 |
27495 |
69 |
0 |
0 |
T12 |
18102 |
121 |
0 |
0 |
T13 |
4146 |
10 |
0 |
0 |
T14 |
0 |
60 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
366638 |
0 |
0 |
T1 |
2071 |
6 |
0 |
0 |
T2 |
13197 |
6 |
0 |
0 |
T3 |
3524 |
11 |
0 |
0 |
T7 |
13369 |
5 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
2 |
0 |
0 |
T10 |
1411 |
4 |
0 |
0 |
T11 |
27495 |
88 |
0 |
0 |
T12 |
18102 |
117 |
0 |
0 |
T13 |
4146 |
7 |
0 |
0 |
T14 |
0 |
85 |
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 |
430217806 |
4043862 |
0 |
0 |
T1 |
2071 |
17 |
0 |
0 |
T2 |
13197 |
20 |
0 |
0 |
T3 |
3524 |
15 |
0 |
0 |
T7 |
13369 |
51 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
7 |
0 |
0 |
T10 |
1411 |
9 |
0 |
0 |
T11 |
27495 |
142 |
0 |
0 |
T12 |
18102 |
218 |
0 |
0 |
T13 |
4146 |
85 |
0 |
0 |
T14 |
0 |
404 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_sm1_36
| Line No. | Total | Covered | Percent |
TOTAL | | 18 | 18 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 2/2 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 2/2 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 2/2 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 2/2 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 2/2 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 2/2 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 2/2 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3
Cond Coverage for Instance : tb.dut.u_sm1_36
| Total | Covered | Percent |
Conditions | 22 | 20 | 90.91 |
Logical | 22 | 20 | 90.91 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T2,T3,T7 |
1 | 0 | 1 | Covered | T1,T3,T7 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T3,T7,T28 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_sm1_36
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
497003 |
0 |
0 |
T1 |
2071 |
4 |
0 |
0 |
T2 |
13197 |
9 |
0 |
0 |
T3 |
3524 |
8 |
0 |
0 |
T7 |
13369 |
5 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
7 |
0 |
0 |
T10 |
1411 |
9 |
0 |
0 |
T11 |
27495 |
109 |
0 |
0 |
T12 |
18102 |
203 |
0 |
0 |
T13 |
4146 |
5 |
0 |
0 |
T14 |
0 |
68 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
604496 |
0 |
0 |
T1 |
2071 |
14 |
0 |
0 |
T2 |
13197 |
2 |
0 |
0 |
T3 |
3524 |
5 |
0 |
0 |
T7 |
13369 |
26 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
10 |
0 |
0 |
T10 |
1411 |
7 |
0 |
0 |
T11 |
27495 |
75 |
0 |
0 |
T12 |
18102 |
220 |
0 |
0 |
T13 |
4146 |
3 |
0 |
0 |
T14 |
0 |
129 |
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 |
430217806 |
3843233 |
0 |
0 |
T1 |
2071 |
13 |
0 |
0 |
T2 |
13197 |
11 |
0 |
0 |
T3 |
3524 |
28 |
0 |
0 |
T7 |
13369 |
62 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
14 |
0 |
0 |
T10 |
1411 |
9 |
0 |
0 |
T11 |
27495 |
194 |
0 |
0 |
T12 |
18102 |
190 |
0 |
0 |
T13 |
4146 |
39 |
0 |
0 |
T14 |
0 |
558 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_sm1_38
| Line No. | Total | Covered | Percent |
TOTAL | | 18 | 18 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 2/2 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 2/2 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 2/2 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 2/2 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 2/2 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 2/2 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 2/2 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3
Cond Coverage for Instance : tb.dut.u_sm1_38
| Total | Covered | Percent |
Conditions | 22 | 20 | 90.91 |
Logical | 22 | 20 | 90.91 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T2,T7,T11 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T11,T14,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 |
430217806 |
726623 |
0 |
0 |
T1 |
2071 |
14 |
0 |
0 |
T2 |
13197 |
29 |
0 |
0 |
T3 |
3524 |
1 |
0 |
0 |
T7 |
13369 |
9 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
14 |
0 |
0 |
T10 |
1411 |
5 |
0 |
0 |
T11 |
27495 |
50 |
0 |
0 |
T12 |
18102 |
220 |
0 |
0 |
T13 |
4146 |
6 |
0 |
0 |
T14 |
0 |
78 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
911346 |
0 |
0 |
T1 |
2071 |
9 |
0 |
0 |
T2 |
13197 |
5 |
0 |
0 |
T3 |
3524 |
4 |
0 |
0 |
T7 |
13369 |
11 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
8 |
0 |
0 |
T10 |
1411 |
4 |
0 |
0 |
T11 |
27495 |
62 |
0 |
0 |
T12 |
18102 |
197 |
0 |
0 |
T13 |
4146 |
2 |
0 |
0 |
T14 |
0 |
61 |
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 |
430217806 |
5338155 |
0 |
0 |
T1 |
2071 |
15 |
0 |
0 |
T2 |
13197 |
26 |
0 |
0 |
T3 |
3524 |
5 |
0 |
0 |
T7 |
13369 |
72 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
18 |
0 |
0 |
T10 |
1411 |
9 |
0 |
0 |
T11 |
27495 |
203 |
0 |
0 |
T12 |
18102 |
214 |
0 |
0 |
T13 |
4146 |
23 |
0 |
0 |
T14 |
0 |
534 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_sm1_40
| Line No. | Total | Covered | Percent |
TOTAL | | 18 | 18 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 2/2 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 2/2 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 2/2 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 2/2 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 2/2 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 2/2 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 2/2 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3
Cond Coverage for Instance : tb.dut.u_sm1_40
| Total | Covered | Percent |
Conditions | 22 | 20 | 90.91 |
Logical | 22 | 20 | 90.91 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T2,T3,T7 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T11,T31,T19 |
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 |
430217806 |
649966 |
0 |
0 |
T1 |
2071 |
8 |
0 |
0 |
T2 |
13197 |
8 |
0 |
0 |
T3 |
3524 |
38 |
0 |
0 |
T7 |
13369 |
8 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
4 |
0 |
0 |
T10 |
1411 |
3 |
0 |
0 |
T11 |
27495 |
46 |
0 |
0 |
T12 |
18102 |
621 |
0 |
0 |
T13 |
4146 |
4 |
0 |
0 |
T14 |
0 |
44 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
746267 |
0 |
0 |
T1 |
2071 |
5 |
0 |
0 |
T2 |
13197 |
8 |
0 |
0 |
T3 |
3524 |
41 |
0 |
0 |
T7 |
13369 |
4 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
20 |
0 |
0 |
T10 |
1411 |
13 |
0 |
0 |
T11 |
27495 |
45 |
0 |
0 |
T12 |
18102 |
443 |
0 |
0 |
T13 |
4146 |
1 |
0 |
0 |
T14 |
0 |
106 |
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 |
430217806 |
5354974 |
0 |
0 |
T1 |
2071 |
13 |
0 |
0 |
T2 |
13197 |
21 |
0 |
0 |
T3 |
3524 |
15 |
0 |
0 |
T7 |
13369 |
60 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
13 |
0 |
0 |
T10 |
1411 |
12 |
0 |
0 |
T11 |
27495 |
269 |
0 |
0 |
T12 |
18102 |
236 |
0 |
0 |
T13 |
4146 |
18 |
0 |
0 |
T14 |
0 |
382 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_sm1_42
| Line No. | Total | Covered | Percent |
TOTAL | | 18 | 18 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 2/2 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 2/2 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 2/2 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 2/2 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 2/2 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 2/2 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 2/2 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3
Cond Coverage for Instance : tb.dut.u_sm1_42
| Total | Covered | Percent |
Conditions | 22 | 20 | 90.91 |
Logical | 22 | 20 | 90.91 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T2,T7,T11 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T11,T29,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 |
430217806 |
748947 |
0 |
0 |
T1 |
2071 |
4 |
0 |
0 |
T2 |
13197 |
8 |
0 |
0 |
T3 |
3524 |
4 |
0 |
0 |
T7 |
13369 |
72 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
3 |
0 |
0 |
T10 |
1411 |
1 |
0 |
0 |
T11 |
27495 |
47 |
0 |
0 |
T12 |
18102 |
160 |
0 |
0 |
T13 |
4146 |
5 |
0 |
0 |
T14 |
0 |
121 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
826240 |
0 |
0 |
T1 |
2071 |
8 |
0 |
0 |
T2 |
13197 |
3 |
0 |
0 |
T3 |
3524 |
6 |
0 |
0 |
T7 |
13369 |
25 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
4 |
0 |
0 |
T10 |
1411 |
2 |
0 |
0 |
T11 |
27495 |
75 |
0 |
0 |
T12 |
18102 |
201 |
0 |
0 |
T13 |
4146 |
32 |
0 |
0 |
T14 |
0 |
306 |
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 |
430217806 |
5183914 |
0 |
0 |
T1 |
2071 |
8 |
0 |
0 |
T2 |
13197 |
29 |
0 |
0 |
T3 |
3524 |
10 |
0 |
0 |
T7 |
13369 |
133 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
7 |
0 |
0 |
T10 |
1411 |
3 |
0 |
0 |
T11 |
27495 |
276 |
0 |
0 |
T12 |
18102 |
230 |
0 |
0 |
T13 |
4146 |
56 |
0 |
0 |
T14 |
0 |
485 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_sm1_43
| Line No. | Total | Covered | Percent |
TOTAL | | 18 | 18 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 2/2 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 2/2 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 2/2 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 2/2 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 2/2 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 2/2 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 2/2 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3
Cond Coverage for Instance : tb.dut.u_sm1_43
| Total | Covered | Percent |
Conditions | 22 | 20 | 90.91 |
Logical | 22 | 20 | 90.91 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T2,T3,T8 |
1 | 0 | 1 | Covered | T1,T3,T8 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T2,T7,T11 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_sm1_43
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
303990 |
0 |
0 |
T1 |
2071 |
11 |
0 |
0 |
T2 |
13197 |
14 |
0 |
0 |
T3 |
3524 |
10 |
0 |
0 |
T7 |
13369 |
8 |
0 |
0 |
T8 |
3945 |
1848 |
0 |
0 |
T9 |
2006 |
4 |
0 |
0 |
T10 |
1411 |
5 |
0 |
0 |
T11 |
27495 |
61 |
0 |
0 |
T12 |
18102 |
79 |
0 |
0 |
T13 |
4146 |
0 |
0 |
0 |
T14 |
0 |
57 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
397797 |
0 |
0 |
T1 |
2071 |
2 |
0 |
0 |
T2 |
13197 |
4 |
0 |
0 |
T3 |
3524 |
9 |
0 |
0 |
T7 |
13369 |
5 |
0 |
0 |
T8 |
3945 |
1305 |
0 |
0 |
T9 |
2006 |
3 |
0 |
0 |
T10 |
1411 |
8 |
0 |
0 |
T11 |
27495 |
111 |
0 |
0 |
T12 |
18102 |
122 |
0 |
0 |
T13 |
4146 |
8 |
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 |
430217806 |
4478853 |
0 |
0 |
T1 |
2071 |
12 |
0 |
0 |
T2 |
13197 |
57 |
0 |
0 |
T3 |
3524 |
21 |
0 |
0 |
T7 |
13369 |
64 |
0 |
0 |
T8 |
3945 |
969 |
0 |
0 |
T9 |
2006 |
7 |
0 |
0 |
T10 |
1411 |
12 |
0 |
0 |
T11 |
27495 |
177 |
0 |
0 |
T12 |
18102 |
196 |
0 |
0 |
T13 |
4146 |
19 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_sm1_44
| Line No. | Total | Covered | Percent |
TOTAL | | 18 | 18 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 2/2 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 2/2 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 2/2 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 2/2 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 2/2 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 2/2 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 2/2 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3
Cond Coverage for Instance : tb.dut.u_sm1_44
| Total | Covered | Percent |
Conditions | 22 | 20 | 90.91 |
Logical | 22 | 20 | 90.91 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T2,T3,T7 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T3,T7,T11 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_sm1_44
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
333049 |
0 |
0 |
T1 |
2071 |
4 |
0 |
0 |
T2 |
13197 |
17 |
0 |
0 |
T3 |
3524 |
6 |
0 |
0 |
T7 |
13369 |
3 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
6 |
0 |
0 |
T10 |
1411 |
1 |
0 |
0 |
T11 |
27495 |
56 |
0 |
0 |
T12 |
18102 |
112 |
0 |
0 |
T13 |
4146 |
3 |
0 |
0 |
T14 |
0 |
105 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
434941 |
0 |
0 |
T1 |
2071 |
6 |
0 |
0 |
T2 |
13197 |
10 |
0 |
0 |
T3 |
3524 |
17 |
0 |
0 |
T7 |
13369 |
4 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
6 |
0 |
0 |
T10 |
1411 |
7 |
0 |
0 |
T11 |
27495 |
111 |
0 |
0 |
T12 |
18102 |
118 |
0 |
0 |
T13 |
4146 |
3 |
0 |
0 |
T14 |
0 |
70 |
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 |
430217806 |
4397990 |
0 |
0 |
T1 |
2071 |
10 |
0 |
0 |
T2 |
13197 |
18 |
0 |
0 |
T3 |
3524 |
22 |
0 |
0 |
T7 |
13369 |
27 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
10 |
0 |
0 |
T10 |
1411 |
8 |
0 |
0 |
T11 |
27495 |
129 |
0 |
0 |
T12 |
18102 |
218 |
0 |
0 |
T13 |
4146 |
27 |
0 |
0 |
T14 |
0 |
579 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_sm1_45
| Line No. | Total | Covered | Percent |
TOTAL | | 18 | 18 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 2/2 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 2/2 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 2/2 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 2/2 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 2/2 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 2/2 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 2/2 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3
Cond Coverage for Instance : tb.dut.u_sm1_45
| Total | Covered | Percent |
Conditions | 22 | 20 | 90.91 |
Logical | 22 | 20 | 90.91 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T2,T3,T7 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T2,T11,T14 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_sm1_45
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
325652 |
0 |
0 |
T1 |
2071 |
10 |
0 |
0 |
T2 |
13197 |
7 |
0 |
0 |
T3 |
3524 |
3 |
0 |
0 |
T7 |
13369 |
12 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
12 |
0 |
0 |
T10 |
1411 |
6 |
0 |
0 |
T11 |
27495 |
43 |
0 |
0 |
T12 |
18102 |
118 |
0 |
0 |
T13 |
4146 |
6 |
0 |
0 |
T14 |
0 |
90 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
446965 |
0 |
0 |
T1 |
2071 |
4 |
0 |
0 |
T2 |
13197 |
7 |
0 |
0 |
T3 |
3524 |
8 |
0 |
0 |
T7 |
13369 |
1 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
4 |
0 |
0 |
T10 |
1411 |
7 |
0 |
0 |
T11 |
27495 |
45 |
0 |
0 |
T12 |
18102 |
112 |
0 |
0 |
T13 |
4146 |
0 |
0 |
0 |
T14 |
0 |
91 |
0 |
0 |
T25 |
0 |
2 |
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 |
430217806 |
4438622 |
0 |
0 |
T1 |
2071 |
13 |
0 |
0 |
T2 |
13197 |
34 |
0 |
0 |
T3 |
3524 |
11 |
0 |
0 |
T7 |
13369 |
25 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
13 |
0 |
0 |
T10 |
1411 |
12 |
0 |
0 |
T11 |
27495 |
106 |
0 |
0 |
T12 |
18102 |
214 |
0 |
0 |
T13 |
4146 |
54 |
0 |
0 |
T14 |
0 |
462 |
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 | T2,T7,T11 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T7,T11,T14 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_sm1_46
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
292614 |
0 |
0 |
T1 |
2071 |
5 |
0 |
0 |
T2 |
13197 |
6 |
0 |
0 |
T3 |
3524 |
5 |
0 |
0 |
T7 |
13369 |
6 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
9 |
0 |
0 |
T10 |
1411 |
9 |
0 |
0 |
T11 |
27495 |
45 |
0 |
0 |
T12 |
18102 |
92 |
0 |
0 |
T13 |
4146 |
4 |
0 |
0 |
T14 |
0 |
45 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
380338 |
0 |
0 |
T1 |
2071 |
6 |
0 |
0 |
T2 |
13197 |
3 |
0 |
0 |
T3 |
3524 |
2 |
0 |
0 |
T7 |
13369 |
4 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
6 |
0 |
0 |
T10 |
1411 |
5 |
0 |
0 |
T11 |
27495 |
92 |
0 |
0 |
T12 |
18102 |
141 |
0 |
0 |
T13 |
4146 |
3 |
0 |
0 |
T14 |
0 |
101 |
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 |
430217806 |
4576722 |
0 |
0 |
T1 |
2071 |
11 |
0 |
0 |
T2 |
13197 |
47 |
0 |
0 |
T3 |
3524 |
7 |
0 |
0 |
T7 |
13369 |
66 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
13 |
0 |
0 |
T10 |
1411 |
13 |
0 |
0 |
T11 |
27495 |
140 |
0 |
0 |
T12 |
18102 |
223 |
0 |
0 |
T13 |
4146 |
21 |
0 |
0 |
T14 |
0 |
382 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_sm1_47
| Line No. | Total | Covered | Percent |
TOTAL | | 18 | 18 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 2/2 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 2/2 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 2/2 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 2/2 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 2/2 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 2/2 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 2/2 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3
Cond Coverage for Instance : tb.dut.u_sm1_47
| Total | Covered | Percent |
Conditions | 22 | 20 | 90.91 |
Logical | 22 | 20 | 90.91 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T2,T7,T11 |
1 | 0 | 1 | Covered | T1,T3,T7 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T14,T16,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_47
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
300332 |
0 |
0 |
T1 |
2071 |
6 |
0 |
0 |
T2 |
13197 |
7 |
0 |
0 |
T3 |
3524 |
10 |
0 |
0 |
T7 |
13369 |
10 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
9 |
0 |
0 |
T10 |
1411 |
3 |
0 |
0 |
T11 |
27495 |
49 |
0 |
0 |
T12 |
18102 |
126 |
0 |
0 |
T13 |
4146 |
6 |
0 |
0 |
T14 |
0 |
85 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
391774 |
0 |
0 |
T1 |
2071 |
5 |
0 |
0 |
T2 |
13197 |
3 |
0 |
0 |
T3 |
3524 |
5 |
0 |
0 |
T7 |
13369 |
12 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
8 |
0 |
0 |
T10 |
1411 |
4 |
0 |
0 |
T11 |
27495 |
91 |
0 |
0 |
T12 |
18102 |
132 |
0 |
0 |
T13 |
4146 |
3 |
0 |
0 |
T14 |
0 |
82 |
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 |
430217806 |
4127393 |
0 |
0 |
T1 |
2071 |
11 |
0 |
0 |
T2 |
13197 |
37 |
0 |
0 |
T3 |
3524 |
11 |
0 |
0 |
T7 |
13369 |
84 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
17 |
0 |
0 |
T10 |
1411 |
6 |
0 |
0 |
T11 |
27495 |
133 |
0 |
0 |
T12 |
18102 |
245 |
0 |
0 |
T13 |
4146 |
27 |
0 |
0 |
T14 |
0 |
569 |
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 | T2,T7,T11 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T2,T14,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_48
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
312999 |
0 |
0 |
T1 |
2071 |
8 |
0 |
0 |
T2 |
13197 |
5 |
0 |
0 |
T3 |
3524 |
4 |
0 |
0 |
T7 |
13369 |
10 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
10 |
0 |
0 |
T10 |
1411 |
3 |
0 |
0 |
T11 |
27495 |
106 |
0 |
0 |
T12 |
18102 |
91 |
0 |
0 |
T13 |
4146 |
12 |
0 |
0 |
T14 |
0 |
80 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
415473 |
0 |
0 |
T1 |
2071 |
8 |
0 |
0 |
T2 |
13197 |
6 |
0 |
0 |
T3 |
3524 |
3 |
0 |
0 |
T7 |
13369 |
10 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
7 |
0 |
0 |
T10 |
1411 |
4 |
0 |
0 |
T11 |
27495 |
67 |
0 |
0 |
T12 |
18102 |
112 |
0 |
0 |
T13 |
4146 |
2 |
0 |
0 |
T14 |
0 |
62 |
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 |
430217806 |
4421860 |
0 |
0 |
T1 |
2071 |
15 |
0 |
0 |
T2 |
13197 |
31 |
0 |
0 |
T3 |
3524 |
7 |
0 |
0 |
T7 |
13369 |
58 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
17 |
0 |
0 |
T10 |
1411 |
7 |
0 |
0 |
T11 |
27495 |
197 |
0 |
0 |
T12 |
18102 |
195 |
0 |
0 |
T13 |
4146 |
30 |
0 |
0 |
T14 |
0 |
410 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_sm1_49
| Line No. | Total | Covered | Percent |
TOTAL | | 18 | 18 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 2/2 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 2/2 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 2/2 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 2/2 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 2/2 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 2/2 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 2/2 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3
Cond Coverage for Instance : tb.dut.u_sm1_49
| Total | Covered | Percent |
Conditions | 22 | 20 | 90.91 |
Logical | 22 | 20 | 90.91 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T2,T3,T7 |
1 | 0 | 1 | Covered | T1,T2,T7 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T7,T11,T16 |
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 |
430217806 |
291093 |
0 |
0 |
T1 |
2071 |
13 |
0 |
0 |
T2 |
13197 |
6 |
0 |
0 |
T3 |
3524 |
6 |
0 |
0 |
T7 |
13369 |
11 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
3 |
0 |
0 |
T10 |
1411 |
4 |
0 |
0 |
T11 |
27495 |
59 |
0 |
0 |
T12 |
18102 |
132 |
0 |
0 |
T13 |
4146 |
5 |
0 |
0 |
T14 |
0 |
56 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
384580 |
0 |
0 |
T1 |
2071 |
6 |
0 |
0 |
T2 |
13197 |
1 |
0 |
0 |
T3 |
3524 |
5 |
0 |
0 |
T7 |
13369 |
35 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
6 |
0 |
0 |
T10 |
1411 |
5 |
0 |
0 |
T11 |
27495 |
91 |
0 |
0 |
T12 |
18102 |
110 |
0 |
0 |
T13 |
4146 |
3 |
0 |
0 |
T14 |
0 |
79 |
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 |
430217806 |
3617114 |
0 |
0 |
T1 |
2071 |
17 |
0 |
0 |
T2 |
13197 |
9 |
0 |
0 |
T3 |
3524 |
14 |
0 |
0 |
T7 |
13369 |
108 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
9 |
0 |
0 |
T10 |
1411 |
9 |
0 |
0 |
T11 |
27495 |
168 |
0 |
0 |
T12 |
18102 |
224 |
0 |
0 |
T13 |
4146 |
52 |
0 |
0 |
T14 |
0 |
388 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_sm1_50
| Line No. | Total | Covered | Percent |
TOTAL | | 18 | 18 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 2/2 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 2/2 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 2/2 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 2/2 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 2/2 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 2/2 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 2/2 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3
Cond Coverage for Instance : tb.dut.u_sm1_50
| Total | Covered | Percent |
Conditions | 22 | 20 | 90.91 |
Logical | 22 | 20 | 90.91 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T2,T7,T9 |
1 | 0 | 1 | Covered | T1,T3,T7 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T11,T14,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_50
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
273484 |
0 |
0 |
T1 |
2071 |
5 |
0 |
0 |
T2 |
13197 |
6 |
0 |
0 |
T3 |
3524 |
4 |
0 |
0 |
T7 |
13369 |
11 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
10 |
0 |
0 |
T10 |
1411 |
1 |
0 |
0 |
T11 |
27495 |
46 |
0 |
0 |
T12 |
18102 |
113 |
0 |
0 |
T13 |
4146 |
4 |
0 |
0 |
T14 |
0 |
74 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
365249 |
0 |
0 |
T1 |
2071 |
8 |
0 |
0 |
T2 |
13197 |
2 |
0 |
0 |
T3 |
3524 |
1 |
0 |
0 |
T7 |
13369 |
20 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
7 |
0 |
0 |
T10 |
1411 |
9 |
0 |
0 |
T11 |
27495 |
60 |
0 |
0 |
T12 |
18102 |
144 |
0 |
0 |
T13 |
4146 |
6 |
0 |
0 |
T14 |
0 |
84 |
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 |
430217806 |
4296931 |
0 |
0 |
T1 |
2071 |
13 |
0 |
0 |
T2 |
13197 |
9 |
0 |
0 |
T3 |
3524 |
5 |
0 |
0 |
T7 |
13369 |
58 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
15 |
0 |
0 |
T10 |
1411 |
10 |
0 |
0 |
T11 |
27495 |
159 |
0 |
0 |
T12 |
18102 |
243 |
0 |
0 |
T13 |
4146 |
47 |
0 |
0 |
T14 |
0 |
521 |
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 | T2,T3,T7 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T11,T13,T14 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_sm1_51
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
280439 |
0 |
0 |
T1 |
2071 |
15 |
0 |
0 |
T2 |
13197 |
15 |
0 |
0 |
T3 |
3524 |
4 |
0 |
0 |
T7 |
13369 |
11 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
4 |
0 |
0 |
T10 |
1411 |
4 |
0 |
0 |
T11 |
27495 |
51 |
0 |
0 |
T12 |
18102 |
95 |
0 |
0 |
T13 |
4146 |
9 |
0 |
0 |
T14 |
0 |
88 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
369318 |
0 |
0 |
T1 |
2071 |
12 |
0 |
0 |
T2 |
13197 |
10 |
0 |
0 |
T3 |
3524 |
20 |
0 |
0 |
T7 |
13369 |
4 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
4 |
0 |
0 |
T10 |
1411 |
4 |
0 |
0 |
T11 |
27495 |
63 |
0 |
0 |
T12 |
18102 |
107 |
0 |
0 |
T13 |
4146 |
14 |
0 |
0 |
T14 |
0 |
152 |
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 |
430217806 |
4678388 |
0 |
0 |
T1 |
2071 |
24 |
0 |
0 |
T2 |
13197 |
35 |
0 |
0 |
T3 |
3524 |
15 |
0 |
0 |
T7 |
13369 |
76 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
8 |
0 |
0 |
T10 |
1411 |
8 |
0 |
0 |
T11 |
27495 |
164 |
0 |
0 |
T12 |
18102 |
192 |
0 |
0 |
T13 |
4146 |
66 |
0 |
0 |
T14 |
0 |
727 |
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 | T3,T7,T10 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T3,T13,T14 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_sm1_52
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
305540 |
0 |
0 |
T1 |
2071 |
3 |
0 |
0 |
T2 |
13197 |
8 |
0 |
0 |
T3 |
3524 |
3 |
0 |
0 |
T7 |
13369 |
6 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
7 |
0 |
0 |
T10 |
1411 |
2 |
0 |
0 |
T11 |
27495 |
46 |
0 |
0 |
T12 |
18102 |
95 |
0 |
0 |
T13 |
4146 |
3 |
0 |
0 |
T14 |
0 |
69 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
411341 |
0 |
0 |
T1 |
2071 |
4 |
0 |
0 |
T2 |
13197 |
15 |
0 |
0 |
T3 |
3524 |
10 |
0 |
0 |
T7 |
13369 |
4 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
5 |
0 |
0 |
T10 |
1411 |
3 |
0 |
0 |
T11 |
27495 |
88 |
0 |
0 |
T12 |
18102 |
120 |
0 |
0 |
T13 |
4146 |
4 |
0 |
0 |
T14 |
0 |
67 |
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 |
430217806 |
4308675 |
0 |
0 |
T1 |
2071 |
7 |
0 |
0 |
T2 |
13197 |
16 |
0 |
0 |
T3 |
3524 |
25 |
0 |
0 |
T7 |
13369 |
22 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
11 |
0 |
0 |
T10 |
1411 |
5 |
0 |
0 |
T11 |
27495 |
143 |
0 |
0 |
T12 |
18102 |
202 |
0 |
0 |
T13 |
4146 |
57 |
0 |
0 |
T14 |
0 |
518 |
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 | T2,T7,T11 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T7,T11,T16 |
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 |
430217806 |
304584 |
0 |
0 |
T1 |
2071 |
1 |
0 |
0 |
T2 |
13197 |
15 |
0 |
0 |
T3 |
3524 |
12 |
0 |
0 |
T7 |
13369 |
14 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
7 |
0 |
0 |
T10 |
1411 |
5 |
0 |
0 |
T11 |
27495 |
42 |
0 |
0 |
T12 |
18102 |
100 |
0 |
0 |
T13 |
4146 |
2 |
0 |
0 |
T14 |
0 |
78 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
395378 |
0 |
0 |
T1 |
2071 |
6 |
0 |
0 |
T2 |
13197 |
4 |
0 |
0 |
T3 |
3524 |
24 |
0 |
0 |
T7 |
13369 |
31 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
9 |
0 |
0 |
T10 |
1411 |
4 |
0 |
0 |
T11 |
27495 |
125 |
0 |
0 |
T12 |
18102 |
109 |
0 |
0 |
T13 |
4146 |
3 |
0 |
0 |
T14 |
0 |
78 |
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 |
430217806 |
4192265 |
0 |
0 |
T1 |
2071 |
7 |
0 |
0 |
T2 |
13197 |
51 |
0 |
0 |
T3 |
3524 |
16 |
0 |
0 |
T7 |
13369 |
81 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
16 |
0 |
0 |
T10 |
1411 |
8 |
0 |
0 |
T11 |
27495 |
141 |
0 |
0 |
T12 |
18102 |
190 |
0 |
0 |
T13 |
4146 |
37 |
0 |
0 |
T14 |
0 |
549 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_sm1_54
| Line No. | Total | Covered | Percent |
TOTAL | | 18 | 18 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 2/2 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 2/2 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 2/2 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 2/2 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 2/2 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 2/2 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 2/2 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3
Cond Coverage for Instance : tb.dut.u_sm1_54
| Total | Covered | Percent |
Conditions | 22 | 20 | 90.91 |
Logical | 22 | 20 | 90.91 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T2,T7,T11 |
1 | 0 | 1 | Covered | T1,T3,T7 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T11,T16,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_54
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
332476 |
0 |
0 |
T1 |
2071 |
9 |
0 |
0 |
T2 |
13197 |
4 |
0 |
0 |
T3 |
3524 |
4 |
0 |
0 |
T7 |
13369 |
17 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
15 |
0 |
0 |
T10 |
1411 |
3 |
0 |
0 |
T11 |
27495 |
77 |
0 |
0 |
T12 |
18102 |
97 |
0 |
0 |
T13 |
4146 |
15 |
0 |
0 |
T14 |
0 |
41 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
453310 |
0 |
0 |
T1 |
2071 |
11 |
0 |
0 |
T2 |
13197 |
6 |
0 |
0 |
T3 |
3524 |
4 |
0 |
0 |
T7 |
13369 |
13 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
6 |
0 |
0 |
T10 |
1411 |
4 |
0 |
0 |
T11 |
27495 |
78 |
0 |
0 |
T12 |
18102 |
122 |
0 |
0 |
T13 |
4146 |
4 |
0 |
0 |
T14 |
0 |
41 |
0 |
0 |
maxM
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
900 |
900 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
T11 |
1 |
1 |
0 |
0 |
T12 |
1 |
1 |
0 |
0 |
T13 |
1 |
1 |
0 |
0 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
3530195 |
0 |
0 |
T1 |
2071 |
20 |
0 |
0 |
T2 |
13197 |
10 |
0 |
0 |
T3 |
3524 |
8 |
0 |
0 |
T7 |
13369 |
61 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
19 |
0 |
0 |
T10 |
1411 |
7 |
0 |
0 |
T11 |
27495 |
157 |
0 |
0 |
T12 |
18102 |
208 |
0 |
0 |
T13 |
4146 |
24 |
0 |
0 |
T14 |
0 |
337 |
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 | T2,T7,T11 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T7,T11,T16 |
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 |
430217806 |
277083 |
0 |
0 |
T1 |
2071 |
6 |
0 |
0 |
T2 |
13197 |
7 |
0 |
0 |
T3 |
3524 |
3 |
0 |
0 |
T7 |
13369 |
9 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
6 |
0 |
0 |
T10 |
1411 |
2 |
0 |
0 |
T11 |
27495 |
85 |
0 |
0 |
T12 |
18102 |
94 |
0 |
0 |
T13 |
4146 |
8 |
0 |
0 |
T14 |
0 |
74 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
359877 |
0 |
0 |
T1 |
2071 |
6 |
0 |
0 |
T2 |
13197 |
5 |
0 |
0 |
T3 |
3524 |
6 |
0 |
0 |
T7 |
13369 |
4 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
13 |
0 |
0 |
T10 |
1411 |
2 |
0 |
0 |
T11 |
27495 |
97 |
0 |
0 |
T12 |
18102 |
121 |
0 |
0 |
T13 |
4146 |
1 |
0 |
0 |
T14 |
0 |
99 |
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 |
430217806 |
4592871 |
0 |
0 |
T1 |
2071 |
12 |
0 |
0 |
T2 |
13197 |
18 |
0 |
0 |
T3 |
3524 |
8 |
0 |
0 |
T7 |
13369 |
89 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
19 |
0 |
0 |
T10 |
1411 |
4 |
0 |
0 |
T11 |
27495 |
193 |
0 |
0 |
T12 |
18102 |
207 |
0 |
0 |
T13 |
4146 |
51 |
0 |
0 |
T14 |
0 |
456 |
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 | T2,T3,T7 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T7,T11,T13 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_sm1_56
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
308700 |
0 |
0 |
T1 |
2071 |
5 |
0 |
0 |
T2 |
13197 |
6 |
0 |
0 |
T3 |
3524 |
4 |
0 |
0 |
T7 |
13369 |
16 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
12 |
0 |
0 |
T10 |
1411 |
3 |
0 |
0 |
T11 |
27495 |
44 |
0 |
0 |
T12 |
18102 |
94 |
0 |
0 |
T13 |
4146 |
10 |
0 |
0 |
T14 |
0 |
68 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
412511 |
0 |
0 |
T1 |
2071 |
5 |
0 |
0 |
T2 |
13197 |
8 |
0 |
0 |
T3 |
3524 |
4 |
0 |
0 |
T7 |
13369 |
8 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
10 |
0 |
0 |
T10 |
1411 |
7 |
0 |
0 |
T11 |
27495 |
67 |
0 |
0 |
T12 |
18102 |
117 |
0 |
0 |
T13 |
4146 |
21 |
0 |
0 |
T14 |
0 |
133 |
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 |
430217806 |
3958260 |
0 |
0 |
T1 |
2071 |
9 |
0 |
0 |
T2 |
13197 |
30 |
0 |
0 |
T3 |
3524 |
11 |
0 |
0 |
T7 |
13369 |
102 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
21 |
0 |
0 |
T10 |
1411 |
10 |
0 |
0 |
T11 |
27495 |
156 |
0 |
0 |
T12 |
18102 |
200 |
0 |
0 |
T13 |
4146 |
89 |
0 |
0 |
T14 |
0 |
518 |
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 | T2,T9,T12 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T2,T9,T12 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 2))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T2,T9,T12 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 2)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T2,T3,T7 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T2,T9,T12 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T2,T3,T7 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T2,T9,T12 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[2].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 2) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T2,T3 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T2,T9,T12 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 2)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_sm1_30
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
10116157 |
0 |
0 |
T1 |
2071 |
29 |
0 |
0 |
T2 |
13197 |
311 |
0 |
0 |
T3 |
3524 |
270 |
0 |
0 |
T7 |
13369 |
348 |
0 |
0 |
T8 |
3945 |
137 |
0 |
0 |
T9 |
2006 |
29 |
0 |
0 |
T10 |
1411 |
42 |
0 |
0 |
T11 |
27495 |
2099 |
0 |
0 |
T12 |
18102 |
594 |
0 |
0 |
T13 |
4146 |
115 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
1917704 |
0 |
0 |
T1 |
2071 |
4 |
0 |
0 |
T2 |
13197 |
33 |
0 |
0 |
T3 |
3524 |
11 |
0 |
0 |
T7 |
13369 |
72 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
8 |
0 |
0 |
T10 |
1411 |
5 |
0 |
0 |
T11 |
27495 |
585 |
0 |
0 |
T12 |
18102 |
89 |
0 |
0 |
T13 |
4146 |
38 |
0 |
0 |
T14 |
0 |
574 |
0 |
0 |
gen_host_fifo[2].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
430217806 |
1954134 |
0 |
0 |
T1 |
2071 |
2 |
0 |
0 |
T2 |
13197 |
62 |
0 |
0 |
T3 |
3524 |
41 |
0 |
0 |
T7 |
13369 |
44 |
0 |
0 |
T8 |
3945 |
0 |
0 |
0 |
T9 |
2006 |
14 |
0 |
0 |
T10 |
1411 |
2 |
0 |
0 |
T11 |
27495 |
375 |
0 |
0 |
T12 |
18102 |
119 |
0 |
0 |
T13 |
4146 |
18 |
0 |
0 |
T14 |
0 |
537 |
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 |
430217806 |
20235656 |
0 |
0 |
T1 |
2071 |
35 |
0 |
0 |
T2 |
13197 |
222 |
0 |
0 |
T3 |
3524 |
215 |
0 |
0 |
T7 |
13369 |
318 |
0 |
0 |
T8 |
3945 |
137 |
0 |
0 |
T9 |
2006 |
51 |
0 |
0 |
T10 |
1411 |
49 |
0 |
0 |
T11 |
27495 |
1166 |
0 |
0 |
T12 |
18102 |
790 |
0 |
0 |
T13 |
4146 |
212 |
0 |
0 |