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: T5 T6 T7
185 1/1 oup_buf_wdata = sram_rdata_i;
Tests: T5 T6 T7
186 // The output buffer must be ready; otherwise we are in an erroneous state.
187 1/1 state_err = !oup_buf_wready;
Tests: T5 T6 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 T4 T5
197 || (fifo_rvalid_o && fifo_rready_i)) begin
198 1/1 sram_req_o = 1'b1;
Tests: T5 T6 T7
199 1/1 sram_write_o = 1'b0;
Tests: T5 T6 T7
200 1/1 sram_addr_o = sram_rd_addr;
Tests: T5 T6 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 T4 T5
205 1/1 sram_write_o = 1'b1;
Tests: T2 T4 T5
206 1/1 sram_addr_o = sram_wr_addr;
Tests: T2 T4 T5
207 1/1 inp_buf_rready = !sram_full && sram_gnt_i;
Tests: T2 T4 T5
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: T7 T43 T46
185 1/1 oup_buf_wdata = sram_rdata_i;
Tests: T7 T43 T46
186 // The output buffer must be ready; otherwise we are in an erroneous state.
187 1/1 state_err = !oup_buf_wready;
Tests: T7 T43 T46
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: T7 T43 T46
197 || (fifo_rvalid_o && fifo_rready_i)) begin
198 1/1 sram_req_o = 1'b1;
Tests: T7 T43 T46
199 1/1 sram_write_o = 1'b0;
Tests: T7 T43 T46
200 1/1 sram_addr_o = sram_rd_addr;
Tests: T7 T43 T46
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: T7 T43 T46
205 1/1 sram_write_o = 1'b1;
Tests: T7 T43 T46
206 1/1 sram_addr_o = sram_wr_addr;
Tests: T7 T43 T46
207 1/1 inp_buf_rready = !sram_full && sram_gnt_i;
Tests: T7 T43 T46
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 | 43 | 84.31 |
Logical | 51 | 43 | 84.31 |
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 | T9,T48,T49 |
1 | 1 | Covered | T2,T3,T4 |
LINE 125
EXPRESSION (sram_req_o && sram_gnt_i)
-----1---- -----2----
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T87 |
1 | 1 | Covered | T2,T4,T5 |
LINE 150
EXPRESSION (sram_access && sram_write_o)
-----1----- ------2-----
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T5,T6,T7 |
1 | 1 | Covered | T2,T4,T5 |
LINE 151
EXPRESSION (sram_access && ((!sram_write_o)))
-----1----- --------2--------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T2,T4,T5 |
1 | 1 | Covered | T5,T6,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,T4,T5 |
0 | 1 | Covered | T5,T6,T7 |
1 | 0 | Covered | T55,T162 |
LINE 196
SUB-EXPRESSION ( ! ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full) )
----------------------------1----------------------------
-1- | Status | Tests |
0 | Covered | T55,T162 |
1 | Covered | T2,T4,T5 |
LINE 196
SUB-EXPRESSION ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full)
-------------------1------------------- ------2-----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T55,T162 |
0 | 1 | Covered | T2,T4,T5 |
1 | 0 | Covered | T5,T6,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,T4,T5 |
1 | 1 | Covered | T5,T6,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,T4,T5 |
1 | 1 | Covered | T5,T6,T7 |
LINE 204
EXPRESSION (((!sram_full)) && inp_buf_rvalid)
-------1------ -------2------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T2,T4,T5 |
1 | 1 | Covered | T2,T4,T5 |
LINE 207
EXPRESSION (((!sram_full)) && sram_gnt_i)
-------1------ -----2----
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T2,T4,T5 |
1 | 1 | Covered | T2,T4,T5 |
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 | T5,T7,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,T4,T5 |
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,T4,T5 |
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 | T4,T9,T44 |
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 | T4,T9,T44 |
LINE 236
SUB-EXPRESSION (sram_full && oup_buf_full)
----1---- ------2-----
-1- | -2- | Status | Tests |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Not Covered | |
1 | 1 | Covered | T4,T9,T44 |
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 |
T5,T6,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 |
T5,T6,T7 |
1 |
0 |
- |
Covered |
T2,T4,T5 |
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 |
6716 |
6716 |
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 |
6716 |
6716 |
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 |
1638596348 |
1637895392 |
0 |
0 |
T1 |
5184 |
4964 |
0 |
0 |
T2 |
39896 |
39520 |
0 |
0 |
T3 |
51780 |
51508 |
0 |
0 |
T4 |
47924 |
47572 |
0 |
0 |
T5 |
123108 |
122780 |
0 |
0 |
T6 |
30244 |
28236 |
0 |
0 |
T7 |
237580 |
237312 |
0 |
0 |
T8 |
43088 |
42864 |
0 |
0 |
T9 |
545680 |
545344 |
0 |
0 |
T10 |
23528 |
17720 |
0 |
0 |
NoSramReadWhenEmpty_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1638596348 |
1314936603 |
0 |
0 |
T1 |
5184 |
4964 |
0 |
0 |
T2 |
39896 |
32856 |
0 |
0 |
T3 |
51780 |
51508 |
0 |
0 |
T4 |
47924 |
38222 |
0 |
0 |
T5 |
123108 |
103413 |
0 |
0 |
T6 |
30244 |
27734 |
0 |
0 |
T7 |
237580 |
190786 |
0 |
0 |
T8 |
43088 |
38456 |
0 |
0 |
T9 |
545680 |
418780 |
0 |
0 |
T10 |
23528 |
17720 |
0 |
0 |
NoSramWriteWhenFull_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1638596348 |
22835856 |
0 |
0 |
T4 |
11981 |
17 |
0 |
0 |
T11 |
44679 |
0 |
0 |
0 |
T16 |
0 |
81646 |
0 |
0 |
T20 |
10119 |
0 |
0 |
0 |
T22 |
6237 |
0 |
0 |
0 |
T32 |
56665 |
0 |
0 |
0 |
T35 |
12728 |
0 |
0 |
0 |
T45 |
9316 |
0 |
0 |
0 |
T48 |
219372 |
20 |
0 |
0 |
T49 |
0 |
16 |
0 |
0 |
T60 |
38910 |
1202 |
0 |
0 |
T61 |
58322 |
5 |
0 |
0 |
T62 |
0 |
21 |
0 |
0 |
T63 |
112281 |
0 |
0 |
0 |
T64 |
101943 |
0 |
0 |
0 |
T66 |
53016 |
1198 |
0 |
0 |
T67 |
0 |
1581 |
0 |
0 |
T71 |
16396 |
0 |
0 |
0 |
T72 |
177908 |
0 |
0 |
0 |
T73 |
84823 |
0 |
0 |
0 |
T74 |
36166 |
0 |
0 |
0 |
T154 |
20132 |
4851 |
0 |
0 |
T155 |
64112 |
0 |
0 |
0 |
T163 |
0 |
3 |
0 |
0 |
T164 |
0 |
20 |
0 |
0 |
T165 |
0 |
5783 |
0 |
0 |
T166 |
0 |
944 |
0 |
0 |
T167 |
0 |
3429 |
0 |
0 |
T168 |
0 |
147388 |
0 |
0 |
T169 |
0 |
4696 |
0 |
0 |
T170 |
0 |
3512 |
0 |
0 |
T171 |
0 |
176725 |
0 |
0 |
T172 |
0 |
162405 |
0 |
0 |
T173 |
0 |
210692 |
0 |
0 |
T174 |
48522 |
0 |
0 |
0 |
T175 |
81968 |
0 |
0 |
0 |
OupBufWreadyAfterSramRead_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1638596348 |
643923 |
0 |
0 |
T5 |
30777 |
95 |
0 |
0 |
T6 |
7561 |
1 |
0 |
0 |
T7 |
178185 |
285 |
0 |
0 |
T8 |
32316 |
0 |
0 |
0 |
T9 |
545680 |
682 |
0 |
0 |
T10 |
23528 |
0 |
0 |
0 |
T11 |
0 |
76 |
0 |
0 |
T17 |
38865 |
0 |
0 |
0 |
T18 |
0 |
1 |
0 |
0 |
T21 |
0 |
54 |
0 |
0 |
T22 |
0 |
5 |
0 |
0 |
T32 |
0 |
37 |
0 |
0 |
T34 |
8189 |
0 |
0 |
0 |
T38 |
0 |
176 |
0 |
0 |
T39 |
0 |
21 |
0 |
0 |
T40 |
3464 |
0 |
0 |
0 |
T41 |
20668 |
0 |
0 |
0 |
T42 |
53320 |
0 |
0 |
0 |
T43 |
23755 |
11 |
0 |
0 |
T44 |
38625 |
0 |
0 |
0 |
T45 |
0 |
7 |
0 |
0 |
T46 |
0 |
160 |
0 |
0 |
T61 |
0 |
266 |
0 |
0 |
T71 |
0 |
1 |
0 |
0 |
T72 |
0 |
45 |
0 |
0 |
T73 |
0 |
441 |
0 |
0 |
T75 |
9748 |
0 |
0 |
0 |
T153 |
0 |
130 |
0 |
0 |
T154 |
0 |
86 |
0 |
0 |
T174 |
0 |
1 |
0 |
0 |
SramRvalidAfterRead_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1638596348 |
643923 |
0 |
0 |
T5 |
30777 |
95 |
0 |
0 |
T6 |
7561 |
1 |
0 |
0 |
T7 |
178185 |
285 |
0 |
0 |
T8 |
32316 |
0 |
0 |
0 |
T9 |
545680 |
682 |
0 |
0 |
T10 |
23528 |
0 |
0 |
0 |
T11 |
0 |
76 |
0 |
0 |
T17 |
38865 |
0 |
0 |
0 |
T18 |
0 |
1 |
0 |
0 |
T21 |
0 |
54 |
0 |
0 |
T22 |
0 |
5 |
0 |
0 |
T32 |
0 |
37 |
0 |
0 |
T34 |
8189 |
0 |
0 |
0 |
T38 |
0 |
176 |
0 |
0 |
T39 |
0 |
21 |
0 |
0 |
T40 |
3464 |
0 |
0 |
0 |
T41 |
20668 |
0 |
0 |
0 |
T42 |
53320 |
0 |
0 |
0 |
T43 |
23755 |
11 |
0 |
0 |
T44 |
38625 |
0 |
0 |
0 |
T45 |
0 |
7 |
0 |
0 |
T46 |
0 |
160 |
0 |
0 |
T61 |
0 |
266 |
0 |
0 |
T71 |
0 |
1 |
0 |
0 |
T72 |
0 |
45 |
0 |
0 |
T73 |
0 |
441 |
0 |
0 |
T75 |
9748 |
0 |
0 |
0 |
T153 |
0 |
130 |
0 |
0 |
T154 |
0 |
86 |
0 |
0 |
T174 |
0 |
1 |
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: T5 T6 T18
185 1/1 oup_buf_wdata = sram_rdata_i;
Tests: T5 T6 T18
186 // The output buffer must be ready; otherwise we are in an erroneous state.
187 1/1 state_err = !oup_buf_wready;
Tests: T5 T6 T18
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 T6
197 || (fifo_rvalid_o && fifo_rready_i)) begin
198 1/1 sram_req_o = 1'b1;
Tests: T5 T6 T18
199 1/1 sram_write_o = 1'b0;
Tests: T5 T6 T18
200 1/1 sram_addr_o = sram_rd_addr;
Tests: T5 T6 T18
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 T6
205 1/1 sram_write_o = 1'b1;
Tests: T2 T5 T6
206 1/1 sram_addr_o = sram_wr_addr;
Tests: T2 T5 T6
207 1/1 inp_buf_rready = !sram_full && sram_gnt_i;
Tests: T2 T5 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
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 | T2,T3,T4 |
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,T6 |
LINE 150
EXPRESSION (sram_access && sram_write_o)
-----1----- ------2-----
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T5,T6,T18 |
1 | 1 | Covered | T2,T5,T6 |
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,T6 |
1 | 1 | Covered | T5,T6,T18 |
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,T6 |
0 | 1 | Covered | T5,T6,T18 |
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,T5,T6 |
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,T5,T6 |
1 | 0 | Covered | T5,T6,T22 |
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,T6 |
1 | 1 | Covered | T5,T6,T22 |
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,T6 |
1 | 1 | Covered | T5,T6,T18 |
LINE 204
EXPRESSION (((!sram_full)) && inp_buf_rvalid)
-------1------ -------2------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T2,T5,T6 |
1 | 1 | Covered | T2,T5,T6 |
LINE 207
EXPRESSION (((!sram_full)) && sram_gnt_i)
-------1------ -----2----
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T2,T5,T6 |
1 | 1 | Covered | T2,T5,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 | T5,T18,T22 |
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,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 | T2,T5,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 | T154,T165,T16 |
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 | T154,T165,T16 |
LINE 236
SUB-EXPRESSION (sram_full && oup_buf_full)
----1---- ------2-----
-1- | -2- | Status | Tests |
0 | 1 | Covered | T2,T3,T4 |
1 | 0 | Not Covered | |
1 | 1 | Covered | T154,T165,T16 |
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 |
T5,T6,T18 |
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 |
T5,T6,T18 |
1 |
0 |
- |
Covered |
T2,T5,T6 |
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 |
1679 |
1679 |
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 |
1679 |
1679 |
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 |
409649087 |
409473848 |
0 |
0 |
T1 |
1296 |
1241 |
0 |
0 |
T2 |
9974 |
9880 |
0 |
0 |
T3 |
12945 |
12877 |
0 |
0 |
T4 |
11981 |
11893 |
0 |
0 |
T5 |
30777 |
30695 |
0 |
0 |
T6 |
7561 |
7059 |
0 |
0 |
T7 |
59395 |
59328 |
0 |
0 |
T8 |
10772 |
10716 |
0 |
0 |
T9 |
136420 |
136336 |
0 |
0 |
T10 |
5882 |
4430 |
0 |
0 |
NoSramReadWhenEmpty_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
409649087 |
348978013 |
0 |
0 |
T1 |
1296 |
1241 |
0 |
0 |
T2 |
9974 |
3216 |
0 |
0 |
T3 |
12945 |
12877 |
0 |
0 |
T4 |
11981 |
11893 |
0 |
0 |
T5 |
30777 |
11328 |
0 |
0 |
T6 |
7561 |
6557 |
0 |
0 |
T7 |
59395 |
59328 |
0 |
0 |
T8 |
10772 |
10716 |
0 |
0 |
T9 |
136420 |
136336 |
0 |
0 |
T10 |
5882 |
4430 |
0 |
0 |
NoSramWriteWhenFull_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
409649087 |
22313314 |
0 |
0 |
T11 |
44679 |
0 |
0 |
0 |
T16 |
0 |
81646 |
0 |
0 |
T20 |
10119 |
0 |
0 |
0 |
T32 |
56665 |
0 |
0 |
0 |
T35 |
12728 |
0 |
0 |
0 |
T48 |
219372 |
0 |
0 |
0 |
T64 |
101943 |
0 |
0 |
0 |
T66 |
53016 |
0 |
0 |
0 |
T154 |
20132 |
4851 |
0 |
0 |
T155 |
64112 |
0 |
0 |
0 |
T165 |
0 |
5783 |
0 |
0 |
T167 |
0 |
3429 |
0 |
0 |
T168 |
0 |
147388 |
0 |
0 |
T169 |
0 |
4696 |
0 |
0 |
T170 |
0 |
3512 |
0 |
0 |
T171 |
0 |
176725 |
0 |
0 |
T172 |
0 |
162405 |
0 |
0 |
T173 |
0 |
210692 |
0 |
0 |
T175 |
81968 |
0 |
0 |
0 |
OupBufWreadyAfterSramRead_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
409649087 |
180126 |
0 |
0 |
T5 |
30777 |
95 |
0 |
0 |
T6 |
7561 |
1 |
0 |
0 |
T7 |
59395 |
0 |
0 |
0 |
T8 |
10772 |
0 |
0 |
0 |
T9 |
136420 |
0 |
0 |
0 |
T10 |
5882 |
0 |
0 |
0 |
T11 |
0 |
76 |
0 |
0 |
T18 |
0 |
1 |
0 |
0 |
T21 |
0 |
54 |
0 |
0 |
T22 |
0 |
5 |
0 |
0 |
T32 |
0 |
37 |
0 |
0 |
T38 |
0 |
176 |
0 |
0 |
T39 |
0 |
21 |
0 |
0 |
T40 |
866 |
0 |
0 |
0 |
T41 |
5167 |
0 |
0 |
0 |
T42 |
13330 |
0 |
0 |
0 |
T75 |
2437 |
0 |
0 |
0 |
T154 |
0 |
86 |
0 |
0 |
SramRvalidAfterRead_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
409649087 |
180126 |
0 |
0 |
T5 |
30777 |
95 |
0 |
0 |
T6 |
7561 |
1 |
0 |
0 |
T7 |
59395 |
0 |
0 |
0 |
T8 |
10772 |
0 |
0 |
0 |
T9 |
136420 |
0 |
0 |
0 |
T10 |
5882 |
0 |
0 |
0 |
T11 |
0 |
76 |
0 |
0 |
T18 |
0 |
1 |
0 |
0 |
T21 |
0 |
54 |
0 |
0 |
T22 |
0 |
5 |
0 |
0 |
T32 |
0 |
37 |
0 |
0 |
T38 |
0 |
176 |
0 |
0 |
T39 |
0 |
21 |
0 |
0 |
T40 |
866 |
0 |
0 |
0 |
T41 |
5167 |
0 |
0 |
0 |
T42 |
13330 |
0 |
0 |
0 |
T75 |
2437 |
0 |
0 |
0 |
T154 |
0 |
86 |
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: T7 T8 T42
185 1/1 oup_buf_wdata = sram_rdata_i;
Tests: T7 T8 T42
186 // The output buffer must be ready; otherwise we are in an erroneous state.
187 1/1 state_err = !oup_buf_wready;
Tests: T7 T8 T42
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: T7 T8 T42
197 || (fifo_rvalid_o && fifo_rready_i)) begin
198 1/1 sram_req_o = 1'b1;
Tests: T7 T8 T42
199 1/1 sram_write_o = 1'b0;
Tests: T7 T8 T42
200 1/1 sram_addr_o = sram_rd_addr;
Tests: T7 T8 T42
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: T7 T8 T42
205 1/1 sram_write_o = 1'b1;
Tests: T7 T8 T42
206 1/1 sram_addr_o = sram_wr_addr;
Tests: T7 T8 T42
207 1/1 inp_buf_rready = !sram_full && sram_gnt_i;
Tests: T7 T8 T42
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 | T7,T8,T42 |
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 | T7,T8,T42 |
LINE 150
EXPRESSION (sram_access && sram_write_o)
-----1----- ------2-----
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T7,T8,T42 |
1 | 1 | Covered | T7,T8,T42 |
LINE 151
EXPRESSION (sram_access && ((!sram_write_o)))
-----1----- --------2--------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T7,T8,T42 |
1 | 1 | Covered | T7,T8,T42 |
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 | T7,T8,T42 |
0 | 1 | Covered | T7,T8,T42 |
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 | T7,T8,T42 |
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 | T7,T8,T42 |
1 | 0 | Covered | T7,T8,T42 |
LINE 196
SUB-EXPRESSION (oup_buf_almost_full && oup_buf_wvalid)
---------1--------- -------2------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T7,T8,T42 |
1 | 1 | Covered | T7,T8,T42 |
LINE 196
SUB-EXPRESSION (fifo_rvalid_o && fifo_rready_i)
------1------ ------2------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T7,T8,T42 |
1 | 1 | Covered | T7,T8,T42 |
LINE 204
EXPRESSION (((!sram_full)) && inp_buf_rvalid)
-------1------ -------2------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T7,T8,T42 |
1 | 1 | Covered | T7,T8,T42 |
LINE 207
EXPRESSION (((!sram_full)) && sram_gnt_i)
-------1------ -----2----
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T7,T8,T42 |
1 | 1 | Covered | T7,T8,T42 |
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 | T7,T8,T42 |
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 | T7,T8,T42 |
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 | T7,T8,T42 |
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 | T44,T104,T58 |
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 | T44,T104,T58 |
LINE 236
SUB-EXPRESSION (sram_full && oup_buf_full)
----1---- ------2-----
-1- | -2- | Status | Tests |
0 | 1 | Covered | T7,T8,T42 |
1 | 0 | Not Covered | |
1 | 1 | Covered | T44,T104,T58 |
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 |
T7,T8,T42 |
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 |
T7,T8,T42 |
1 |
0 |
- |
Covered |
T7,T8,T42 |
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 |
1679 |
1679 |
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 |
1679 |
1679 |
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 |
409649087 |
409473848 |
0 |
0 |
T1 |
1296 |
1241 |
0 |
0 |
T2 |
9974 |
9880 |
0 |
0 |
T3 |
12945 |
12877 |
0 |
0 |
T4 |
11981 |
11893 |
0 |
0 |
T5 |
30777 |
30695 |
0 |
0 |
T6 |
7561 |
7059 |
0 |
0 |
T7 |
59395 |
59328 |
0 |
0 |
T8 |
10772 |
10716 |
0 |
0 |
T9 |
136420 |
136336 |
0 |
0 |
T10 |
5882 |
4430 |
0 |
0 |
NoSramReadWhenEmpty_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
409649087 |
388664492 |
0 |
0 |
T1 |
1296 |
1241 |
0 |
0 |
T2 |
9974 |
9880 |
0 |
0 |
T3 |
12945 |
12877 |
0 |
0 |
T4 |
11981 |
11893 |
0 |
0 |
T5 |
30777 |
30695 |
0 |
0 |
T6 |
7561 |
7059 |
0 |
0 |
T7 |
59395 |
45183 |
0 |
0 |
T8 |
10772 |
6308 |
0 |
0 |
T9 |
136420 |
136336 |
0 |
0 |
T10 |
5882 |
4430 |
0 |
0 |
NoSramWriteWhenFull_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
409649087 |
238351 |
0 |
0 |
T18 |
12660 |
0 |
0 |
0 |
T34 |
8189 |
0 |
0 |
0 |
T43 |
23755 |
0 |
0 |
0 |
T44 |
12875 |
7475 |
0 |
0 |
T46 |
23549 |
0 |
0 |
0 |
T58 |
0 |
8319 |
0 |
0 |
T59 |
0 |
8846 |
0 |
0 |
T60 |
38910 |
0 |
0 |
0 |
T61 |
58322 |
0 |
0 |
0 |
T69 |
14280 |
0 |
0 |
0 |
T104 |
0 |
982 |
0 |
0 |
T153 |
221414 |
0 |
0 |
0 |
T174 |
48522 |
0 |
0 |
0 |
T176 |
0 |
334 |
0 |
0 |
T177 |
0 |
62 |
0 |
0 |
T178 |
0 |
9027 |
0 |
0 |
T179 |
0 |
313 |
0 |
0 |
T180 |
0 |
6617 |
0 |
0 |
T181 |
0 |
8075 |
0 |
0 |
OupBufWreadyAfterSramRead_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
409649087 |
109929 |
0 |
0 |
T7 |
59395 |
115 |
0 |
0 |
T8 |
10772 |
22 |
0 |
0 |
T9 |
136420 |
0 |
0 |
0 |
T10 |
5882 |
0 |
0 |
0 |
T17 |
12955 |
0 |
0 |
0 |
T40 |
866 |
0 |
0 |
0 |
T41 |
5167 |
0 |
0 |
0 |
T42 |
13330 |
61 |
0 |
0 |
T43 |
0 |
15 |
0 |
0 |
T44 |
12875 |
0 |
0 |
0 |
T45 |
0 |
7 |
0 |
0 |
T63 |
0 |
129 |
0 |
0 |
T69 |
0 |
57 |
0 |
0 |
T71 |
0 |
39 |
0 |
0 |
T72 |
0 |
5 |
0 |
0 |
T73 |
0 |
152 |
0 |
0 |
T75 |
2437 |
0 |
0 |
0 |
SramRvalidAfterRead_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
409649087 |
109929 |
0 |
0 |
T7 |
59395 |
115 |
0 |
0 |
T8 |
10772 |
22 |
0 |
0 |
T9 |
136420 |
0 |
0 |
0 |
T10 |
5882 |
0 |
0 |
0 |
T17 |
12955 |
0 |
0 |
0 |
T40 |
866 |
0 |
0 |
0 |
T41 |
5167 |
0 |
0 |
0 |
T42 |
13330 |
61 |
0 |
0 |
T43 |
0 |
15 |
0 |
0 |
T44 |
12875 |
0 |
0 |
0 |
T45 |
0 |
7 |
0 |
0 |
T63 |
0 |
129 |
0 |
0 |
T69 |
0 |
57 |
0 |
0 |
T71 |
0 |
39 |
0 |
0 |
T72 |
0 |
5 |
0 |
0 |
T73 |
0 |
152 |
0 |
0 |
T75 |
2437 |
0 |
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: T9 T102 T84
185 1/1 oup_buf_wdata = sram_rdata_i;
Tests: T9 T102 T84
186 // The output buffer must be ready; otherwise we are in an erroneous state.
187 1/1 state_err = !oup_buf_wready;
Tests: T9 T102 T84
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: T4 T9 T83
197 || (fifo_rvalid_o && fifo_rready_i)) begin
198 1/1 sram_req_o = 1'b1;
Tests: T9 T102 T84
199 1/1 sram_write_o = 1'b0;
Tests: T9 T102 T84
200 1/1 sram_addr_o = sram_rd_addr;
Tests: T9 T102 T84
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: T4 T9 T83
205 1/1 sram_write_o = 1'b1;
Tests: T4 T9 T83
206 1/1 sram_addr_o = sram_wr_addr;
Tests: T4 T9 T83
207 1/1 inp_buf_rready = !sram_full && sram_gnt_i;
Tests: T4 T9 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 | T9,T102,T103 |
1 | 1 | Covered | T3,T4,T9 |
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 | T4,T9,T83 |
LINE 150
EXPRESSION (sram_access && sram_write_o)
-----1----- ------2-----
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T9,T102,T84 |
1 | 1 | Covered | T4,T9,T83 |
LINE 151
EXPRESSION (sram_access && ((!sram_write_o)))
-----1----- --------2--------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T4,T9,T83 |
1 | 1 | Covered | T9,T102,T84 |
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 | T4,T9,T83 |
0 | 1 | Covered | T9,T102,T84 |
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 | T4,T9,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 | T4,T9,T83 |
1 | 0 | Covered | T9,T102,T84 |
LINE 196
SUB-EXPRESSION (oup_buf_almost_full && oup_buf_wvalid)
---------1--------- -------2------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T4,T9,T83 |
1 | 1 | Covered | T9,T102,T84 |
LINE 196
SUB-EXPRESSION (fifo_rvalid_o && fifo_rready_i)
------1------ ------2------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T4,T9,T83 |
1 | 1 | Covered | T9,T102,T84 |
LINE 204
EXPRESSION (((!sram_full)) && inp_buf_rvalid)
-------1------ -------2------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T4,T9,T83 |
1 | 1 | Covered | T4,T9,T83 |
LINE 207
EXPRESSION (((!sram_full)) && sram_gnt_i)
-------1------ -----2----
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T4,T9,T83 |
1 | 1 | Covered | T4,T9,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 | T9,T102,T84 |
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 | T4,T9,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 | T4,T9,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 | T4,T9,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 | T4,T9,T83 |
LINE 236
SUB-EXPRESSION (sram_full && oup_buf_full)
----1---- ------2-----
-1- | -2- | Status | Tests |
0 | 1 | Covered | T4,T9,T83 |
1 | 0 | Not Covered | |
1 | 1 | Covered | T4,T9,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 |
T9,T102,T84 |
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 |
T9,T102,T84 |
1 |
0 |
- |
Covered |
T4,T9,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 |
1679 |
1679 |
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 |
1679 |
1679 |
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 |
409649087 |
409473848 |
0 |
0 |
T1 |
1296 |
1241 |
0 |
0 |
T2 |
9974 |
9880 |
0 |
0 |
T3 |
12945 |
12877 |
0 |
0 |
T4 |
11981 |
11893 |
0 |
0 |
T5 |
30777 |
30695 |
0 |
0 |
T6 |
7561 |
7059 |
0 |
0 |
T7 |
59395 |
59328 |
0 |
0 |
T8 |
10772 |
10716 |
0 |
0 |
T9 |
136420 |
136336 |
0 |
0 |
T10 |
5882 |
4430 |
0 |
0 |
NoSramReadWhenEmpty_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
409649087 |
385826856 |
0 |
0 |
T1 |
1296 |
1241 |
0 |
0 |
T2 |
9974 |
9880 |
0 |
0 |
T3 |
12945 |
12877 |
0 |
0 |
T4 |
11981 |
2543 |
0 |
0 |
T5 |
30777 |
30695 |
0 |
0 |
T6 |
7561 |
7059 |
0 |
0 |
T7 |
59395 |
59328 |
0 |
0 |
T8 |
10772 |
10716 |
0 |
0 |
T9 |
136420 |
9772 |
0 |
0 |
T10 |
5882 |
4430 |
0 |
0 |
NoSramWriteWhenFull_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
409649087 |
217990 |
0 |
0 |
T4 |
11981 |
17 |
0 |
0 |
T5 |
30777 |
0 |
0 |
0 |
T6 |
7561 |
0 |
0 |
0 |
T7 |
59395 |
0 |
0 |
0 |
T8 |
10772 |
0 |
0 |
0 |
T9 |
136420 |
2233 |
0 |
0 |
T10 |
5882 |
0 |
0 |
0 |
T40 |
866 |
0 |
0 |
0 |
T41 |
5167 |
0 |
0 |
0 |
T75 |
2437 |
0 |
0 |
0 |
T83 |
0 |
3 |
0 |
0 |
T84 |
0 |
767 |
0 |
0 |
T85 |
0 |
475 |
0 |
0 |
T102 |
0 |
2407 |
0 |
0 |
T103 |
0 |
3256 |
0 |
0 |
T182 |
0 |
10 |
0 |
0 |
T183 |
0 |
15 |
0 |
0 |
T184 |
0 |
3529 |
0 |
0 |
OupBufWreadyAfterSramRead_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
409649087 |
115816 |
0 |
0 |
T9 |
136420 |
682 |
0 |
0 |
T10 |
5882 |
0 |
0 |
0 |
T17 |
12955 |
0 |
0 |
0 |
T34 |
8189 |
0 |
0 |
0 |
T40 |
866 |
0 |
0 |
0 |
T41 |
5167 |
0 |
0 |
0 |
T42 |
13330 |
0 |
0 |
0 |
T43 |
23755 |
0 |
0 |
0 |
T44 |
12875 |
0 |
0 |
0 |
T75 |
2437 |
0 |
0 |
0 |
T84 |
0 |
1054 |
0 |
0 |
T85 |
0 |
806 |
0 |
0 |
T86 |
0 |
682 |
0 |
0 |
T102 |
0 |
682 |
0 |
0 |
T103 |
0 |
930 |
0 |
0 |
T184 |
0 |
992 |
0 |
0 |
T185 |
0 |
930 |
0 |
0 |
T186 |
0 |
744 |
0 |
0 |
T187 |
0 |
620 |
0 |
0 |
SramRvalidAfterRead_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
409649087 |
115816 |
0 |
0 |
T9 |
136420 |
682 |
0 |
0 |
T10 |
5882 |
0 |
0 |
0 |
T17 |
12955 |
0 |
0 |
0 |
T34 |
8189 |
0 |
0 |
0 |
T40 |
866 |
0 |
0 |
0 |
T41 |
5167 |
0 |
0 |
0 |
T42 |
13330 |
0 |
0 |
0 |
T43 |
23755 |
0 |
0 |
0 |
T44 |
12875 |
0 |
0 |
0 |
T75 |
2437 |
0 |
0 |
0 |
T84 |
0 |
1054 |
0 |
0 |
T85 |
0 |
806 |
0 |
0 |
T86 |
0 |
682 |
0 |
0 |
T102 |
0 |
682 |
0 |
0 |
T103 |
0 |
930 |
0 |
0 |
T184 |
0 |
992 |
0 |
0 |
T185 |
0 |
930 |
0 |
0 |
T186 |
0 |
744 |
0 |
0 |
T187 |
0 |
620 |
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: T7 T43 T46
185 1/1 oup_buf_wdata = sram_rdata_i;
Tests: T7 T43 T46
186 // The output buffer must be ready; otherwise we are in an erroneous state.
187 1/1 state_err = !oup_buf_wready;
Tests: T7 T43 T46
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: T7 T43 T46
197 || (fifo_rvalid_o && fifo_rready_i)) begin
198 1/1 sram_req_o = 1'b1;
Tests: T7 T43 T46
199 1/1 sram_write_o = 1'b0;
Tests: T7 T43 T46
200 1/1 sram_addr_o = sram_rd_addr;
Tests: T7 T43 T46
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: T7 T43 T46
205 1/1 sram_write_o = 1'b1;
Tests: T7 T43 T46
206 1/1 sram_addr_o = sram_wr_addr;
Tests: T7 T43 T46
207 1/1 inp_buf_rready = !sram_full && sram_gnt_i;
Tests: T7 T43 T46
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 | 43 | 84.31 |
Logical | 51 | 43 | 84.31 |
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 | T48,T49 |
1 | 1 | Covered | T7,T8,T42 |
LINE 125
EXPRESSION (sram_req_o && sram_gnt_i)
-----1---- -----2----
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T87 |
1 | 1 | Covered | T7,T43,T46 |
LINE 150
EXPRESSION (sram_access && sram_write_o)
-----1----- ------2-----
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T7,T43,T46 |
1 | 1 | Covered | T7,T43,T46 |
LINE 151
EXPRESSION (sram_access && ((!sram_write_o)))
-----1----- --------2--------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T7,T43,T46 |
1 | 1 | Covered | T7,T43,T46 |
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 | T7,T43,T46 |
0 | 1 | Covered | T7,T43,T46 |
1 | 0 | Covered | T55,T162 |
LINE 196
SUB-EXPRESSION ( ! ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full) )
----------------------------1----------------------------
-1- | Status | Tests |
0 | Covered | T55,T162 |
1 | Covered | T7,T43,T46 |
LINE 196
SUB-EXPRESSION ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full)
-------------------1------------------- ------2-----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T55,T162 |
0 | 1 | Covered | T7,T43,T46 |
1 | 0 | Covered | T7,T43,T46 |
LINE 196
SUB-EXPRESSION (oup_buf_almost_full && oup_buf_wvalid)
---------1--------- -------2------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T7,T43,T46 |
1 | 1 | Covered | T7,T43,T46 |
LINE 196
SUB-EXPRESSION (fifo_rvalid_o && fifo_rready_i)
------1------ ------2------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T7,T43,T46 |
1 | 1 | Covered | T7,T43,T46 |
LINE 204
EXPRESSION (((!sram_full)) && inp_buf_rvalid)
-------1------ -------2------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T7,T43,T46 |
1 | 1 | Covered | T7,T43,T46 |
LINE 207
EXPRESSION (((!sram_full)) && sram_gnt_i)
-------1------ -----2----
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T7,T43,T46 |
1 | 1 | Covered | T7,T43,T46 |
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 | T7,T43,T46 |
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 | T7,T43,T46 |
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 | T7,T43,T46 |
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 | T60,T61,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 | T60,T61,T62 |
LINE 236
SUB-EXPRESSION (sram_full && oup_buf_full)
----1---- ------2-----
-1- | -2- | Status | Tests |
0 | 1 | Covered | T7,T42,T44 |
1 | 0 | Not Covered | |
1 | 1 | Covered | T60,T61,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 |
T7,T43,T46 |
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 |
T7,T43,T46 |
1 |
0 |
- |
Covered |
T7,T43,T46 |
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 |
1679 |
1679 |
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 |
1679 |
1679 |
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 |
409649087 |
409473848 |
0 |
0 |
T1 |
1296 |
1241 |
0 |
0 |
T2 |
9974 |
9880 |
0 |
0 |
T3 |
12945 |
12877 |
0 |
0 |
T4 |
11981 |
11893 |
0 |
0 |
T5 |
30777 |
30695 |
0 |
0 |
T6 |
7561 |
7059 |
0 |
0 |
T7 |
59395 |
59328 |
0 |
0 |
T8 |
10772 |
10716 |
0 |
0 |
T9 |
136420 |
136336 |
0 |
0 |
T10 |
5882 |
4430 |
0 |
0 |
NoSramReadWhenEmpty_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
409649087 |
191467242 |
0 |
0 |
T1 |
1296 |
1241 |
0 |
0 |
T2 |
9974 |
9880 |
0 |
0 |
T3 |
12945 |
12877 |
0 |
0 |
T4 |
11981 |
11893 |
0 |
0 |
T5 |
30777 |
30695 |
0 |
0 |
T6 |
7561 |
7059 |
0 |
0 |
T7 |
59395 |
26947 |
0 |
0 |
T8 |
10772 |
10716 |
0 |
0 |
T9 |
136420 |
136336 |
0 |
0 |
T10 |
5882 |
4430 |
0 |
0 |
NoSramWriteWhenFull_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
409649087 |
66201 |
0 |
0 |
T22 |
6237 |
0 |
0 |
0 |
T45 |
9316 |
0 |
0 |
0 |
T48 |
0 |
20 |
0 |
0 |
T49 |
0 |
16 |
0 |
0 |
T60 |
38910 |
1202 |
0 |
0 |
T61 |
58322 |
5 |
0 |
0 |
T62 |
0 |
21 |
0 |
0 |
T63 |
112281 |
0 |
0 |
0 |
T66 |
0 |
1198 |
0 |
0 |
T67 |
0 |
1581 |
0 |
0 |
T71 |
16396 |
0 |
0 |
0 |
T72 |
177908 |
0 |
0 |
0 |
T73 |
84823 |
0 |
0 |
0 |
T74 |
36166 |
0 |
0 |
0 |
T163 |
0 |
3 |
0 |
0 |
T164 |
0 |
20 |
0 |
0 |
T166 |
0 |
944 |
0 |
0 |
T174 |
48522 |
0 |
0 |
0 |
OupBufWreadyAfterSramRead_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
409649087 |
238052 |
0 |
0 |
T7 |
59395 |
285 |
0 |
0 |
T8 |
10772 |
0 |
0 |
0 |
T9 |
136420 |
0 |
0 |
0 |
T10 |
5882 |
0 |
0 |
0 |
T17 |
12955 |
0 |
0 |
0 |
T40 |
866 |
0 |
0 |
0 |
T41 |
5167 |
0 |
0 |
0 |
T42 |
13330 |
0 |
0 |
0 |
T43 |
0 |
11 |
0 |
0 |
T44 |
12875 |
0 |
0 |
0 |
T45 |
0 |
7 |
0 |
0 |
T46 |
0 |
160 |
0 |
0 |
T61 |
0 |
266 |
0 |
0 |
T71 |
0 |
1 |
0 |
0 |
T72 |
0 |
45 |
0 |
0 |
T73 |
0 |
441 |
0 |
0 |
T75 |
2437 |
0 |
0 |
0 |
T153 |
0 |
130 |
0 |
0 |
T174 |
0 |
1 |
0 |
0 |
SramRvalidAfterRead_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
409649087 |
238052 |
0 |
0 |
T7 |
59395 |
285 |
0 |
0 |
T8 |
10772 |
0 |
0 |
0 |
T9 |
136420 |
0 |
0 |
0 |
T10 |
5882 |
0 |
0 |
0 |
T17 |
12955 |
0 |
0 |
0 |
T40 |
866 |
0 |
0 |
0 |
T41 |
5167 |
0 |
0 |
0 |
T42 |
13330 |
0 |
0 |
0 |
T43 |
0 |
11 |
0 |
0 |
T44 |
12875 |
0 |
0 |
0 |
T45 |
0 |
7 |
0 |
0 |
T46 |
0 |
160 |
0 |
0 |
T61 |
0 |
266 |
0 |
0 |
T71 |
0 |
1 |
0 |
0 |
T72 |
0 |
45 |
0 |
0 |
T73 |
0 |
441 |
0 |
0 |
T75 |
2437 |
0 |
0 |
0 |
T153 |
0 |
130 |
0 |
0 |
T174 |
0 |
1 |
0 |
0 |