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: T4 T5 T8
185 1/1 oup_buf_wdata = sram_rdata_i;
Tests: T4 T5 T8
186 // The output buffer must be ready; otherwise we are in an erroneous state.
187 1/1 state_err = !oup_buf_wready;
Tests: T4 T5 T8
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: T4 T5 T8
199 1/1 sram_write_o = 1'b0;
Tests: T4 T5 T8
200 1/1 sram_addr_o = sram_rd_addr;
Tests: T4 T5 T8
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 T48 T49
185 1/1 oup_buf_wdata = sram_rdata_i;
Tests: T7 T48 T49
186 // The output buffer must be ready; otherwise we are in an erroneous state.
187 1/1 state_err = !oup_buf_wready;
Tests: T7 T48 T49
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 T48 T49
197 || (fifo_rvalid_o && fifo_rready_i)) begin
198 1/1 sram_req_o = 1'b1;
Tests: T7 T48 T49
199 1/1 sram_write_o = 1'b0;
Tests: T7 T48 T49
200 1/1 sram_addr_o = sram_rd_addr;
Tests: T7 T48 T49
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 T48 T49
205 1/1 sram_write_o = 1'b1;
Tests: T7 T48 T49
206 1/1 sram_addr_o = sram_wr_addr;
Tests: T7 T48 T49
207 1/1 inp_buf_rready = !sram_full && sram_gnt_i;
Tests: T7 T48 T49
208 end
209
210 // If the SRAM is empty, data must flow from the input buffer to the output buffer if the output
211 // buffer is ready and is not receiving data read from the SRAM in the previous cycle
212 1/1 end else if (oup_buf_wready && !sram_read_in_prev_cyc_q) begin
Tests: T1 T2 T3
213 1/1 oup_buf_wvalid = inp_buf_rvalid;
Tests: T1 T2 T3
214 1/1 oup_buf_wdata = inp_buf_rdata;
Tests: T1 T2 T3
215 1/1 inp_buf_rready = oup_buf_wready;
Tests: T1 T2 T3
216
217 // Otherwise the SRAM is empty but the output buffer cannot take the data from the input buffer,
218 // so drain the input buffer into the SRAM.
219 end else begin
220 1/1 sram_req_o = !sram_full && inp_buf_rvalid;
Tests: T1 T2 T3
221 1/1 sram_write_o = 1'b1;
Tests: T1 T2 T3
222 1/1 sram_addr_o = sram_wr_addr;
Tests: T1 T2 T3
223 1/1 inp_buf_rready = !sram_full && sram_gnt_i;
Tests: T1 T2 T3
224 end
225 end
226
227 // Error output is high if any of the internal errors is high
228 1/1 assign err_o = |{inp_buf_err, oup_buf_err, sram_ptrs_err, state_err};
Tests: T1 T2 T3
229
230 // The SRAM and the output buffer together form the entire architectural capacity of the FIFO.
231 // Thus, when both are full, the FIFO is no longer ready to receive writes even though the input
232 // buffer could store one additional entry. This ensures that in the cycle after an entry has
233 // been read from the full FIFO, the next entry can be written to the FIFO.
234 // (It may be possible that all input buffer slots except one can be counted to the architectural
235 // capacity of the FIFO, but this is a relatively small optimization left for future work.)
236 1/1 assign fifo_wready_o = inp_buf_wready && !(sram_full && oup_buf_full);
Tests: T1 T2 T3
237
238 // The current depth of the FIFO represented by this module is the depth of all buffers plus the
239 // FIFO in the SRAM plus one if there's an entry in transition between SRAM and output buffer.
240 1/1 assign fifo_depth_o = DepthW'(inp_buf_depth) + DepthW'(sram_depth) + DepthW'(oup_buf_depth) +
Tests: T1 T2 T3
241 DepthW'(sram_read_in_prev_cyc_q);
242
243 // SRAM write data always comes from the input buffer.
244 1/1 assign sram_wdata_o = inp_buf_rdata;
Tests: T1 T2 T3
245 assign sram_wmask_o = '1;
246
247 // `sram_rvalid_i` is only used for assertions.
248 logic unused_sram_rvalid;
249 1/1 assign unused_sram_rvalid = sram_rvalid_i;
Tests: T1 T2 T3
Cond Coverage for Module :
i2c_fifo_sync_sram_adapter
| Total | Covered | Percent |
Conditions | 51 | 42 | 82.35 |
Logical | 51 | 42 | 82.35 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 120
EXPRESSION (fifo_wvalid_i && fifo_wready_o)
------1------ ------2------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T53,T54,T100 |
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,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 | T4,T5,T8 |
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 | T4,T5,T8 |
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 | T4,T5,T8 |
1 | 0 | Covered | T158,T159 |
LINE 196
SUB-EXPRESSION ( ! ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full) )
----------------------------1----------------------------
-1- | Status | Tests |
0 | Covered | T158,T159 |
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 | T158,T159 |
0 | 1 | Covered | T2,T4,T5 |
1 | 0 | Covered | T4,T5,T8 |
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 | T4,T5,T8 |
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 | T4,T5,T8 |
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 | T4,T6,T8 |
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 | T33,T44,T35 |
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 | T33,T44,T35 |
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 | T33,T44,T35 |
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 |
T4,T5,T8 |
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 |
T4,T5,T8 |
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 |
6700 |
6700 |
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 |
6700 |
6700 |
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 |
1777342132 |
1776640540 |
0 |
0 |
T1 |
5300 |
4964 |
0 |
0 |
T2 |
35700 |
35436 |
0 |
0 |
T3 |
27692 |
27344 |
0 |
0 |
T4 |
54784 |
51828 |
0 |
0 |
T5 |
29464 |
29220 |
0 |
0 |
T6 |
58920 |
58568 |
0 |
0 |
T7 |
123148 |
122884 |
0 |
0 |
T8 |
338168 |
337824 |
0 |
0 |
T9 |
123976 |
123768 |
0 |
0 |
T10 |
56916 |
56580 |
0 |
0 |
NoSramReadWhenEmpty_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1777342132 |
1414110359 |
0 |
0 |
T1 |
5300 |
4964 |
0 |
0 |
T2 |
35700 |
30122 |
0 |
0 |
T3 |
27692 |
27344 |
0 |
0 |
T4 |
54784 |
50033 |
0 |
0 |
T5 |
29464 |
28082 |
0 |
0 |
T6 |
58920 |
46590 |
0 |
0 |
T7 |
123148 |
97120 |
0 |
0 |
T8 |
338168 |
332230 |
0 |
0 |
T9 |
123976 |
100394 |
0 |
0 |
T10 |
56916 |
52275 |
0 |
0 |
NoSramWriteWhenFull_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1777342132 |
34239751 |
0 |
0 |
T27 |
0 |
130008 |
0 |
0 |
T33 |
15379 |
3 |
0 |
0 |
T38 |
10314 |
0 |
0 |
0 |
T42 |
42887 |
0 |
0 |
0 |
T46 |
98589 |
0 |
0 |
0 |
T53 |
310722 |
27 |
0 |
0 |
T54 |
0 |
20 |
0 |
0 |
T64 |
0 |
5 |
0 |
0 |
T65 |
0 |
994 |
0 |
0 |
T66 |
0 |
6 |
0 |
0 |
T67 |
103743 |
0 |
0 |
0 |
T70 |
0 |
1593 |
0 |
0 |
T71 |
0 |
1656 |
0 |
0 |
T73 |
22656 |
0 |
0 |
0 |
T75 |
80001 |
0 |
0 |
0 |
T90 |
0 |
25 |
0 |
0 |
T96 |
3110 |
0 |
0 |
0 |
T98 |
2875 |
0 |
0 |
0 |
T151 |
0 |
1518 |
0 |
0 |
T160 |
203691 |
137613 |
0 |
0 |
T161 |
0 |
17 |
0 |
0 |
T162 |
0 |
5613 |
0 |
0 |
T163 |
0 |
435376 |
0 |
0 |
T164 |
0 |
133190 |
0 |
0 |
T165 |
0 |
3184 |
0 |
0 |
T166 |
0 |
107344 |
0 |
0 |
T167 |
0 |
81419 |
0 |
0 |
T168 |
0 |
5555 |
0 |
0 |
T169 |
0 |
2471 |
0 |
0 |
T170 |
3296 |
0 |
0 |
0 |
T171 |
44311 |
0 |
0 |
0 |
T172 |
71270 |
0 |
0 |
0 |
T173 |
84966 |
0 |
0 |
0 |
T174 |
172411 |
0 |
0 |
0 |
T175 |
15351 |
0 |
0 |
0 |
T176 |
42001 |
0 |
0 |
0 |
T177 |
16181 |
0 |
0 |
0 |
T178 |
38414 |
0 |
0 |
0 |
T179 |
6378 |
0 |
0 |
0 |
OupBufWreadyAfterSramRead_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1777342132 |
651786 |
0 |
0 |
T4 |
13696 |
3 |
0 |
0 |
T5 |
7366 |
0 |
0 |
0 |
T6 |
14730 |
0 |
0 |
0 |
T7 |
61574 |
116 |
0 |
0 |
T8 |
169084 |
4 |
0 |
0 |
T9 |
61988 |
119 |
0 |
0 |
T10 |
28458 |
0 |
0 |
0 |
T14 |
0 |
8 |
0 |
0 |
T17 |
0 |
1 |
0 |
0 |
T18 |
0 |
2 |
0 |
0 |
T24 |
45212 |
23 |
0 |
0 |
T31 |
0 |
38 |
0 |
0 |
T33 |
30758 |
0 |
0 |
0 |
T34 |
56398 |
101 |
0 |
0 |
T43 |
0 |
135 |
0 |
0 |
T45 |
2232 |
0 |
0 |
0 |
T46 |
0 |
315 |
0 |
0 |
T47 |
0 |
6 |
0 |
0 |
T48 |
154056 |
35 |
0 |
0 |
T49 |
49650 |
280 |
0 |
0 |
T53 |
0 |
36 |
0 |
0 |
T64 |
0 |
266 |
0 |
0 |
T67 |
0 |
148 |
0 |
0 |
T72 |
0 |
208 |
0 |
0 |
T75 |
0 |
336 |
0 |
0 |
T84 |
316170 |
744 |
0 |
0 |
T120 |
35928 |
0 |
0 |
0 |
T121 |
39297 |
0 |
0 |
0 |
T122 |
44936 |
0 |
0 |
0 |
T123 |
12337 |
0 |
0 |
0 |
T124 |
107259 |
0 |
0 |
0 |
T125 |
17052 |
0 |
0 |
0 |
T126 |
85808 |
0 |
0 |
0 |
SramRvalidAfterRead_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1777342132 |
651786 |
0 |
0 |
T4 |
13696 |
3 |
0 |
0 |
T5 |
7366 |
0 |
0 |
0 |
T6 |
14730 |
0 |
0 |
0 |
T7 |
61574 |
116 |
0 |
0 |
T8 |
169084 |
4 |
0 |
0 |
T9 |
61988 |
119 |
0 |
0 |
T10 |
28458 |
0 |
0 |
0 |
T14 |
0 |
8 |
0 |
0 |
T17 |
0 |
1 |
0 |
0 |
T18 |
0 |
2 |
0 |
0 |
T24 |
45212 |
23 |
0 |
0 |
T31 |
0 |
38 |
0 |
0 |
T33 |
30758 |
0 |
0 |
0 |
T34 |
56398 |
101 |
0 |
0 |
T43 |
0 |
135 |
0 |
0 |
T45 |
2232 |
0 |
0 |
0 |
T46 |
0 |
315 |
0 |
0 |
T47 |
0 |
6 |
0 |
0 |
T48 |
154056 |
35 |
0 |
0 |
T49 |
49650 |
280 |
0 |
0 |
T53 |
0 |
36 |
0 |
0 |
T64 |
0 |
266 |
0 |
0 |
T67 |
0 |
148 |
0 |
0 |
T72 |
0 |
208 |
0 |
0 |
T75 |
0 |
336 |
0 |
0 |
T84 |
316170 |
744 |
0 |
0 |
T120 |
35928 |
0 |
0 |
0 |
T121 |
39297 |
0 |
0 |
0 |
T122 |
44936 |
0 |
0 |
0 |
T123 |
12337 |
0 |
0 |
0 |
T124 |
107259 |
0 |
0 |
0 |
T125 |
17052 |
0 |
0 |
0 |
T126 |
85808 |
0 |
0 |
0 |
Line Coverage for Instance : tb.dut.i2c_core.u_fifos.u_fmt_fifo_sram_adapter
| Line No. | Total | Covered | Percent |
TOTAL | | 44 | 44 | 100.00 |
CONT_ASSIGN | 120 | 1 | 1 | 100.00 |
CONT_ASSIGN | 121 | 1 | 1 | 100.00 |
CONT_ASSIGN | 125 | 1 | 1 | 100.00 |
CONT_ASSIGN | 150 | 1 | 1 | 100.00 |
CONT_ASSIGN | 151 | 1 | 1 | 100.00 |
CONT_ASSIGN | 153 | 1 | 1 | 100.00 |
CONT_ASSIGN | 154 | 1 | 1 | 100.00 |
CONT_ASSIGN | 162 | 1 | 1 | 100.00 |
ALWAYS | 164 | 3 | 3 | 100.00 |
ALWAYS | 174 | 28 | 28 | 100.00 |
CONT_ASSIGN | 228 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 240 | 1 | 1 | 100.00 |
CONT_ASSIGN | 244 | 1 | 1 | 100.00 |
CONT_ASSIGN | 249 | 1 | 1 | 100.00 |
119 );
120 1/1 assign inp_buf_wvalid = fifo_wvalid_i && fifo_wready_o;
Tests: T1 T2 T3
121 1/1 assign oup_buf_almost_full = oup_buf_depth >= OupBufDepthW'(OupBufDepth - 1);
Tests: T1 T2 T3
122
123 // Signal whether we access the SRAM in this cycle
124 logic sram_access;
125 1/1 assign sram_access = sram_req_o && sram_gnt_i;
Tests: T1 T2 T3
126
127 // SRAM read and write addresses
128 logic [SramAw-1:0] sram_wr_addr, sram_rd_addr;
129 logic [SramPtrW-1:0] sram_wr_ptr, sram_rd_ptr;
130 logic [SramDepthW-1:0] sram_depth;
131 logic sram_incr_wr_ptr, sram_incr_rd_ptr;
132 logic sram_full, sram_empty;
133 logic sram_ptrs_err;
134 prim_fifo_sync_cnt #(
135 .Depth (SramFifoDepth),
136 .Secure(1'b0)
137 ) u_sram_ptrs (
138 .clk_i,
139 .rst_ni,
140 .clr_i,
141 .incr_wptr_i(sram_incr_wr_ptr),
142 .incr_rptr_i(sram_incr_rd_ptr),
143 .wptr_o (sram_wr_ptr),
144 .rptr_o (sram_rd_ptr),
145 .full_o (sram_full),
146 .empty_o (sram_empty),
147 .depth_o (sram_depth),
148 .err_o (sram_ptrs_err)
149 );
150 1/1 assign sram_incr_wr_ptr = sram_access && sram_write_o;
Tests: T1 T2 T3
151 1/1 assign sram_incr_rd_ptr = sram_access && !sram_write_o;
Tests: T1 T2 T3
152 if (SramAddrLeadingZeros > 0) begin : gen_zero_extend_sram_addrs
153 1/1 assign sram_wr_addr = {{SramAddrLeadingZeros{1'b0}}, sram_wr_ptr} + SramBaseAddr;
Tests: T1 T2 T3
154 1/1 assign sram_rd_addr = {{SramAddrLeadingZeros{1'b0}}, sram_rd_ptr} + SramBaseAddr;
Tests: T1 T2 T3
155 end else begin : gen_no_zero_extend_sram_addrs
156 assign sram_wr_addr = sram_wr_ptr + SramBaseAddr;
157 assign sram_rd_addr = sram_rd_ptr + SramBaseAddr;
158 end
159
160 // FF to remember whether we read from the SRAM in the previous clock cycle.
161 logic sram_read_in_prev_cyc_d, sram_read_in_prev_cyc_q;
162 1/1 assign sram_read_in_prev_cyc_d = clr_i ? 1'b0 : sram_incr_rd_ptr;
Tests: T1 T2 T3
163 always_ff @(posedge clk_i or negedge rst_ni) begin
164 1/1 if (!rst_ni) begin
Tests: T1 T2 T3
165 1/1 sram_read_in_prev_cyc_q <= 1'b0;
Tests: T1 T2 T3
166 end else begin
167 1/1 sram_read_in_prev_cyc_q <= sram_read_in_prev_cyc_d;
Tests: T1 T2 T3
168 end
169 end
170
171 // Control logic for FIFO interface wready, output buffer writes, and SRAM requests
172 logic state_err;
173 always_comb begin
174 1/1 inp_buf_rready = 1'b0;
Tests: T1 T2 T3
175 1/1 oup_buf_wvalid = 1'b0;
Tests: T1 T2 T3
176 1/1 oup_buf_wdata = inp_buf_rdata;
Tests: T1 T2 T3
177 1/1 sram_req_o = 1'b0;
Tests: T1 T2 T3
178 1/1 sram_write_o = 1'b0;
Tests: T1 T2 T3
179 1/1 sram_addr_o = sram_wr_addr;
Tests: T1 T2 T3
180 1/1 state_err = 1'b0;
Tests: T1 T2 T3
181
182 // If the SRAM was read in the previous cycle, write the read data to the output buffer.
183 1/1 if (sram_read_in_prev_cyc_q) begin
Tests: T1 T2 T3
184 1/1 oup_buf_wvalid = 1'b1;
Tests: T4 T8 T9
185 1/1 oup_buf_wdata = sram_rdata_i;
Tests: T4 T8 T9
186 // The output buffer must be ready; otherwise we are in an erroneous state.
187 1/1 state_err = !oup_buf_wready;
Tests: T4 T8 T9
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 T8
197 || (fifo_rvalid_o && fifo_rready_i)) begin
198 1/1 sram_req_o = 1'b1;
Tests: T4 T8 T9
199 1/1 sram_write_o = 1'b0;
Tests: T4 T8 T9
200 1/1 sram_addr_o = sram_rd_addr;
Tests: T4 T8 T9
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 T8
205 1/1 sram_write_o = 1'b1;
Tests: T2 T4 T8
206 1/1 sram_addr_o = sram_wr_addr;
Tests: T2 T4 T8
207 1/1 inp_buf_rready = !sram_full && sram_gnt_i;
Tests: T2 T4 T8
208 end
209
210 // If the SRAM is empty, data must flow from the input buffer to the output buffer if the output
211 // buffer is ready and is not receiving data read from the SRAM in the previous cycle
212 1/1 end else if (oup_buf_wready && !sram_read_in_prev_cyc_q) begin
Tests: T1 T2 T3
213 1/1 oup_buf_wvalid = inp_buf_rvalid;
Tests: T1 T2 T3
214 1/1 oup_buf_wdata = inp_buf_rdata;
Tests: T1 T2 T3
215 1/1 inp_buf_rready = oup_buf_wready;
Tests: T1 T2 T3
216
217 // Otherwise the SRAM is empty but the output buffer cannot take the data from the input buffer,
218 // so drain the input buffer into the SRAM.
219 end else begin
220 1/1 sram_req_o = !sram_full && inp_buf_rvalid;
Tests: T1 T2 T3
221 1/1 sram_write_o = 1'b1;
Tests: T1 T2 T3
222 1/1 sram_addr_o = sram_wr_addr;
Tests: T1 T2 T3
223 1/1 inp_buf_rready = !sram_full && sram_gnt_i;
Tests: T1 T2 T3
224 end
225 end
226
227 // Error output is high if any of the internal errors is high
228 1/1 assign err_o = |{inp_buf_err, oup_buf_err, sram_ptrs_err, state_err};
Tests: T1 T2 T3
229
230 // The SRAM and the output buffer together form the entire architectural capacity of the FIFO.
231 // Thus, when both are full, the FIFO is no longer ready to receive writes even though the input
232 // buffer could store one additional entry. This ensures that in the cycle after an entry has
233 // been read from the full FIFO, the next entry can be written to the FIFO.
234 // (It may be possible that all input buffer slots except one can be counted to the architectural
235 // capacity of the FIFO, but this is a relatively small optimization left for future work.)
236 1/1 assign fifo_wready_o = inp_buf_wready && !(sram_full && oup_buf_full);
Tests: T1 T2 T3
237
238 // The current depth of the FIFO represented by this module is the depth of all buffers plus the
239 // FIFO in the SRAM plus one if there's an entry in transition between SRAM and output buffer.
240 1/1 assign fifo_depth_o = DepthW'(inp_buf_depth) + DepthW'(sram_depth) + DepthW'(oup_buf_depth) +
Tests: T1 T2 T3
241 DepthW'(sram_read_in_prev_cyc_q);
242
243 // SRAM write data always comes from the input buffer.
244 1/1 assign sram_wdata_o = inp_buf_rdata;
Tests: T1 T2 T3
245 assign sram_wmask_o = '1;
246
247 // `sram_rvalid_i` is only used for assertions.
248 logic unused_sram_rvalid;
249 1/1 assign unused_sram_rvalid = sram_rvalid_i;
Tests: T1 T2 T3
Cond Coverage for Instance : tb.dut.i2c_core.u_fifos.u_fmt_fifo_sram_adapter
| Total | Covered | Percent |
Conditions | 51 | 38 | 74.51 |
Logical | 51 | 38 | 74.51 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 120
EXPRESSION (fifo_wvalid_i && fifo_wready_o)
------1------ ------2------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Not Covered | |
1 | 1 | Covered | 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,T4,T8 |
LINE 150
EXPRESSION (sram_access && sram_write_o)
-----1----- ------2-----
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T4,T8,T9 |
1 | 1 | Covered | T2,T4,T8 |
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,T8 |
1 | 1 | Covered | T4,T8,T9 |
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,T8 |
0 | 1 | Covered | T4,T8,T9 |
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,T4,T8 |
LINE 196
SUB-EXPRESSION ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full)
-------------------1------------------- ------2-----
-1- | -2- | Status | Tests |
0 | 0 | Not Covered | |
0 | 1 | Covered | T2,T4,T8 |
1 | 0 | Covered | T4,T8,T9 |
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,T8 |
1 | 1 | Covered | T4,T8,T9 |
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,T8 |
1 | 1 | Covered | T4,T8,T9 |
LINE 204
EXPRESSION (((!sram_full)) && inp_buf_rvalid)
-------1------ -------2------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T2,T4,T8 |
1 | 1 | Covered | T2,T4,T8 |
LINE 207
EXPRESSION (((!sram_full)) && sram_gnt_i)
-------1------ -----2----
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T2,T4,T8 |
1 | 1 | Covered | T2,T4,T8 |
LINE 212
EXPRESSION (oup_buf_wready && ((!sram_read_in_prev_cyc_q)))
-------1------ --------------2-------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T4,T8,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,T8 |
LINE 223
EXPRESSION (((!sram_full)) && sram_gnt_i)
-------1------ -----2----
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T1,T2,T3 |
1 | 1 | Covered | T2,T4,T8 |
LINE 236
EXPRESSION (inp_buf_wready && ( ! (sram_full && oup_buf_full) ))
-------1------ ----------------2----------------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T160,T162,T163 |
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 | T160,T162,T163 |
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 | T160,T162,T163 |
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 |
T4,T8,T9 |
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 |
T4,T8,T9 |
1 |
0 |
- |
Covered |
T2,T4,T8 |
0 |
- |
1 |
Covered |
T1,T2,T3 |
0 |
- |
0 |
Covered |
T1,T2,T3 |
Assert Coverage for Instance : tb.dut.i2c_core.u_fifos.u_fmt_fifo_sram_adapter
Assertion Details
MinimalSramAw_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
1675 |
1675 |
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 |
1675 |
1675 |
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 |
444335533 |
444160135 |
0 |
0 |
T1 |
1325 |
1241 |
0 |
0 |
T2 |
8925 |
8859 |
0 |
0 |
T3 |
6923 |
6836 |
0 |
0 |
T4 |
13696 |
12957 |
0 |
0 |
T5 |
7366 |
7305 |
0 |
0 |
T6 |
14730 |
14642 |
0 |
0 |
T7 |
30787 |
30721 |
0 |
0 |
T8 |
84542 |
84456 |
0 |
0 |
T9 |
30994 |
30942 |
0 |
0 |
T10 |
14229 |
14145 |
0 |
0 |
NoSramReadWhenEmpty_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
444335533 |
373424646 |
0 |
0 |
T1 |
1325 |
1241 |
0 |
0 |
T2 |
8925 |
3545 |
0 |
0 |
T3 |
6923 |
6836 |
0 |
0 |
T4 |
13696 |
11162 |
0 |
0 |
T5 |
7366 |
7305 |
0 |
0 |
T6 |
14730 |
14642 |
0 |
0 |
T7 |
30787 |
30721 |
0 |
0 |
T8 |
84542 |
78862 |
0 |
0 |
T9 |
30994 |
7568 |
0 |
0 |
T10 |
14229 |
14145 |
0 |
0 |
NoSramWriteWhenFull_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
444335533 |
33680877 |
0 |
0 |
T27 |
0 |
130008 |
0 |
0 |
T42 |
42887 |
0 |
0 |
0 |
T160 |
203691 |
137613 |
0 |
0 |
T162 |
0 |
5613 |
0 |
0 |
T163 |
0 |
435376 |
0 |
0 |
T164 |
0 |
133190 |
0 |
0 |
T165 |
0 |
3184 |
0 |
0 |
T166 |
0 |
107344 |
0 |
0 |
T167 |
0 |
81419 |
0 |
0 |
T168 |
0 |
5555 |
0 |
0 |
T169 |
0 |
2471 |
0 |
0 |
T172 |
71270 |
0 |
0 |
0 |
T173 |
84966 |
0 |
0 |
0 |
T174 |
172411 |
0 |
0 |
0 |
T175 |
15351 |
0 |
0 |
0 |
T176 |
42001 |
0 |
0 |
0 |
T177 |
16181 |
0 |
0 |
0 |
T178 |
38414 |
0 |
0 |
0 |
T179 |
6378 |
0 |
0 |
0 |
OupBufWreadyAfterSramRead_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
444335533 |
176963 |
0 |
0 |
T4 |
13696 |
3 |
0 |
0 |
T5 |
7366 |
0 |
0 |
0 |
T6 |
14730 |
0 |
0 |
0 |
T7 |
30787 |
0 |
0 |
0 |
T8 |
84542 |
4 |
0 |
0 |
T9 |
30994 |
119 |
0 |
0 |
T10 |
14229 |
0 |
0 |
0 |
T14 |
0 |
8 |
0 |
0 |
T17 |
0 |
1 |
0 |
0 |
T18 |
0 |
2 |
0 |
0 |
T24 |
0 |
23 |
0 |
0 |
T31 |
0 |
38 |
0 |
0 |
T33 |
15379 |
0 |
0 |
0 |
T34 |
0 |
101 |
0 |
0 |
T43 |
0 |
135 |
0 |
0 |
T45 |
1116 |
0 |
0 |
0 |
T48 |
77028 |
0 |
0 |
0 |
SramRvalidAfterRead_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
444335533 |
176963 |
0 |
0 |
T4 |
13696 |
3 |
0 |
0 |
T5 |
7366 |
0 |
0 |
0 |
T6 |
14730 |
0 |
0 |
0 |
T7 |
30787 |
0 |
0 |
0 |
T8 |
84542 |
4 |
0 |
0 |
T9 |
30994 |
119 |
0 |
0 |
T10 |
14229 |
0 |
0 |
0 |
T14 |
0 |
8 |
0 |
0 |
T17 |
0 |
1 |
0 |
0 |
T18 |
0 |
2 |
0 |
0 |
T24 |
0 |
23 |
0 |
0 |
T31 |
0 |
38 |
0 |
0 |
T33 |
15379 |
0 |
0 |
0 |
T34 |
0 |
101 |
0 |
0 |
T43 |
0 |
135 |
0 |
0 |
T45 |
1116 |
0 |
0 |
0 |
T48 |
77028 |
0 |
0 |
0 |
Line Coverage for Instance : tb.dut.i2c_core.u_fifos.u_tx_fifo_sram_adapter
| Line No. | Total | Covered | Percent |
TOTAL | | 44 | 44 | 100.00 |
CONT_ASSIGN | 120 | 1 | 1 | 100.00 |
CONT_ASSIGN | 121 | 1 | 1 | 100.00 |
CONT_ASSIGN | 125 | 1 | 1 | 100.00 |
CONT_ASSIGN | 150 | 1 | 1 | 100.00 |
CONT_ASSIGN | 151 | 1 | 1 | 100.00 |
CONT_ASSIGN | 153 | 1 | 1 | 100.00 |
CONT_ASSIGN | 154 | 1 | 1 | 100.00 |
CONT_ASSIGN | 162 | 1 | 1 | 100.00 |
ALWAYS | 164 | 3 | 3 | 100.00 |
ALWAYS | 174 | 28 | 28 | 100.00 |
CONT_ASSIGN | 228 | 1 | 1 | 100.00 |
CONT_ASSIGN | 236 | 1 | 1 | 100.00 |
CONT_ASSIGN | 240 | 1 | 1 | 100.00 |
CONT_ASSIGN | 244 | 1 | 1 | 100.00 |
CONT_ASSIGN | 249 | 1 | 1 | 100.00 |
119 );
120 1/1 assign inp_buf_wvalid = fifo_wvalid_i && fifo_wready_o;
Tests: T1 T2 T3
121 1/1 assign oup_buf_almost_full = oup_buf_depth >= OupBufDepthW'(OupBufDepth - 1);
Tests: T1 T2 T3
122
123 // Signal whether we access the SRAM in this cycle
124 logic sram_access;
125 1/1 assign sram_access = sram_req_o && sram_gnt_i;
Tests: T1 T2 T3
126
127 // SRAM read and write addresses
128 logic [SramAw-1:0] sram_wr_addr, sram_rd_addr;
129 logic [SramPtrW-1:0] sram_wr_ptr, sram_rd_ptr;
130 logic [SramDepthW-1:0] sram_depth;
131 logic sram_incr_wr_ptr, sram_incr_rd_ptr;
132 logic sram_full, sram_empty;
133 logic sram_ptrs_err;
134 prim_fifo_sync_cnt #(
135 .Depth (SramFifoDepth),
136 .Secure(1'b0)
137 ) u_sram_ptrs (
138 .clk_i,
139 .rst_ni,
140 .clr_i,
141 .incr_wptr_i(sram_incr_wr_ptr),
142 .incr_rptr_i(sram_incr_rd_ptr),
143 .wptr_o (sram_wr_ptr),
144 .rptr_o (sram_rd_ptr),
145 .full_o (sram_full),
146 .empty_o (sram_empty),
147 .depth_o (sram_depth),
148 .err_o (sram_ptrs_err)
149 );
150 1/1 assign sram_incr_wr_ptr = sram_access && sram_write_o;
Tests: T1 T2 T3
151 1/1 assign sram_incr_rd_ptr = sram_access && !sram_write_o;
Tests: T1 T2 T3
152 if (SramAddrLeadingZeros > 0) begin : gen_zero_extend_sram_addrs
153 1/1 assign sram_wr_addr = {{SramAddrLeadingZeros{1'b0}}, sram_wr_ptr} + SramBaseAddr;
Tests: T1 T2 T3
154 1/1 assign sram_rd_addr = {{SramAddrLeadingZeros{1'b0}}, sram_rd_ptr} + SramBaseAddr;
Tests: T1 T2 T3
155 end else begin : gen_no_zero_extend_sram_addrs
156 assign sram_wr_addr = sram_wr_ptr + SramBaseAddr;
157 assign sram_rd_addr = sram_rd_ptr + SramBaseAddr;
158 end
159
160 // FF to remember whether we read from the SRAM in the previous clock cycle.
161 logic sram_read_in_prev_cyc_d, sram_read_in_prev_cyc_q;
162 1/1 assign sram_read_in_prev_cyc_d = clr_i ? 1'b0 : sram_incr_rd_ptr;
Tests: T1 T2 T3
163 always_ff @(posedge clk_i or negedge rst_ni) begin
164 1/1 if (!rst_ni) begin
Tests: T1 T2 T3
165 1/1 sram_read_in_prev_cyc_q <= 1'b0;
Tests: T1 T2 T3
166 end else begin
167 1/1 sram_read_in_prev_cyc_q <= sram_read_in_prev_cyc_d;
Tests: T1 T2 T3
168 end
169 end
170
171 // Control logic for FIFO interface wready, output buffer writes, and SRAM requests
172 logic state_err;
173 always_comb begin
174 1/1 inp_buf_rready = 1'b0;
Tests: T1 T2 T3
175 1/1 oup_buf_wvalid = 1'b0;
Tests: T1 T2 T3
176 1/1 oup_buf_wdata = inp_buf_rdata;
Tests: T1 T2 T3
177 1/1 sram_req_o = 1'b0;
Tests: T1 T2 T3
178 1/1 sram_write_o = 1'b0;
Tests: T1 T2 T3
179 1/1 sram_addr_o = sram_wr_addr;
Tests: T1 T2 T3
180 1/1 state_err = 1'b0;
Tests: T1 T2 T3
181
182 // If the SRAM was read in the previous cycle, write the read data to the output buffer.
183 1/1 if (sram_read_in_prev_cyc_q) begin
Tests: T1 T2 T3
184 1/1 oup_buf_wvalid = 1'b1;
Tests: T5 T6 T10
185 1/1 oup_buf_wdata = sram_rdata_i;
Tests: T5 T6 T10
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 T10
188 end
MISSING_ELSE
189
190 // If the SRAM is not empty, data from the input buffer must flow via the SRAM.
191 1/1 if (!sram_empty) begin
Tests: T1 T2 T3
192
193 // Prioritize refilling of the output buffer: if the output buffer is not being filled to the
194 // last slot in the current cycle or it is being read in the current cycle, read from the SRAM
195 // so the output buffer can be written in the next cycle.
196 1/1 if (!((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full)
Tests: T5 T6 T10
197 || (fifo_rvalid_o && fifo_rready_i)) begin
198 1/1 sram_req_o = 1'b1;
Tests: T5 T6 T10
199 1/1 sram_write_o = 1'b0;
Tests: T5 T6 T10
200 1/1 sram_addr_o = sram_rd_addr;
Tests: T5 T6 T10
201
202 // If the output buffer is full (and not being read), drain the input buffer into the SRAM.
203 end else begin
204 1/1 sram_req_o = !sram_full && inp_buf_rvalid;
Tests: T5 T6 T10
205 1/1 sram_write_o = 1'b1;
Tests: T5 T6 T10
206 1/1 sram_addr_o = sram_wr_addr;
Tests: T5 T6 T10
207 1/1 inp_buf_rready = !sram_full && sram_gnt_i;
Tests: T5 T6 T10
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 | T5,T6,T10 |
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 | T5,T6,T10 |
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,T10 |
1 | 1 | Covered | T5,T6,T10 |
LINE 151
EXPRESSION (sram_access && ((!sram_write_o)))
-----1----- --------2--------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T5,T6,T10 |
1 | 1 | Covered | T5,T6,T10 |
LINE 162
EXPRESSION (clr_i ? 1'b0 : sram_incr_rd_ptr)
--1--
-1- | Status | Tests |
0 | Covered | T1,T2,T3 |
1 | Covered | T1,T2,T3 |
LINE 196
EXPRESSION (( ! ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full) ) || (fifo_rvalid_o && fifo_rready_i))
-------------------------------1------------------------------- ----------------2---------------
-1- | -2- | Status | Tests |
0 | 0 | Covered | T5,T6,T10 |
0 | 1 | Covered | T5,T6,T10 |
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 | T5,T6,T10 |
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 | T5,T6,T10 |
1 | 0 | Covered | T5,T6,T10 |
LINE 196
SUB-EXPRESSION (oup_buf_almost_full && oup_buf_wvalid)
---------1--------- -------2------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T5,T6,T10 |
1 | 1 | Covered | T5,T6,T10 |
LINE 196
SUB-EXPRESSION (fifo_rvalid_o && fifo_rready_i)
------1------ ------2------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T5,T6,T10 |
1 | 1 | Covered | T5,T6,T10 |
LINE 204
EXPRESSION (((!sram_full)) && inp_buf_rvalid)
-------1------ -------2------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T5,T6,T10 |
1 | 1 | Covered | T5,T6,T10 |
LINE 207
EXPRESSION (((!sram_full)) && sram_gnt_i)
-------1------ -----2----
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T5,T6,T10 |
1 | 1 | Covered | T5,T6,T10 |
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 | T6,T10,T72 |
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 | T5,T6,T10 |
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 | T5,T6,T10 |
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 | T94,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 | T94,T61,T62 |
LINE 236
SUB-EXPRESSION (sram_full && oup_buf_full)
----1---- ------2-----
-1- | -2- | Status | Tests |
0 | 1 | Covered | T5,T6,T10 |
1 | 0 | Not Covered | |
1 | 1 | Covered | T94,T61,T62 |
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 |
T5,T6,T10 |
0 |
Covered |
T1,T2,T3 |
191 if (!sram_empty) begin
-1-
192
193 // Prioritize refilling of the output buffer: if the output buffer is not being filled to the
194 // last slot in the current cycle or it is being read in the current cycle, read from the SRAM
195 // so the output buffer can be written in the next cycle.
196 if (!((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full)
-2-
197 || (fifo_rvalid_o && fifo_rready_i)) begin
198 sram_req_o = 1'b1;
==>
199 sram_write_o = 1'b0;
200 sram_addr_o = sram_rd_addr;
201
202 // If the output buffer is full (and not being read), drain the input buffer into the SRAM.
203 end else begin
204 sram_req_o = !sram_full && inp_buf_rvalid;
==>
205 sram_write_o = 1'b1;
206 sram_addr_o = sram_wr_addr;
207 inp_buf_rready = !sram_full && sram_gnt_i;
208 end
209
210 // If the SRAM is empty, data must flow from the input buffer to the output buffer if the output
211 // buffer is ready and is not receiving data read from the SRAM in the previous cycle
212 end else if (oup_buf_wready && !sram_read_in_prev_cyc_q) begin
-3-
213 oup_buf_wvalid = inp_buf_rvalid;
==>
214 oup_buf_wdata = inp_buf_rdata;
215 inp_buf_rready = oup_buf_wready;
216
217 // Otherwise the SRAM is empty but the output buffer cannot take the data from the input buffer,
218 // so drain the input buffer into the SRAM.
219 end else begin
220 sram_req_o = !sram_full && inp_buf_rvalid;
==>
Branches:
-1- | -2- | -3- | Status | Tests |
1 |
1 |
- |
Covered |
T5,T6,T10 |
1 |
0 |
- |
Covered |
T5,T6,T10 |
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 |
1675 |
1675 |
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 |
1675 |
1675 |
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 |
444335533 |
444160135 |
0 |
0 |
T1 |
1325 |
1241 |
0 |
0 |
T2 |
8925 |
8859 |
0 |
0 |
T3 |
6923 |
6836 |
0 |
0 |
T4 |
13696 |
12957 |
0 |
0 |
T5 |
7366 |
7305 |
0 |
0 |
T6 |
14730 |
14642 |
0 |
0 |
T7 |
30787 |
30721 |
0 |
0 |
T8 |
84542 |
84456 |
0 |
0 |
T9 |
30994 |
30942 |
0 |
0 |
T10 |
14229 |
14145 |
0 |
0 |
NoSramReadWhenEmpty_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
444335533 |
423593532 |
0 |
0 |
T1 |
1325 |
1241 |
0 |
0 |
T2 |
8925 |
8859 |
0 |
0 |
T3 |
6923 |
6836 |
0 |
0 |
T4 |
13696 |
12957 |
0 |
0 |
T5 |
7366 |
6167 |
0 |
0 |
T6 |
14730 |
2664 |
0 |
0 |
T7 |
30787 |
30721 |
0 |
0 |
T8 |
84542 |
84456 |
0 |
0 |
T9 |
30994 |
30942 |
0 |
0 |
T10 |
14229 |
9840 |
0 |
0 |
NoSramWriteWhenFull_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
444335533 |
279398 |
0 |
0 |
T25 |
15723 |
0 |
0 |
0 |
T61 |
15110 |
12563 |
0 |
0 |
T62 |
0 |
11098 |
0 |
0 |
T63 |
0 |
10295 |
0 |
0 |
T69 |
93679 |
0 |
0 |
0 |
T71 |
47044 |
0 |
0 |
0 |
T79 |
148474 |
0 |
0 |
0 |
T94 |
17310 |
403 |
0 |
0 |
T95 |
43420 |
0 |
0 |
0 |
T180 |
0 |
1256 |
0 |
0 |
T181 |
0 |
9590 |
0 |
0 |
T182 |
0 |
12749 |
0 |
0 |
T183 |
0 |
119 |
0 |
0 |
T184 |
0 |
8786 |
0 |
0 |
T185 |
0 |
7934 |
0 |
0 |
T186 |
44699 |
0 |
0 |
0 |
T187 |
2173 |
0 |
0 |
0 |
T188 |
135113 |
0 |
0 |
0 |
OupBufWreadyAfterSramRead_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
444335533 |
111031 |
0 |
0 |
T5 |
7366 |
3 |
0 |
0 |
T6 |
14730 |
53 |
0 |
0 |
T7 |
30787 |
0 |
0 |
0 |
T8 |
84542 |
0 |
0 |
0 |
T9 |
30994 |
0 |
0 |
0 |
T10 |
14229 |
21 |
0 |
0 |
T24 |
45212 |
0 |
0 |
0 |
T33 |
15379 |
0 |
0 |
0 |
T45 |
1116 |
0 |
0 |
0 |
T46 |
0 |
221 |
0 |
0 |
T48 |
77028 |
0 |
0 |
0 |
T67 |
0 |
96 |
0 |
0 |
T72 |
0 |
171 |
0 |
0 |
T73 |
0 |
50 |
0 |
0 |
T75 |
0 |
159 |
0 |
0 |
T76 |
0 |
72 |
0 |
0 |
T77 |
0 |
72 |
0 |
0 |
SramRvalidAfterRead_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
444335533 |
111031 |
0 |
0 |
T5 |
7366 |
3 |
0 |
0 |
T6 |
14730 |
53 |
0 |
0 |
T7 |
30787 |
0 |
0 |
0 |
T8 |
84542 |
0 |
0 |
0 |
T9 |
30994 |
0 |
0 |
0 |
T10 |
14229 |
21 |
0 |
0 |
T24 |
45212 |
0 |
0 |
0 |
T33 |
15379 |
0 |
0 |
0 |
T45 |
1116 |
0 |
0 |
0 |
T46 |
0 |
221 |
0 |
0 |
T48 |
77028 |
0 |
0 |
0 |
T67 |
0 |
96 |
0 |
0 |
T72 |
0 |
171 |
0 |
0 |
T73 |
0 |
50 |
0 |
0 |
T75 |
0 |
159 |
0 |
0 |
T76 |
0 |
72 |
0 |
0 |
T77 |
0 |
72 |
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: T84 T85 T100
185 1/1 oup_buf_wdata = sram_rdata_i;
Tests: T84 T85 T100
186 // The output buffer must be ready; otherwise we are in an erroneous state.
187 1/1 state_err = !oup_buf_wready;
Tests: T84 T85 T100
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: T33 T44 T35
197 || (fifo_rvalid_o && fifo_rready_i)) begin
198 1/1 sram_req_o = 1'b1;
Tests: T84 T85 T100
199 1/1 sram_write_o = 1'b0;
Tests: T84 T85 T100
200 1/1 sram_addr_o = sram_rd_addr;
Tests: T84 T85 T100
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: T33 T44 T35
205 1/1 sram_write_o = 1'b1;
Tests: T33 T44 T35
206 1/1 sram_addr_o = sram_wr_addr;
Tests: T33 T44 T35
207 1/1 inp_buf_rready = !sram_full && sram_gnt_i;
Tests: T33 T44 T35
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 | T100,T37,T101 |
1 | 1 | Covered | T3,T4,T8 |
LINE 125
EXPRESSION (sram_req_o && sram_gnt_i)
-----1---- -----2----
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Not Covered | |
1 | 1 | Covered | T33,T44,T35 |
LINE 150
EXPRESSION (sram_access && sram_write_o)
-----1----- ------2-----
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T84,T85,T100 |
1 | 1 | Covered | T33,T44,T35 |
LINE 151
EXPRESSION (sram_access && ((!sram_write_o)))
-----1----- --------2--------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T33,T44,T35 |
1 | 1 | Covered | T84,T85,T100 |
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 | T33,T44,T35 |
0 | 1 | Covered | T84,T85,T100 |
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 | T33,T44,T35 |
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 | T33,T44,T35 |
1 | 0 | Covered | T84,T85,T100 |
LINE 196
SUB-EXPRESSION (oup_buf_almost_full && oup_buf_wvalid)
---------1--------- -------2------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T33,T44,T35 |
1 | 1 | Covered | T84,T85,T100 |
LINE 196
SUB-EXPRESSION (fifo_rvalid_o && fifo_rready_i)
------1------ ------2------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T33,T44,T35 |
1 | 1 | Covered | T84,T85,T100 |
LINE 204
EXPRESSION (((!sram_full)) && inp_buf_rvalid)
-------1------ -------2------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T33,T44,T35 |
1 | 1 | Covered | T33,T44,T35 |
LINE 207
EXPRESSION (((!sram_full)) && sram_gnt_i)
-------1------ -----2----
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T33,T44,T35 |
1 | 1 | Covered | T33,T44,T35 |
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 | T84,T85,T100 |
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 | T33,T44,T35 |
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 | T33,T44,T35 |
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 | T33,T44,T35 |
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 | T33,T44,T35 |
LINE 236
SUB-EXPRESSION (sram_full && oup_buf_full)
----1---- ------2-----
-1- | -2- | Status | Tests |
0 | 1 | Covered | T33,T44,T35 |
1 | 0 | Not Covered | |
1 | 1 | Covered | T33,T44,T35 |
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 |
T84,T85,T100 |
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 |
T84,T85,T100 |
1 |
0 |
- |
Covered |
T33,T44,T35 |
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 |
1675 |
1675 |
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 |
1675 |
1675 |
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 |
444335533 |
444160135 |
0 |
0 |
T1 |
1325 |
1241 |
0 |
0 |
T2 |
8925 |
8859 |
0 |
0 |
T3 |
6923 |
6836 |
0 |
0 |
T4 |
13696 |
12957 |
0 |
0 |
T5 |
7366 |
7305 |
0 |
0 |
T6 |
14730 |
14642 |
0 |
0 |
T7 |
30787 |
30721 |
0 |
0 |
T8 |
84542 |
84456 |
0 |
0 |
T9 |
30994 |
30942 |
0 |
0 |
T10 |
14229 |
14145 |
0 |
0 |
NoSramReadWhenEmpty_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
444335533 |
420983510 |
0 |
0 |
T1 |
1325 |
1241 |
0 |
0 |
T2 |
8925 |
8859 |
0 |
0 |
T3 |
6923 |
6836 |
0 |
0 |
T4 |
13696 |
12957 |
0 |
0 |
T5 |
7366 |
7305 |
0 |
0 |
T6 |
14730 |
14642 |
0 |
0 |
T7 |
30787 |
30721 |
0 |
0 |
T8 |
84542 |
84456 |
0 |
0 |
T9 |
30994 |
30942 |
0 |
0 |
T10 |
14229 |
14145 |
0 |
0 |
NoSramWriteWhenFull_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
444335533 |
217424 |
0 |
0 |
T24 |
45212 |
0 |
0 |
0 |
T33 |
15379 |
3 |
0 |
0 |
T34 |
56398 |
0 |
0 |
0 |
T35 |
0 |
4 |
0 |
0 |
T37 |
0 |
2153 |
0 |
0 |
T44 |
0 |
3 |
0 |
0 |
T45 |
1116 |
0 |
0 |
0 |
T48 |
77028 |
0 |
0 |
0 |
T49 |
49650 |
0 |
0 |
0 |
T53 |
155361 |
0 |
0 |
0 |
T72 |
72653 |
0 |
0 |
0 |
T73 |
11328 |
0 |
0 |
0 |
T84 |
0 |
636 |
0 |
0 |
T85 |
0 |
112 |
0 |
0 |
T96 |
1555 |
0 |
0 |
0 |
T100 |
0 |
3288 |
0 |
0 |
T101 |
0 |
3932 |
0 |
0 |
T189 |
0 |
19 |
0 |
0 |
T190 |
0 |
2978 |
0 |
0 |
OupBufWreadyAfterSramRead_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
444335533 |
116250 |
0 |
0 |
T37 |
0 |
744 |
0 |
0 |
T84 |
316170 |
744 |
0 |
0 |
T85 |
0 |
682 |
0 |
0 |
T86 |
0 |
806 |
0 |
0 |
T100 |
0 |
868 |
0 |
0 |
T101 |
0 |
1116 |
0 |
0 |
T112 |
0 |
1178 |
0 |
0 |
T120 |
35928 |
0 |
0 |
0 |
T121 |
39297 |
0 |
0 |
0 |
T122 |
44936 |
0 |
0 |
0 |
T123 |
12337 |
0 |
0 |
0 |
T124 |
107259 |
0 |
0 |
0 |
T125 |
17052 |
0 |
0 |
0 |
T126 |
85808 |
0 |
0 |
0 |
T127 |
923951 |
0 |
0 |
0 |
T128 |
114586 |
0 |
0 |
0 |
T190 |
0 |
930 |
0 |
0 |
T191 |
0 |
868 |
0 |
0 |
T192 |
0 |
1116 |
0 |
0 |
SramRvalidAfterRead_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
444335533 |
116250 |
0 |
0 |
T37 |
0 |
744 |
0 |
0 |
T84 |
316170 |
744 |
0 |
0 |
T85 |
0 |
682 |
0 |
0 |
T86 |
0 |
806 |
0 |
0 |
T100 |
0 |
868 |
0 |
0 |
T101 |
0 |
1116 |
0 |
0 |
T112 |
0 |
1178 |
0 |
0 |
T120 |
35928 |
0 |
0 |
0 |
T121 |
39297 |
0 |
0 |
0 |
T122 |
44936 |
0 |
0 |
0 |
T123 |
12337 |
0 |
0 |
0 |
T124 |
107259 |
0 |
0 |
0 |
T125 |
17052 |
0 |
0 |
0 |
T126 |
85808 |
0 |
0 |
0 |
T127 |
923951 |
0 |
0 |
0 |
T128 |
114586 |
0 |
0 |
0 |
T190 |
0 |
930 |
0 |
0 |
T191 |
0 |
868 |
0 |
0 |
T192 |
0 |
1116 |
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 T48 T49
185 1/1 oup_buf_wdata = sram_rdata_i;
Tests: T7 T48 T49
186 // The output buffer must be ready; otherwise we are in an erroneous state.
187 1/1 state_err = !oup_buf_wready;
Tests: T7 T48 T49
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 T48 T49
197 || (fifo_rvalid_o && fifo_rready_i)) begin
198 1/1 sram_req_o = 1'b1;
Tests: T7 T48 T49
199 1/1 sram_write_o = 1'b0;
Tests: T7 T48 T49
200 1/1 sram_addr_o = sram_rd_addr;
Tests: T7 T48 T49
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 T48 T49
205 1/1 sram_write_o = 1'b1;
Tests: T7 T48 T49
206 1/1 sram_addr_o = sram_wr_addr;
Tests: T7 T48 T49
207 1/1 inp_buf_rready = !sram_full && sram_gnt_i;
Tests: T7 T48 T49
208 end
209
210 // If the SRAM is empty, data must flow from the input buffer to the output buffer if the output
211 // buffer is ready and is not receiving data read from the SRAM in the previous cycle
212 1/1 end else if (oup_buf_wready && !sram_read_in_prev_cyc_q) begin
Tests: T1 T2 T3
213 1/1 oup_buf_wvalid = inp_buf_rvalid;
Tests: T1 T2 T3
214 1/1 oup_buf_wdata = inp_buf_rdata;
Tests: T1 T2 T3
215 1/1 inp_buf_rready = oup_buf_wready;
Tests: T1 T2 T3
216
217 // Otherwise the SRAM is empty but the output buffer cannot take the data from the input buffer,
218 // so drain the input buffer into the SRAM.
219 end else begin
220 1/1 sram_req_o = !sram_full && inp_buf_rvalid;
Tests: T1 T2 T3
221 1/1 sram_write_o = 1'b1;
Tests: T1 T2 T3
222 1/1 sram_addr_o = sram_wr_addr;
Tests: T1 T2 T3
223 1/1 inp_buf_rready = !sram_full && sram_gnt_i;
Tests: T1 T2 T3
224 end
225 end
226
227 // Error output is high if any of the internal errors is high
228 1/1 assign err_o = |{inp_buf_err, oup_buf_err, sram_ptrs_err, state_err};
Tests: T1 T2 T3
229
230 // The SRAM and the output buffer together form the entire architectural capacity of the FIFO.
231 // Thus, when both are full, the FIFO is no longer ready to receive writes even though the input
232 // buffer could store one additional entry. This ensures that in the cycle after an entry has
233 // been read from the full FIFO, the next entry can be written to the FIFO.
234 // (It may be possible that all input buffer slots except one can be counted to the architectural
235 // capacity of the FIFO, but this is a relatively small optimization left for future work.)
236 1/1 assign fifo_wready_o = inp_buf_wready && !(sram_full && oup_buf_full);
Tests: T1 T2 T3
237
238 // The current depth of the FIFO represented by this module is the depth of all buffers plus the
239 // FIFO in the SRAM plus one if there's an entry in transition between SRAM and output buffer.
240 1/1 assign fifo_depth_o = DepthW'(inp_buf_depth) + DepthW'(sram_depth) + DepthW'(oup_buf_depth) +
Tests: T1 T2 T3
241 DepthW'(sram_read_in_prev_cyc_q);
242
243 // SRAM write data always comes from the input buffer.
244 1/1 assign sram_wdata_o = inp_buf_rdata;
Tests: T1 T2 T3
245 assign sram_wmask_o = '1;
246
247 // `sram_rvalid_i` is only used for assertions.
248 logic unused_sram_rvalid;
249 1/1 assign unused_sram_rvalid = sram_rvalid_i;
Tests: T1 T2 T3
Cond Coverage for Instance : tb.dut.i2c_core.u_fifos.u_acq_fifo_sram_adapter
| Total | Covered | Percent |
Conditions | 51 | 42 | 82.35 |
Logical | 51 | 42 | 82.35 |
Non-Logical | 0 | 0 | |
Event | 0 | 0 | |
LINE 120
EXPRESSION (fifo_wvalid_i && fifo_wready_o)
------1------ ------2------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T53,T54 |
1 | 1 | Covered | T5,T6,T7 |
LINE 125
EXPRESSION (sram_req_o && sram_gnt_i)
-----1---- -----2----
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Not Covered | |
1 | 1 | Covered | T7,T48,T49 |
LINE 150
EXPRESSION (sram_access && sram_write_o)
-----1----- ------2-----
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T7,T48,T49 |
1 | 1 | Covered | T7,T48,T49 |
LINE 151
EXPRESSION (sram_access && ((!sram_write_o)))
-----1----- --------2--------
-1- | -2- | Status | Tests |
0 | 1 | Covered | T1,T2,T3 |
1 | 0 | Covered | T7,T48,T49 |
1 | 1 | Covered | T7,T48,T49 |
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,T48,T49 |
0 | 1 | Covered | T7,T48,T49 |
1 | 0 | Covered | T158,T159 |
LINE 196
SUB-EXPRESSION ( ! ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full) )
----------------------------1----------------------------
-1- | Status | Tests |
0 | Covered | T158,T159 |
1 | Covered | T7,T48,T49 |
LINE 196
SUB-EXPRESSION ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full)
-------------------1------------------- ------2-----
-1- | -2- | Status | Tests |
0 | 0 | Covered | T158,T159 |
0 | 1 | Covered | T7,T48,T49 |
1 | 0 | Covered | T7,T48,T49 |
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,T48,T49 |
1 | 1 | Covered | T7,T48,T49 |
LINE 196
SUB-EXPRESSION (fifo_rvalid_o && fifo_rready_i)
------1------ ------2------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T7,T48,T49 |
1 | 1 | Covered | T7,T48,T49 |
LINE 204
EXPRESSION (((!sram_full)) && inp_buf_rvalid)
-------1------ -------2------
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T7,T48,T49 |
1 | 1 | Covered | T7,T48,T49 |
LINE 207
EXPRESSION (((!sram_full)) && sram_gnt_i)
-------1------ -----2----
-1- | -2- | Status | Tests |
0 | 1 | Not Covered | |
1 | 0 | Covered | T7,T48,T49 |
1 | 1 | Covered | T7,T48,T49 |
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,T48,T49 |
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,T48,T49 |
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,T48,T49 |
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 | T53,T64,T65 |
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 | T53,T64,T65 |
LINE 236
SUB-EXPRESSION (sram_full && oup_buf_full)
----1---- ------2-----
-1- | -2- | Status | Tests |
0 | 1 | Covered | T6,T7,T48 |
1 | 0 | Not Covered | |
1 | 1 | Covered | T53,T64,T65 |
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,T48,T49 |
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,T48,T49 |
1 |
0 |
- |
Covered |
T7,T48,T49 |
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 |
1675 |
1675 |
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 |
1675 |
1675 |
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 |
444335533 |
444160135 |
0 |
0 |
T1 |
1325 |
1241 |
0 |
0 |
T2 |
8925 |
8859 |
0 |
0 |
T3 |
6923 |
6836 |
0 |
0 |
T4 |
13696 |
12957 |
0 |
0 |
T5 |
7366 |
7305 |
0 |
0 |
T6 |
14730 |
14642 |
0 |
0 |
T7 |
30787 |
30721 |
0 |
0 |
T8 |
84542 |
84456 |
0 |
0 |
T9 |
30994 |
30942 |
0 |
0 |
T10 |
14229 |
14145 |
0 |
0 |
NoSramReadWhenEmpty_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
444335533 |
196108671 |
0 |
0 |
T1 |
1325 |
1241 |
0 |
0 |
T2 |
8925 |
8859 |
0 |
0 |
T3 |
6923 |
6836 |
0 |
0 |
T4 |
13696 |
12957 |
0 |
0 |
T5 |
7366 |
7305 |
0 |
0 |
T6 |
14730 |
14642 |
0 |
0 |
T7 |
30787 |
4957 |
0 |
0 |
T8 |
84542 |
84456 |
0 |
0 |
T9 |
30994 |
30942 |
0 |
0 |
T10 |
14229 |
14145 |
0 |
0 |
NoSramWriteWhenFull_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
444335533 |
62052 |
0 |
0 |
T38 |
10314 |
0 |
0 |
0 |
T46 |
98589 |
0 |
0 |
0 |
T53 |
155361 |
27 |
0 |
0 |
T54 |
0 |
20 |
0 |
0 |
T64 |
0 |
5 |
0 |
0 |
T65 |
0 |
994 |
0 |
0 |
T66 |
0 |
6 |
0 |
0 |
T67 |
103743 |
0 |
0 |
0 |
T70 |
0 |
1593 |
0 |
0 |
T71 |
0 |
1656 |
0 |
0 |
T73 |
11328 |
0 |
0 |
0 |
T75 |
80001 |
0 |
0 |
0 |
T90 |
0 |
25 |
0 |
0 |
T96 |
1555 |
0 |
0 |
0 |
T98 |
2875 |
0 |
0 |
0 |
T151 |
0 |
1518 |
0 |
0 |
T161 |
0 |
17 |
0 |
0 |
T170 |
3296 |
0 |
0 |
0 |
T171 |
44311 |
0 |
0 |
0 |
OupBufWreadyAfterSramRead_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
444335533 |
247542 |
0 |
0 |
T7 |
30787 |
116 |
0 |
0 |
T8 |
84542 |
0 |
0 |
0 |
T9 |
30994 |
0 |
0 |
0 |
T10 |
14229 |
0 |
0 |
0 |
T24 |
45212 |
0 |
0 |
0 |
T33 |
15379 |
0 |
0 |
0 |
T34 |
56398 |
0 |
0 |
0 |
T45 |
1116 |
0 |
0 |
0 |
T46 |
0 |
315 |
0 |
0 |
T47 |
0 |
6 |
0 |
0 |
T48 |
77028 |
35 |
0 |
0 |
T49 |
49650 |
280 |
0 |
0 |
T53 |
0 |
36 |
0 |
0 |
T64 |
0 |
266 |
0 |
0 |
T67 |
0 |
148 |
0 |
0 |
T72 |
0 |
208 |
0 |
0 |
T75 |
0 |
336 |
0 |
0 |
SramRvalidAfterRead_A
Name | Attempts | Real Successes | Failures | Incomplete |
Total |
444335533 |
247542 |
0 |
0 |
T7 |
30787 |
116 |
0 |
0 |
T8 |
84542 |
0 |
0 |
0 |
T9 |
30994 |
0 |
0 |
0 |
T10 |
14229 |
0 |
0 |
0 |
T24 |
45212 |
0 |
0 |
0 |
T33 |
15379 |
0 |
0 |
0 |
T34 |
56398 |
0 |
0 |
0 |
T45 |
1116 |
0 |
0 |
0 |
T46 |
0 |
315 |
0 |
0 |
T47 |
0 |
6 |
0 |
0 |
T48 |
77028 |
35 |
0 |
0 |
T49 |
49650 |
280 |
0 |
0 |
T53 |
0 |
36 |
0 |
0 |
T64 |
0 |
266 |
0 |
0 |
T67 |
0 |
148 |
0 |
0 |
T72 |
0 |
208 |
0 |
0 |
T75 |
0 |
336 |
0 |
0 |