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,T3,T4 |
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,T3,T4 |
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 | T3,T7,T4 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T7,T4 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T2,T3,T4 |
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,T3,T4 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 2)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Cond Coverage for Module :
tlul_socket_m1 ( parameter M=2,HReqPass=3,HRspPass=3,HReqDepth=0,HRspDepth=0,DReqPass=0,DRspPass=0,DReqDepth=1,DRspDepth=1,IDW=8,STIDW=1 + M=2,HReqPass=3,HRspPass=3,HReqDepth=0,HRspDepth=0,DReqPass=1,DRspPass=1,DReqDepth=0,DRspDepth=0,IDW=8,STIDW=1 )
Cond Coverage for Module self-instances :
| Total | Covered | Percent |
Conditions | 22 | 20 | 90.91 |
Logical | 22 | 20 | 90.91 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T7,T4 |
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,T4,T8 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Module :
tlul_socket_m1
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
2147483647 |
23001623 |
0 |
0 |
T1 |
46713 |
280 |
0 |
0 |
T2 |
46608 |
299 |
0 |
0 |
T3 |
22344 |
308 |
0 |
0 |
T4 |
662496 |
4484 |
0 |
0 |
T7 |
375504 |
5256 |
0 |
0 |
T8 |
1004064 |
5778 |
0 |
0 |
T9 |
233928 |
2331 |
0 |
0 |
T10 |
185664 |
2219 |
0 |
0 |
T11 |
42144 |
328 |
0 |
0 |
T12 |
35400 |
301 |
0 |
0 |
T13 |
204427 |
144 |
0 |
0 |
T14 |
0 |
153 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
2147483647 |
12984235 |
0 |
0 |
T1 |
46713 |
137 |
0 |
0 |
T2 |
46608 |
132 |
0 |
0 |
T3 |
22344 |
216 |
0 |
0 |
T4 |
662496 |
1909 |
0 |
0 |
T7 |
375504 |
5717 |
0 |
0 |
T8 |
1004064 |
2526 |
0 |
0 |
T9 |
233928 |
1302 |
0 |
0 |
T10 |
185664 |
1204 |
0 |
0 |
T11 |
42144 |
124 |
0 |
0 |
T12 |
35400 |
118 |
0 |
0 |
T13 |
204427 |
155 |
0 |
0 |
T14 |
0 |
162 |
0 |
0 |
gen_host_fifo[2].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1581848748 |
3692496 |
0 |
0 |
T1 |
8124 |
21 |
0 |
0 |
T2 |
7768 |
25 |
0 |
0 |
T3 |
3724 |
25 |
0 |
0 |
T4 |
110416 |
423 |
0 |
0 |
T7 |
62584 |
1493 |
0 |
0 |
T8 |
167344 |
828 |
0 |
0 |
T9 |
38988 |
186 |
0 |
0 |
T10 |
30944 |
182 |
0 |
0 |
T11 |
7024 |
17 |
0 |
0 |
T12 |
5900 |
12 |
0 |
0 |
T13 |
0 |
26 |
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 |
T4 |
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 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
2147483647 |
153167060 |
0 |
0 |
T1 |
48744 |
360 |
0 |
0 |
T2 |
46608 |
400 |
0 |
0 |
T3 |
22344 |
496 |
0 |
0 |
T4 |
662496 |
9636 |
0 |
0 |
T7 |
375504 |
6244 |
0 |
0 |
T8 |
1004064 |
17073 |
0 |
0 |
T9 |
233928 |
3728 |
0 |
0 |
T10 |
185664 |
3282 |
0 |
0 |
T11 |
42144 |
391 |
0 |
0 |
T12 |
35400 |
389 |
0 |
0 |
T13 |
0 |
608 |
0 |
0 |
T14 |
0 |
548 |
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 | T3,T7,T4 |
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,T4,T8 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[2].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 2) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T7,T4,T8 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 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 |
395462187 |
1665591 |
0 |
0 |
T1 |
2031 |
38 |
0 |
0 |
T2 |
1942 |
38 |
0 |
0 |
T3 |
931 |
43 |
0 |
0 |
T4 |
27604 |
353 |
0 |
0 |
T7 |
15646 |
1351 |
0 |
0 |
T8 |
41836 |
501 |
0 |
0 |
T9 |
9747 |
298 |
0 |
0 |
T10 |
7736 |
254 |
0 |
0 |
T11 |
1756 |
23 |
0 |
0 |
T12 |
1475 |
42 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
388533 |
0 |
0 |
T1 |
2031 |
7 |
0 |
0 |
T2 |
1942 |
5 |
0 |
0 |
T3 |
931 |
15 |
0 |
0 |
T4 |
27604 |
75 |
0 |
0 |
T7 |
15646 |
1295 |
0 |
0 |
T8 |
41836 |
79 |
0 |
0 |
T9 |
9747 |
58 |
0 |
0 |
T10 |
7736 |
49 |
0 |
0 |
T11 |
1756 |
4 |
0 |
0 |
T12 |
1475 |
5 |
0 |
0 |
gen_host_fifo[2].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
505370 |
0 |
0 |
T1 |
2031 |
6 |
0 |
0 |
T2 |
1942 |
5 |
0 |
0 |
T3 |
931 |
12 |
0 |
0 |
T4 |
27604 |
33 |
0 |
0 |
T7 |
15646 |
1493 |
0 |
0 |
T8 |
41836 |
83 |
0 |
0 |
T9 |
9747 |
35 |
0 |
0 |
T10 |
7736 |
39 |
0 |
0 |
T11 |
1756 |
7 |
0 |
0 |
T12 |
1475 |
5 |
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 |
T4 |
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 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
18213885 |
0 |
0 |
T1 |
2031 |
51 |
0 |
0 |
T2 |
1942 |
48 |
0 |
0 |
T3 |
931 |
68 |
0 |
0 |
T4 |
27604 |
1508 |
0 |
0 |
T7 |
15646 |
3905 |
0 |
0 |
T8 |
41836 |
1617 |
0 |
0 |
T9 |
9747 |
389 |
0 |
0 |
T10 |
7736 |
338 |
0 |
0 |
T11 |
1756 |
34 |
0 |
0 |
T12 |
1475 |
52 |
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 | T3,T7,T4 |
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 | T4,T8,T11 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[2].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 2) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T4,T8,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] == 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 |
395462187 |
1871620 |
0 |
0 |
T1 |
2031 |
54 |
0 |
0 |
T2 |
1942 |
44 |
0 |
0 |
T3 |
931 |
28 |
0 |
0 |
T4 |
27604 |
484 |
0 |
0 |
T7 |
15646 |
76 |
0 |
0 |
T8 |
41836 |
522 |
0 |
0 |
T9 |
9747 |
302 |
0 |
0 |
T10 |
7736 |
307 |
0 |
0 |
T11 |
1756 |
52 |
0 |
0 |
T12 |
1475 |
52 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
533806 |
0 |
0 |
T1 |
2031 |
5 |
0 |
0 |
T2 |
1942 |
8 |
0 |
0 |
T3 |
931 |
3 |
0 |
0 |
T4 |
27604 |
134 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
60 |
0 |
0 |
T9 |
9747 |
56 |
0 |
0 |
T10 |
7736 |
53 |
0 |
0 |
T11 |
1756 |
12 |
0 |
0 |
T12 |
1475 |
5 |
0 |
0 |
T13 |
0 |
10 |
0 |
0 |
gen_host_fifo[2].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
675520 |
0 |
0 |
T1 |
2031 |
5 |
0 |
0 |
T2 |
1942 |
7 |
0 |
0 |
T3 |
931 |
4 |
0 |
0 |
T4 |
27604 |
63 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
74 |
0 |
0 |
T9 |
9747 |
57 |
0 |
0 |
T10 |
7736 |
61 |
0 |
0 |
T11 |
1756 |
2 |
0 |
0 |
T12 |
1475 |
3 |
0 |
0 |
T13 |
0 |
5 |
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 |
T4 |
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 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
19663043 |
0 |
0 |
T1 |
2031 |
49 |
0 |
0 |
T2 |
1942 |
47 |
0 |
0 |
T3 |
931 |
29 |
0 |
0 |
T4 |
27604 |
1950 |
0 |
0 |
T7 |
15646 |
93 |
0 |
0 |
T8 |
41836 |
1242 |
0 |
0 |
T9 |
9747 |
403 |
0 |
0 |
T10 |
7736 |
347 |
0 |
0 |
T11 |
1756 |
51 |
0 |
0 |
T12 |
1475 |
46 |
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 | T3,T7,T4 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T4,T8 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[2].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 2) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T4,T8,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] == 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 |
395462187 |
1754963 |
0 |
0 |
T1 |
2031 |
51 |
0 |
0 |
T2 |
1942 |
56 |
0 |
0 |
T3 |
931 |
33 |
0 |
0 |
T4 |
27604 |
400 |
0 |
0 |
T7 |
15646 |
82 |
0 |
0 |
T8 |
41836 |
536 |
0 |
0 |
T9 |
9747 |
341 |
0 |
0 |
T10 |
7736 |
266 |
0 |
0 |
T11 |
1756 |
54 |
0 |
0 |
T12 |
1475 |
33 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
443530 |
0 |
0 |
T1 |
2031 |
5 |
0 |
0 |
T2 |
1942 |
9 |
0 |
0 |
T3 |
931 |
12 |
0 |
0 |
T4 |
27604 |
47 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
109 |
0 |
0 |
T9 |
9747 |
52 |
0 |
0 |
T10 |
7736 |
50 |
0 |
0 |
T11 |
1756 |
4 |
0 |
0 |
T12 |
1475 |
9 |
0 |
0 |
T13 |
0 |
10 |
0 |
0 |
gen_host_fifo[2].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
577794 |
0 |
0 |
T1 |
2031 |
6 |
0 |
0 |
T2 |
1942 |
6 |
0 |
0 |
T3 |
931 |
5 |
0 |
0 |
T4 |
27604 |
38 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
117 |
0 |
0 |
T9 |
9747 |
44 |
0 |
0 |
T10 |
7736 |
40 |
0 |
0 |
T11 |
1756 |
4 |
0 |
0 |
T12 |
1475 |
1 |
0 |
0 |
T13 |
0 |
6 |
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 |
T4 |
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 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
17516175 |
0 |
0 |
T1 |
2031 |
47 |
0 |
0 |
T2 |
1942 |
56 |
0 |
0 |
T3 |
931 |
39 |
0 |
0 |
T4 |
27604 |
1614 |
0 |
0 |
T7 |
15646 |
138 |
0 |
0 |
T8 |
41836 |
1485 |
0 |
0 |
T9 |
9747 |
418 |
0 |
0 |
T10 |
7736 |
308 |
0 |
0 |
T11 |
1756 |
48 |
0 |
0 |
T12 |
1475 |
39 |
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 | T4,T8,T14 |
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 | T4,T8,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_33
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
286918 |
0 |
0 |
T1 |
2031 |
6 |
0 |
0 |
T2 |
1942 |
3 |
0 |
0 |
T3 |
931 |
11 |
0 |
0 |
T4 |
27604 |
41 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
70 |
0 |
0 |
T9 |
9747 |
50 |
0 |
0 |
T10 |
7736 |
49 |
0 |
0 |
T11 |
1756 |
6 |
0 |
0 |
T12 |
1475 |
3 |
0 |
0 |
T14 |
0 |
81 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
379687 |
0 |
0 |
T1 |
2031 |
9 |
0 |
0 |
T2 |
1942 |
4 |
0 |
0 |
T3 |
931 |
4 |
0 |
0 |
T4 |
27604 |
39 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
83 |
0 |
0 |
T9 |
9747 |
52 |
0 |
0 |
T10 |
7736 |
53 |
0 |
0 |
T11 |
1756 |
4 |
0 |
0 |
T12 |
1475 |
8 |
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 |
T4 |
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 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
4105158 |
0 |
0 |
T1 |
2031 |
15 |
0 |
0 |
T2 |
1942 |
7 |
0 |
0 |
T3 |
931 |
14 |
0 |
0 |
T4 |
27604 |
126 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
628 |
0 |
0 |
T9 |
9747 |
99 |
0 |
0 |
T10 |
7736 |
100 |
0 |
0 |
T11 |
1756 |
10 |
0 |
0 |
T12 |
1475 |
11 |
0 |
0 |
T14 |
0 |
548 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_sm1_34
| Line No. | Total | Covered | Percent |
TOTAL | | 18 | 18 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 2/2 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 2/2 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 2/2 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 2/2 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 2/2 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 2/2 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 2/2 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3
Cond Coverage for Instance : tb.dut.u_sm1_34
| Total | Covered | Percent |
Conditions | 22 | 20 | 90.91 |
Logical | 22 | 20 | 90.91 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T7,T4,T8 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T7,T4,T8 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_sm1_34
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
316785 |
0 |
0 |
T1 |
2031 |
6 |
0 |
0 |
T2 |
1942 |
11 |
0 |
0 |
T3 |
931 |
6 |
0 |
0 |
T4 |
27604 |
48 |
0 |
0 |
T7 |
15646 |
3406 |
0 |
0 |
T8 |
41836 |
68 |
0 |
0 |
T9 |
9747 |
53 |
0 |
0 |
T10 |
7736 |
50 |
0 |
0 |
T11 |
1756 |
2 |
0 |
0 |
T12 |
1475 |
10 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
405067 |
0 |
0 |
T1 |
2031 |
6 |
0 |
0 |
T2 |
1942 |
3 |
0 |
0 |
T3 |
931 |
13 |
0 |
0 |
T4 |
27604 |
74 |
0 |
0 |
T7 |
15646 |
4422 |
0 |
0 |
T8 |
41836 |
130 |
0 |
0 |
T9 |
9747 |
52 |
0 |
0 |
T10 |
7736 |
39 |
0 |
0 |
T11 |
1756 |
3 |
0 |
0 |
T12 |
1475 |
6 |
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 |
T4 |
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 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
3889258 |
0 |
0 |
T1 |
2031 |
11 |
0 |
0 |
T2 |
1942 |
11 |
0 |
0 |
T3 |
931 |
18 |
0 |
0 |
T4 |
27604 |
129 |
0 |
0 |
T7 |
15646 |
1961 |
0 |
0 |
T8 |
41836 |
587 |
0 |
0 |
T9 |
9747 |
104 |
0 |
0 |
T10 |
7736 |
87 |
0 |
0 |
T11 |
1756 |
5 |
0 |
0 |
T12 |
1475 |
15 |
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 | T4,T8,T14 |
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 | T4,T14,T17 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_sm1_36
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
654778 |
0 |
0 |
T1 |
2031 |
10 |
0 |
0 |
T2 |
1942 |
12 |
0 |
0 |
T3 |
931 |
9 |
0 |
0 |
T4 |
27604 |
79 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
188 |
0 |
0 |
T9 |
9747 |
49 |
0 |
0 |
T10 |
7736 |
75 |
0 |
0 |
T11 |
1756 |
15 |
0 |
0 |
T12 |
1475 |
15 |
0 |
0 |
T13 |
0 |
14 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
804052 |
0 |
0 |
T1 |
2031 |
4 |
0 |
0 |
T2 |
1942 |
14 |
0 |
0 |
T3 |
931 |
4 |
0 |
0 |
T4 |
27604 |
123 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
158 |
0 |
0 |
T9 |
9747 |
61 |
0 |
0 |
T10 |
7736 |
75 |
0 |
0 |
T11 |
1756 |
5 |
0 |
0 |
T12 |
1475 |
2 |
0 |
0 |
T13 |
0 |
5 |
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 |
T4 |
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 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
4470048 |
0 |
0 |
T1 |
2031 |
7 |
0 |
0 |
T2 |
1942 |
13 |
0 |
0 |
T3 |
931 |
13 |
0 |
0 |
T4 |
27604 |
79 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
537 |
0 |
0 |
T9 |
9747 |
107 |
0 |
0 |
T10 |
7736 |
101 |
0 |
0 |
T11 |
1756 |
12 |
0 |
0 |
T12 |
1475 |
13 |
0 |
0 |
T13 |
0 |
10 |
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 | T4,T8,T14 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T8,T17,T23 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_sm1_38
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
735278 |
0 |
0 |
T1 |
2031 |
2 |
0 |
0 |
T2 |
1942 |
17 |
0 |
0 |
T3 |
931 |
8 |
0 |
0 |
T4 |
27604 |
124 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
135 |
0 |
0 |
T9 |
9747 |
48 |
0 |
0 |
T10 |
7736 |
62 |
0 |
0 |
T11 |
1756 |
7 |
0 |
0 |
T12 |
1475 |
20 |
0 |
0 |
T13 |
0 |
7 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
934575 |
0 |
0 |
T1 |
2031 |
24 |
0 |
0 |
T2 |
1942 |
3 |
0 |
0 |
T3 |
931 |
3 |
0 |
0 |
T4 |
27604 |
190 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
248 |
0 |
0 |
T9 |
9747 |
56 |
0 |
0 |
T10 |
7736 |
40 |
0 |
0 |
T11 |
1756 |
17 |
0 |
0 |
T12 |
1475 |
2 |
0 |
0 |
T13 |
0 |
3 |
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 |
T4 |
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 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
4325281 |
0 |
0 |
T1 |
2031 |
11 |
0 |
0 |
T2 |
1942 |
9 |
0 |
0 |
T3 |
931 |
11 |
0 |
0 |
T4 |
27604 |
83 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
616 |
0 |
0 |
T9 |
9747 |
100 |
0 |
0 |
T10 |
7736 |
86 |
0 |
0 |
T11 |
1756 |
16 |
0 |
0 |
T12 |
1475 |
15 |
0 |
0 |
T13 |
0 |
10 |
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 | T4,T8,T14 |
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 | T4,T8,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_40
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
793243 |
0 |
0 |
T1 |
2031 |
2 |
0 |
0 |
T2 |
1942 |
4 |
0 |
0 |
T3 |
931 |
11 |
0 |
0 |
T4 |
27604 |
40 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
82 |
0 |
0 |
T9 |
9747 |
55 |
0 |
0 |
T10 |
7736 |
84 |
0 |
0 |
T11 |
1756 |
17 |
0 |
0 |
T12 |
1475 |
2 |
0 |
0 |
T13 |
0 |
13 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
890883 |
0 |
0 |
T1 |
2031 |
8 |
0 |
0 |
T2 |
1942 |
3 |
0 |
0 |
T3 |
931 |
7 |
0 |
0 |
T4 |
27604 |
124 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
91 |
0 |
0 |
T9 |
9747 |
54 |
0 |
0 |
T10 |
7736 |
63 |
0 |
0 |
T11 |
1756 |
7 |
0 |
0 |
T12 |
1475 |
19 |
0 |
0 |
T13 |
0 |
10 |
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 |
T4 |
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 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
4349029 |
0 |
0 |
T1 |
2031 |
6 |
0 |
0 |
T2 |
1942 |
7 |
0 |
0 |
T3 |
931 |
13 |
0 |
0 |
T4 |
27604 |
84 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
630 |
0 |
0 |
T9 |
9747 |
104 |
0 |
0 |
T10 |
7736 |
93 |
0 |
0 |
T11 |
1756 |
12 |
0 |
0 |
T12 |
1475 |
13 |
0 |
0 |
T13 |
0 |
15 |
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 | T4,T8,T14 |
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 | T4,T8,T24 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
Assert Coverage for Instance : tb.dut.u_sm1_42
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
767612 |
0 |
0 |
T1 |
2031 |
24 |
0 |
0 |
T2 |
1942 |
3 |
0 |
0 |
T3 |
931 |
9 |
0 |
0 |
T4 |
27604 |
42 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
89 |
0 |
0 |
T9 |
9747 |
72 |
0 |
0 |
T10 |
7736 |
72 |
0 |
0 |
T11 |
1756 |
10 |
0 |
0 |
T12 |
1475 |
8 |
0 |
0 |
T13 |
0 |
19 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
922021 |
0 |
0 |
T1 |
2031 |
1 |
0 |
0 |
T2 |
1942 |
2 |
0 |
0 |
T3 |
931 |
16 |
0 |
0 |
T4 |
27604 |
53 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
108 |
0 |
0 |
T9 |
9747 |
58 |
0 |
0 |
T10 |
7736 |
50 |
0 |
0 |
T11 |
1756 |
9 |
0 |
0 |
T12 |
1475 |
2 |
0 |
0 |
T13 |
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 |
T4 |
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 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
4239226 |
0 |
0 |
T1 |
2031 |
6 |
0 |
0 |
T2 |
1942 |
5 |
0 |
0 |
T3 |
931 |
12 |
0 |
0 |
T4 |
27604 |
84 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
654 |
0 |
0 |
T9 |
9747 |
111 |
0 |
0 |
T10 |
7736 |
103 |
0 |
0 |
T11 |
1756 |
9 |
0 |
0 |
T12 |
1475 |
10 |
0 |
0 |
T13 |
0 |
10 |
0 |
0 |
Line Coverage for Instance : tb.dut.u_sm1_43
| Line No. | Total | Covered | Percent |
TOTAL | | 18 | 18 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 96 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 105 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 108 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 163 | 1 | 1 | 100.00 |
CONT_ASSIGN | 166 | 1 | 1 | 100.00 |
CONT_ASSIGN | 212 | 1 | 1 | 100.00 |
CONT_ASSIGN | 213 | 1 | 1 | 100.00 |
CONT_ASSIGN | 231 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 238 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
CONT_ASSIGN | 242 | 1 | 1 | 100.00 |
95 assign reqid_sub = i; // can cause conversion error?
96 2/2 assign shifted_id = {
Tests: T1 T2 T3 | T1 T2 T3
97 tl_h_i[i].a_source[0+:(IDW-STIDW)],
98 reqid_sub
99 };
100
101 `ASSERT(idInRange, tl_h_i[i].a_valid |-> tl_h_i[i].a_source[IDW-1 -:STIDW] == '0)
102
103 // assign not connected bits to nc_* signal to make lint happy
104 logic [IDW-1 : IDW-STIDW] unused_tl_h_source;
105 2/2 assign unused_tl_h_source = tl_h_i[i].a_source[IDW-1 -: STIDW];
Tests: T1 T2 T3 | T1 T2 T3
106
107 // Put shifted ID
108 2/2 assign hreq_fifo_i = '{
Tests: T1 T2 T3 | T1 T2 T3
109 a_valid: tl_h_i[i].a_valid,
110 a_opcode: tl_h_i[i].a_opcode,
111 a_param: tl_h_i[i].a_param,
112 a_size: tl_h_i[i].a_size,
113 a_source: shifted_id,
114 a_address: tl_h_i[i].a_address,
115 a_mask: tl_h_i[i].a_mask,
116 a_data: tl_h_i[i].a_data,
117 a_user: tl_h_i[i].a_user,
118 d_ready: tl_h_i[i].d_ready
119 };
120
121 tlul_fifo_sync #(
122 .ReqPass (HReqPass[i]),
123 .RspPass (HRspPass[i]),
124 .ReqDepth (HReqDepth[i*4+:4]),
125 .RspDepth (HRspDepth[i*4+:4]),
126 .SpareReqW (1)
127 ) u_hostfifo (
128 .clk_i,
129 .rst_ni,
130 .tl_h_i (hreq_fifo_i),
131 .tl_h_o (tl_h_o[i]),
132 .tl_d_o (hreq_fifo_o[i]),
133 .tl_d_i (hrsp_fifo_i[i]),
134 .spare_req_i (1'b0),
135 .spare_req_o (),
136 .spare_rsp_i (1'b0),
137 .spare_rsp_o ()
138 );
139 end
140
141 // Device Req/Rsp FIFO
142 tlul_fifo_sync #(
143 .ReqPass (DReqPass),
144 .RspPass (DRspPass),
145 .ReqDepth (DReqDepth),
146 .RspDepth (DRspDepth),
147 .SpareReqW (1)
148 ) u_devicefifo (
149 .clk_i,
150 .rst_ni,
151 .tl_h_i (dreq_fifo_i),
152 .tl_h_o (drsp_fifo_o),
153 .tl_d_o (tl_d_o),
154 .tl_d_i (tl_d_i),
155 .spare_req_i (1'b0),
156 .spare_req_o (),
157 .spare_rsp_i (1'b0),
158 .spare_rsp_o ()
159 );
160
161 // Request Arbiter
162 for (genvar i = 0 ; i < M ; i++) begin : gen_arbreqgnt
163 2/2 assign hrequest[i] = hreq_fifo_o[i].a_valid;
Tests: T1 T2 T3 | T1 T2 T3
164 end
165
166 1/1 assign arb_ready = drsp_fifo_o.a_ready;
Tests: T1 T2 T3
167
168 if (tlul_pkg::ArbiterImpl == "PPC") begin : gen_arb_ppc
169 prim_arbiter_ppc #(
170 .N (M),
171 .DW ($bits(tlul_pkg::tl_h2d_t))
172 ) u_reqarb (
173 .clk_i,
174 .rst_ni,
175 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
176 .req_i ( hrequest ),
177 .data_i ( hreq_fifo_o ),
178 .gnt_o ( hgrant ),
179 .idx_o ( ),
180 .valid_o ( arb_valid ),
181 .data_o ( arb_data ),
182 .ready_i ( arb_ready )
183 );
184 end else if (tlul_pkg::ArbiterImpl == "BINTREE") begin : gen_tree_arb
185 prim_arbiter_tree #(
186 .N (M),
187 .DW ($bits(tlul_pkg::tl_h2d_t))
188 ) u_reqarb (
189 .clk_i,
190 .rst_ni,
191 .req_chk_i ( 1'b0 ), // TL-UL allows dropping valid without ready. See #3354.
192 .req_i ( hrequest ),
193 .data_i ( hreq_fifo_o ),
194 .gnt_o ( hgrant ),
195 .idx_o ( ),
196 .valid_o ( arb_valid ),
197 .data_o ( arb_data ),
198 .ready_i ( arb_ready )
199 );
200 end else begin : gen_unknown
201 `ASSERT_INIT(UnknownArbImpl_A, 0)
202 end
203
204 logic [ M-1:0] hfifo_rspvalid;
205 logic [ M-1:0] dfifo_rspready;
206 logic [IDW-1:0] hfifo_rspid;
207 logic dfifo_rspready_merged;
208
209 // arb_data --> dreq_fifo_i
210 // dreq_fifo_i.hd_rspready <= dfifo_rspready
211
212 1/1 assign dfifo_rspready_merged = |dfifo_rspready;
Tests: T1 T2 T3
213 1/1 assign dreq_fifo_i = '{
Tests: T1 T2 T3
214 a_valid: arb_valid,
215 a_opcode: arb_data.a_opcode,
216 a_param: arb_data.a_param,
217 a_size: arb_data.a_size,
218 a_source: arb_data.a_source,
219 a_address: arb_data.a_address,
220 a_mask: arb_data.a_mask,
221 a_data: arb_data.a_data,
222 a_user: arb_data.a_user,
223
224 d_ready: dfifo_rspready_merged
225 };
226
227 // Response ID steering
228 // drsp_fifo_o --> hrsp_fifo_i[i]
229
230 // Response ID shifting before put into host fifo
231 1/1 assign hfifo_rspid = {
Tests: T1 T2 T3
232 {STIDW{1'b0}},
233 drsp_fifo_o.d_source[IDW-1:STIDW]
234 };
235 for (genvar i = 0 ; i < M ; i++) begin : gen_idrouting
236 2/2 assign hfifo_rspvalid[i] = drsp_fifo_o.d_valid &
Tests: T1 T2 T3 | T1 T2 T3
237 (drsp_fifo_o.d_source[0+:STIDW] == i);
238 2/2 assign dfifo_rspready[i] = hreq_fifo_o[i].d_ready &
Tests: T1 T2 T3 | T1 T2 T3
239 (drsp_fifo_o.d_source[0+:STIDW] == i) &
240 drsp_fifo_o.d_valid;
241
242 2/2 assign hrsp_fifo_i[i] = '{
Tests: T1 T2 T3 | T1 T2 T3
Cond Coverage for Instance : tb.dut.u_sm1_43
| Total | Covered | Percent |
Conditions | 22 | 20 | 90.91 |
Logical | 22 | 20 | 90.91 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 0))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[0].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 0) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T4,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 | T4,T8,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_43
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
295764 |
0 |
0 |
T1 |
2031 |
9 |
0 |
0 |
T2 |
1942 |
4 |
0 |
0 |
T3 |
931 |
7 |
0 |
0 |
T4 |
27604 |
36 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
80 |
0 |
0 |
T9 |
9747 |
38 |
0 |
0 |
T10 |
7736 |
47 |
0 |
0 |
T11 |
1756 |
14 |
0 |
0 |
T12 |
1475 |
6 |
0 |
0 |
T13 |
0 |
7 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
381969 |
0 |
0 |
T1 |
2031 |
6 |
0 |
0 |
T2 |
1942 |
6 |
0 |
0 |
T3 |
931 |
16 |
0 |
0 |
T4 |
27604 |
63 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
79 |
0 |
0 |
T9 |
9747 |
48 |
0 |
0 |
T10 |
7736 |
38 |
0 |
0 |
T11 |
1756 |
1 |
0 |
0 |
T12 |
1475 |
4 |
0 |
0 |
T13 |
0 |
13 |
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 |
T4 |
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 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
3974801 |
0 |
0 |
T1 |
2031 |
14 |
0 |
0 |
T2 |
1942 |
10 |
0 |
0 |
T3 |
931 |
22 |
0 |
0 |
T4 |
27604 |
151 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
452 |
0 |
0 |
T9 |
9747 |
86 |
0 |
0 |
T10 |
7736 |
81 |
0 |
0 |
T11 |
1756 |
11 |
0 |
0 |
T12 |
1475 |
10 |
0 |
0 |
T13 |
0 |
14 |
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 | T4,T8,T11 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T4,T8,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_44
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
337307 |
0 |
0 |
T1 |
2031 |
1 |
0 |
0 |
T2 |
1942 |
7 |
0 |
0 |
T3 |
931 |
14 |
0 |
0 |
T4 |
27604 |
24 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
46 |
0 |
0 |
T9 |
9747 |
63 |
0 |
0 |
T10 |
7736 |
46 |
0 |
0 |
T11 |
1756 |
9 |
0 |
0 |
T12 |
1475 |
4 |
0 |
0 |
T13 |
0 |
5 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
433123 |
0 |
0 |
T1 |
2031 |
3 |
0 |
0 |
T2 |
1942 |
8 |
0 |
0 |
T3 |
931 |
11 |
0 |
0 |
T4 |
27604 |
48 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
103 |
0 |
0 |
T9 |
9747 |
49 |
0 |
0 |
T10 |
7736 |
41 |
0 |
0 |
T11 |
1756 |
5 |
0 |
0 |
T12 |
1475 |
6 |
0 |
0 |
T13 |
0 |
1 |
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 |
T4 |
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 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
3818713 |
0 |
0 |
T1 |
2031 |
4 |
0 |
0 |
T2 |
1942 |
15 |
0 |
0 |
T3 |
931 |
19 |
0 |
0 |
T4 |
27604 |
116 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
554 |
0 |
0 |
T9 |
9747 |
109 |
0 |
0 |
T10 |
7736 |
86 |
0 |
0 |
T11 |
1756 |
12 |
0 |
0 |
T12 |
1475 |
10 |
0 |
0 |
T13 |
0 |
6 |
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 | T4,T8,T14 |
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 | T4,T8,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 |
395462187 |
258213 |
0 |
0 |
T1 |
2031 |
5 |
0 |
0 |
T2 |
1942 |
7 |
0 |
0 |
T3 |
931 |
8 |
0 |
0 |
T4 |
27604 |
39 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
72 |
0 |
0 |
T9 |
9747 |
60 |
0 |
0 |
T10 |
7736 |
76 |
0 |
0 |
T11 |
1756 |
5 |
0 |
0 |
T12 |
1475 |
4 |
0 |
0 |
T13 |
0 |
9 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
331340 |
0 |
0 |
T1 |
2031 |
6 |
0 |
0 |
T2 |
1942 |
3 |
0 |
0 |
T3 |
931 |
8 |
0 |
0 |
T4 |
27604 |
71 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
73 |
0 |
0 |
T9 |
9747 |
52 |
0 |
0 |
T10 |
7736 |
56 |
0 |
0 |
T11 |
1756 |
3 |
0 |
0 |
T12 |
1475 |
5 |
0 |
0 |
T13 |
0 |
10 |
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 |
T4 |
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 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
3603187 |
0 |
0 |
T1 |
2031 |
11 |
0 |
0 |
T2 |
1942 |
9 |
0 |
0 |
T3 |
931 |
16 |
0 |
0 |
T4 |
27604 |
130 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
523 |
0 |
0 |
T9 |
9747 |
111 |
0 |
0 |
T10 |
7736 |
122 |
0 |
0 |
T11 |
1756 |
8 |
0 |
0 |
T12 |
1475 |
9 |
0 |
0 |
T13 |
0 |
13 |
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 | T4,T8,T14 |
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 | T4,T8,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 |
395462187 |
271601 |
0 |
0 |
T1 |
2031 |
1 |
0 |
0 |
T2 |
1942 |
6 |
0 |
0 |
T3 |
931 |
9 |
0 |
0 |
T4 |
27604 |
46 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
60 |
0 |
0 |
T9 |
9747 |
42 |
0 |
0 |
T10 |
7736 |
55 |
0 |
0 |
T11 |
1756 |
11 |
0 |
0 |
T12 |
1475 |
10 |
0 |
0 |
T13 |
0 |
7 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
349535 |
0 |
0 |
T1 |
2031 |
7 |
0 |
0 |
T2 |
1942 |
2 |
0 |
0 |
T3 |
931 |
6 |
0 |
0 |
T4 |
27604 |
48 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
94 |
0 |
0 |
T9 |
9747 |
57 |
0 |
0 |
T10 |
7736 |
44 |
0 |
0 |
T11 |
1756 |
1 |
0 |
0 |
T12 |
1475 |
2 |
0 |
0 |
T13 |
0 |
4 |
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 |
T4 |
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 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
3926556 |
0 |
0 |
T1 |
2031 |
8 |
0 |
0 |
T2 |
1942 |
8 |
0 |
0 |
T3 |
931 |
15 |
0 |
0 |
T4 |
27604 |
131 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
553 |
0 |
0 |
T9 |
9747 |
99 |
0 |
0 |
T10 |
7736 |
96 |
0 |
0 |
T11 |
1756 |
11 |
0 |
0 |
T12 |
1475 |
11 |
0 |
0 |
T13 |
0 |
11 |
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 | T4,T8,T13 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T4,T8,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_47
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
282514 |
0 |
0 |
T1 |
2031 |
9 |
0 |
0 |
T2 |
1942 |
3 |
0 |
0 |
T3 |
931 |
7 |
0 |
0 |
T4 |
27604 |
46 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
89 |
0 |
0 |
T9 |
9747 |
51 |
0 |
0 |
T10 |
7736 |
40 |
0 |
0 |
T11 |
1756 |
4 |
0 |
0 |
T12 |
1475 |
11 |
0 |
0 |
T13 |
0 |
6 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
375185 |
0 |
0 |
T1 |
2031 |
7 |
0 |
0 |
T2 |
1942 |
9 |
0 |
0 |
T3 |
931 |
10 |
0 |
0 |
T4 |
27604 |
96 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
109 |
0 |
0 |
T9 |
9747 |
58 |
0 |
0 |
T10 |
7736 |
40 |
0 |
0 |
T11 |
1756 |
7 |
0 |
0 |
T12 |
1475 |
9 |
0 |
0 |
T13 |
0 |
6 |
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 |
T4 |
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 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
3321656 |
0 |
0 |
T1 |
2031 |
16 |
0 |
0 |
T2 |
1942 |
12 |
0 |
0 |
T3 |
931 |
16 |
0 |
0 |
T4 |
27604 |
180 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
706 |
0 |
0 |
T9 |
9747 |
109 |
0 |
0 |
T10 |
7736 |
80 |
0 |
0 |
T11 |
1756 |
11 |
0 |
0 |
T12 |
1475 |
19 |
0 |
0 |
T13 |
0 |
430 |
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 | T2,T3,T4 |
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 | T2,T3,T4 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T2,T3,T4 |
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 | T4,T8,T14 |
1 | 0 | 1 | Covered | T2,T3,T4 |
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 | T4,T8,T14 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Not Covered | |
1 | 1 | 1 | Covered | T2,T3,T4 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 1)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T2,T3,T4 |
Assert Coverage for Instance : tb.dut.u_sm1_48
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
302391 |
0 |
0 |
T1 |
2031 |
4 |
0 |
0 |
T2 |
1942 |
4 |
0 |
0 |
T3 |
931 |
3 |
0 |
0 |
T4 |
27604 |
34 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
84 |
0 |
0 |
T9 |
9747 |
43 |
0 |
0 |
T10 |
7736 |
48 |
0 |
0 |
T11 |
1756 |
5 |
0 |
0 |
T12 |
1475 |
8 |
0 |
0 |
T13 |
0 |
3 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
382367 |
0 |
0 |
T2 |
1942 |
2 |
0 |
0 |
T3 |
931 |
9 |
0 |
0 |
T4 |
27604 |
38 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
120 |
0 |
0 |
T9 |
9747 |
54 |
0 |
0 |
T10 |
7736 |
41 |
0 |
0 |
T11 |
1756 |
6 |
0 |
0 |
T12 |
1475 |
3 |
0 |
0 |
T13 |
204427 |
3 |
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 |
T4 |
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 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
3964332 |
0 |
0 |
T1 |
2031 |
4 |
0 |
0 |
T2 |
1942 |
6 |
0 |
0 |
T3 |
931 |
12 |
0 |
0 |
T4 |
27604 |
93 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
610 |
0 |
0 |
T9 |
9747 |
93 |
0 |
0 |
T10 |
7736 |
87 |
0 |
0 |
T11 |
1756 |
11 |
0 |
0 |
T12 |
1475 |
11 |
0 |
0 |
T13 |
0 |
6 |
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 | T4,T8,T11 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T4,T8,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_49
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
309212 |
0 |
0 |
T1 |
2031 |
1 |
0 |
0 |
T2 |
1942 |
5 |
0 |
0 |
T3 |
931 |
4 |
0 |
0 |
T4 |
27604 |
62 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
79 |
0 |
0 |
T9 |
9747 |
55 |
0 |
0 |
T10 |
7736 |
44 |
0 |
0 |
T11 |
1756 |
12 |
0 |
0 |
T12 |
1475 |
4 |
0 |
0 |
T13 |
0 |
6 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
405877 |
0 |
0 |
T1 |
2031 |
5 |
0 |
0 |
T2 |
1942 |
5 |
0 |
0 |
T3 |
931 |
6 |
0 |
0 |
T4 |
27604 |
51 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
73 |
0 |
0 |
T9 |
9747 |
53 |
0 |
0 |
T10 |
7736 |
58 |
0 |
0 |
T11 |
1756 |
2 |
0 |
0 |
T12 |
1475 |
1 |
0 |
0 |
T13 |
0 |
3 |
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 |
T4 |
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 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
4527087 |
0 |
0 |
T1 |
2031 |
6 |
0 |
0 |
T2 |
1942 |
10 |
0 |
0 |
T3 |
931 |
10 |
0 |
0 |
T4 |
27604 |
124 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
605 |
0 |
0 |
T9 |
9747 |
108 |
0 |
0 |
T10 |
7736 |
97 |
0 |
0 |
T11 |
1756 |
12 |
0 |
0 |
T12 |
1475 |
5 |
0 |
0 |
T13 |
0 |
9 |
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 | T4,T8,T14 |
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 | T4,T8,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_50
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
338003 |
0 |
0 |
T1 |
2031 |
4 |
0 |
0 |
T2 |
1942 |
2 |
0 |
0 |
T3 |
931 |
5 |
0 |
0 |
T4 |
27604 |
61 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
42 |
0 |
0 |
T9 |
9747 |
62 |
0 |
0 |
T10 |
7736 |
52 |
0 |
0 |
T11 |
1756 |
5 |
0 |
0 |
T12 |
1475 |
3 |
0 |
0 |
T13 |
0 |
7 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
430230 |
0 |
0 |
T1 |
2031 |
5 |
0 |
0 |
T2 |
1942 |
7 |
0 |
0 |
T3 |
931 |
5 |
0 |
0 |
T4 |
27604 |
62 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
90 |
0 |
0 |
T9 |
9747 |
45 |
0 |
0 |
T10 |
7736 |
44 |
0 |
0 |
T11 |
1756 |
7 |
0 |
0 |
T12 |
1475 |
2 |
0 |
0 |
T13 |
0 |
10 |
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 |
T4 |
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 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
4014200 |
0 |
0 |
T1 |
2031 |
9 |
0 |
0 |
T2 |
1942 |
9 |
0 |
0 |
T3 |
931 |
10 |
0 |
0 |
T4 |
27604 |
153 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
393 |
0 |
0 |
T9 |
9747 |
106 |
0 |
0 |
T10 |
7736 |
94 |
0 |
0 |
T11 |
1756 |
12 |
0 |
0 |
T12 |
1475 |
5 |
0 |
0 |
T13 |
0 |
14 |
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 | T4,T8,T14 |
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 | T4,T8,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 |
395462187 |
324554 |
0 |
0 |
T1 |
2031 |
7 |
0 |
0 |
T2 |
1942 |
4 |
0 |
0 |
T3 |
931 |
16 |
0 |
0 |
T4 |
27604 |
50 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
70 |
0 |
0 |
T9 |
9747 |
59 |
0 |
0 |
T10 |
7736 |
88 |
0 |
0 |
T11 |
1756 |
7 |
0 |
0 |
T12 |
1475 |
9 |
0 |
0 |
T13 |
0 |
6 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
420932 |
0 |
0 |
T1 |
2031 |
2 |
0 |
0 |
T2 |
1942 |
10 |
0 |
0 |
T3 |
931 |
8 |
0 |
0 |
T4 |
27604 |
35 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
123 |
0 |
0 |
T9 |
9747 |
50 |
0 |
0 |
T10 |
7736 |
76 |
0 |
0 |
T11 |
1756 |
1 |
0 |
0 |
T12 |
1475 |
5 |
0 |
0 |
T13 |
0 |
6 |
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 |
T4 |
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 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
3511813 |
0 |
0 |
T1 |
2031 |
9 |
0 |
0 |
T2 |
1942 |
14 |
0 |
0 |
T3 |
931 |
21 |
0 |
0 |
T4 |
27604 |
135 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
462 |
0 |
0 |
T9 |
9747 |
107 |
0 |
0 |
T10 |
7736 |
151 |
0 |
0 |
T11 |
1756 |
7 |
0 |
0 |
T12 |
1475 |
14 |
0 |
0 |
T13 |
0 |
12 |
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 | T4,T8,T14 |
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 | T4,T8,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 |
395462187 |
279649 |
0 |
0 |
T1 |
2031 |
3 |
0 |
0 |
T2 |
1942 |
6 |
0 |
0 |
T3 |
931 |
10 |
0 |
0 |
T4 |
27604 |
57 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
72 |
0 |
0 |
T9 |
9747 |
52 |
0 |
0 |
T10 |
7736 |
52 |
0 |
0 |
T11 |
1756 |
3 |
0 |
0 |
T12 |
1475 |
3 |
0 |
0 |
T13 |
0 |
8 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
358740 |
0 |
0 |
T1 |
2031 |
2 |
0 |
0 |
T2 |
1942 |
6 |
0 |
0 |
T3 |
931 |
12 |
0 |
0 |
T4 |
27604 |
36 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
50 |
0 |
0 |
T9 |
9747 |
63 |
0 |
0 |
T10 |
7736 |
43 |
0 |
0 |
T11 |
1756 |
7 |
0 |
0 |
T12 |
1475 |
3 |
0 |
0 |
T13 |
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 |
T4 |
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 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
3356014 |
0 |
0 |
T1 |
2031 |
5 |
0 |
0 |
T2 |
1942 |
11 |
0 |
0 |
T3 |
931 |
22 |
0 |
0 |
T4 |
27604 |
176 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
494 |
0 |
0 |
T9 |
9747 |
115 |
0 |
0 |
T10 |
7736 |
93 |
0 |
0 |
T11 |
1756 |
10 |
0 |
0 |
T12 |
1475 |
6 |
0 |
0 |
T13 |
0 |
10 |
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: T2 T3 T4 | 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 | T2,T3,T4 |
LINE 236
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 236
EXPRESSION (drsp_fifo_o.d_valid & (drsp_fifo_o.d_source[0+:STIDW] == 1))
---------1--------- ------------------2------------------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T2,T3,T4 |
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 | T4,T8,T14 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T1,T2,T3 |
1 | 1 | 1 | Covered | T2,T3,T4 |
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 | T4,T8,T14 |
1 | 0 | 1 | Covered | T2,T3,T4 |
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 |
395462187 |
292549 |
0 |
0 |
T2 |
1942 |
7 |
0 |
0 |
T3 |
931 |
8 |
0 |
0 |
T4 |
27604 |
70 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
112 |
0 |
0 |
T9 |
9747 |
58 |
0 |
0 |
T10 |
7736 |
49 |
0 |
0 |
T11 |
1756 |
6 |
0 |
0 |
T12 |
1475 |
4 |
0 |
0 |
T13 |
204427 |
6 |
0 |
0 |
T14 |
0 |
72 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
375490 |
0 |
0 |
T1 |
2031 |
4 |
0 |
0 |
T2 |
1942 |
3 |
0 |
0 |
T3 |
931 |
8 |
0 |
0 |
T4 |
27604 |
76 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
83 |
0 |
0 |
T9 |
9747 |
49 |
0 |
0 |
T10 |
7736 |
61 |
0 |
0 |
T11 |
1756 |
7 |
0 |
0 |
T12 |
1475 |
3 |
0 |
0 |
T13 |
0 |
3 |
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 |
T4 |
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 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
4235658 |
0 |
0 |
T1 |
2031 |
4 |
0 |
0 |
T2 |
1942 |
10 |
0 |
0 |
T3 |
931 |
16 |
0 |
0 |
T4 |
27604 |
127 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
590 |
0 |
0 |
T9 |
9747 |
106 |
0 |
0 |
T10 |
7736 |
107 |
0 |
0 |
T11 |
1756 |
13 |
0 |
0 |
T12 |
1475 |
7 |
0 |
0 |
T13 |
0 |
9 |
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 | T4,T8,T14 |
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 | T4,T8,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_54
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
290857 |
0 |
0 |
T1 |
2031 |
7 |
0 |
0 |
T2 |
1942 |
8 |
0 |
0 |
T3 |
931 |
6 |
0 |
0 |
T4 |
27604 |
42 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
63 |
0 |
0 |
T9 |
9747 |
60 |
0 |
0 |
T10 |
7736 |
49 |
0 |
0 |
T11 |
1756 |
6 |
0 |
0 |
T12 |
1475 |
6 |
0 |
0 |
T13 |
0 |
13 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
376843 |
0 |
0 |
T1 |
2031 |
3 |
0 |
0 |
T2 |
1942 |
8 |
0 |
0 |
T3 |
931 |
10 |
0 |
0 |
T4 |
27604 |
34 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
41 |
0 |
0 |
T9 |
9747 |
54 |
0 |
0 |
T10 |
7736 |
39 |
0 |
0 |
T11 |
1756 |
1 |
0 |
0 |
T12 |
1475 |
3 |
0 |
0 |
T13 |
0 |
4 |
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 |
T4 |
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 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
3809013 |
0 |
0 |
T1 |
2031 |
10 |
0 |
0 |
T2 |
1942 |
16 |
0 |
0 |
T3 |
931 |
15 |
0 |
0 |
T4 |
27604 |
115 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
571 |
0 |
0 |
T9 |
9747 |
108 |
0 |
0 |
T10 |
7736 |
85 |
0 |
0 |
T11 |
1756 |
6 |
0 |
0 |
T12 |
1475 |
8 |
0 |
0 |
T13 |
0 |
14 |
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 | T4,T8,T14 |
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 | T4,T8,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_55
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
304074 |
0 |
0 |
T1 |
2031 |
3 |
0 |
0 |
T2 |
1942 |
4 |
0 |
0 |
T3 |
931 |
5 |
0 |
0 |
T4 |
27604 |
35 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
42 |
0 |
0 |
T9 |
9747 |
62 |
0 |
0 |
T10 |
7736 |
54 |
0 |
0 |
T11 |
1756 |
6 |
0 |
0 |
T12 |
1475 |
7 |
0 |
0 |
T13 |
0 |
2 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
411778 |
0 |
0 |
T1 |
2031 |
7 |
0 |
0 |
T2 |
1942 |
4 |
0 |
0 |
T3 |
931 |
8 |
0 |
0 |
T4 |
27604 |
45 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
49 |
0 |
0 |
T9 |
9747 |
60 |
0 |
0 |
T10 |
7736 |
50 |
0 |
0 |
T11 |
1756 |
4 |
0 |
0 |
T12 |
1475 |
3 |
0 |
0 |
T13 |
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 |
T4 |
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 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
3549720 |
0 |
0 |
T1 |
2031 |
10 |
0 |
0 |
T2 |
1942 |
8 |
0 |
0 |
T3 |
931 |
13 |
0 |
0 |
T4 |
27604 |
120 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
438 |
0 |
0 |
T9 |
9747 |
122 |
0 |
0 |
T10 |
7736 |
101 |
0 |
0 |
T11 |
1756 |
10 |
0 |
0 |
T12 |
1475 |
10 |
0 |
0 |
T13 |
0 |
4 |
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 | T4,T8,T14 |
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 | T4,T8,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_56
Assertion Details
gen_host_fifo[0].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
302193 |
0 |
0 |
T1 |
2031 |
11 |
0 |
0 |
T2 |
1942 |
6 |
0 |
0 |
T3 |
931 |
6 |
0 |
0 |
T4 |
27604 |
49 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
66 |
0 |
0 |
T9 |
9747 |
55 |
0 |
0 |
T10 |
7736 |
34 |
0 |
0 |
T11 |
1756 |
7 |
0 |
0 |
T12 |
1475 |
8 |
0 |
0 |
T13 |
0 |
6 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
403693 |
0 |
0 |
T1 |
2031 |
6 |
0 |
0 |
T2 |
1942 |
2 |
0 |
0 |
T3 |
931 |
12 |
0 |
0 |
T4 |
27604 |
79 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
103 |
0 |
0 |
T9 |
9747 |
52 |
0 |
0 |
T10 |
7736 |
52 |
0 |
0 |
T11 |
1756 |
4 |
0 |
0 |
T12 |
1475 |
8 |
0 |
0 |
T13 |
0 |
13 |
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 |
T4 |
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 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
3874767 |
0 |
0 |
T1 |
2031 |
16 |
0 |
0 |
T2 |
1942 |
8 |
0 |
0 |
T3 |
931 |
17 |
0 |
0 |
T4 |
27604 |
148 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
506 |
0 |
0 |
T9 |
9747 |
105 |
0 |
0 |
T10 |
7736 |
83 |
0 |
0 |
T11 |
1756 |
11 |
0 |
0 |
T12 |
1475 |
15 |
0 |
0 |
T13 |
0 |
11 |
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,T3,T4 |
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,T3,T4 |
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,T3,T4 |
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 | T3,T7,T4 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T2,T3,T4 |
1 | 1 | 1 | Covered | T1,T2,T3 |
LINE 238
SUB-EXPRESSION (drsp_fifo_o.d_source[0+:STIDW] == 0)
------------------1------------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 238
EXPRESSION (hreq_fifo_o[1].d_ready & (drsp_fifo_o.d_source[0+:STIDW] == 1) & drsp_fifo_o.d_valid)
-----------1---------- ------------------2------------------ ---------3---------
-1- | -2- | -3- | Status | Tests |
0 | 1 | 1 | Covered | T1,T4,T9 |
1 | 0 | 1 | Covered | T1,T2,T3 |
1 | 1 | 0 | Covered | T2,T3,T4 |
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,T3,T4 |
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 |
395462187 |
9965954 |
0 |
0 |
T1 |
2031 |
22 |
0 |
0 |
T2 |
1942 |
38 |
0 |
0 |
T3 |
931 |
42 |
0 |
0 |
T4 |
27604 |
2222 |
0 |
0 |
T7 |
15646 |
341 |
0 |
0 |
T8 |
41836 |
2610 |
0 |
0 |
T9 |
9747 |
303 |
0 |
0 |
T10 |
7736 |
266 |
0 |
0 |
T11 |
1756 |
42 |
0 |
0 |
T12 |
1475 |
29 |
0 |
0 |
gen_host_fifo[1].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
1844979 |
0 |
0 |
T1 |
2031 |
5 |
0 |
0 |
T2 |
1942 |
6 |
0 |
0 |
T3 |
931 |
10 |
0 |
0 |
T4 |
27604 |
268 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
270 |
0 |
0 |
T9 |
9747 |
59 |
0 |
0 |
T10 |
7736 |
49 |
0 |
0 |
T11 |
1756 |
3 |
0 |
0 |
T12 |
1475 |
3 |
0 |
0 |
T13 |
0 |
35 |
0 |
0 |
gen_host_fifo[2].idInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
1933812 |
0 |
0 |
T1 |
2031 |
4 |
0 |
0 |
T2 |
1942 |
7 |
0 |
0 |
T3 |
931 |
4 |
0 |
0 |
T4 |
27604 |
289 |
0 |
0 |
T7 |
15646 |
0 |
0 |
0 |
T8 |
41836 |
554 |
0 |
0 |
T9 |
9747 |
50 |
0 |
0 |
T10 |
7736 |
42 |
0 |
0 |
T11 |
1756 |
4 |
0 |
0 |
T12 |
1475 |
3 |
0 |
0 |
T13 |
0 |
15 |
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 |
T4 |
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 |
rspIdInRange
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
395462187 |
18908440 |
0 |
0 |
T1 |
2031 |
31 |
0 |
0 |
T2 |
1942 |
51 |
0 |
0 |
T3 |
931 |
55 |
0 |
0 |
T4 |
27604 |
2080 |
0 |
0 |
T7 |
15646 |
147 |
0 |
0 |
T8 |
41836 |
1620 |
0 |
0 |
T9 |
9747 |
409 |
0 |
0 |
T10 |
7736 |
356 |
0 |
0 |
T11 |
1756 |
49 |
0 |
0 |
T12 |
1475 |
35 |
0 |
0 |