Line Coverage for Module :
i2c_fifo_sync_sram_adapter ( parameter Width=13,Depth=64,SramAw=9,SramBaseAddr,DepthW=7,OupBufDepth=2,InpBufDepthW=2,OupBufDepthW=2,SramPtrW=6,SramDepthW=6,SramAddrLeadingZeros=3 )
Line Coverage for Module self-instances :
| Line No. | Total | Covered | Percent |
TOTAL | | 44 | 44 | 100.00 |
CONT_ASSIGN | 120 | 1 | 1 | 100.00 |
CONT_ASSIGN | 121 | 1 | 1 | 100.00 |
CONT_ASSIGN | 125 | 1 | 1 | 100.00 |
CONT_ASSIGN | 150 | 1 | 1 | 100.00 |
CONT_ASSIGN | 151 | 1 | 1 | 100.00 |
CONT_ASSIGN | 153 | 1 | 1 | 100.00 |
CONT_ASSIGN | 154 | 1 | 1 | 100.00 |
CONT_ASSIGN | 162 | 1 | 1 | 100.00 |
ALWAYS | 164 | 3 | 3 | 100.00 |
ALWAYS | 174 | 28 | 28 | 100.00 |
CONT_ASSIGN | 228 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 240 | 1 | 1 | 100.00 |
CONT_ASSIGN | 244 | 1 | 1 | 100.00 |
CONT_ASSIGN | 249 | 1 | 1 | 100.00 |
119 );
120 1/1 assign inp_buf_wvalid = fifo_wvalid_i && fifo_wready_o;
Tests: T1 T2 T3
121 1/1 assign oup_buf_almost_full = oup_buf_depth >= OupBufDepthW'(OupBufDepth - 1);
Tests: T1 T2 T3
122
123 // Signal whether we access the SRAM in this cycle
124 logic sram_access;
125 1/1 assign sram_access = sram_req_o && sram_gnt_i;
Tests: T1 T2 T3
126
127 // SRAM read and write addresses
128 logic [SramAw-1:0] sram_wr_addr, sram_rd_addr;
129 logic [SramPtrW-1:0] sram_wr_ptr, sram_rd_ptr;
130 logic [SramDepthW-1:0] sram_depth;
131 logic sram_incr_wr_ptr, sram_incr_rd_ptr;
132 logic sram_full, sram_empty;
133 logic sram_ptrs_err;
134 prim_fifo_sync_cnt #(
135 .Depth (SramFifoDepth),
136 .Secure(1'b0)
137 ) u_sram_ptrs (
138 .clk_i,
139 .rst_ni,
140 .clr_i,
141 .incr_wptr_i(sram_incr_wr_ptr),
142 .incr_rptr_i(sram_incr_rd_ptr),
143 .wptr_o (sram_wr_ptr),
144 .rptr_o (sram_rd_ptr),
145 .full_o (sram_full),
146 .empty_o (sram_empty),
147 .depth_o (sram_depth),
148 .err_o (sram_ptrs_err)
149 );
150 1/1 assign sram_incr_wr_ptr = sram_access && sram_write_o;
Tests: T1 T2 T3
151 1/1 assign sram_incr_rd_ptr = sram_access && !sram_write_o;
Tests: T1 T2 T3
152 if (SramAddrLeadingZeros > 0) begin : gen_zero_extend_sram_addrs
153 1/1 assign sram_wr_addr = {{SramAddrLeadingZeros{1'b0}}, sram_wr_ptr} + SramBaseAddr;
Tests: T1 T2 T3
154 1/1 assign sram_rd_addr = {{SramAddrLeadingZeros{1'b0}}, sram_rd_ptr} + SramBaseAddr;
Tests: T1 T2 T3
155 end else begin : gen_no_zero_extend_sram_addrs
156 assign sram_wr_addr = sram_wr_ptr + SramBaseAddr;
157 assign sram_rd_addr = sram_rd_ptr + SramBaseAddr;
158 end
159
160 // FF to remember whether we read from the SRAM in the previous clock cycle.
161 logic sram_read_in_prev_cyc_d, sram_read_in_prev_cyc_q;
162 1/1 assign sram_read_in_prev_cyc_d = clr_i ? 1'b0 : sram_incr_rd_ptr;
Tests: T1 T2 T3
163 always_ff @(posedge clk_i or negedge rst_ni) begin
164 1/1 if (!rst_ni) begin
Tests: T1 T2 T3
165 1/1 sram_read_in_prev_cyc_q <= 1'b0;
Tests: T1 T2 T3
166 end else begin
167 1/1 sram_read_in_prev_cyc_q <= sram_read_in_prev_cyc_d;
Tests: T1 T2 T3
168 end
169 end
170
171 // Control logic for FIFO interface wready, output buffer writes, and SRAM requests
172 logic state_err;
173 always_comb begin
174 1/1 inp_buf_rready = 1'b0;
Tests: T1 T2 T3
175 1/1 oup_buf_wvalid = 1'b0;
Tests: T1 T2 T3
176 1/1 oup_buf_wdata = inp_buf_rdata;
Tests: T1 T2 T3
177 1/1 sram_req_o = 1'b0;
Tests: T1 T2 T3
178 1/1 sram_write_o = 1'b0;
Tests: T1 T2 T3
179 1/1 sram_addr_o = sram_wr_addr;
Tests: T1 T2 T3
180 1/1 state_err = 1'b0;
Tests: T1 T2 T3
181
182 // If the SRAM was read in the previous cycle, write the read data to the output buffer.
183 1/1 if (sram_read_in_prev_cyc_q) begin
Tests: T1 T2 T3
184 1/1 oup_buf_wvalid = 1'b1;
Tests: T2 T8 T10
185 1/1 oup_buf_wdata = sram_rdata_i;
Tests: T2 T8 T10
186 // The output buffer must be ready; otherwise we are in an erroneous state.
187 1/1 state_err = !oup_buf_wready;
Tests: T2 T8 T10
188 end
MISSING_ELSE
189
190 // If the SRAM is not empty, data from the input buffer must flow via the SRAM.
191 1/1 if (!sram_empty) begin
Tests: T1 T2 T3
192
193 // Prioritize refilling of the output buffer: if the output buffer is not being filled to the
194 // last slot in the current cycle or it is being read in the current cycle, read from the SRAM
195 // so the output buffer can be written in the next cycle.
196 1/1 if (!((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full)
Tests: T1 T2 T6
197 || (fifo_rvalid_o && fifo_rready_i)) begin
198 1/1 sram_req_o = 1'b1;
Tests: T2 T8 T10
199 1/1 sram_write_o = 1'b0;
Tests: T2 T8 T10
200 1/1 sram_addr_o = sram_rd_addr;
Tests: T2 T8 T10
201
202 // If the output buffer is full (and not being read), drain the input buffer into the SRAM.
203 end else begin
204 1/1 sram_req_o = !sram_full && inp_buf_rvalid;
Tests: T1 T2 T6
205 1/1 sram_write_o = 1'b1;
Tests: T1 T2 T6
206 1/1 sram_addr_o = sram_wr_addr;
Tests: T1 T2 T6
207 1/1 inp_buf_rready = !sram_full && sram_gnt_i;
Tests: T1 T2 T6
208 end
209
210 // If the SRAM is empty, data must flow from the input buffer to the output buffer if the output
211 // buffer is ready and is not receiving data read from the SRAM in the previous cycle
212 1/1 end else if (oup_buf_wready && !sram_read_in_prev_cyc_q) begin
Tests: T1 T2 T3
213 1/1 oup_buf_wvalid = inp_buf_rvalid;
Tests: T1 T2 T3
214 1/1 oup_buf_wdata = inp_buf_rdata;
Tests: T1 T2 T3
215 1/1 inp_buf_rready = oup_buf_wready;
Tests: T1 T2 T3
216
217 // Otherwise the SRAM is empty but the output buffer cannot take the data from the input buffer,
218 // so drain the input buffer into the SRAM.
219 end else begin
220 1/1 sram_req_o = !sram_full && inp_buf_rvalid;
Tests: T1 T2 T3
221 1/1 sram_write_o = 1'b1;
Tests: T1 T2 T3
222 1/1 sram_addr_o = sram_wr_addr;
Tests: T1 T2 T3
223 1/1 inp_buf_rready = !sram_full && sram_gnt_i;
Tests: T1 T2 T3
224 end
225 end
226
227 // Error output is high if any of the internal errors is high
228 1/1 assign err_o = |{inp_buf_err, oup_buf_err, sram_ptrs_err, state_err};
Tests: T1 T2 T3
229
230 // The SRAM and the output buffer together form the entire architectural capacity of the FIFO.
231 // Thus, when both are full, the FIFO is no longer ready to receive writes even though the input
232 // buffer could store one additional entry. This ensures that in the cycle after an entry has
233 // been read from the full FIFO, the next entry can be written to the FIFO.
234 // (It may be possible that all input buffer slots except one can be counted to the architectural
235 // capacity of the FIFO, but this is a relatively small optimization left for future work.)
236 1/1 assign fifo_wready_o = inp_buf_wready && !(sram_full && oup_buf_full);
Tests: T1 T2 T3
237
238 // The current depth of the FIFO represented by this module is the depth of all buffers plus the
239 // FIFO in the SRAM plus one if there's an entry in transition between SRAM and output buffer.
240 1/1 assign fifo_depth_o = DepthW'(inp_buf_depth) + DepthW'(sram_depth) + DepthW'(oup_buf_depth) +
Tests: T1 T2 T3
241 DepthW'(sram_read_in_prev_cyc_q);
242
243 // SRAM write data always comes from the input buffer.
244 1/1 assign sram_wdata_o = inp_buf_rdata;
Tests: T1 T2 T3
245 assign sram_wmask_o = '1;
246
247 // `sram_rvalid_i` is only used for assertions.
248 logic unused_sram_rvalid;
249 1/1 assign unused_sram_rvalid = sram_rvalid_i;
Tests: T1 T2 T3
Line Coverage for Module :
i2c_fifo_sync_sram_adapter ( parameter Width=13,Depth=268,SramAw=9,SramBaseAddr=192,DepthW=9,OupBufDepth=2,InpBufDepthW=2,OupBufDepthW=2,SramPtrW=9,SramDepthW=9,SramAddrLeadingZeros=0 )
Line Coverage for Module self-instances :
| Line No. | Total | Covered | Percent |
TOTAL | | 44 | 44 | 100.00 |
CONT_ASSIGN | 120 | 1 | 1 | 100.00 |
CONT_ASSIGN | 121 | 1 | 1 | 100.00 |
CONT_ASSIGN | 125 | 1 | 1 | 100.00 |
CONT_ASSIGN | 150 | 1 | 1 | 100.00 |
CONT_ASSIGN | 151 | 1 | 1 | 100.00 |
CONT_ASSIGN | 156 | 1 | 1 | 100.00 |
CONT_ASSIGN | 157 | 1 | 1 | 100.00 |
CONT_ASSIGN | 162 | 1 | 1 | 100.00 |
ALWAYS | 164 | 3 | 3 | 100.00 |
ALWAYS | 174 | 28 | 28 | 100.00 |
CONT_ASSIGN | 228 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 240 | 1 | 1 | 100.00 |
CONT_ASSIGN | 244 | 1 | 1 | 100.00 |
CONT_ASSIGN | 249 | 1 | 1 | 100.00 |
119 );
120 1/1 assign inp_buf_wvalid = fifo_wvalid_i && fifo_wready_o;
Tests: T1 T2 T3
121 1/1 assign oup_buf_almost_full = oup_buf_depth >= OupBufDepthW'(OupBufDepth - 1);
Tests: T1 T2 T3
122
123 // Signal whether we access the SRAM in this cycle
124 logic sram_access;
125 1/1 assign sram_access = sram_req_o && sram_gnt_i;
Tests: T1 T2 T3
126
127 // SRAM read and write addresses
128 logic [SramAw-1:0] sram_wr_addr, sram_rd_addr;
129 logic [SramPtrW-1:0] sram_wr_ptr, sram_rd_ptr;
130 logic [SramDepthW-1:0] sram_depth;
131 logic sram_incr_wr_ptr, sram_incr_rd_ptr;
132 logic sram_full, sram_empty;
133 logic sram_ptrs_err;
134 prim_fifo_sync_cnt #(
135 .Depth (SramFifoDepth),
136 .Secure(1'b0)
137 ) u_sram_ptrs (
138 .clk_i,
139 .rst_ni,
140 .clr_i,
141 .incr_wptr_i(sram_incr_wr_ptr),
142 .incr_rptr_i(sram_incr_rd_ptr),
143 .wptr_o (sram_wr_ptr),
144 .rptr_o (sram_rd_ptr),
145 .full_o (sram_full),
146 .empty_o (sram_empty),
147 .depth_o (sram_depth),
148 .err_o (sram_ptrs_err)
149 );
150 1/1 assign sram_incr_wr_ptr = sram_access && sram_write_o;
Tests: T1 T2 T3
151 1/1 assign sram_incr_rd_ptr = sram_access && !sram_write_o;
Tests: T1 T2 T3
152 if (SramAddrLeadingZeros > 0) begin : gen_zero_extend_sram_addrs
153 assign sram_wr_addr = {{SramAddrLeadingZeros{1'b0}}, sram_wr_ptr} + SramBaseAddr;
154 assign sram_rd_addr = {{SramAddrLeadingZeros{1'b0}}, sram_rd_ptr} + SramBaseAddr;
155 end else begin : gen_no_zero_extend_sram_addrs
156 1/1 assign sram_wr_addr = sram_wr_ptr + SramBaseAddr;
Tests: T1 T2 T3
157 1/1 assign sram_rd_addr = sram_rd_ptr + SramBaseAddr;
Tests: T1 T2 T3
158 end
159
160 // FF to remember whether we read from the SRAM in the previous clock cycle.
161 logic sram_read_in_prev_cyc_d, sram_read_in_prev_cyc_q;
162 1/1 assign sram_read_in_prev_cyc_d = clr_i ? 1'b0 : sram_incr_rd_ptr;
Tests: T1 T2 T3
163 always_ff @(posedge clk_i or negedge rst_ni) begin
164 1/1 if (!rst_ni) begin
Tests: T1 T2 T3
165 1/1 sram_read_in_prev_cyc_q <= 1'b0;
Tests: T1 T2 T3
166 end else begin
167 1/1 sram_read_in_prev_cyc_q <= sram_read_in_prev_cyc_d;
Tests: T1 T2 T3
168 end
169 end
170
171 // Control logic for FIFO interface wready, output buffer writes, and SRAM requests
172 logic state_err;
173 always_comb begin
174 1/1 inp_buf_rready = 1'b0;
Tests: T1 T2 T3
175 1/1 oup_buf_wvalid = 1'b0;
Tests: T1 T2 T3
176 1/1 oup_buf_wdata = inp_buf_rdata;
Tests: T1 T2 T3
177 1/1 sram_req_o = 1'b0;
Tests: T1 T2 T3
178 1/1 sram_write_o = 1'b0;
Tests: T1 T2 T3
179 1/1 sram_addr_o = sram_wr_addr;
Tests: T1 T2 T3
180 1/1 state_err = 1'b0;
Tests: T1 T2 T3
181
182 // If the SRAM was read in the previous cycle, write the read data to the output buffer.
183 1/1 if (sram_read_in_prev_cyc_q) begin
Tests: T1 T2 T3
184 1/1 oup_buf_wvalid = 1'b1;
Tests: T2 T5 T7
185 1/1 oup_buf_wdata = sram_rdata_i;
Tests: T2 T5 T7
186 // The output buffer must be ready; otherwise we are in an erroneous state.
187 1/1 state_err = !oup_buf_wready;
Tests: T2 T5 T7
188 end
MISSING_ELSE
189
190 // If the SRAM is not empty, data from the input buffer must flow via the SRAM.
191 1/1 if (!sram_empty) begin
Tests: T1 T2 T3
192
193 // Prioritize refilling of the output buffer: if the output buffer is not being filled to the
194 // last slot in the current cycle or it is being read in the current cycle, read from the SRAM
195 // so the output buffer can be written in the next cycle.
196 1/1 if (!((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full)
Tests: T2 T5 T7
197 || (fifo_rvalid_o && fifo_rready_i)) begin
198 1/1 sram_req_o = 1'b1;
Tests: T2 T5 T7
199 1/1 sram_write_o = 1'b0;
Tests: T2 T5 T7
200 1/1 sram_addr_o = sram_rd_addr;
Tests: T2 T5 T7
201
202 // If the output buffer is full (and not being read), drain the input buffer into the SRAM.
203 end else begin
204 1/1 sram_req_o = !sram_full && inp_buf_rvalid;
Tests: T2 T5 T7
205 1/1 sram_write_o = 1'b1;
Tests: T2 T5 T7
206 1/1 sram_addr_o = sram_wr_addr;
Tests: T2 T5 T7
207 1/1 inp_buf_rready = !sram_full && sram_gnt_i;
Tests: T2 T5 T7
208 end
209
210 // If the SRAM is empty, data must flow from the input buffer to the output buffer if the output
211 // buffer is ready and is not receiving data read from the SRAM in the previous cycle
212 1/1 end else if (oup_buf_wready && !sram_read_in_prev_cyc_q) begin
Tests: T1 T2 T3
213 1/1 oup_buf_wvalid = inp_buf_rvalid;
Tests: T1 T2 T3
214 1/1 oup_buf_wdata = inp_buf_rdata;
Tests: T1 T2 T3
215 1/1 inp_buf_rready = oup_buf_wready;
Tests: T1 T2 T3
216
217 // Otherwise the SRAM is empty but the output buffer cannot take the data from the input buffer,
218 // so drain the input buffer into the SRAM.
219 end else begin
220 1/1 sram_req_o = !sram_full && inp_buf_rvalid;
Tests: T1 T2 T3
221 1/1 sram_write_o = 1'b1;
Tests: T1 T2 T3
222 1/1 sram_addr_o = sram_wr_addr;
Tests: T1 T2 T3
223 1/1 inp_buf_rready = !sram_full && sram_gnt_i;
Tests: T1 T2 T3
224 end
225 end
226
227 // Error output is high if any of the internal errors is high
228 1/1 assign err_o = |{inp_buf_err, oup_buf_err, sram_ptrs_err, state_err};
Tests: T1 T2 T3
229
230 // The SRAM and the output buffer together form the entire architectural capacity of the FIFO.
231 // Thus, when both are full, the FIFO is no longer ready to receive writes even though the input
232 // buffer could store one additional entry. This ensures that in the cycle after an entry has
233 // been read from the full FIFO, the next entry can be written to the FIFO.
234 // (It may be possible that all input buffer slots except one can be counted to the architectural
235 // capacity of the FIFO, but this is a relatively small optimization left for future work.)
236 1/1 assign fifo_wready_o = inp_buf_wready && !(sram_full && oup_buf_full);
Tests: T1 T2 T3
237
238 // The current depth of the FIFO represented by this module is the depth of all buffers plus the
239 // FIFO in the SRAM plus one if there's an entry in transition between SRAM and output buffer.
240 1/1 assign fifo_depth_o = DepthW'(inp_buf_depth) + DepthW'(sram_depth) + DepthW'(oup_buf_depth) +
Tests: T1 T2 T3
241 DepthW'(sram_read_in_prev_cyc_q);
242
243 // SRAM write data always comes from the input buffer.
244 1/1 assign sram_wdata_o = inp_buf_rdata;
Tests: T1 T2 T3
245 assign sram_wmask_o = '1;
246
247 // `sram_rvalid_i` is only used for assertions.
248 logic unused_sram_rvalid;
249 1/1 assign unused_sram_rvalid = sram_rvalid_i;
Tests: T1 T2 T3
Cond Coverage for Module :
i2c_fifo_sync_sram_adapter
| Total | Covered | Percent |
Conditions | 51 | 42 | 82.35 |
Logical | 51 | 42 | 82.35 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 120
EXPRESSION (fifo_wvalid_i && fifo_wready_o)
------1------ ------2------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T49,T50,T83 |
1 | 1 | Covered | T1,T2,T3 |
LINE 125
EXPRESSION (sram_req_o && sram_gnt_i)
-----1---- -----2----
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Not Covered | |
1 | 1 | Covered | T1,T2,T6 |
LINE 150
EXPRESSION (sram_access && sram_write_o)
-----1----- ------2-----
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T2,T8,T10 |
1 | 1 | Covered | T1,T2,T6 |
LINE 151
EXPRESSION (sram_access && ((!sram_write_o)))
-----1----- --------2--------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T2,T6 |
1 | 1 | Covered | T2,T8,T10 |
LINE 162
EXPRESSION (clr_i ? 1'b0 : sram_incr_rd_ptr)
--1--
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 196
EXPRESSION (( ! ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full) ) || (fifo_rvalid_o && fifo_rready_i))
-------------------------------1------------------------------- ----------------2---------------
-1- | -2- | Status | Tests |
0 | 0 | Covered | T1,T2,T6 |
0 | 1 | Covered | T2,T8,T10 |
1 | 0 | Covered | T50,T161,T162 |
LINE 196
SUB-EXPRESSION ( ! ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full) )
----------------------------1----------------------------
-1- | Status | Tests |
0 | Covered | T50,T161,T162 |
1 | Covered | T1,T2,T6 |
LINE 196
SUB-EXPRESSION ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full)
-------------------1------------------- ------2-----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T50,T161,T162 |
0 | 1 | Covered | T1,T2,T6 |
1 | 0 | Covered | T2,T8,T10 |
LINE 196
SUB-EXPRESSION (oup_buf_almost_full && oup_buf_wvalid)
---------1--------- -------2------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T6 |
1 | 1 | Covered | T2,T8,T10 |
LINE 196
SUB-EXPRESSION (fifo_rvalid_o && fifo_rready_i)
------1------ ------2------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T6 |
1 | 1 | Covered | T2,T8,T10 |
LINE 204
EXPRESSION (((!sram_full)) && inp_buf_rvalid)
-------1------ -------2------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T6 |
1 | 1 | Covered | T1,T2,T6 |
LINE 207
EXPRESSION (((!sram_full)) && sram_gnt_i)
-------1------ -----2----
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T6 |
1 | 1 | Covered | T1,T2,T6 |
LINE 212
EXPRESSION (oup_buf_wready && ((!sram_read_in_prev_cyc_q)))
-------1------ --------------2-------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T2,T8,T10 |
1 | 1 | Covered | T1,T2,T3 |
LINE 220
EXPRESSION (((!sram_full)) && inp_buf_rvalid)
-------1------ -------2------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T6 |
LINE 223
EXPRESSION (((!sram_full)) && sram_gnt_i)
-------1------ -----2----
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T2,T6 |
LINE 236
EXPRESSION (inp_buf_wready && ( ! (sram_full && oup_buf_full) ))
-------1------ ----------------2----------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T7,T8,T81 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION ( ! (sram_full && oup_buf_full) )
-------------1-------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T7,T8,T81 |
LINE 236
SUB-EXPRESSION (sram_full && oup_buf_full)
----1---- ------2-----
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T6 |
1 | 0 | Not Covered | |
1 | 1 | Covered | T7,T8,T81 |
Branch Coverage for Module :
i2c_fifo_sync_sram_adapter
| Line No. | Total | Covered | Percent |
Branches |
|
10 |
10 |
100.00 |
TERNARY |
162 |
2 |
2 |
100.00 |
IF |
164 |
2 |
2 |
100.00 |
IF |
183 |
2 |
2 |
100.00 |
IF |
191 |
4 |
4 |
100.00 |
162 assign sram_read_in_prev_cyc_d = clr_i ? 1'b0 : sram_incr_rd_ptr;
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T1,T2,T3 |
164 if (!rst_ni) begin
-1-
165 sram_read_in_prev_cyc_q <= 1'b0;
==>
166 end else begin
167 sram_read_in_prev_cyc_q <= sram_read_in_prev_cyc_d;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T1,T2,T3 |
183 if (sram_read_in_prev_cyc_q) begin
-1-
184 oup_buf_wvalid = 1'b1;
==>
185 oup_buf_wdata = sram_rdata_i;
186 // The output buffer must be ready; otherwise we are in an erroneous state.
187 state_err = !oup_buf_wready;
188 end
MISSING_ELSE
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T2,T8,T10 |
0 |
Covered |
T1,T2,T3 |
191 if (!sram_empty) begin
-1-
192
193 // Prioritize refilling of the output buffer: if the output buffer is not being filled to the
194 // last slot in the current cycle or it is being read in the current cycle, read from the SRAM
195 // so the output buffer can be written in the next cycle.
196 if (!((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full)
-2-
197 || (fifo_rvalid_o && fifo_rready_i)) begin
198 sram_req_o = 1'b1;
==>
199 sram_write_o = 1'b0;
200 sram_addr_o = sram_rd_addr;
201
202 // If the output buffer is full (and not being read), drain the input buffer into the SRAM.
203 end else begin
204 sram_req_o = !sram_full && inp_buf_rvalid;
==>
205 sram_write_o = 1'b1;
206 sram_addr_o = sram_wr_addr;
207 inp_buf_rready = !sram_full && sram_gnt_i;
208 end
209
210 // If the SRAM is empty, data must flow from the input buffer to the output buffer if the output
211 // buffer is ready and is not receiving data read from the SRAM in the previous cycle
212 end else if (oup_buf_wready && !sram_read_in_prev_cyc_q) begin
-3-
213 oup_buf_wvalid = inp_buf_rvalid;
==>
214 oup_buf_wdata = inp_buf_rdata;
215 inp_buf_rready = oup_buf_wready;
216
217 // Otherwise the SRAM is empty but the output buffer cannot take the data from the input buffer,
218 // so drain the input buffer into the SRAM.
219 end else begin
220 sram_req_o = !sram_full && inp_buf_rvalid;
==>
Branches:
-1- | -2- | -3- | Status | Tests |
1 |
1 |
- |
Covered |
T2,T8,T10 |
1 |
0 |
- |
Covered |
T1,T2,T6 |
0 |
- |
1 |
Covered |
T1,T2,T3 |
0 |
- |
0 |
Covered |
T1,T2,T3 |
Assert Coverage for Module :
i2c_fifo_sync_sram_adapter
Assertion Details
MinimalSramAw_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
6732 |
6732 |
0 |
0 |
T1 |
4 |
4 |
0 |
0 |
T2 |
4 |
4 |
0 |
0 |
T3 |
4 |
4 |
0 |
0 |
T4 |
4 |
4 |
0 |
0 |
T5 |
4 |
4 |
0 |
0 |
T6 |
4 |
4 |
0 |
0 |
T7 |
4 |
4 |
0 |
0 |
T8 |
4 |
4 |
0 |
0 |
T9 |
4 |
4 |
0 |
0 |
T10 |
4 |
4 |
0 |
0 |
MinimalSramFifoDepth_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
6732 |
6732 |
0 |
0 |
T1 |
4 |
4 |
0 |
0 |
T2 |
4 |
4 |
0 |
0 |
T3 |
4 |
4 |
0 |
0 |
T4 |
4 |
4 |
0 |
0 |
T5 |
4 |
4 |
0 |
0 |
T6 |
4 |
4 |
0 |
0 |
T7 |
4 |
4 |
0 |
0 |
T8 |
4 |
4 |
0 |
0 |
T9 |
4 |
4 |
0 |
0 |
T10 |
4 |
4 |
0 |
0 |
NoErr_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1614269904 |
1613588644 |
0 |
0 |
T1 |
25204 |
23504 |
0 |
0 |
T2 |
336696 |
336376 |
0 |
0 |
T3 |
69296 |
68980 |
0 |
0 |
T4 |
6336 |
6000 |
0 |
0 |
T5 |
1081592 |
1081392 |
0 |
0 |
T6 |
62828 |
62484 |
0 |
0 |
T7 |
60680 |
60476 |
0 |
0 |
T8 |
91548 |
91192 |
0 |
0 |
T9 |
462488 |
462128 |
0 |
0 |
T10 |
333332 |
333012 |
0 |
0 |
NoSramReadWhenEmpty_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1614269904 |
1287251382 |
0 |
0 |
T1 |
25204 |
23143 |
0 |
0 |
T2 |
336696 |
298618 |
0 |
0 |
T3 |
69296 |
68237 |
0 |
0 |
T4 |
6336 |
6000 |
0 |
0 |
T5 |
1081592 |
817094 |
0 |
0 |
T6 |
62828 |
54429 |
0 |
0 |
T7 |
60680 |
53068 |
0 |
0 |
T8 |
91548 |
70609 |
0 |
0 |
T9 |
462488 |
372958 |
0 |
0 |
T10 |
333332 |
273555 |
0 |
0 |
NoSramWriteWhenFull_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1614269904 |
25569479 |
0 |
0 |
T8 |
22887 |
4903 |
0 |
0 |
T9 |
115622 |
0 |
0 |
0 |
T10 |
83333 |
0 |
0 |
0 |
T11 |
73129 |
0 |
0 |
0 |
T15 |
164002 |
0 |
0 |
0 |
T17 |
0 |
384700 |
0 |
0 |
T25 |
58718 |
0 |
0 |
0 |
T29 |
0 |
9728 |
0 |
0 |
T38 |
9566 |
0 |
0 |
0 |
T41 |
0 |
144397 |
0 |
0 |
T45 |
142623 |
0 |
0 |
0 |
T49 |
504004 |
15 |
0 |
0 |
T50 |
240129 |
15 |
0 |
0 |
T52 |
0 |
18 |
0 |
0 |
T62 |
0 |
1761 |
0 |
0 |
T63 |
0 |
6 |
0 |
0 |
T64 |
0 |
7 |
0 |
0 |
T65 |
106672 |
0 |
0 |
0 |
T68 |
0 |
894 |
0 |
0 |
T69 |
0 |
1095 |
0 |
0 |
T72 |
101644 |
0 |
0 |
0 |
T73 |
178264 |
0 |
0 |
0 |
T74 |
8012 |
0 |
0 |
0 |
T77 |
131696 |
0 |
0 |
0 |
T80 |
2276 |
0 |
0 |
0 |
T81 |
11423 |
3 |
0 |
0 |
T100 |
1038 |
0 |
0 |
0 |
T103 |
2426 |
0 |
0 |
0 |
T154 |
0 |
18 |
0 |
0 |
T163 |
0 |
1238 |
0 |
0 |
T164 |
0 |
2099 |
0 |
0 |
T165 |
0 |
129718 |
0 |
0 |
T166 |
0 |
114818 |
0 |
0 |
T167 |
0 |
21783 |
0 |
0 |
T168 |
0 |
73032 |
0 |
0 |
T169 |
0 |
145227 |
0 |
0 |
T170 |
3564 |
0 |
0 |
0 |
T171 |
3369 |
0 |
0 |
0 |
OupBufWreadyAfterSramRead_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1614269904 |
641430 |
0 |
0 |
T2 |
84174 |
6 |
0 |
0 |
T3 |
17324 |
0 |
0 |
0 |
T4 |
1584 |
0 |
0 |
0 |
T5 |
270398 |
144 |
0 |
0 |
T6 |
15707 |
0 |
0 |
0 |
T7 |
15170 |
13 |
0 |
0 |
T8 |
45774 |
91 |
0 |
0 |
T9 |
231244 |
253 |
0 |
0 |
T10 |
166666 |
4 |
0 |
0 |
T11 |
146258 |
212 |
0 |
0 |
T12 |
0 |
9 |
0 |
0 |
T13 |
0 |
38 |
0 |
0 |
T15 |
82001 |
32 |
0 |
0 |
T19 |
0 |
32 |
0 |
0 |
T21 |
0 |
20 |
0 |
0 |
T25 |
29359 |
101 |
0 |
0 |
T44 |
0 |
149 |
0 |
0 |
T45 |
142623 |
340 |
0 |
0 |
T49 |
252002 |
36 |
0 |
0 |
T50 |
0 |
36 |
0 |
0 |
T65 |
0 |
89 |
0 |
0 |
T69 |
45692 |
0 |
0 |
0 |
T72 |
101644 |
12 |
0 |
0 |
T73 |
89132 |
0 |
0 |
0 |
T83 |
177325 |
806 |
0 |
0 |
T158 |
15307 |
0 |
0 |
0 |
T159 |
16177 |
0 |
0 |
0 |
T172 |
0 |
140 |
0 |
0 |
T173 |
31076 |
0 |
0 |
0 |
SramRvalidAfterRead_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1614269904 |
641430 |
0 |
0 |
T2 |
84174 |
6 |
0 |
0 |
T3 |
17324 |
0 |
0 |
0 |
T4 |
1584 |
0 |
0 |
0 |
T5 |
270398 |
144 |
0 |
0 |
T6 |
15707 |
0 |
0 |
0 |
T7 |
15170 |
13 |
0 |
0 |
T8 |
45774 |
91 |
0 |
0 |
T9 |
231244 |
253 |
0 |
0 |
T10 |
166666 |
4 |
0 |
0 |
T11 |
146258 |
212 |
0 |
0 |
T12 |
0 |
9 |
0 |
0 |
T13 |
0 |
38 |
0 |
0 |
T15 |
82001 |
32 |
0 |
0 |
T19 |
0 |
32 |
0 |
0 |
T21 |
0 |
20 |
0 |
0 |
T25 |
29359 |
101 |
0 |
0 |
T44 |
0 |
149 |
0 |
0 |
T45 |
142623 |
340 |
0 |
0 |
T49 |
252002 |
36 |
0 |
0 |
T50 |
0 |
36 |
0 |
0 |
T65 |
0 |
89 |
0 |
0 |
T69 |
45692 |
0 |
0 |
0 |
T72 |
101644 |
12 |
0 |
0 |
T73 |
89132 |
0 |
0 |
0 |
T83 |
177325 |
806 |
0 |
0 |
T158 |
15307 |
0 |
0 |
0 |
T159 |
16177 |
0 |
0 |
0 |
T172 |
0 |
140 |
0 |
0 |
T173 |
31076 |
0 |
0 |
0 |
Line Coverage for Instance : tb.dut.i2c_core.u_fifos.u_fmt_fifo_sram_adapter
| Line No. | Total | Covered | Percent |
TOTAL | | 44 | 44 | 100.00 |
CONT_ASSIGN | 120 | 1 | 1 | 100.00 |
CONT_ASSIGN | 121 | 1 | 1 | 100.00 |
CONT_ASSIGN | 125 | 1 | 1 | 100.00 |
CONT_ASSIGN | 150 | 1 | 1 | 100.00 |
CONT_ASSIGN | 151 | 1 | 1 | 100.00 |
CONT_ASSIGN | 153 | 1 | 1 | 100.00 |
CONT_ASSIGN | 154 | 1 | 1 | 100.00 |
CONT_ASSIGN | 162 | 1 | 1 | 100.00 |
ALWAYS | 164 | 3 | 3 | 100.00 |
ALWAYS | 174 | 28 | 28 | 100.00 |
CONT_ASSIGN | 228 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 240 | 1 | 1 | 100.00 |
CONT_ASSIGN | 244 | 1 | 1 | 100.00 |
CONT_ASSIGN | 249 | 1 | 1 | 100.00 |
119 );
120 1/1 assign inp_buf_wvalid = fifo_wvalid_i && fifo_wready_o;
Tests: T1 T2 T3
121 1/1 assign oup_buf_almost_full = oup_buf_depth >= OupBufDepthW'(OupBufDepth - 1);
Tests: T1 T2 T3
122
123 // Signal whether we access the SRAM in this cycle
124 logic sram_access;
125 1/1 assign sram_access = sram_req_o && sram_gnt_i;
Tests: T1 T2 T3
126
127 // SRAM read and write addresses
128 logic [SramAw-1:0] sram_wr_addr, sram_rd_addr;
129 logic [SramPtrW-1:0] sram_wr_ptr, sram_rd_ptr;
130 logic [SramDepthW-1:0] sram_depth;
131 logic sram_incr_wr_ptr, sram_incr_rd_ptr;
132 logic sram_full, sram_empty;
133 logic sram_ptrs_err;
134 prim_fifo_sync_cnt #(
135 .Depth (SramFifoDepth),
136 .Secure(1'b0)
137 ) u_sram_ptrs (
138 .clk_i,
139 .rst_ni,
140 .clr_i,
141 .incr_wptr_i(sram_incr_wr_ptr),
142 .incr_rptr_i(sram_incr_rd_ptr),
143 .wptr_o (sram_wr_ptr),
144 .rptr_o (sram_rd_ptr),
145 .full_o (sram_full),
146 .empty_o (sram_empty),
147 .depth_o (sram_depth),
148 .err_o (sram_ptrs_err)
149 );
150 1/1 assign sram_incr_wr_ptr = sram_access && sram_write_o;
Tests: T1 T2 T3
151 1/1 assign sram_incr_rd_ptr = sram_access && !sram_write_o;
Tests: T1 T2 T3
152 if (SramAddrLeadingZeros > 0) begin : gen_zero_extend_sram_addrs
153 1/1 assign sram_wr_addr = {{SramAddrLeadingZeros{1'b0}}, sram_wr_ptr} + SramBaseAddr;
Tests: T1 T2 T3
154 1/1 assign sram_rd_addr = {{SramAddrLeadingZeros{1'b0}}, sram_rd_ptr} + SramBaseAddr;
Tests: T1 T2 T3
155 end else begin : gen_no_zero_extend_sram_addrs
156 assign sram_wr_addr = sram_wr_ptr + SramBaseAddr;
157 assign sram_rd_addr = sram_rd_ptr + SramBaseAddr;
158 end
159
160 // FF to remember whether we read from the SRAM in the previous clock cycle.
161 logic sram_read_in_prev_cyc_d, sram_read_in_prev_cyc_q;
162 1/1 assign sram_read_in_prev_cyc_d = clr_i ? 1'b0 : sram_incr_rd_ptr;
Tests: T1 T2 T3
163 always_ff @(posedge clk_i or negedge rst_ni) begin
164 1/1 if (!rst_ni) begin
Tests: T1 T2 T3
165 1/1 sram_read_in_prev_cyc_q <= 1'b0;
Tests: T1 T2 T3
166 end else begin
167 1/1 sram_read_in_prev_cyc_q <= sram_read_in_prev_cyc_d;
Tests: T1 T2 T3
168 end
169 end
170
171 // Control logic for FIFO interface wready, output buffer writes, and SRAM requests
172 logic state_err;
173 always_comb begin
174 1/1 inp_buf_rready = 1'b0;
Tests: T1 T2 T3
175 1/1 oup_buf_wvalid = 1'b0;
Tests: T1 T2 T3
176 1/1 oup_buf_wdata = inp_buf_rdata;
Tests: T1 T2 T3
177 1/1 sram_req_o = 1'b0;
Tests: T1 T2 T3
178 1/1 sram_write_o = 1'b0;
Tests: T1 T2 T3
179 1/1 sram_addr_o = sram_wr_addr;
Tests: T1 T2 T3
180 1/1 state_err = 1'b0;
Tests: T1 T2 T3
181
182 // If the SRAM was read in the previous cycle, write the read data to the output buffer.
183 1/1 if (sram_read_in_prev_cyc_q) begin
Tests: T1 T2 T3
184 1/1 oup_buf_wvalid = 1'b1;
Tests: T8 T10 T11
185 1/1 oup_buf_wdata = sram_rdata_i;
Tests: T8 T10 T11
186 // The output buffer must be ready; otherwise we are in an erroneous state.
187 1/1 state_err = !oup_buf_wready;
Tests: T8 T10 T11
188 end
MISSING_ELSE
189
190 // If the SRAM is not empty, data from the input buffer must flow via the SRAM.
191 1/1 if (!sram_empty) begin
Tests: T1 T2 T3
192
193 // Prioritize refilling of the output buffer: if the output buffer is not being filled to the
194 // last slot in the current cycle or it is being read in the current cycle, read from the SRAM
195 // so the output buffer can be written in the next cycle.
196 1/1 if (!((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full)
Tests: T1 T6 T8
197 || (fifo_rvalid_o && fifo_rready_i)) begin
198 1/1 sram_req_o = 1'b1;
Tests: T8 T10 T11
199 1/1 sram_write_o = 1'b0;
Tests: T8 T10 T11
200 1/1 sram_addr_o = sram_rd_addr;
Tests: T8 T10 T11
201
202 // If the output buffer is full (and not being read), drain the input buffer into the SRAM.
203 end else begin
204 1/1 sram_req_o = !sram_full && inp_buf_rvalid;
Tests: T1 T6 T8
205 1/1 sram_write_o = 1'b1;
Tests: T1 T6 T8
206 1/1 sram_addr_o = sram_wr_addr;
Tests: T1 T6 T8
207 1/1 inp_buf_rready = !sram_full && sram_gnt_i;
Tests: T1 T6 T8
208 end
209
210 // If the SRAM is empty, data must flow from the input buffer to the output buffer if the output
211 // buffer is ready and is not receiving data read from the SRAM in the previous cycle
212 1/1 end else if (oup_buf_wready && !sram_read_in_prev_cyc_q) begin
Tests: T1 T2 T3
213 1/1 oup_buf_wvalid = inp_buf_rvalid;
Tests: T1 T2 T3
214 1/1 oup_buf_wdata = inp_buf_rdata;
Tests: T1 T2 T3
215 1/1 inp_buf_rready = oup_buf_wready;
Tests: T1 T2 T3
216
217 // Otherwise the SRAM is empty but the output buffer cannot take the data from the input buffer,
218 // so drain the input buffer into the SRAM.
219 end else begin
220 1/1 sram_req_o = !sram_full && inp_buf_rvalid;
Tests: T1 T2 T3
221 1/1 sram_write_o = 1'b1;
Tests: T1 T2 T3
222 1/1 sram_addr_o = sram_wr_addr;
Tests: T1 T2 T3
223 1/1 inp_buf_rready = !sram_full && sram_gnt_i;
Tests: T1 T2 T3
224 end
225 end
226
227 // Error output is high if any of the internal errors is high
228 1/1 assign err_o = |{inp_buf_err, oup_buf_err, sram_ptrs_err, state_err};
Tests: T1 T2 T3
229
230 // The SRAM and the output buffer together form the entire architectural capacity of the FIFO.
231 // Thus, when both are full, the FIFO is no longer ready to receive writes even though the input
232 // buffer could store one additional entry. This ensures that in the cycle after an entry has
233 // been read from the full FIFO, the next entry can be written to the FIFO.
234 // (It may be possible that all input buffer slots except one can be counted to the architectural
235 // capacity of the FIFO, but this is a relatively small optimization left for future work.)
236 1/1 assign fifo_wready_o = inp_buf_wready && !(sram_full && oup_buf_full);
Tests: T1 T2 T3
237
238 // The current depth of the FIFO represented by this module is the depth of all buffers plus the
239 // FIFO in the SRAM plus one if there's an entry in transition between SRAM and output buffer.
240 1/1 assign fifo_depth_o = DepthW'(inp_buf_depth) + DepthW'(sram_depth) + DepthW'(oup_buf_depth) +
Tests: T1 T2 T3
241 DepthW'(sram_read_in_prev_cyc_q);
242
243 // SRAM write data always comes from the input buffer.
244 1/1 assign sram_wdata_o = inp_buf_rdata;
Tests: T1 T2 T3
245 assign sram_wmask_o = '1;
246
247 // `sram_rvalid_i` is only used for assertions.
248 logic unused_sram_rvalid;
249 1/1 assign unused_sram_rvalid = sram_rvalid_i;
Tests: T1 T2 T3
Cond Coverage for Instance : tb.dut.i2c_core.u_fifos.u_fmt_fifo_sram_adapter
| Total | Covered | Percent |
Conditions | 51 | 38 | 74.51 |
Logical | 51 | 38 | 74.51 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 120
EXPRESSION (fifo_wvalid_i && fifo_wready_o)
------1------ ------2------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Not Covered | |
1 | 1 | Covered | T1,T6,T8 |
LINE 125
EXPRESSION (sram_req_o && sram_gnt_i)
-----1---- -----2----
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Not Covered | |
1 | 1 | Covered | T1,T6,T8 |
LINE 150
EXPRESSION (sram_access && sram_write_o)
-----1----- ------2-----
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T8,T10,T11 |
1 | 1 | Covered | T1,T6,T8 |
LINE 151
EXPRESSION (sram_access && ((!sram_write_o)))
-----1----- --------2--------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T1,T6,T8 |
1 | 1 | Covered | T8,T10,T11 |
LINE 162
EXPRESSION (clr_i ? 1'b0 : sram_incr_rd_ptr)
--1--
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 196
EXPRESSION (( ! ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full) ) || (fifo_rvalid_o && fifo_rready_i))
-------------------------------1------------------------------- ----------------2---------------
-1- | -2- | Status | Tests |
0 | 0 | Covered | T1,T6,T8 |
0 | 1 | Covered | T8,T10,T11 |
1 | 0 | Not Covered | |
LINE 196
SUB-EXPRESSION ( ! ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full) )
----------------------------1----------------------------
-1- | Status | Tests |
0 | Not Covered | |
1 | Covered | T1,T6,T8 |
LINE 196
SUB-EXPRESSION ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full)
-------------------1------------------- ------2-----
-1- | -2- | Status | Tests |
0 | 0 | Not Covered | |
0 | 1 | Covered | T1,T6,T8 |
1 | 0 | Covered | T8,T10,T11 |
LINE 196
SUB-EXPRESSION (oup_buf_almost_full && oup_buf_wvalid)
---------1--------- -------2------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T6,T8 |
1 | 1 | Covered | T8,T10,T11 |
LINE 196
SUB-EXPRESSION (fifo_rvalid_o && fifo_rready_i)
------1------ ------2------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T6,T8 |
1 | 1 | Covered | T8,T10,T11 |
LINE 204
EXPRESSION (((!sram_full)) && inp_buf_rvalid)
-------1------ -------2------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T6,T8 |
1 | 1 | Covered | T1,T6,T8 |
LINE 207
EXPRESSION (((!sram_full)) && sram_gnt_i)
-------1------ -----2----
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T6,T8 |
1 | 1 | Covered | T1,T6,T8 |
LINE 212
EXPRESSION (oup_buf_wready && ((!sram_read_in_prev_cyc_q)))
-------1------ --------------2-------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T8,T10,T11 |
1 | 1 | Covered | T1,T2,T3 |
LINE 220
EXPRESSION (((!sram_full)) && inp_buf_rvalid)
-------1------ -------2------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T6,T8 |
LINE 223
EXPRESSION (((!sram_full)) && sram_gnt_i)
-------1------ -----2----
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T1,T6,T8 |
LINE 236
EXPRESSION (inp_buf_wready && ( ! (sram_full && oup_buf_full) ))
-------1------ ----------------2----------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T8,T164,T29 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION ( ! (sram_full && oup_buf_full) )
-------------1-------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T8,T164,T29 |
LINE 236
SUB-EXPRESSION (sram_full && oup_buf_full)
----1---- ------2-----
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T6,T8 |
1 | 0 | Not Covered | |
1 | 1 | Covered | T8,T164,T29 |
Branch Coverage for Instance : tb.dut.i2c_core.u_fifos.u_fmt_fifo_sram_adapter
| Line No. | Total | Covered | Percent |
Branches |
|
10 |
10 |
100.00 |
TERNARY |
162 |
2 |
2 |
100.00 |
IF |
164 |
2 |
2 |
100.00 |
IF |
183 |
2 |
2 |
100.00 |
IF |
191 |
4 |
4 |
100.00 |
162 assign sram_read_in_prev_cyc_d = clr_i ? 1'b0 : sram_incr_rd_ptr;
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T1,T2,T3 |
164 if (!rst_ni) begin
-1-
165 sram_read_in_prev_cyc_q <= 1'b0;
==>
166 end else begin
167 sram_read_in_prev_cyc_q <= sram_read_in_prev_cyc_d;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T1,T2,T3 |
183 if (sram_read_in_prev_cyc_q) begin
-1-
184 oup_buf_wvalid = 1'b1;
==>
185 oup_buf_wdata = sram_rdata_i;
186 // The output buffer must be ready; otherwise we are in an erroneous state.
187 state_err = !oup_buf_wready;
188 end
MISSING_ELSE
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T8,T10,T11 |
0 |
Covered |
T1,T2,T3 |
191 if (!sram_empty) begin
-1-
192
193 // Prioritize refilling of the output buffer: if the output buffer is not being filled to the
194 // last slot in the current cycle or it is being read in the current cycle, read from the SRAM
195 // so the output buffer can be written in the next cycle.
196 if (!((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full)
-2-
197 || (fifo_rvalid_o && fifo_rready_i)) begin
198 sram_req_o = 1'b1;
==>
199 sram_write_o = 1'b0;
200 sram_addr_o = sram_rd_addr;
201
202 // If the output buffer is full (and not being read), drain the input buffer into the SRAM.
203 end else begin
204 sram_req_o = !sram_full && inp_buf_rvalid;
==>
205 sram_write_o = 1'b1;
206 sram_addr_o = sram_wr_addr;
207 inp_buf_rready = !sram_full && sram_gnt_i;
208 end
209
210 // If the SRAM is empty, data must flow from the input buffer to the output buffer if the output
211 // buffer is ready and is not receiving data read from the SRAM in the previous cycle
212 end else if (oup_buf_wready && !sram_read_in_prev_cyc_q) begin
-3-
213 oup_buf_wvalid = inp_buf_rvalid;
==>
214 oup_buf_wdata = inp_buf_rdata;
215 inp_buf_rready = oup_buf_wready;
216
217 // Otherwise the SRAM is empty but the output buffer cannot take the data from the input buffer,
218 // so drain the input buffer into the SRAM.
219 end else begin
220 sram_req_o = !sram_full && inp_buf_rvalid;
==>
Branches:
-1- | -2- | -3- | Status | Tests |
1 |
1 |
- |
Covered |
T8,T10,T11 |
1 |
0 |
- |
Covered |
T1,T6,T8 |
0 |
- |
1 |
Covered |
T1,T2,T3 |
0 |
- |
0 |
Covered |
T1,T2,T3 |
Assert Coverage for Instance : tb.dut.i2c_core.u_fifos.u_fmt_fifo_sram_adapter
Assertion Details
MinimalSramAw_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1683 |
1683 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T4 |
1 |
1 |
0 |
0 |
T5 |
1 |
1 |
0 |
0 |
T6 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
MinimalSramFifoDepth_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1683 |
1683 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T4 |
1 |
1 |
0 |
0 |
T5 |
1 |
1 |
0 |
0 |
T6 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
NoErr_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
403567476 |
403397161 |
0 |
0 |
T1 |
6301 |
5876 |
0 |
0 |
T2 |
84174 |
84094 |
0 |
0 |
T3 |
17324 |
17245 |
0 |
0 |
T4 |
1584 |
1500 |
0 |
0 |
T5 |
270398 |
270348 |
0 |
0 |
T6 |
15707 |
15621 |
0 |
0 |
T7 |
15170 |
15119 |
0 |
0 |
T8 |
22887 |
22798 |
0 |
0 |
T9 |
115622 |
115532 |
0 |
0 |
T10 |
83333 |
83253 |
0 |
0 |
NoSramReadWhenEmpty_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
403567476 |
338218424 |
0 |
0 |
T1 |
6301 |
5515 |
0 |
0 |
T2 |
84174 |
84094 |
0 |
0 |
T3 |
17324 |
17245 |
0 |
0 |
T4 |
1584 |
1500 |
0 |
0 |
T5 |
270398 |
270348 |
0 |
0 |
T6 |
15707 |
7566 |
0 |
0 |
T7 |
15170 |
15119 |
0 |
0 |
T8 |
22887 |
2215 |
0 |
0 |
T9 |
115622 |
115532 |
0 |
0 |
T10 |
83333 |
23796 |
0 |
0 |
NoSramWriteWhenFull_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
403567476 |
24981121 |
0 |
0 |
T8 |
22887 |
4903 |
0 |
0 |
T9 |
115622 |
0 |
0 |
0 |
T10 |
83333 |
0 |
0 |
0 |
T11 |
73129 |
0 |
0 |
0 |
T15 |
82001 |
0 |
0 |
0 |
T17 |
0 |
384700 |
0 |
0 |
T25 |
29359 |
0 |
0 |
0 |
T29 |
0 |
9728 |
0 |
0 |
T41 |
0 |
144397 |
0 |
0 |
T45 |
142623 |
0 |
0 |
0 |
T49 |
252002 |
0 |
0 |
0 |
T72 |
101644 |
0 |
0 |
0 |
T73 |
89132 |
0 |
0 |
0 |
T164 |
0 |
2099 |
0 |
0 |
T165 |
0 |
129718 |
0 |
0 |
T166 |
0 |
114818 |
0 |
0 |
T167 |
0 |
21783 |
0 |
0 |
T168 |
0 |
73032 |
0 |
0 |
T169 |
0 |
145227 |
0 |
0 |
OupBufWreadyAfterSramRead_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
403567476 |
182385 |
0 |
0 |
T8 |
22887 |
91 |
0 |
0 |
T9 |
115622 |
0 |
0 |
0 |
T10 |
83333 |
4 |
0 |
0 |
T11 |
73129 |
212 |
0 |
0 |
T12 |
0 |
9 |
0 |
0 |
T13 |
0 |
38 |
0 |
0 |
T15 |
82001 |
32 |
0 |
0 |
T19 |
0 |
32 |
0 |
0 |
T21 |
0 |
20 |
0 |
0 |
T25 |
29359 |
101 |
0 |
0 |
T44 |
0 |
149 |
0 |
0 |
T45 |
142623 |
0 |
0 |
0 |
T49 |
252002 |
0 |
0 |
0 |
T72 |
101644 |
0 |
0 |
0 |
T73 |
89132 |
0 |
0 |
0 |
SramRvalidAfterRead_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
403567476 |
182385 |
0 |
0 |
T8 |
22887 |
91 |
0 |
0 |
T9 |
115622 |
0 |
0 |
0 |
T10 |
83333 |
4 |
0 |
0 |
T11 |
73129 |
212 |
0 |
0 |
T12 |
0 |
9 |
0 |
0 |
T13 |
0 |
38 |
0 |
0 |
T15 |
82001 |
32 |
0 |
0 |
T19 |
0 |
32 |
0 |
0 |
T21 |
0 |
20 |
0 |
0 |
T25 |
29359 |
101 |
0 |
0 |
T44 |
0 |
149 |
0 |
0 |
T45 |
142623 |
0 |
0 |
0 |
T49 |
252002 |
0 |
0 |
0 |
T72 |
101644 |
0 |
0 |
0 |
T73 |
89132 |
0 |
0 |
0 |
Line Coverage for Instance : tb.dut.i2c_core.u_fifos.u_tx_fifo_sram_adapter
| Line No. | Total | Covered | Percent |
TOTAL | | 44 | 44 | 100.00 |
CONT_ASSIGN | 120 | 1 | 1 | 100.00 |
CONT_ASSIGN | 121 | 1 | 1 | 100.00 |
CONT_ASSIGN | 125 | 1 | 1 | 100.00 |
CONT_ASSIGN | 150 | 1 | 1 | 100.00 |
CONT_ASSIGN | 151 | 1 | 1 | 100.00 |
CONT_ASSIGN | 153 | 1 | 1 | 100.00 |
CONT_ASSIGN | 154 | 1 | 1 | 100.00 |
CONT_ASSIGN | 162 | 1 | 1 | 100.00 |
ALWAYS | 164 | 3 | 3 | 100.00 |
ALWAYS | 174 | 28 | 28 | 100.00 |
CONT_ASSIGN | 228 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 240 | 1 | 1 | 100.00 |
CONT_ASSIGN | 244 | 1 | 1 | 100.00 |
CONT_ASSIGN | 249 | 1 | 1 | 100.00 |
119 );
120 1/1 assign inp_buf_wvalid = fifo_wvalid_i && fifo_wready_o;
Tests: T1 T2 T3
121 1/1 assign oup_buf_almost_full = oup_buf_depth >= OupBufDepthW'(OupBufDepth - 1);
Tests: T1 T2 T3
122
123 // Signal whether we access the SRAM in this cycle
124 logic sram_access;
125 1/1 assign sram_access = sram_req_o && sram_gnt_i;
Tests: T1 T2 T3
126
127 // SRAM read and write addresses
128 logic [SramAw-1:0] sram_wr_addr, sram_rd_addr;
129 logic [SramPtrW-1:0] sram_wr_ptr, sram_rd_ptr;
130 logic [SramDepthW-1:0] sram_depth;
131 logic sram_incr_wr_ptr, sram_incr_rd_ptr;
132 logic sram_full, sram_empty;
133 logic sram_ptrs_err;
134 prim_fifo_sync_cnt #(
135 .Depth (SramFifoDepth),
136 .Secure(1'b0)
137 ) u_sram_ptrs (
138 .clk_i,
139 .rst_ni,
140 .clr_i,
141 .incr_wptr_i(sram_incr_wr_ptr),
142 .incr_rptr_i(sram_incr_rd_ptr),
143 .wptr_o (sram_wr_ptr),
144 .rptr_o (sram_rd_ptr),
145 .full_o (sram_full),
146 .empty_o (sram_empty),
147 .depth_o (sram_depth),
148 .err_o (sram_ptrs_err)
149 );
150 1/1 assign sram_incr_wr_ptr = sram_access && sram_write_o;
Tests: T1 T2 T3
151 1/1 assign sram_incr_rd_ptr = sram_access && !sram_write_o;
Tests: T1 T2 T3
152 if (SramAddrLeadingZeros > 0) begin : gen_zero_extend_sram_addrs
153 1/1 assign sram_wr_addr = {{SramAddrLeadingZeros{1'b0}}, sram_wr_ptr} + SramBaseAddr;
Tests: T1 T2 T3
154 1/1 assign sram_rd_addr = {{SramAddrLeadingZeros{1'b0}}, sram_rd_ptr} + SramBaseAddr;
Tests: T1 T2 T3
155 end else begin : gen_no_zero_extend_sram_addrs
156 assign sram_wr_addr = sram_wr_ptr + SramBaseAddr;
157 assign sram_rd_addr = sram_rd_ptr + SramBaseAddr;
158 end
159
160 // FF to remember whether we read from the SRAM in the previous clock cycle.
161 logic sram_read_in_prev_cyc_d, sram_read_in_prev_cyc_q;
162 1/1 assign sram_read_in_prev_cyc_d = clr_i ? 1'b0 : sram_incr_rd_ptr;
Tests: T1 T2 T3
163 always_ff @(posedge clk_i or negedge rst_ni) begin
164 1/1 if (!rst_ni) begin
Tests: T1 T2 T3
165 1/1 sram_read_in_prev_cyc_q <= 1'b0;
Tests: T1 T2 T3
166 end else begin
167 1/1 sram_read_in_prev_cyc_q <= sram_read_in_prev_cyc_d;
Tests: T1 T2 T3
168 end
169 end
170
171 // Control logic for FIFO interface wready, output buffer writes, and SRAM requests
172 logic state_err;
173 always_comb begin
174 1/1 inp_buf_rready = 1'b0;
Tests: T1 T2 T3
175 1/1 oup_buf_wvalid = 1'b0;
Tests: T1 T2 T3
176 1/1 oup_buf_wdata = inp_buf_rdata;
Tests: T1 T2 T3
177 1/1 sram_req_o = 1'b0;
Tests: T1 T2 T3
178 1/1 sram_write_o = 1'b0;
Tests: T1 T2 T3
179 1/1 sram_addr_o = sram_wr_addr;
Tests: T1 T2 T3
180 1/1 state_err = 1'b0;
Tests: T1 T2 T3
181
182 // If the SRAM was read in the previous cycle, write the read data to the output buffer.
183 1/1 if (sram_read_in_prev_cyc_q) begin
Tests: T1 T2 T3
184 1/1 oup_buf_wvalid = 1'b1;
Tests: T2 T3 T7
185 1/1 oup_buf_wdata = sram_rdata_i;
Tests: T2 T3 T7
186 // The output buffer must be ready; otherwise we are in an erroneous state.
187 1/1 state_err = !oup_buf_wready;
Tests: T2 T3 T7
188 end
MISSING_ELSE
189
190 // If the SRAM is not empty, data from the input buffer must flow via the SRAM.
191 1/1 if (!sram_empty) begin
Tests: T1 T2 T3
192
193 // Prioritize refilling of the output buffer: if the output buffer is not being filled to the
194 // last slot in the current cycle or it is being read in the current cycle, read from the SRAM
195 // so the output buffer can be written in the next cycle.
196 1/1 if (!((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full)
Tests: T2 T3 T7
197 || (fifo_rvalid_o && fifo_rready_i)) begin
198 1/1 sram_req_o = 1'b1;
Tests: T2 T3 T7
199 1/1 sram_write_o = 1'b0;
Tests: T2 T3 T7
200 1/1 sram_addr_o = sram_rd_addr;
Tests: T2 T3 T7
201
202 // If the output buffer is full (and not being read), drain the input buffer into the SRAM.
203 end else begin
204 1/1 sram_req_o = !sram_full && inp_buf_rvalid;
Tests: T2 T3 T7
205 1/1 sram_write_o = 1'b1;
Tests: T2 T3 T7
206 1/1 sram_addr_o = sram_wr_addr;
Tests: T2 T3 T7
207 1/1 inp_buf_rready = !sram_full && sram_gnt_i;
Tests: T2 T3 T7
208 end
209
210 // If the SRAM is empty, data must flow from the input buffer to the output buffer if the output
211 // buffer is ready and is not receiving data read from the SRAM in the previous cycle
212 1/1 end else if (oup_buf_wready && !sram_read_in_prev_cyc_q) begin
Tests: T1 T2 T3
213 1/1 oup_buf_wvalid = inp_buf_rvalid;
Tests: T1 T2 T3
214 1/1 oup_buf_wdata = inp_buf_rdata;
Tests: T1 T2 T3
215 1/1 inp_buf_rready = oup_buf_wready;
Tests: T1 T2 T3
216
217 // Otherwise the SRAM is empty but the output buffer cannot take the data from the input buffer,
218 // so drain the input buffer into the SRAM.
219 end else begin
220 1/1 sram_req_o = !sram_full && inp_buf_rvalid;
Tests: T1 T2 T3
221 1/1 sram_write_o = 1'b1;
Tests: T1 T2 T3
222 1/1 sram_addr_o = sram_wr_addr;
Tests: T1 T2 T3
223 1/1 inp_buf_rready = !sram_full && sram_gnt_i;
Tests: T1 T2 T3
224 end
225 end
226
227 // Error output is high if any of the internal errors is high
228 1/1 assign err_o = |{inp_buf_err, oup_buf_err, sram_ptrs_err, state_err};
Tests: T1 T2 T3
229
230 // The SRAM and the output buffer together form the entire architectural capacity of the FIFO.
231 // Thus, when both are full, the FIFO is no longer ready to receive writes even though the input
232 // buffer could store one additional entry. This ensures that in the cycle after an entry has
233 // been read from the full FIFO, the next entry can be written to the FIFO.
234 // (It may be possible that all input buffer slots except one can be counted to the architectural
235 // capacity of the FIFO, but this is a relatively small optimization left for future work.)
236 1/1 assign fifo_wready_o = inp_buf_wready && !(sram_full && oup_buf_full);
Tests: T1 T2 T3
237
238 // The current depth of the FIFO represented by this module is the depth of all buffers plus the
239 // FIFO in the SRAM plus one if there's an entry in transition between SRAM and output buffer.
240 1/1 assign fifo_depth_o = DepthW'(inp_buf_depth) + DepthW'(sram_depth) + DepthW'(oup_buf_depth) +
Tests: T1 T2 T3
241 DepthW'(sram_read_in_prev_cyc_q);
242
243 // SRAM write data always comes from the input buffer.
244 1/1 assign sram_wdata_o = inp_buf_rdata;
Tests: T1 T2 T3
245 assign sram_wmask_o = '1;
246
247 // `sram_rvalid_i` is only used for assertions.
248 logic unused_sram_rvalid;
249 1/1 assign unused_sram_rvalid = sram_rvalid_i;
Tests: T1 T2 T3
Cond Coverage for Instance : tb.dut.i2c_core.u_fifos.u_tx_fifo_sram_adapter
| Total | Covered | Percent |
Conditions | 51 | 38 | 74.51 |
Logical | 51 | 38 | 74.51 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 120
EXPRESSION (fifo_wvalid_i && fifo_wready_o)
------1------ ------2------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Not Covered | |
1 | 1 | Covered | T2,T3,T7 |
LINE 125
EXPRESSION (sram_req_o && sram_gnt_i)
-----1---- -----2----
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Not Covered | |
1 | 1 | Covered | T2,T3,T7 |
LINE 150
EXPRESSION (sram_access && sram_write_o)
-----1----- ------2-----
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T2,T3,T7 |
1 | 1 | Covered | T2,T3,T7 |
LINE 151
EXPRESSION (sram_access && ((!sram_write_o)))
-----1----- --------2--------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T2,T3,T7 |
1 | 1 | Covered | T2,T3,T7 |
LINE 162
EXPRESSION (clr_i ? 1'b0 : sram_incr_rd_ptr)
--1--
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 196
EXPRESSION (( ! ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full) ) || (fifo_rvalid_o && fifo_rready_i))
-------------------------------1------------------------------- ----------------2---------------
-1- | -2- | Status | Tests |
0 | 0 | Covered | T2,T3,T7 |
0 | 1 | Covered | T2,T3,T7 |
1 | 0 | Not Covered | |
LINE 196
SUB-EXPRESSION ( ! ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full) )
----------------------------1----------------------------
-1- | Status | Tests |
0 | Not Covered | |
1 | Covered | T2,T3,T7 |
LINE 196
SUB-EXPRESSION ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full)
-------------------1------------------- ------2-----
-1- | -2- | Status | Tests |
0 | 0 | Not Covered | |
0 | 1 | Covered | T2,T3,T7 |
1 | 0 | Covered | T2,T3,T7 |
LINE 196
SUB-EXPRESSION (oup_buf_almost_full && oup_buf_wvalid)
---------1--------- -------2------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T2,T3,T7 |
1 | 1 | Covered | T2,T3,T7 |
LINE 196
SUB-EXPRESSION (fifo_rvalid_o && fifo_rready_i)
------1------ ------2------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T2,T3,T7 |
1 | 1 | Covered | T2,T3,T7 |
LINE 204
EXPRESSION (((!sram_full)) && inp_buf_rvalid)
-------1------ -------2------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T2,T3,T7 |
1 | 1 | Covered | T2,T3,T7 |
LINE 207
EXPRESSION (((!sram_full)) && sram_gnt_i)
-------1------ -----2----
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T2,T3,T7 |
1 | 1 | Covered | T2,T3,T7 |
LINE 212
EXPRESSION (oup_buf_wready && ((!sram_read_in_prev_cyc_q)))
-------1------ --------------2-------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T2,T3,T9 |
1 | 1 | Covered | T1,T2,T3 |
LINE 220
EXPRESSION (((!sram_full)) && inp_buf_rvalid)
-------1------ -------2------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T2,T3,T7 |
LINE 223
EXPRESSION (((!sram_full)) && sram_gnt_i)
-------1------ -----2----
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T2,T3,T7 |
LINE 236
EXPRESSION (inp_buf_wready && ( ! (sram_full && oup_buf_full) ))
-------1------ ----------------2----------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T7,T105,T106 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION ( ! (sram_full && oup_buf_full) )
-------------1-------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T7,T105,T106 |
LINE 236
SUB-EXPRESSION (sram_full && oup_buf_full)
----1---- ------2-----
-1- | -2- | Status | Tests |
0 | 1 | Covered | T2,T3,T7 |
1 | 0 | Not Covered | |
1 | 1 | Covered | T7,T105,T106 |
Branch Coverage for Instance : tb.dut.i2c_core.u_fifos.u_tx_fifo_sram_adapter
| Line No. | Total | Covered | Percent |
Branches |
|
10 |
10 |
100.00 |
TERNARY |
162 |
2 |
2 |
100.00 |
IF |
164 |
2 |
2 |
100.00 |
IF |
183 |
2 |
2 |
100.00 |
IF |
191 |
4 |
4 |
100.00 |
162 assign sram_read_in_prev_cyc_d = clr_i ? 1'b0 : sram_incr_rd_ptr;
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T1,T2,T3 |
164 if (!rst_ni) begin
-1-
165 sram_read_in_prev_cyc_q <= 1'b0;
==>
166 end else begin
167 sram_read_in_prev_cyc_q <= sram_read_in_prev_cyc_d;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T1,T2,T3 |
183 if (sram_read_in_prev_cyc_q) begin
-1-
184 oup_buf_wvalid = 1'b1;
==>
185 oup_buf_wdata = sram_rdata_i;
186 // The output buffer must be ready; otherwise we are in an erroneous state.
187 state_err = !oup_buf_wready;
188 end
MISSING_ELSE
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T2,T3,T7 |
0 |
Covered |
T1,T2,T3 |
191 if (!sram_empty) begin
-1-
192
193 // Prioritize refilling of the output buffer: if the output buffer is not being filled to the
194 // last slot in the current cycle or it is being read in the current cycle, read from the SRAM
195 // so the output buffer can be written in the next cycle.
196 if (!((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full)
-2-
197 || (fifo_rvalid_o && fifo_rready_i)) begin
198 sram_req_o = 1'b1;
==>
199 sram_write_o = 1'b0;
200 sram_addr_o = sram_rd_addr;
201
202 // If the output buffer is full (and not being read), drain the input buffer into the SRAM.
203 end else begin
204 sram_req_o = !sram_full && inp_buf_rvalid;
==>
205 sram_write_o = 1'b1;
206 sram_addr_o = sram_wr_addr;
207 inp_buf_rready = !sram_full && sram_gnt_i;
208 end
209
210 // If the SRAM is empty, data must flow from the input buffer to the output buffer if the output
211 // buffer is ready and is not receiving data read from the SRAM in the previous cycle
212 end else if (oup_buf_wready && !sram_read_in_prev_cyc_q) begin
-3-
213 oup_buf_wvalid = inp_buf_rvalid;
==>
214 oup_buf_wdata = inp_buf_rdata;
215 inp_buf_rready = oup_buf_wready;
216
217 // Otherwise the SRAM is empty but the output buffer cannot take the data from the input buffer,
218 // so drain the input buffer into the SRAM.
219 end else begin
220 sram_req_o = !sram_full && inp_buf_rvalid;
==>
Branches:
-1- | -2- | -3- | Status | Tests |
1 |
1 |
- |
Covered |
T2,T3,T7 |
1 |
0 |
- |
Covered |
T2,T3,T7 |
0 |
- |
1 |
Covered |
T1,T2,T3 |
0 |
- |
0 |
Covered |
T1,T2,T3 |
Assert Coverage for Instance : tb.dut.i2c_core.u_fifos.u_tx_fifo_sram_adapter
Assertion Details
MinimalSramAw_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1683 |
1683 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T4 |
1 |
1 |
0 |
0 |
T5 |
1 |
1 |
0 |
0 |
T6 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
MinimalSramFifoDepth_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1683 |
1683 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T4 |
1 |
1 |
0 |
0 |
T5 |
1 |
1 |
0 |
0 |
T6 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
NoErr_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
403567476 |
403397161 |
0 |
0 |
T1 |
6301 |
5876 |
0 |
0 |
T2 |
84174 |
84094 |
0 |
0 |
T3 |
17324 |
17245 |
0 |
0 |
T4 |
1584 |
1500 |
0 |
0 |
T5 |
270398 |
270348 |
0 |
0 |
T6 |
15707 |
15621 |
0 |
0 |
T7 |
15170 |
15119 |
0 |
0 |
T8 |
22887 |
22798 |
0 |
0 |
T9 |
115622 |
115532 |
0 |
0 |
T10 |
83333 |
83253 |
0 |
0 |
NoSramReadWhenEmpty_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
403567476 |
381728450 |
0 |
0 |
T1 |
6301 |
5876 |
0 |
0 |
T2 |
84174 |
47176 |
0 |
0 |
T3 |
17324 |
16502 |
0 |
0 |
T4 |
1584 |
1500 |
0 |
0 |
T5 |
270398 |
270348 |
0 |
0 |
T6 |
15707 |
15621 |
0 |
0 |
T7 |
15170 |
10151 |
0 |
0 |
T8 |
22887 |
22798 |
0 |
0 |
T9 |
115622 |
73733 |
0 |
0 |
T10 |
83333 |
83253 |
0 |
0 |
NoSramWriteWhenFull_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
403567476 |
317846 |
0 |
0 |
T7 |
15170 |
948 |
0 |
0 |
T8 |
22887 |
0 |
0 |
0 |
T9 |
115622 |
0 |
0 |
0 |
T10 |
83333 |
0 |
0 |
0 |
T11 |
73129 |
0 |
0 |
0 |
T15 |
82001 |
0 |
0 |
0 |
T25 |
29359 |
0 |
0 |
0 |
T45 |
142623 |
0 |
0 |
0 |
T49 |
252002 |
0 |
0 |
0 |
T59 |
0 |
7819 |
0 |
0 |
T60 |
0 |
8612 |
0 |
0 |
T61 |
0 |
8433 |
0 |
0 |
T72 |
101644 |
0 |
0 |
0 |
T93 |
0 |
7642 |
0 |
0 |
T105 |
0 |
1046 |
0 |
0 |
T106 |
0 |
295 |
0 |
0 |
T128 |
0 |
59 |
0 |
0 |
T174 |
0 |
374 |
0 |
0 |
T175 |
0 |
10104 |
0 |
0 |
OupBufWreadyAfterSramRead_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
403567476 |
111815 |
0 |
0 |
T2 |
84174 |
160 |
0 |
0 |
T3 |
17324 |
5 |
0 |
0 |
T4 |
1584 |
0 |
0 |
0 |
T5 |
270398 |
0 |
0 |
0 |
T6 |
15707 |
0 |
0 |
0 |
T7 |
15170 |
6 |
0 |
0 |
T8 |
22887 |
0 |
0 |
0 |
T9 |
115622 |
213 |
0 |
0 |
T10 |
83333 |
0 |
0 |
0 |
T11 |
73129 |
0 |
0 |
0 |
T45 |
0 |
255 |
0 |
0 |
T65 |
0 |
178 |
0 |
0 |
T72 |
0 |
152 |
0 |
0 |
T73 |
0 |
119 |
0 |
0 |
T74 |
0 |
24 |
0 |
0 |
T75 |
0 |
31 |
0 |
0 |
SramRvalidAfterRead_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
403567476 |
111815 |
0 |
0 |
T2 |
84174 |
160 |
0 |
0 |
T3 |
17324 |
5 |
0 |
0 |
T4 |
1584 |
0 |
0 |
0 |
T5 |
270398 |
0 |
0 |
0 |
T6 |
15707 |
0 |
0 |
0 |
T7 |
15170 |
6 |
0 |
0 |
T8 |
22887 |
0 |
0 |
0 |
T9 |
115622 |
213 |
0 |
0 |
T10 |
83333 |
0 |
0 |
0 |
T11 |
73129 |
0 |
0 |
0 |
T45 |
0 |
255 |
0 |
0 |
T65 |
0 |
178 |
0 |
0 |
T72 |
0 |
152 |
0 |
0 |
T73 |
0 |
119 |
0 |
0 |
T74 |
0 |
24 |
0 |
0 |
T75 |
0 |
31 |
0 |
0 |
Line Coverage for Instance : tb.dut.i2c_core.u_fifos.u_rx_fifo_sram_adapter
| Line No. | Total | Covered | Percent |
TOTAL | | 44 | 44 | 100.00 |
CONT_ASSIGN | 120 | 1 | 1 | 100.00 |
CONT_ASSIGN | 121 | 1 | 1 | 100.00 |
CONT_ASSIGN | 125 | 1 | 1 | 100.00 |
CONT_ASSIGN | 150 | 1 | 1 | 100.00 |
CONT_ASSIGN | 151 | 1 | 1 | 100.00 |
CONT_ASSIGN | 153 | 1 | 1 | 100.00 |
CONT_ASSIGN | 154 | 1 | 1 | 100.00 |
CONT_ASSIGN | 162 | 1 | 1 | 100.00 |
ALWAYS | 164 | 3 | 3 | 100.00 |
ALWAYS | 174 | 28 | 28 | 100.00 |
CONT_ASSIGN | 228 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 240 | 1 | 1 | 100.00 |
CONT_ASSIGN | 244 | 1 | 1 | 100.00 |
CONT_ASSIGN | 249 | 1 | 1 | 100.00 |
119 );
120 1/1 assign inp_buf_wvalid = fifo_wvalid_i && fifo_wready_o;
Tests: T1 T2 T3
121 1/1 assign oup_buf_almost_full = oup_buf_depth >= OupBufDepthW'(OupBufDepth - 1);
Tests: T1 T2 T3
122
123 // Signal whether we access the SRAM in this cycle
124 logic sram_access;
125 1/1 assign sram_access = sram_req_o && sram_gnt_i;
Tests: T1 T2 T3
126
127 // SRAM read and write addresses
128 logic [SramAw-1:0] sram_wr_addr, sram_rd_addr;
129 logic [SramPtrW-1:0] sram_wr_ptr, sram_rd_ptr;
130 logic [SramDepthW-1:0] sram_depth;
131 logic sram_incr_wr_ptr, sram_incr_rd_ptr;
132 logic sram_full, sram_empty;
133 logic sram_ptrs_err;
134 prim_fifo_sync_cnt #(
135 .Depth (SramFifoDepth),
136 .Secure(1'b0)
137 ) u_sram_ptrs (
138 .clk_i,
139 .rst_ni,
140 .clr_i,
141 .incr_wptr_i(sram_incr_wr_ptr),
142 .incr_rptr_i(sram_incr_rd_ptr),
143 .wptr_o (sram_wr_ptr),
144 .rptr_o (sram_rd_ptr),
145 .full_o (sram_full),
146 .empty_o (sram_empty),
147 .depth_o (sram_depth),
148 .err_o (sram_ptrs_err)
149 );
150 1/1 assign sram_incr_wr_ptr = sram_access && sram_write_o;
Tests: T1 T2 T3
151 1/1 assign sram_incr_rd_ptr = sram_access && !sram_write_o;
Tests: T1 T2 T3
152 if (SramAddrLeadingZeros > 0) begin : gen_zero_extend_sram_addrs
153 1/1 assign sram_wr_addr = {{SramAddrLeadingZeros{1'b0}}, sram_wr_ptr} + SramBaseAddr;
Tests: T1 T2 T3
154 1/1 assign sram_rd_addr = {{SramAddrLeadingZeros{1'b0}}, sram_rd_ptr} + SramBaseAddr;
Tests: T1 T2 T3
155 end else begin : gen_no_zero_extend_sram_addrs
156 assign sram_wr_addr = sram_wr_ptr + SramBaseAddr;
157 assign sram_rd_addr = sram_rd_ptr + SramBaseAddr;
158 end
159
160 // FF to remember whether we read from the SRAM in the previous clock cycle.
161 logic sram_read_in_prev_cyc_d, sram_read_in_prev_cyc_q;
162 1/1 assign sram_read_in_prev_cyc_d = clr_i ? 1'b0 : sram_incr_rd_ptr;
Tests: T1 T2 T3
163 always_ff @(posedge clk_i or negedge rst_ni) begin
164 1/1 if (!rst_ni) begin
Tests: T1 T2 T3
165 1/1 sram_read_in_prev_cyc_q <= 1'b0;
Tests: T1 T2 T3
166 end else begin
167 1/1 sram_read_in_prev_cyc_q <= sram_read_in_prev_cyc_d;
Tests: T1 T2 T3
168 end
169 end
170
171 // Control logic for FIFO interface wready, output buffer writes, and SRAM requests
172 logic state_err;
173 always_comb begin
174 1/1 inp_buf_rready = 1'b0;
Tests: T1 T2 T3
175 1/1 oup_buf_wvalid = 1'b0;
Tests: T1 T2 T3
176 1/1 oup_buf_wdata = inp_buf_rdata;
Tests: T1 T2 T3
177 1/1 sram_req_o = 1'b0;
Tests: T1 T2 T3
178 1/1 sram_write_o = 1'b0;
Tests: T1 T2 T3
179 1/1 sram_addr_o = sram_wr_addr;
Tests: T1 T2 T3
180 1/1 state_err = 1'b0;
Tests: T1 T2 T3
181
182 // If the SRAM was read in the previous cycle, write the read data to the output buffer.
183 1/1 if (sram_read_in_prev_cyc_q) begin
Tests: T1 T2 T3
184 1/1 oup_buf_wvalid = 1'b1;
Tests: T83 T36 T104
185 1/1 oup_buf_wdata = sram_rdata_i;
Tests: T83 T36 T104
186 // The output buffer must be ready; otherwise we are in an erroneous state.
187 1/1 state_err = !oup_buf_wready;
Tests: T83 T36 T104
188 end
MISSING_ELSE
189
190 // If the SRAM is not empty, data from the input buffer must flow via the SRAM.
191 1/1 if (!sram_empty) begin
Tests: T1 T2 T3
192
193 // Prioritize refilling of the output buffer: if the output buffer is not being filled to the
194 // last slot in the current cycle or it is being read in the current cycle, read from the SRAM
195 // so the output buffer can be written in the next cycle.
196 1/1 if (!((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full)
Tests: T81 T82 T83
197 || (fifo_rvalid_o && fifo_rready_i)) begin
198 1/1 sram_req_o = 1'b1;
Tests: T83 T36 T104
199 1/1 sram_write_o = 1'b0;
Tests: T83 T36 T104
200 1/1 sram_addr_o = sram_rd_addr;
Tests: T83 T36 T104
201
202 // If the output buffer is full (and not being read), drain the input buffer into the SRAM.
203 end else begin
204 1/1 sram_req_o = !sram_full && inp_buf_rvalid;
Tests: T81 T82 T83
205 1/1 sram_write_o = 1'b1;
Tests: T81 T82 T83
206 1/1 sram_addr_o = sram_wr_addr;
Tests: T81 T82 T83
207 1/1 inp_buf_rready = !sram_full && sram_gnt_i;
Tests: T81 T82 T83
208 end
209
210 // If the SRAM is empty, data must flow from the input buffer to the output buffer if the output
211 // buffer is ready and is not receiving data read from the SRAM in the previous cycle
212 1/1 end else if (oup_buf_wready && !sram_read_in_prev_cyc_q) begin
Tests: T1 T2 T3
213 1/1 oup_buf_wvalid = inp_buf_rvalid;
Tests: T1 T2 T3
214 1/1 oup_buf_wdata = inp_buf_rdata;
Tests: T1 T2 T3
215 1/1 inp_buf_rready = oup_buf_wready;
Tests: T1 T2 T3
216
217 // Otherwise the SRAM is empty but the output buffer cannot take the data from the input buffer,
218 // so drain the input buffer into the SRAM.
219 end else begin
220 1/1 sram_req_o = !sram_full && inp_buf_rvalid;
Tests: T1 T2 T3
221 1/1 sram_write_o = 1'b1;
Tests: T1 T2 T3
222 1/1 sram_addr_o = sram_wr_addr;
Tests: T1 T2 T3
223 1/1 inp_buf_rready = !sram_full && sram_gnt_i;
Tests: T1 T2 T3
224 end
225 end
226
227 // Error output is high if any of the internal errors is high
228 1/1 assign err_o = |{inp_buf_err, oup_buf_err, sram_ptrs_err, state_err};
Tests: T1 T2 T3
229
230 // The SRAM and the output buffer together form the entire architectural capacity of the FIFO.
231 // Thus, when both are full, the FIFO is no longer ready to receive writes even though the input
232 // buffer could store one additional entry. This ensures that in the cycle after an entry has
233 // been read from the full FIFO, the next entry can be written to the FIFO.
234 // (It may be possible that all input buffer slots except one can be counted to the architectural
235 // capacity of the FIFO, but this is a relatively small optimization left for future work.)
236 1/1 assign fifo_wready_o = inp_buf_wready && !(sram_full && oup_buf_full);
Tests: T1 T2 T3
237
238 // The current depth of the FIFO represented by this module is the depth of all buffers plus the
239 // FIFO in the SRAM plus one if there's an entry in transition between SRAM and output buffer.
240 1/1 assign fifo_depth_o = DepthW'(inp_buf_depth) + DepthW'(sram_depth) + DepthW'(oup_buf_depth) +
Tests: T1 T2 T3
241 DepthW'(sram_read_in_prev_cyc_q);
242
243 // SRAM write data always comes from the input buffer.
244 1/1 assign sram_wdata_o = inp_buf_rdata;
Tests: T1 T2 T3
245 assign sram_wmask_o = '1;
246
247 // `sram_rvalid_i` is only used for assertions.
248 logic unused_sram_rvalid;
249 1/1 assign unused_sram_rvalid = sram_rvalid_i;
Tests: T1 T2 T3
Cond Coverage for Instance : tb.dut.i2c_core.u_fifos.u_rx_fifo_sram_adapter
| Total | Covered | Percent |
Conditions | 51 | 39 | 76.47 |
Logical | 51 | 39 | 76.47 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 120
EXPRESSION (fifo_wvalid_i && fifo_wready_o)
------1------ ------2------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T83,T36,T104 |
1 | 1 | Covered | T10,T11,T15 |
LINE 125
EXPRESSION (sram_req_o && sram_gnt_i)
-----1---- -----2----
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Not Covered | |
1 | 1 | Covered | T81,T82,T83 |
LINE 150
EXPRESSION (sram_access && sram_write_o)
-----1----- ------2-----
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T83,T36,T104 |
1 | 1 | Covered | T81,T82,T83 |
LINE 151
EXPRESSION (sram_access && ((!sram_write_o)))
-----1----- --------2--------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T81,T82,T83 |
1 | 1 | Covered | T83,T36,T104 |
LINE 162
EXPRESSION (clr_i ? 1'b0 : sram_incr_rd_ptr)
--1--
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 196
EXPRESSION (( ! ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full) ) || (fifo_rvalid_o && fifo_rready_i))
-------------------------------1------------------------------- ----------------2---------------
-1- | -2- | Status | Tests |
0 | 0 | Covered | T81,T82,T83 |
0 | 1 | Covered | T83,T36,T104 |
1 | 0 | Not Covered | |
LINE 196
SUB-EXPRESSION ( ! ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full) )
----------------------------1----------------------------
-1- | Status | Tests |
0 | Not Covered | |
1 | Covered | T81,T82,T83 |
LINE 196
SUB-EXPRESSION ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full)
-------------------1------------------- ------2-----
-1- | -2- | Status | Tests |
0 | 0 | Not Covered | |
0 | 1 | Covered | T81,T82,T83 |
1 | 0 | Covered | T83,T36,T104 |
LINE 196
SUB-EXPRESSION (oup_buf_almost_full && oup_buf_wvalid)
---------1--------- -------2------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T81,T82,T83 |
1 | 1 | Covered | T83,T36,T104 |
LINE 196
SUB-EXPRESSION (fifo_rvalid_o && fifo_rready_i)
------1------ ------2------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T81,T82,T83 |
1 | 1 | Covered | T83,T36,T104 |
LINE 204
EXPRESSION (((!sram_full)) && inp_buf_rvalid)
-------1------ -------2------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T81,T82,T83 |
1 | 1 | Covered | T81,T82,T83 |
LINE 207
EXPRESSION (((!sram_full)) && sram_gnt_i)
-------1------ -----2----
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T81,T82,T83 |
1 | 1 | Covered | T81,T82,T83 |
LINE 212
EXPRESSION (oup_buf_wready && ((!sram_read_in_prev_cyc_q)))
-------1------ --------------2-------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T83,T36,T104 |
1 | 1 | Covered | T1,T2,T3 |
LINE 220
EXPRESSION (((!sram_full)) && inp_buf_rvalid)
-------1------ -------2------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T81,T82,T83 |
LINE 223
EXPRESSION (((!sram_full)) && sram_gnt_i)
-------1------ -----2----
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T81,T82,T83 |
LINE 236
EXPRESSION (inp_buf_wready && ( ! (sram_full && oup_buf_full) ))
-------1------ ----------------2----------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T81,T82,T83 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION ( ! (sram_full && oup_buf_full) )
-------------1-------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T81,T82,T83 |
LINE 236
SUB-EXPRESSION (sram_full && oup_buf_full)
----1---- ------2-----
-1- | -2- | Status | Tests |
0 | 1 | Covered | T81,T82,T83 |
1 | 0 | Not Covered | |
1 | 1 | Covered | T81,T82,T83 |
Branch Coverage for Instance : tb.dut.i2c_core.u_fifos.u_rx_fifo_sram_adapter
| Line No. | Total | Covered | Percent |
Branches |
|
10 |
10 |
100.00 |
TERNARY |
162 |
2 |
2 |
100.00 |
IF |
164 |
2 |
2 |
100.00 |
IF |
183 |
2 |
2 |
100.00 |
IF |
191 |
4 |
4 |
100.00 |
162 assign sram_read_in_prev_cyc_d = clr_i ? 1'b0 : sram_incr_rd_ptr;
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T1,T2,T3 |
164 if (!rst_ni) begin
-1-
165 sram_read_in_prev_cyc_q <= 1'b0;
==>
166 end else begin
167 sram_read_in_prev_cyc_q <= sram_read_in_prev_cyc_d;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T1,T2,T3 |
183 if (sram_read_in_prev_cyc_q) begin
-1-
184 oup_buf_wvalid = 1'b1;
==>
185 oup_buf_wdata = sram_rdata_i;
186 // The output buffer must be ready; otherwise we are in an erroneous state.
187 state_err = !oup_buf_wready;
188 end
MISSING_ELSE
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T83,T36,T104 |
0 |
Covered |
T1,T2,T3 |
191 if (!sram_empty) begin
-1-
192
193 // Prioritize refilling of the output buffer: if the output buffer is not being filled to the
194 // last slot in the current cycle or it is being read in the current cycle, read from the SRAM
195 // so the output buffer can be written in the next cycle.
196 if (!((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full)
-2-
197 || (fifo_rvalid_o && fifo_rready_i)) begin
198 sram_req_o = 1'b1;
==>
199 sram_write_o = 1'b0;
200 sram_addr_o = sram_rd_addr;
201
202 // If the output buffer is full (and not being read), drain the input buffer into the SRAM.
203 end else begin
204 sram_req_o = !sram_full && inp_buf_rvalid;
==>
205 sram_write_o = 1'b1;
206 sram_addr_o = sram_wr_addr;
207 inp_buf_rready = !sram_full && sram_gnt_i;
208 end
209
210 // If the SRAM is empty, data must flow from the input buffer to the output buffer if the output
211 // buffer is ready and is not receiving data read from the SRAM in the previous cycle
212 end else if (oup_buf_wready && !sram_read_in_prev_cyc_q) begin
-3-
213 oup_buf_wvalid = inp_buf_rvalid;
==>
214 oup_buf_wdata = inp_buf_rdata;
215 inp_buf_rready = oup_buf_wready;
216
217 // Otherwise the SRAM is empty but the output buffer cannot take the data from the input buffer,
218 // so drain the input buffer into the SRAM.
219 end else begin
220 sram_req_o = !sram_full && inp_buf_rvalid;
==>
Branches:
-1- | -2- | -3- | Status | Tests |
1 |
1 |
- |
Covered |
T83,T36,T104 |
1 |
0 |
- |
Covered |
T81,T82,T83 |
0 |
- |
1 |
Covered |
T1,T2,T3 |
0 |
- |
0 |
Covered |
T1,T2,T3 |
Assert Coverage for Instance : tb.dut.i2c_core.u_fifos.u_rx_fifo_sram_adapter
Assertion Details
MinimalSramAw_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1683 |
1683 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T4 |
1 |
1 |
0 |
0 |
T5 |
1 |
1 |
0 |
0 |
T6 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
MinimalSramFifoDepth_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1683 |
1683 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T4 |
1 |
1 |
0 |
0 |
T5 |
1 |
1 |
0 |
0 |
T6 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
NoErr_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
403567476 |
403397161 |
0 |
0 |
T1 |
6301 |
5876 |
0 |
0 |
T2 |
84174 |
84094 |
0 |
0 |
T3 |
17324 |
17245 |
0 |
0 |
T4 |
1584 |
1500 |
0 |
0 |
T5 |
270398 |
270348 |
0 |
0 |
T6 |
15707 |
15621 |
0 |
0 |
T7 |
15170 |
15119 |
0 |
0 |
T8 |
22887 |
22798 |
0 |
0 |
T9 |
115622 |
115532 |
0 |
0 |
T10 |
83333 |
83253 |
0 |
0 |
NoSramReadWhenEmpty_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
403567476 |
380285247 |
0 |
0 |
T1 |
6301 |
5876 |
0 |
0 |
T2 |
84174 |
84094 |
0 |
0 |
T3 |
17324 |
17245 |
0 |
0 |
T4 |
1584 |
1500 |
0 |
0 |
T5 |
270398 |
270348 |
0 |
0 |
T6 |
15707 |
15621 |
0 |
0 |
T7 |
15170 |
15119 |
0 |
0 |
T8 |
22887 |
22798 |
0 |
0 |
T9 |
115622 |
115532 |
0 |
0 |
T10 |
83333 |
83253 |
0 |
0 |
NoSramWriteWhenFull_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
403567476 |
209373 |
0 |
0 |
T19 |
20108 |
0 |
0 |
0 |
T36 |
0 |
3530 |
0 |
0 |
T38 |
9566 |
0 |
0 |
0 |
T59 |
13090 |
0 |
0 |
0 |
T77 |
131696 |
0 |
0 |
0 |
T81 |
11423 |
3 |
0 |
0 |
T82 |
0 |
10 |
0 |
0 |
T83 |
0 |
2867 |
0 |
0 |
T84 |
0 |
779 |
0 |
0 |
T103 |
2426 |
0 |
0 |
0 |
T104 |
0 |
2173 |
0 |
0 |
T126 |
0 |
2816 |
0 |
0 |
T171 |
3369 |
0 |
0 |
0 |
T176 |
0 |
4 |
0 |
0 |
T177 |
0 |
9 |
0 |
0 |
T178 |
0 |
8 |
0 |
0 |
T179 |
10189 |
0 |
0 |
0 |
T180 |
40913 |
0 |
0 |
0 |
T181 |
41518 |
0 |
0 |
0 |
OupBufWreadyAfterSramRead_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
403567476 |
114452 |
0 |
0 |
T36 |
0 |
992 |
0 |
0 |
T69 |
45692 |
0 |
0 |
0 |
T83 |
177325 |
806 |
0 |
0 |
T84 |
0 |
930 |
0 |
0 |
T85 |
0 |
620 |
0 |
0 |
T86 |
0 |
620 |
0 |
0 |
T104 |
0 |
620 |
0 |
0 |
T117 |
0 |
1240 |
0 |
0 |
T126 |
0 |
806 |
0 |
0 |
T158 |
15307 |
0 |
0 |
0 |
T159 |
16177 |
0 |
0 |
0 |
T173 |
31076 |
0 |
0 |
0 |
T176 |
12237 |
0 |
0 |
0 |
T182 |
0 |
992 |
0 |
0 |
T183 |
0 |
682 |
0 |
0 |
T184 |
4323 |
0 |
0 |
0 |
T185 |
38338 |
0 |
0 |
0 |
T186 |
5437 |
0 |
0 |
0 |
T187 |
16538 |
0 |
0 |
0 |
SramRvalidAfterRead_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
403567476 |
114452 |
0 |
0 |
T36 |
0 |
992 |
0 |
0 |
T69 |
45692 |
0 |
0 |
0 |
T83 |
177325 |
806 |
0 |
0 |
T84 |
0 |
930 |
0 |
0 |
T85 |
0 |
620 |
0 |
0 |
T86 |
0 |
620 |
0 |
0 |
T104 |
0 |
620 |
0 |
0 |
T117 |
0 |
1240 |
0 |
0 |
T126 |
0 |
806 |
0 |
0 |
T158 |
15307 |
0 |
0 |
0 |
T159 |
16177 |
0 |
0 |
0 |
T173 |
31076 |
0 |
0 |
0 |
T176 |
12237 |
0 |
0 |
0 |
T182 |
0 |
992 |
0 |
0 |
T183 |
0 |
682 |
0 |
0 |
T184 |
4323 |
0 |
0 |
0 |
T185 |
38338 |
0 |
0 |
0 |
T186 |
5437 |
0 |
0 |
0 |
T187 |
16538 |
0 |
0 |
0 |
Line Coverage for Instance : tb.dut.i2c_core.u_fifos.u_acq_fifo_sram_adapter
| Line No. | Total | Covered | Percent |
TOTAL | | 44 | 44 | 100.00 |
CONT_ASSIGN | 120 | 1 | 1 | 100.00 |
CONT_ASSIGN | 121 | 1 | 1 | 100.00 |
CONT_ASSIGN | 125 | 1 | 1 | 100.00 |
CONT_ASSIGN | 150 | 1 | 1 | 100.00 |
CONT_ASSIGN | 151 | 1 | 1 | 100.00 |
CONT_ASSIGN | 156 | 1 | 1 | 100.00 |
CONT_ASSIGN | 157 | 1 | 1 | 100.00 |
CONT_ASSIGN | 162 | 1 | 1 | 100.00 |
ALWAYS | 164 | 3 | 3 | 100.00 |
ALWAYS | 174 | 28 | 28 | 100.00 |
CONT_ASSIGN | 228 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 240 | 1 | 1 | 100.00 |
CONT_ASSIGN | 244 | 1 | 1 | 100.00 |
CONT_ASSIGN | 249 | 1 | 1 | 100.00 |
119 );
120 1/1 assign inp_buf_wvalid = fifo_wvalid_i && fifo_wready_o;
Tests: T1 T2 T3
121 1/1 assign oup_buf_almost_full = oup_buf_depth >= OupBufDepthW'(OupBufDepth - 1);
Tests: T1 T2 T3
122
123 // Signal whether we access the SRAM in this cycle
124 logic sram_access;
125 1/1 assign sram_access = sram_req_o && sram_gnt_i;
Tests: T1 T2 T3
126
127 // SRAM read and write addresses
128 logic [SramAw-1:0] sram_wr_addr, sram_rd_addr;
129 logic [SramPtrW-1:0] sram_wr_ptr, sram_rd_ptr;
130 logic [SramDepthW-1:0] sram_depth;
131 logic sram_incr_wr_ptr, sram_incr_rd_ptr;
132 logic sram_full, sram_empty;
133 logic sram_ptrs_err;
134 prim_fifo_sync_cnt #(
135 .Depth (SramFifoDepth),
136 .Secure(1'b0)
137 ) u_sram_ptrs (
138 .clk_i,
139 .rst_ni,
140 .clr_i,
141 .incr_wptr_i(sram_incr_wr_ptr),
142 .incr_rptr_i(sram_incr_rd_ptr),
143 .wptr_o (sram_wr_ptr),
144 .rptr_o (sram_rd_ptr),
145 .full_o (sram_full),
146 .empty_o (sram_empty),
147 .depth_o (sram_depth),
148 .err_o (sram_ptrs_err)
149 );
150 1/1 assign sram_incr_wr_ptr = sram_access && sram_write_o;
Tests: T1 T2 T3
151 1/1 assign sram_incr_rd_ptr = sram_access && !sram_write_o;
Tests: T1 T2 T3
152 if (SramAddrLeadingZeros > 0) begin : gen_zero_extend_sram_addrs
153 assign sram_wr_addr = {{SramAddrLeadingZeros{1'b0}}, sram_wr_ptr} + SramBaseAddr;
154 assign sram_rd_addr = {{SramAddrLeadingZeros{1'b0}}, sram_rd_ptr} + SramBaseAddr;
155 end else begin : gen_no_zero_extend_sram_addrs
156 1/1 assign sram_wr_addr = sram_wr_ptr + SramBaseAddr;
Tests: T1 T2 T3
157 1/1 assign sram_rd_addr = sram_rd_ptr + SramBaseAddr;
Tests: T1 T2 T3
158 end
159
160 // FF to remember whether we read from the SRAM in the previous clock cycle.
161 logic sram_read_in_prev_cyc_d, sram_read_in_prev_cyc_q;
162 1/1 assign sram_read_in_prev_cyc_d = clr_i ? 1'b0 : sram_incr_rd_ptr;
Tests: T1 T2 T3
163 always_ff @(posedge clk_i or negedge rst_ni) begin
164 1/1 if (!rst_ni) begin
Tests: T1 T2 T3
165 1/1 sram_read_in_prev_cyc_q <= 1'b0;
Tests: T1 T2 T3
166 end else begin
167 1/1 sram_read_in_prev_cyc_q <= sram_read_in_prev_cyc_d;
Tests: T1 T2 T3
168 end
169 end
170
171 // Control logic for FIFO interface wready, output buffer writes, and SRAM requests
172 logic state_err;
173 always_comb begin
174 1/1 inp_buf_rready = 1'b0;
Tests: T1 T2 T3
175 1/1 oup_buf_wvalid = 1'b0;
Tests: T1 T2 T3
176 1/1 oup_buf_wdata = inp_buf_rdata;
Tests: T1 T2 T3
177 1/1 sram_req_o = 1'b0;
Tests: T1 T2 T3
178 1/1 sram_write_o = 1'b0;
Tests: T1 T2 T3
179 1/1 sram_addr_o = sram_wr_addr;
Tests: T1 T2 T3
180 1/1 state_err = 1'b0;
Tests: T1 T2 T3
181
182 // If the SRAM was read in the previous cycle, write the read data to the output buffer.
183 1/1 if (sram_read_in_prev_cyc_q) begin
Tests: T1 T2 T3
184 1/1 oup_buf_wvalid = 1'b1;
Tests: T2 T5 T7
185 1/1 oup_buf_wdata = sram_rdata_i;
Tests: T2 T5 T7
186 // The output buffer must be ready; otherwise we are in an erroneous state.
187 1/1 state_err = !oup_buf_wready;
Tests: T2 T5 T7
188 end
MISSING_ELSE
189
190 // If the SRAM is not empty, data from the input buffer must flow via the SRAM.
191 1/1 if (!sram_empty) begin
Tests: T1 T2 T3
192
193 // Prioritize refilling of the output buffer: if the output buffer is not being filled to the
194 // last slot in the current cycle or it is being read in the current cycle, read from the SRAM
195 // so the output buffer can be written in the next cycle.
196 1/1 if (!((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full)
Tests: T2 T5 T7
197 || (fifo_rvalid_o && fifo_rready_i)) begin
198 1/1 sram_req_o = 1'b1;
Tests: T2 T5 T7
199 1/1 sram_write_o = 1'b0;
Tests: T2 T5 T7
200 1/1 sram_addr_o = sram_rd_addr;
Tests: T2 T5 T7
201
202 // If the output buffer is full (and not being read), drain the input buffer into the SRAM.
203 end else begin
204 1/1 sram_req_o = !sram_full && inp_buf_rvalid;
Tests: T2 T5 T7
205 1/1 sram_write_o = 1'b1;
Tests: T2 T5 T7
206 1/1 sram_addr_o = sram_wr_addr;
Tests: T2 T5 T7
207 1/1 inp_buf_rready = !sram_full && sram_gnt_i;
Tests: T2 T5 T7
208 end
209
210 // If the SRAM is empty, data must flow from the input buffer to the output buffer if the output
211 // buffer is ready and is not receiving data read from the SRAM in the previous cycle
212 1/1 end else if (oup_buf_wready && !sram_read_in_prev_cyc_q) begin
Tests: T1 T2 T3
213 1/1 oup_buf_wvalid = inp_buf_rvalid;
Tests: T1 T2 T3
214 1/1 oup_buf_wdata = inp_buf_rdata;
Tests: T1 T2 T3
215 1/1 inp_buf_rready = oup_buf_wready;
Tests: T1 T2 T3
216
217 // Otherwise the SRAM is empty but the output buffer cannot take the data from the input buffer,
218 // so drain the input buffer into the SRAM.
219 end else begin
220 1/1 sram_req_o = !sram_full && inp_buf_rvalid;
Tests: T1 T2 T3
221 1/1 sram_write_o = 1'b1;
Tests: T1 T2 T3
222 1/1 sram_addr_o = sram_wr_addr;
Tests: T1 T2 T3
223 1/1 inp_buf_rready = !sram_full && sram_gnt_i;
Tests: T1 T2 T3
224 end
225 end
226
227 // Error output is high if any of the internal errors is high
228 1/1 assign err_o = |{inp_buf_err, oup_buf_err, sram_ptrs_err, state_err};
Tests: T1 T2 T3
229
230 // The SRAM and the output buffer together form the entire architectural capacity of the FIFO.
231 // Thus, when both are full, the FIFO is no longer ready to receive writes even though the input
232 // buffer could store one additional entry. This ensures that in the cycle after an entry has
233 // been read from the full FIFO, the next entry can be written to the FIFO.
234 // (It may be possible that all input buffer slots except one can be counted to the architectural
235 // capacity of the FIFO, but this is a relatively small optimization left for future work.)
236 1/1 assign fifo_wready_o = inp_buf_wready && !(sram_full && oup_buf_full);
Tests: T1 T2 T3
237
238 // The current depth of the FIFO represented by this module is the depth of all buffers plus the
239 // FIFO in the SRAM plus one if there's an entry in transition between SRAM and output buffer.
240 1/1 assign fifo_depth_o = DepthW'(inp_buf_depth) + DepthW'(sram_depth) + DepthW'(oup_buf_depth) +
Tests: T1 T2 T3
241 DepthW'(sram_read_in_prev_cyc_q);
242
243 // SRAM write data always comes from the input buffer.
244 1/1 assign sram_wdata_o = inp_buf_rdata;
Tests: T1 T2 T3
245 assign sram_wmask_o = '1;
246
247 // `sram_rvalid_i` is only used for assertions.
248 logic unused_sram_rvalid;
249 1/1 assign unused_sram_rvalid = sram_rvalid_i;
Tests: T1 T2 T3
Cond Coverage for Instance : tb.dut.i2c_core.u_fifos.u_acq_fifo_sram_adapter
| Total | Covered | Percent |
Conditions | 51 | 42 | 82.35 |
Logical | 51 | 42 | 82.35 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 120
EXPRESSION (fifo_wvalid_i && fifo_wready_o)
------1------ ------2------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T49,T50 |
1 | 1 | Covered | T2,T3,T5 |
LINE 125
EXPRESSION (sram_req_o && sram_gnt_i)
-----1---- -----2----
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Not Covered | |
1 | 1 | Covered | T2,T5,T7 |
LINE 150
EXPRESSION (sram_access && sram_write_o)
-----1----- ------2-----
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T2,T5,T7 |
1 | 1 | Covered | T2,T5,T7 |
LINE 151
EXPRESSION (sram_access && ((!sram_write_o)))
-----1----- --------2--------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T2,T5,T7 |
1 | 1 | Covered | T2,T5,T7 |
LINE 162
EXPRESSION (clr_i ? 1'b0 : sram_incr_rd_ptr)
--1--
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 196
EXPRESSION (( ! ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full) ) || (fifo_rvalid_o && fifo_rready_i))
-------------------------------1------------------------------- ----------------2---------------
-1- | -2- | Status | Tests |
0 | 0 | Covered | T2,T5,T7 |
0 | 1 | Covered | T2,T5,T7 |
1 | 0 | Covered | T50,T161,T162 |
LINE 196
SUB-EXPRESSION ( ! ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full) )
----------------------------1----------------------------
-1- | Status | Tests |
0 | Covered | T50,T161,T162 |
1 | Covered | T2,T5,T7 |
LINE 196
SUB-EXPRESSION ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full)
-------------------1------------------- ------2-----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T50,T161,T162 |
0 | 1 | Covered | T2,T5,T7 |
1 | 0 | Covered | T2,T5,T7 |
LINE 196
SUB-EXPRESSION (oup_buf_almost_full && oup_buf_wvalid)
---------1--------- -------2------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T2,T5,T7 |
1 | 1 | Covered | T2,T5,T7 |
LINE 196
SUB-EXPRESSION (fifo_rvalid_o && fifo_rready_i)
------1------ ------2------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T2,T5,T7 |
1 | 1 | Covered | T2,T5,T7 |
LINE 204
EXPRESSION (((!sram_full)) && inp_buf_rvalid)
-------1------ -------2------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T2,T5,T7 |
1 | 1 | Covered | T2,T5,T7 |
LINE 207
EXPRESSION (((!sram_full)) && sram_gnt_i)
-------1------ -----2----
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T2,T5,T7 |
1 | 1 | Covered | T2,T5,T7 |
LINE 212
EXPRESSION (oup_buf_wready && ((!sram_read_in_prev_cyc_q)))
-------1------ --------------2-------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T2,T5,T7 |
1 | 1 | Covered | T1,T2,T3 |
LINE 220
EXPRESSION (((!sram_full)) && inp_buf_rvalid)
-------1------ -------2------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T2,T5,T7 |
LINE 223
EXPRESSION (((!sram_full)) && sram_gnt_i)
-------1------ -----2----
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T2,T5,T7 |
LINE 236
EXPRESSION (inp_buf_wready && ( ! (sram_full && oup_buf_full) ))
-------1------ ----------------2----------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T49,T50,T62 |
1 | 1 | Covered | T1,T2,T3 |
LINE 236
SUB-EXPRESSION ( ! (sram_full && oup_buf_full) )
-------------1-------------
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T49,T50,T62 |
LINE 236
SUB-EXPRESSION (sram_full && oup_buf_full)
----1---- ------2-----
-1- | -2- | Status | Tests |
0 | 1 | Covered | T2,T3,T5 |
1 | 0 | Not Covered | |
1 | 1 | Covered | T49,T50,T62 |
Branch Coverage for Instance : tb.dut.i2c_core.u_fifos.u_acq_fifo_sram_adapter
| Line No. | Total | Covered | Percent |
Branches |
|
10 |
10 |
100.00 |
TERNARY |
162 |
2 |
2 |
100.00 |
IF |
164 |
2 |
2 |
100.00 |
IF |
183 |
2 |
2 |
100.00 |
IF |
191 |
4 |
4 |
100.00 |
162 assign sram_read_in_prev_cyc_d = clr_i ? 1'b0 : sram_incr_rd_ptr;
-1-
==>
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T1,T2,T3 |
164 if (!rst_ni) begin
-1-
165 sram_read_in_prev_cyc_q <= 1'b0;
==>
166 end else begin
167 sram_read_in_prev_cyc_q <= sram_read_in_prev_cyc_d;
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T1,T2,T3 |
0 |
Covered |
T1,T2,T3 |
183 if (sram_read_in_prev_cyc_q) begin
-1-
184 oup_buf_wvalid = 1'b1;
==>
185 oup_buf_wdata = sram_rdata_i;
186 // The output buffer must be ready; otherwise we are in an erroneous state.
187 state_err = !oup_buf_wready;
188 end
MISSING_ELSE
==>
Branches:
-1- | Status | Tests |
1 |
Covered |
T2,T5,T7 |
0 |
Covered |
T1,T2,T3 |
191 if (!sram_empty) begin
-1-
192
193 // Prioritize refilling of the output buffer: if the output buffer is not being filled to the
194 // last slot in the current cycle or it is being read in the current cycle, read from the SRAM
195 // so the output buffer can be written in the next cycle.
196 if (!((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full)
-2-
197 || (fifo_rvalid_o && fifo_rready_i)) begin
198 sram_req_o = 1'b1;
==>
199 sram_write_o = 1'b0;
200 sram_addr_o = sram_rd_addr;
201
202 // If the output buffer is full (and not being read), drain the input buffer into the SRAM.
203 end else begin
204 sram_req_o = !sram_full && inp_buf_rvalid;
==>
205 sram_write_o = 1'b1;
206 sram_addr_o = sram_wr_addr;
207 inp_buf_rready = !sram_full && sram_gnt_i;
208 end
209
210 // If the SRAM is empty, data must flow from the input buffer to the output buffer if the output
211 // buffer is ready and is not receiving data read from the SRAM in the previous cycle
212 end else if (oup_buf_wready && !sram_read_in_prev_cyc_q) begin
-3-
213 oup_buf_wvalid = inp_buf_rvalid;
==>
214 oup_buf_wdata = inp_buf_rdata;
215 inp_buf_rready = oup_buf_wready;
216
217 // Otherwise the SRAM is empty but the output buffer cannot take the data from the input buffer,
218 // so drain the input buffer into the SRAM.
219 end else begin
220 sram_req_o = !sram_full && inp_buf_rvalid;
==>
Branches:
-1- | -2- | -3- | Status | Tests |
1 |
1 |
- |
Covered |
T2,T5,T7 |
1 |
0 |
- |
Covered |
T2,T5,T7 |
0 |
- |
1 |
Covered |
T1,T2,T3 |
0 |
- |
0 |
Covered |
T1,T2,T3 |
Assert Coverage for Instance : tb.dut.i2c_core.u_fifos.u_acq_fifo_sram_adapter
Assertion Details
MinimalSramAw_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1683 |
1683 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T4 |
1 |
1 |
0 |
0 |
T5 |
1 |
1 |
0 |
0 |
T6 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
MinimalSramFifoDepth_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1683 |
1683 |
0 |
0 |
T1 |
1 |
1 |
0 |
0 |
T2 |
1 |
1 |
0 |
0 |
T3 |
1 |
1 |
0 |
0 |
T4 |
1 |
1 |
0 |
0 |
T5 |
1 |
1 |
0 |
0 |
T6 |
1 |
1 |
0 |
0 |
T7 |
1 |
1 |
0 |
0 |
T8 |
1 |
1 |
0 |
0 |
T9 |
1 |
1 |
0 |
0 |
T10 |
1 |
1 |
0 |
0 |
NoErr_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
403567476 |
403397161 |
0 |
0 |
T1 |
6301 |
5876 |
0 |
0 |
T2 |
84174 |
84094 |
0 |
0 |
T3 |
17324 |
17245 |
0 |
0 |
T4 |
1584 |
1500 |
0 |
0 |
T5 |
270398 |
270348 |
0 |
0 |
T6 |
15707 |
15621 |
0 |
0 |
T7 |
15170 |
15119 |
0 |
0 |
T8 |
22887 |
22798 |
0 |
0 |
T9 |
115622 |
115532 |
0 |
0 |
T10 |
83333 |
83253 |
0 |
0 |
NoSramReadWhenEmpty_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
403567476 |
187019261 |
0 |
0 |
T1 |
6301 |
5876 |
0 |
0 |
T2 |
84174 |
83254 |
0 |
0 |
T3 |
17324 |
17245 |
0 |
0 |
T4 |
1584 |
1500 |
0 |
0 |
T5 |
270398 |
6050 |
0 |
0 |
T6 |
15707 |
15621 |
0 |
0 |
T7 |
15170 |
12679 |
0 |
0 |
T8 |
22887 |
22798 |
0 |
0 |
T9 |
115622 |
68161 |
0 |
0 |
T10 |
83333 |
83253 |
0 |
0 |
NoSramWriteWhenFull_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
403567476 |
61139 |
0 |
0 |
T15 |
82001 |
0 |
0 |
0 |
T25 |
29359 |
0 |
0 |
0 |
T49 |
252002 |
15 |
0 |
0 |
T50 |
240129 |
15 |
0 |
0 |
T52 |
0 |
18 |
0 |
0 |
T62 |
0 |
1761 |
0 |
0 |
T63 |
0 |
6 |
0 |
0 |
T64 |
0 |
7 |
0 |
0 |
T65 |
106672 |
0 |
0 |
0 |
T68 |
0 |
894 |
0 |
0 |
T69 |
0 |
1095 |
0 |
0 |
T73 |
89132 |
0 |
0 |
0 |
T74 |
8012 |
0 |
0 |
0 |
T80 |
2276 |
0 |
0 |
0 |
T100 |
1038 |
0 |
0 |
0 |
T154 |
0 |
18 |
0 |
0 |
T163 |
0 |
1238 |
0 |
0 |
T170 |
3564 |
0 |
0 |
0 |
OupBufWreadyAfterSramRead_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
403567476 |
232778 |
0 |
0 |
T2 |
84174 |
6 |
0 |
0 |
T3 |
17324 |
0 |
0 |
0 |
T4 |
1584 |
0 |
0 |
0 |
T5 |
270398 |
144 |
0 |
0 |
T6 |
15707 |
0 |
0 |
0 |
T7 |
15170 |
13 |
0 |
0 |
T8 |
22887 |
0 |
0 |
0 |
T9 |
115622 |
253 |
0 |
0 |
T10 |
83333 |
0 |
0 |
0 |
T11 |
73129 |
0 |
0 |
0 |
T45 |
0 |
340 |
0 |
0 |
T49 |
0 |
36 |
0 |
0 |
T50 |
0 |
36 |
0 |
0 |
T65 |
0 |
89 |
0 |
0 |
T72 |
0 |
12 |
0 |
0 |
T172 |
0 |
140 |
0 |
0 |
SramRvalidAfterRead_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
403567476 |
232778 |
0 |
0 |
T2 |
84174 |
6 |
0 |
0 |
T3 |
17324 |
0 |
0 |
0 |
T4 |
1584 |
0 |
0 |
0 |
T5 |
270398 |
144 |
0 |
0 |
T6 |
15707 |
0 |
0 |
0 |
T7 |
15170 |
13 |
0 |
0 |
T8 |
22887 |
0 |
0 |
0 |
T9 |
115622 |
253 |
0 |
0 |
T10 |
83333 |
0 |
0 |
0 |
T11 |
73129 |
0 |
0 |
0 |
T45 |
0 |
340 |
0 |
0 |
T49 |
0 |
36 |
0 |
0 |
T50 |
0 |
36 |
0 |
0 |
T65 |
0 |
89 |
0 |
0 |
T72 |
0 |
12 |
0 |
0 |
T172 |
0 |
140 |
0 |
0 |