Module Definition
dashboard | hierarchy | modlist | groups | tests | asserts



Module Instance : tb.dut.i2c_core.u_fifos.u_fmt_fifo_sram_adapter

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
93.63 100.00 74.51 100.00 100.00


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
95.54 100.00 83.65 98.51 100.00


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
80.00 100.00 100.00 40.00 u_fifos


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
u_inp_buf 94.32 100.00 81.82 95.45 100.00
u_oup_buf 97.16 100.00 88.64 100.00 100.00
u_sram_ptrs 100.00 100.00 100.00 100.00



Module Instance : tb.dut.i2c_core.u_fifos.u_tx_fifo_sram_adapter

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
93.63 100.00 74.51 100.00 100.00


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
95.54 100.00 83.65 98.51 100.00


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
80.00 100.00 100.00 40.00 u_fifos


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
u_inp_buf 94.32 100.00 81.82 95.45 100.00
u_oup_buf 97.16 100.00 88.64 100.00 100.00
u_sram_ptrs 100.00 100.00 100.00 100.00



Module Instance : tb.dut.i2c_core.u_fifos.u_rx_fifo_sram_adapter

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
94.12 100.00 76.47 100.00 100.00


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
94.69 100.00 81.76 97.01 100.00


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
80.00 100.00 100.00 40.00 u_fifos


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
u_inp_buf 90.91 100.00 72.73 90.91 100.00
u_oup_buf 97.16 100.00 88.64 100.00 100.00
u_sram_ptrs 100.00 100.00 100.00 100.00



Module Instance : tb.dut.i2c_core.u_fifos.u_acq_fifo_sram_adapter

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
95.59 100.00 82.35 100.00 100.00


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
96.32 100.00 86.79 98.51 100.00


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
80.00 100.00 100.00 40.00 u_fifos


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
u_inp_buf 94.32 100.00 81.82 95.45 100.00
u_oup_buf 97.73 100.00 90.91 100.00 100.00
u_sram_ptrs 100.00 100.00 100.00 100.00

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 :
SCORELINE
93.63 100.00
tb.dut.i2c_core.u_fifos.u_fmt_fifo_sram_adapter

SCORELINE
94.12 100.00
tb.dut.i2c_core.u_fifos.u_rx_fifo_sram_adapter

SCORELINE
93.63 100.00
tb.dut.i2c_core.u_fifos.u_tx_fifo_sram_adapter

Line No.TotalCoveredPercent
TOTAL4444100.00
CONT_ASSIGN12011100.00
CONT_ASSIGN12111100.00
CONT_ASSIGN12511100.00
CONT_ASSIGN15011100.00
CONT_ASSIGN15111100.00
CONT_ASSIGN15311100.00
CONT_ASSIGN15411100.00
CONT_ASSIGN16211100.00
ALWAYS16433100.00
ALWAYS1742828100.00
CONT_ASSIGN22811100.00
CONT_ASSIGN23611100.00
CONT_ASSIGN24011100.00
CONT_ASSIGN24411100.00
CONT_ASSIGN24911100.00

119 ); 120 1/1 assign inp_buf_wvalid = fifo_wvalid_i && fifo_wready_o; Tests: T1 T2 T3  121 1/1 assign oup_buf_almost_full = oup_buf_depth >= OupBufDepthW'(OupBufDepth - 1); Tests: T1 T2 T3  122 123 // Signal whether we access the SRAM in this cycle 124 logic sram_access; 125 1/1 assign sram_access = sram_req_o && sram_gnt_i; Tests: T1 T2 T3  126 127 // SRAM read and write addresses 128 logic [SramAw-1:0] sram_wr_addr, sram_rd_addr; 129 logic [SramPtrW-1:0] sram_wr_ptr, sram_rd_ptr; 130 logic [SramDepthW-1:0] sram_depth; 131 logic sram_incr_wr_ptr, sram_incr_rd_ptr; 132 logic sram_full, sram_empty; 133 logic sram_ptrs_err; 134 prim_fifo_sync_cnt #( 135 .Depth (SramFifoDepth), 136 .Secure(1'b0) 137 ) u_sram_ptrs ( 138 .clk_i, 139 .rst_ni, 140 .clr_i, 141 .incr_wptr_i(sram_incr_wr_ptr), 142 .incr_rptr_i(sram_incr_rd_ptr), 143 .wptr_o (sram_wr_ptr), 144 .rptr_o (sram_rd_ptr), 145 .full_o (sram_full), 146 .empty_o (sram_empty), 147 .depth_o (sram_depth), 148 .err_o (sram_ptrs_err) 149 ); 150 1/1 assign sram_incr_wr_ptr = sram_access && sram_write_o; Tests: T1 T2 T3  151 1/1 assign sram_incr_rd_ptr = sram_access && !sram_write_o; Tests: T1 T2 T3  152 if (SramAddrLeadingZeros > 0) begin : gen_zero_extend_sram_addrs 153 1/1 assign sram_wr_addr = {{SramAddrLeadingZeros{1'b0}}, sram_wr_ptr} + SramBaseAddr; Tests: T1 T2 T3  154 1/1 assign sram_rd_addr = {{SramAddrLeadingZeros{1'b0}}, sram_rd_ptr} + SramBaseAddr; Tests: T1 T2 T3  155 end else begin : gen_no_zero_extend_sram_addrs 156 assign sram_wr_addr = sram_wr_ptr + SramBaseAddr; 157 assign sram_rd_addr = sram_rd_ptr + SramBaseAddr; 158 end 159 160 // FF to remember whether we read from the SRAM in the previous clock cycle. 161 logic sram_read_in_prev_cyc_d, sram_read_in_prev_cyc_q; 162 1/1 assign sram_read_in_prev_cyc_d = clr_i ? 1'b0 : sram_incr_rd_ptr; Tests: T1 T2 T3  163 always_ff @(posedge clk_i or negedge rst_ni) begin 164 1/1 if (!rst_ni) begin Tests: T1 T2 T3  165 1/1 sram_read_in_prev_cyc_q <= 1'b0; Tests: T1 T2 T3  166 end else begin 167 1/1 sram_read_in_prev_cyc_q <= sram_read_in_prev_cyc_d; Tests: T1 T2 T3  168 end 169 end 170 171 // Control logic for FIFO interface wready, output buffer writes, and SRAM requests 172 logic state_err; 173 always_comb begin 174 1/1 inp_buf_rready = 1'b0; Tests: T1 T2 T3  175 1/1 oup_buf_wvalid = 1'b0; Tests: T1 T2 T3  176 1/1 oup_buf_wdata = inp_buf_rdata; Tests: T1 T2 T3  177 1/1 sram_req_o = 1'b0; Tests: T1 T2 T3  178 1/1 sram_write_o = 1'b0; Tests: T1 T2 T3  179 1/1 sram_addr_o = sram_wr_addr; Tests: T1 T2 T3  180 1/1 state_err = 1'b0; Tests: T1 T2 T3  181 182 // If the SRAM was read in the previous cycle, write the read data to the output buffer. 183 1/1 if (sram_read_in_prev_cyc_q) begin Tests: T1 T2 T3  184 1/1 oup_buf_wvalid = 1'b1; Tests: T2 T4 T5  185 1/1 oup_buf_wdata = sram_rdata_i; Tests: T2 T4 T5  186 // The output buffer must be ready; otherwise we are in an erroneous state. 187 1/1 state_err = !oup_buf_wready; Tests: T2 T4 T5  188 end MISSING_ELSE 189 190 // If the SRAM is not empty, data from the input buffer must flow via the SRAM. 191 1/1 if (!sram_empty) begin Tests: T1 T2 T3  192 193 // Prioritize refilling of the output buffer: if the output buffer is not being filled to the 194 // last slot in the current cycle or it is being read in the current cycle, read from the SRAM 195 // so the output buffer can be written in the next cycle. 196 1/1 if (!((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full) Tests: T2 T3 T4  197 || (fifo_rvalid_o && fifo_rready_i)) begin 198 1/1 sram_req_o = 1'b1; Tests: T2 T4 T5  199 1/1 sram_write_o = 1'b0; Tests: T2 T4 T5  200 1/1 sram_addr_o = sram_rd_addr; Tests: T2 T4 T5  201 202 // If the output buffer is full (and not being read), drain the input buffer into the SRAM. 203 end else begin 204 1/1 sram_req_o = !sram_full && inp_buf_rvalid; Tests: T2 T3 T4  205 1/1 sram_write_o = 1'b1; Tests: T2 T3 T4  206 1/1 sram_addr_o = sram_wr_addr; Tests: T2 T3 T4  207 1/1 inp_buf_rready = !sram_full && sram_gnt_i; Tests: T2 T3 T4  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 :
SCORELINE
95.59 100.00
tb.dut.i2c_core.u_fifos.u_acq_fifo_sram_adapter

Line No.TotalCoveredPercent
TOTAL4444100.00
CONT_ASSIGN12011100.00
CONT_ASSIGN12111100.00
CONT_ASSIGN12511100.00
CONT_ASSIGN15011100.00
CONT_ASSIGN15111100.00
CONT_ASSIGN15611100.00
CONT_ASSIGN15711100.00
CONT_ASSIGN16211100.00
ALWAYS16433100.00
ALWAYS1742828100.00
CONT_ASSIGN22811100.00
CONT_ASSIGN23611100.00
CONT_ASSIGN24011100.00
CONT_ASSIGN24411100.00
CONT_ASSIGN24911100.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: T42 T44 T71  185 1/1 oup_buf_wdata = sram_rdata_i; Tests: T42 T44 T71  186 // The output buffer must be ready; otherwise we are in an erroneous state. 187 1/1 state_err = !oup_buf_wready; Tests: T42 T44 T71  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: T42 T44 T71  197 || (fifo_rvalid_o && fifo_rready_i)) begin 198 1/1 sram_req_o = 1'b1; Tests: T42 T44 T71  199 1/1 sram_write_o = 1'b0; Tests: T42 T44 T71  200 1/1 sram_addr_o = sram_rd_addr; Tests: T42 T44 T71  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: T42 T44 T71  205 1/1 sram_write_o = 1'b1; Tests: T42 T44 T71  206 1/1 sram_addr_o = sram_wr_addr; Tests: T42 T44 T71  207 1/1 inp_buf_rready = !sram_full && sram_gnt_i; Tests: T42 T44 T71  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
TotalCoveredPercent
Conditions514282.35
Logical514282.35
Non-Logical00
Event00

 LINE       120
 EXPRESSION (fifo_wvalid_i && fifo_wready_o)
             ------1------    ------2------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT42,T50,T31
11CoveredT2,T3,T4

 LINE       125
 EXPRESSION (sram_req_o && sram_gnt_i)
             -----1----    -----2----
-1--2-StatusTests
01Not Covered
10Not Covered
11CoveredT2,T3,T4

 LINE       150
 EXPRESSION (sram_access && sram_write_o)
             -----1-----    ------2-----
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT2,T4,T5
11CoveredT2,T3,T4

 LINE       151
 EXPRESSION (sram_access && ((!sram_write_o)))
             -----1-----    --------2--------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT2,T3,T4
11CoveredT2,T4,T5

 LINE       162
 EXPRESSION (clr_i ? 1'b0 : sram_incr_rd_ptr)
             --1--
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,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-StatusTests
00CoveredT2,T3,T4
01CoveredT2,T4,T5
10CoveredT42,T50

 LINE       196
 SUB-EXPRESSION ( ! ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full) )
                    ----------------------------1----------------------------
-1-StatusTests
0CoveredT42,T50
1CoveredT2,T3,T4

 LINE       196
 SUB-EXPRESSION ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full)
                 -------------------1-------------------    ------2-----
-1--2-StatusTests
00CoveredT42,T50
01CoveredT2,T3,T4
10CoveredT2,T4,T5

 LINE       196
 SUB-EXPRESSION (oup_buf_almost_full && oup_buf_wvalid)
                 ---------1---------    -------2------
-1--2-StatusTests
01Not Covered
10CoveredT2,T3,T4
11CoveredT2,T4,T5

 LINE       196
 SUB-EXPRESSION (fifo_rvalid_o && fifo_rready_i)
                 ------1------    ------2------
-1--2-StatusTests
01Not Covered
10CoveredT2,T3,T4
11CoveredT2,T4,T5

 LINE       204
 EXPRESSION (((!sram_full)) && inp_buf_rvalid)
             -------1------    -------2------
-1--2-StatusTests
01Not Covered
10CoveredT2,T3,T4
11CoveredT2,T3,T4

 LINE       207
 EXPRESSION (((!sram_full)) && sram_gnt_i)
             -------1------    -----2----
-1--2-StatusTests
01Not Covered
10CoveredT2,T3,T4
11CoveredT2,T3,T4

 LINE       212
 EXPRESSION (oup_buf_wready && ((!sram_read_in_prev_cyc_q)))
             -------1------    --------------2-------------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT2,T4,T5
11CoveredT1,T2,T3

 LINE       220
 EXPRESSION (((!sram_full)) && inp_buf_rvalid)
             -------1------    -------2------
-1--2-StatusTests
01Not Covered
10CoveredT1,T2,T3
11CoveredT2,T3,T4

 LINE       223
 EXPRESSION (((!sram_full)) && sram_gnt_i)
             -------1------    -----2----
-1--2-StatusTests
01Not Covered
10CoveredT1,T2,T3
11CoveredT2,T3,T4

 LINE       236
 EXPRESSION (inp_buf_wready && ( ! (sram_full && oup_buf_full) ))
             -------1------    ----------------2----------------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT5,T30,T58
11CoveredT1,T2,T3

 LINE       236
 SUB-EXPRESSION ( ! (sram_full && oup_buf_full) )
                    -------------1-------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT5,T30,T58

 LINE       236
 SUB-EXPRESSION (sram_full && oup_buf_full)
                 ----1----    ------2-----
-1--2-StatusTests
01CoveredT2,T3,T4
10Not Covered
11CoveredT5,T30,T58

Branch Coverage for Module : i2c_fifo_sync_sram_adapter
Line No.TotalCoveredPercent
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-StatusTests
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-StatusTests
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-StatusTests
1 Covered T2,T4,T5
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-StatusTests
1 1 - Covered T2,T4,T5
1 0 - Covered T2,T3,T4
0 - 1 Covered T1,T2,T3
0 - 0 Covered T1,T2,T3


Assert Coverage for Module : i2c_fifo_sync_sram_adapter
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 7 7 100.00 7 100.00
Cover properties 0 0 0
Cover sequences 0 0 0
Total 7 7 100.00 7 100.00




Assertion Details

NameAttemptsReal SuccessesFailuresIncomplete
MinimalSramAw_A 6628 6628 0 0
MinimalSramFifoDepth_A 6628 6628 0 0
NoErr_A 1559711508 1559098696 0 0
NoSramReadWhenEmpty_A 1559711508 1237068801 0 0
NoSramWriteWhenFull_A 1559711508 31436681 0 0
OupBufWreadyAfterSramRead_A 1559711508 643654 0 0
SramRvalidAfterRead_A 1559711508 643654 0 0


MinimalSramAw_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 6628 6628 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
NameAttemptsReal SuccessesFailuresIncomplete
Total 6628 6628 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
NameAttemptsReal SuccessesFailuresIncomplete
Total 1559711508 1559098696 0 0
T1 8576 8220 0 0
T2 564972 564748 0 0
T3 62716 62512 0 0
T4 97652 97344 0 0
T5 59960 59568 0 0
T6 46716 46368 0 0
T7 388476 388116 0 0
T8 51188 49608 0 0
T9 308412 308172 0 0
T10 293660 293332 0 0

NoSramReadWhenEmpty_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1559711508 1237068801 0 0
T1 8576 8220 0 0
T2 564972 525224 0 0
T3 62716 51263 0 0
T4 97652 82634 0 0
T5 59960 45760 0 0
T6 46716 46368 0 0
T7 388476 338353 0 0
T8 51188 47245 0 0
T9 308412 293747 0 0
T10 293660 236917 0 0

NoSramWriteWhenFull_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1559711508 31436681 0 0
T5 14990 3030 0 0
T6 11679 0 0 0
T7 97119 0 0 0
T8 12797 0 0 0
T9 77103 0 0 0
T10 73415 0 0 0
T19 0 194827 0 0
T20 0 883 0 0
T25 0 111298 0 0
T30 814308 335 0 0
T42 435652 8 0 0
T43 52434 0 0 0
T44 325563 0 0 0
T45 30718 0 0 0
T46 78848 0 0 0
T50 0 13 0 0
T58 13131 0 0 0
T61 47347 26 0 0
T62 0 1273 0 0
T63 0 908 0 0
T64 58803 0 0 0
T67 0 1047 0 0
T68 31474 0 0 0
T71 79612 0 0 0
T72 212666 0 0 0
T73 53102 0 0 0
T74 10823 0 0 0
T78 0 161 0 0
T154 0 1867 0 0
T160 0 13 0 0
T161 0 4931 0 0
T162 0 20 0 0
T163 0 114045 0 0
T164 0 3 0 0
T165 0 1588 0 0
T166 0 4520 0 0
T167 0 170014 0 0
T168 45602 0 0 0

OupBufWreadyAfterSramRead_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1559711508 643654 0 0
T2 141243 33 0 0
T3 15679 0 0 0
T4 24413 78 0 0
T5 14990 88 0 0
T6 11679 0 0 0
T7 97119 34 0 0
T8 12797 11 0 0
T9 77103 87 0 0
T10 73415 0 0 0
T11 0 9 0 0
T30 542872 1250 0 0
T31 0 744 0 0
T41 0 202 0 0
T42 435652 36 0 0
T43 26217 0 0 0
T44 217042 257 0 0
T45 30718 5 0 0
T46 78848 139 0 0
T61 0 266 0 0
T64 58803 108 0 0
T68 31474 0 0 0
T71 79612 14 0 0
T72 212666 335 0 0
T73 53102 58 0 0
T74 10823 0 0 0
T154 0 79 0 0
T169 0 163 0 0

SramRvalidAfterRead_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1559711508 643654 0 0
T2 141243 33 0 0
T3 15679 0 0 0
T4 24413 78 0 0
T5 14990 88 0 0
T6 11679 0 0 0
T7 97119 34 0 0
T8 12797 11 0 0
T9 77103 87 0 0
T10 73415 0 0 0
T11 0 9 0 0
T30 542872 1250 0 0
T31 0 744 0 0
T41 0 202 0 0
T42 435652 36 0 0
T43 26217 0 0 0
T44 217042 257 0 0
T45 30718 5 0 0
T46 78848 139 0 0
T61 0 266 0 0
T64 58803 108 0 0
T68 31474 0 0 0
T71 79612 14 0 0
T72 212666 335 0 0
T73 53102 58 0 0
T74 10823 0 0 0
T154 0 79 0 0
T169 0 163 0 0

Line Coverage for Instance : tb.dut.i2c_core.u_fifos.u_fmt_fifo_sram_adapter
Line No.TotalCoveredPercent
TOTAL4444100.00
CONT_ASSIGN12011100.00
CONT_ASSIGN12111100.00
CONT_ASSIGN12511100.00
CONT_ASSIGN15011100.00
CONT_ASSIGN15111100.00
CONT_ASSIGN15311100.00
CONT_ASSIGN15411100.00
CONT_ASSIGN16211100.00
ALWAYS16433100.00
ALWAYS1742828100.00
CONT_ASSIGN22811100.00
CONT_ASSIGN23611100.00
CONT_ASSIGN24011100.00
CONT_ASSIGN24411100.00
CONT_ASSIGN24911100.00

119 ); 120 1/1 assign inp_buf_wvalid = fifo_wvalid_i && fifo_wready_o; Tests: T1 T2 T3  121 1/1 assign oup_buf_almost_full = oup_buf_depth >= OupBufDepthW'(OupBufDepth - 1); Tests: T1 T2 T3  122 123 // Signal whether we access the SRAM in this cycle 124 logic sram_access; 125 1/1 assign sram_access = sram_req_o && sram_gnt_i; Tests: T1 T2 T3  126 127 // SRAM read and write addresses 128 logic [SramAw-1:0] sram_wr_addr, sram_rd_addr; 129 logic [SramPtrW-1:0] sram_wr_ptr, sram_rd_ptr; 130 logic [SramDepthW-1:0] sram_depth; 131 logic sram_incr_wr_ptr, sram_incr_rd_ptr; 132 logic sram_full, sram_empty; 133 logic sram_ptrs_err; 134 prim_fifo_sync_cnt #( 135 .Depth (SramFifoDepth), 136 .Secure(1'b0) 137 ) u_sram_ptrs ( 138 .clk_i, 139 .rst_ni, 140 .clr_i, 141 .incr_wptr_i(sram_incr_wr_ptr), 142 .incr_rptr_i(sram_incr_rd_ptr), 143 .wptr_o (sram_wr_ptr), 144 .rptr_o (sram_rd_ptr), 145 .full_o (sram_full), 146 .empty_o (sram_empty), 147 .depth_o (sram_depth), 148 .err_o (sram_ptrs_err) 149 ); 150 1/1 assign sram_incr_wr_ptr = sram_access && sram_write_o; Tests: T1 T2 T3  151 1/1 assign sram_incr_rd_ptr = sram_access && !sram_write_o; Tests: T1 T2 T3  152 if (SramAddrLeadingZeros > 0) begin : gen_zero_extend_sram_addrs 153 1/1 assign sram_wr_addr = {{SramAddrLeadingZeros{1'b0}}, sram_wr_ptr} + SramBaseAddr; Tests: T1 T2 T3  154 1/1 assign sram_rd_addr = {{SramAddrLeadingZeros{1'b0}}, sram_rd_ptr} + SramBaseAddr; Tests: T1 T2 T3  155 end else begin : gen_no_zero_extend_sram_addrs 156 assign sram_wr_addr = sram_wr_ptr + SramBaseAddr; 157 assign sram_rd_addr = sram_rd_ptr + SramBaseAddr; 158 end 159 160 // FF to remember whether we read from the SRAM in the previous clock cycle. 161 logic sram_read_in_prev_cyc_d, sram_read_in_prev_cyc_q; 162 1/1 assign sram_read_in_prev_cyc_d = clr_i ? 1'b0 : sram_incr_rd_ptr; Tests: T1 T2 T3  163 always_ff @(posedge clk_i or negedge rst_ni) begin 164 1/1 if (!rst_ni) begin Tests: T1 T2 T3  165 1/1 sram_read_in_prev_cyc_q <= 1'b0; Tests: T1 T2 T3  166 end else begin 167 1/1 sram_read_in_prev_cyc_q <= sram_read_in_prev_cyc_d; Tests: T1 T2 T3  168 end 169 end 170 171 // Control logic for FIFO interface wready, output buffer writes, and SRAM requests 172 logic state_err; 173 always_comb begin 174 1/1 inp_buf_rready = 1'b0; Tests: T1 T2 T3  175 1/1 oup_buf_wvalid = 1'b0; Tests: T1 T2 T3  176 1/1 oup_buf_wdata = inp_buf_rdata; Tests: T1 T2 T3  177 1/1 sram_req_o = 1'b0; Tests: T1 T2 T3  178 1/1 sram_write_o = 1'b0; Tests: T1 T2 T3  179 1/1 sram_addr_o = sram_wr_addr; Tests: T1 T2 T3  180 1/1 state_err = 1'b0; Tests: T1 T2 T3  181 182 // If the SRAM was read in the previous cycle, write the read data to the output buffer. 183 1/1 if (sram_read_in_prev_cyc_q) begin Tests: T1 T2 T3  184 1/1 oup_buf_wvalid = 1'b1; Tests: T2 T4 T5  185 1/1 oup_buf_wdata = sram_rdata_i; Tests: T2 T4 T5  186 // The output buffer must be ready; otherwise we are in an erroneous state. 187 1/1 state_err = !oup_buf_wready; Tests: T2 T4 T5  188 end MISSING_ELSE 189 190 // If the SRAM is not empty, data from the input buffer must flow via the SRAM. 191 1/1 if (!sram_empty) begin Tests: T1 T2 T3  192 193 // Prioritize refilling of the output buffer: if the output buffer is not being filled to the 194 // last slot in the current cycle or it is being read in the current cycle, read from the SRAM 195 // so the output buffer can be written in the next cycle. 196 1/1 if (!((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full) Tests: T2 T3 T4  197 || (fifo_rvalid_o && fifo_rready_i)) begin 198 1/1 sram_req_o = 1'b1; Tests: T2 T4 T5  199 1/1 sram_write_o = 1'b0; Tests: T2 T4 T5  200 1/1 sram_addr_o = sram_rd_addr; Tests: T2 T4 T5  201 202 // If the output buffer is full (and not being read), drain the input buffer into the SRAM. 203 end else begin 204 1/1 sram_req_o = !sram_full && inp_buf_rvalid; Tests: T2 T3 T4  205 1/1 sram_write_o = 1'b1; Tests: T2 T3 T4  206 1/1 sram_addr_o = sram_wr_addr; Tests: T2 T3 T4  207 1/1 inp_buf_rready = !sram_full && sram_gnt_i; Tests: T2 T3 T4  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
TotalCoveredPercent
Conditions513874.51
Logical513874.51
Non-Logical00
Event00

 LINE       120
 EXPRESSION (fifo_wvalid_i && fifo_wready_o)
             ------1------    ------2------
-1--2-StatusTests
01CoveredT1,T2,T3
10Not Covered
11CoveredT2,T3,T4

 LINE       125
 EXPRESSION (sram_req_o && sram_gnt_i)
             -----1----    -----2----
-1--2-StatusTests
01Not Covered
10Not Covered
11CoveredT2,T3,T4

 LINE       150
 EXPRESSION (sram_access && sram_write_o)
             -----1-----    ------2-----
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT2,T4,T5
11CoveredT2,T3,T4

 LINE       151
 EXPRESSION (sram_access && ((!sram_write_o)))
             -----1-----    --------2--------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT2,T3,T4
11CoveredT2,T4,T5

 LINE       162
 EXPRESSION (clr_i ? 1'b0 : sram_incr_rd_ptr)
             --1--
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,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-StatusTests
00CoveredT2,T3,T4
01CoveredT2,T4,T5
10Not Covered

 LINE       196
 SUB-EXPRESSION ( ! ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full) )
                    ----------------------------1----------------------------
-1-StatusTests
0Not Covered
1CoveredT2,T3,T4

 LINE       196
 SUB-EXPRESSION ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full)
                 -------------------1-------------------    ------2-----
-1--2-StatusTests
00Not Covered
01CoveredT2,T3,T4
10CoveredT2,T4,T5

 LINE       196
 SUB-EXPRESSION (oup_buf_almost_full && oup_buf_wvalid)
                 ---------1---------    -------2------
-1--2-StatusTests
01Not Covered
10CoveredT2,T3,T4
11CoveredT2,T4,T5

 LINE       196
 SUB-EXPRESSION (fifo_rvalid_o && fifo_rready_i)
                 ------1------    ------2------
-1--2-StatusTests
01Not Covered
10CoveredT2,T3,T4
11CoveredT2,T4,T5

 LINE       204
 EXPRESSION (((!sram_full)) && inp_buf_rvalid)
             -------1------    -------2------
-1--2-StatusTests
01Not Covered
10CoveredT2,T3,T4
11CoveredT2,T3,T4

 LINE       207
 EXPRESSION (((!sram_full)) && sram_gnt_i)
             -------1------    -----2----
-1--2-StatusTests
01Not Covered
10CoveredT2,T3,T4
11CoveredT2,T3,T4

 LINE       212
 EXPRESSION (oup_buf_wready && ((!sram_read_in_prev_cyc_q)))
             -------1------    --------------2-------------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT2,T4,T5
11CoveredT1,T2,T3

 LINE       220
 EXPRESSION (((!sram_full)) && inp_buf_rvalid)
             -------1------    -------2------
-1--2-StatusTests
01Not Covered
10CoveredT1,T2,T3
11CoveredT2,T3,T4

 LINE       223
 EXPRESSION (((!sram_full)) && sram_gnt_i)
             -------1------    -----2----
-1--2-StatusTests
01Not Covered
10CoveredT1,T2,T3
11CoveredT2,T3,T4

 LINE       236
 EXPRESSION (inp_buf_wready && ( ! (sram_full && oup_buf_full) ))
             -------1------    ----------------2----------------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT5,T154,T19
11CoveredT1,T2,T3

 LINE       236
 SUB-EXPRESSION ( ! (sram_full && oup_buf_full) )
                    -------------1-------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT5,T154,T19

 LINE       236
 SUB-EXPRESSION (sram_full && oup_buf_full)
                 ----1----    ------2-----
-1--2-StatusTests
01CoveredT2,T3,T4
10Not Covered
11CoveredT5,T154,T19

Branch Coverage for Instance : tb.dut.i2c_core.u_fifos.u_fmt_fifo_sram_adapter
Line No.TotalCoveredPercent
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-StatusTests
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-StatusTests
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-StatusTests
1 Covered T2,T4,T5
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-StatusTests
1 1 - Covered T2,T4,T5
1 0 - Covered T2,T3,T4
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
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 7 7 100.00 7 100.00
Cover properties 0 0 0
Cover sequences 0 0 0
Total 7 7 100.00 7 100.00




Assertion Details

NameAttemptsReal SuccessesFailuresIncomplete
MinimalSramAw_A 1657 1657 0 0
MinimalSramFifoDepth_A 1657 1657 0 0
NoErr_A 389927877 389774674 0 0
NoSramReadWhenEmpty_A 389927877 317794607 0 0
NoSramWriteWhenFull_A 389927877 30860711 0 0
OupBufWreadyAfterSramRead_A 389927877 182570 0 0
SramRvalidAfterRead_A 389927877 182570 0 0


MinimalSramAw_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1657 1657 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
NameAttemptsReal SuccessesFailuresIncomplete
Total 1657 1657 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
NameAttemptsReal SuccessesFailuresIncomplete
Total 389927877 389774674 0 0
T1 2144 2055 0 0
T2 141243 141187 0 0
T3 15679 15628 0 0
T4 24413 24336 0 0
T5 14990 14892 0 0
T6 11679 11592 0 0
T7 97119 97029 0 0
T8 12797 12402 0 0
T9 77103 77043 0 0
T10 73415 73333 0 0

NoSramReadWhenEmpty_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 389927877 317794607 0 0
T1 2144 2055 0 0
T2 141243 101663 0 0
T3 15679 4379 0 0
T4 24413 9626 0 0
T5 14990 1084 0 0
T6 11679 11592 0 0
T7 97119 47266 0 0
T8 12797 10039 0 0
T9 77103 62618 0 0
T10 73415 73333 0 0

NoSramWriteWhenFull_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 389927877 30860711 0 0
T5 14990 3030 0 0
T6 11679 0 0 0
T7 97119 0 0 0
T8 12797 0 0 0
T9 77103 0 0 0
T10 73415 0 0 0
T19 0 194827 0 0
T20 0 883 0 0
T25 0 111298 0 0
T30 271436 0 0 0
T42 217826 0 0 0
T43 26217 0 0 0
T44 108521 0 0 0
T78 0 40 0 0
T154 0 1867 0 0
T161 0 4931 0 0
T163 0 114045 0 0
T166 0 4520 0 0
T167 0 170014 0 0

OupBufWreadyAfterSramRead_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 389927877 182570 0 0
T2 141243 33 0 0
T3 15679 0 0 0
T4 24413 78 0 0
T5 14990 88 0 0
T6 11679 0 0 0
T7 97119 34 0 0
T8 12797 11 0 0
T9 77103 87 0 0
T10 73415 0 0 0
T11 0 9 0 0
T30 0 630 0 0
T41 0 202 0 0
T42 217826 0 0 0
T154 0 79 0 0

SramRvalidAfterRead_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 389927877 182570 0 0
T2 141243 33 0 0
T3 15679 0 0 0
T4 24413 78 0 0
T5 14990 88 0 0
T6 11679 0 0 0
T7 97119 34 0 0
T8 12797 11 0 0
T9 77103 87 0 0
T10 73415 0 0 0
T11 0 9 0 0
T30 0 630 0 0
T41 0 202 0 0
T42 217826 0 0 0
T154 0 79 0 0

Line Coverage for Instance : tb.dut.i2c_core.u_fifos.u_tx_fifo_sram_adapter
Line No.TotalCoveredPercent
TOTAL4444100.00
CONT_ASSIGN12011100.00
CONT_ASSIGN12111100.00
CONT_ASSIGN12511100.00
CONT_ASSIGN15011100.00
CONT_ASSIGN15111100.00
CONT_ASSIGN15311100.00
CONT_ASSIGN15411100.00
CONT_ASSIGN16211100.00
ALWAYS16433100.00
ALWAYS1742828100.00
CONT_ASSIGN22811100.00
CONT_ASSIGN23611100.00
CONT_ASSIGN24011100.00
CONT_ASSIGN24411100.00
CONT_ASSIGN24911100.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: T10 T43 T44  185 1/1 oup_buf_wdata = sram_rdata_i; Tests: T10 T43 T44  186 // The output buffer must be ready; otherwise we are in an erroneous state. 187 1/1 state_err = !oup_buf_wready; Tests: T10 T43 T44  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: T10 T43 T44  197 || (fifo_rvalid_o && fifo_rready_i)) begin 198 1/1 sram_req_o = 1'b1; Tests: T10 T43 T44  199 1/1 sram_write_o = 1'b0; Tests: T10 T43 T44  200 1/1 sram_addr_o = sram_rd_addr; Tests: T10 T43 T44  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: T10 T43 T44  205 1/1 sram_write_o = 1'b1; Tests: T10 T43 T44  206 1/1 sram_addr_o = sram_wr_addr; Tests: T10 T43 T44  207 1/1 inp_buf_rready = !sram_full && sram_gnt_i; Tests: T10 T43 T44  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
TotalCoveredPercent
Conditions513874.51
Logical513874.51
Non-Logical00
Event00

 LINE       120
 EXPRESSION (fifo_wvalid_i && fifo_wready_o)
             ------1------    ------2------
-1--2-StatusTests
01CoveredT1,T2,T3
10Not Covered
11CoveredT10,T42,T43

 LINE       125
 EXPRESSION (sram_req_o && sram_gnt_i)
             -----1----    -----2----
-1--2-StatusTests
01Not Covered
10Not Covered
11CoveredT10,T43,T44

 LINE       150
 EXPRESSION (sram_access && sram_write_o)
             -----1-----    ------2-----
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT10,T43,T44
11CoveredT10,T43,T44

 LINE       151
 EXPRESSION (sram_access && ((!sram_write_o)))
             -----1-----    --------2--------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT10,T43,T44
11CoveredT10,T43,T44

 LINE       162
 EXPRESSION (clr_i ? 1'b0 : sram_incr_rd_ptr)
             --1--
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,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-StatusTests
00CoveredT10,T43,T44
01CoveredT10,T43,T44
10Not Covered

 LINE       196
 SUB-EXPRESSION ( ! ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full) )
                    ----------------------------1----------------------------
-1-StatusTests
0Not Covered
1CoveredT10,T43,T44

 LINE       196
 SUB-EXPRESSION ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full)
                 -------------------1-------------------    ------2-----
-1--2-StatusTests
00Not Covered
01CoveredT10,T43,T44
10CoveredT10,T43,T44

 LINE       196
 SUB-EXPRESSION (oup_buf_almost_full && oup_buf_wvalid)
                 ---------1---------    -------2------
-1--2-StatusTests
01Not Covered
10CoveredT10,T43,T44
11CoveredT10,T43,T44

 LINE       196
 SUB-EXPRESSION (fifo_rvalid_o && fifo_rready_i)
                 ------1------    ------2------
-1--2-StatusTests
01Not Covered
10CoveredT10,T43,T44
11CoveredT10,T43,T44

 LINE       204
 EXPRESSION (((!sram_full)) && inp_buf_rvalid)
             -------1------    -------2------
-1--2-StatusTests
01Not Covered
10CoveredT10,T43,T44
11CoveredT10,T43,T44

 LINE       207
 EXPRESSION (((!sram_full)) && sram_gnt_i)
             -------1------    -----2----
-1--2-StatusTests
01Not Covered
10CoveredT10,T43,T44
11CoveredT10,T43,T44

 LINE       212
 EXPRESSION (oup_buf_wready && ((!sram_read_in_prev_cyc_q)))
             -------1------    --------------2-------------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT10,T43,T44
11CoveredT1,T2,T3

 LINE       220
 EXPRESSION (((!sram_full)) && inp_buf_rvalid)
             -------1------    -------2------
-1--2-StatusTests
01Not Covered
10CoveredT1,T2,T3
11CoveredT10,T43,T44

 LINE       223
 EXPRESSION (((!sram_full)) && sram_gnt_i)
             -------1------    -----2----
-1--2-StatusTests
01Not Covered
10CoveredT1,T2,T3
11CoveredT10,T43,T44

 LINE       236
 EXPRESSION (inp_buf_wready && ( ! (sram_full && oup_buf_full) ))
             -------1------    ----------------2----------------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT58,T59,T60
11CoveredT1,T2,T3

 LINE       236
 SUB-EXPRESSION ( ! (sram_full && oup_buf_full) )
                    -------------1-------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT58,T59,T60

 LINE       236
 SUB-EXPRESSION (sram_full && oup_buf_full)
                 ----1----    ------2-----
-1--2-StatusTests
01CoveredT10,T43,T44
10Not Covered
11CoveredT58,T59,T60

Branch Coverage for Instance : tb.dut.i2c_core.u_fifos.u_tx_fifo_sram_adapter
Line No.TotalCoveredPercent
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-StatusTests
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-StatusTests
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-StatusTests
1 Covered T10,T43,T44
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-StatusTests
1 1 - Covered T10,T43,T44
1 0 - Covered T10,T43,T44
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
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 7 7 100.00 7 100.00
Cover properties 0 0 0
Cover sequences 0 0 0
Total 7 7 100.00 7 100.00




Assertion Details

NameAttemptsReal SuccessesFailuresIncomplete
MinimalSramAw_A 1657 1657 0 0
MinimalSramFifoDepth_A 1657 1657 0 0
NoErr_A 389927877 389774674 0 0
NoSramReadWhenEmpty_A 389927877 368496918 0 0
NoSramWriteWhenFull_A 389927877 290197 0 0
OupBufWreadyAfterSramRead_A 389927877 112815 0 0
SramRvalidAfterRead_A 389927877 112815 0 0


MinimalSramAw_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1657 1657 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
NameAttemptsReal SuccessesFailuresIncomplete
Total 1657 1657 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
NameAttemptsReal SuccessesFailuresIncomplete
Total 389927877 389774674 0 0
T1 2144 2055 0 0
T2 141243 141187 0 0
T3 15679 15628 0 0
T4 24413 24336 0 0
T5 14990 14892 0 0
T6 11679 11592 0 0
T7 97119 97029 0 0
T8 12797 12402 0 0
T9 77103 77043 0 0
T10 73415 73333 0 0

NoSramReadWhenEmpty_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 389927877 368496918 0 0
T1 2144 2055 0 0
T2 141243 141187 0 0
T3 15679 15628 0 0
T4 24413 24336 0 0
T5 14990 14892 0 0
T6 11679 11592 0 0
T7 97119 97029 0 0
T8 12797 12402 0 0
T9 77103 77043 0 0
T10 73415 16918 0 0

NoSramWriteWhenFull_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 389927877 290197 0 0
T34 4073 0 0 0
T58 13131 9940 0 0
T59 0 7838 0 0
T60 0 7594 0 0
T61 47347 0 0 0
T62 48952 0 0 0
T77 1999 0 0 0
T89 0 334 0 0
T93 0 7051 0 0
T98 1482 0 0 0
T124 0 9734 0 0
T154 16739 0 0 0
T155 405127 0 0 0
T168 45602 0 0 0
T170 0 48 0 0
T171 0 349 0 0
T172 0 10419 0 0
T173 0 385 0 0
T174 3916 0 0 0

OupBufWreadyAfterSramRead_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 389927877 112815 0 0
T10 73415 264 0 0
T30 271436 0 0 0
T42 217826 0 0 0
T43 26217 40 0 0
T44 108521 183 0 0
T45 15359 17 0 0
T46 39424 100 0 0
T64 0 62 0 0
T68 15737 7 0 0
T71 39806 128 0 0
T72 106333 214 0 0
T73 0 36 0 0

SramRvalidAfterRead_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 389927877 112815 0 0
T10 73415 264 0 0
T30 271436 0 0 0
T42 217826 0 0 0
T43 26217 40 0 0
T44 108521 183 0 0
T45 15359 17 0 0
T46 39424 100 0 0
T64 0 62 0 0
T68 15737 7 0 0
T71 39806 128 0 0
T72 106333 214 0 0
T73 0 36 0 0

Line Coverage for Instance : tb.dut.i2c_core.u_fifos.u_rx_fifo_sram_adapter
Line No.TotalCoveredPercent
TOTAL4444100.00
CONT_ASSIGN12011100.00
CONT_ASSIGN12111100.00
CONT_ASSIGN12511100.00
CONT_ASSIGN15011100.00
CONT_ASSIGN15111100.00
CONT_ASSIGN15311100.00
CONT_ASSIGN15411100.00
CONT_ASSIGN16211100.00
ALWAYS16433100.00
ALWAYS1742828100.00
CONT_ASSIGN22811100.00
CONT_ASSIGN23611100.00
CONT_ASSIGN24011100.00
CONT_ASSIGN24411100.00
CONT_ASSIGN24911100.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: T30 T31 T33  185 1/1 oup_buf_wdata = sram_rdata_i; Tests: T30 T31 T33  186 // The output buffer must be ready; otherwise we are in an erroneous state. 187 1/1 state_err = !oup_buf_wready; Tests: T30 T31 T33  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: T30 T31 T33  197 || (fifo_rvalid_o && fifo_rready_i)) begin 198 1/1 sram_req_o = 1'b1; Tests: T30 T31 T33  199 1/1 sram_write_o = 1'b0; Tests: T30 T31 T33  200 1/1 sram_addr_o = sram_rd_addr; Tests: T30 T31 T33  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: T30 T31 T33  205 1/1 sram_write_o = 1'b1; Tests: T30 T31 T33  206 1/1 sram_addr_o = sram_wr_addr; Tests: T30 T31 T33  207 1/1 inp_buf_rready = !sram_full && sram_gnt_i; Tests: T30 T31 T33  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
TotalCoveredPercent
Conditions513976.47
Logical513976.47
Non-Logical00
Event00

 LINE       120
 EXPRESSION (fifo_wvalid_i && fifo_wready_o)
             ------1------    ------2------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT31,T33,T102
11CoveredT2,T7,T8

 LINE       125
 EXPRESSION (sram_req_o && sram_gnt_i)
             -----1----    -----2----
-1--2-StatusTests
01Not Covered
10Not Covered
11CoveredT30,T31,T33

 LINE       150
 EXPRESSION (sram_access && sram_write_o)
             -----1-----    ------2-----
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT30,T31,T33
11CoveredT30,T31,T33

 LINE       151
 EXPRESSION (sram_access && ((!sram_write_o)))
             -----1-----    --------2--------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT30,T31,T33
11CoveredT30,T31,T33

 LINE       162
 EXPRESSION (clr_i ? 1'b0 : sram_incr_rd_ptr)
             --1--
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,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-StatusTests
00CoveredT30,T31,T33
01CoveredT30,T31,T33
10Not Covered

 LINE       196
 SUB-EXPRESSION ( ! ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full) )
                    ----------------------------1----------------------------
-1-StatusTests
0Not Covered
1CoveredT30,T31,T33

 LINE       196
 SUB-EXPRESSION ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full)
                 -------------------1-------------------    ------2-----
-1--2-StatusTests
00Not Covered
01CoveredT30,T31,T33
10CoveredT30,T31,T33

 LINE       196
 SUB-EXPRESSION (oup_buf_almost_full && oup_buf_wvalid)
                 ---------1---------    -------2------
-1--2-StatusTests
01Not Covered
10CoveredT30,T31,T33
11CoveredT30,T31,T33

 LINE       196
 SUB-EXPRESSION (fifo_rvalid_o && fifo_rready_i)
                 ------1------    ------2------
-1--2-StatusTests
01Not Covered
10CoveredT30,T31,T33
11CoveredT30,T31,T33

 LINE       204
 EXPRESSION (((!sram_full)) && inp_buf_rvalid)
             -------1------    -------2------
-1--2-StatusTests
01Not Covered
10CoveredT30,T31,T33
11CoveredT30,T31,T33

 LINE       207
 EXPRESSION (((!sram_full)) && sram_gnt_i)
             -------1------    -----2----
-1--2-StatusTests
01Not Covered
10CoveredT30,T31,T33
11CoveredT30,T31,T33

 LINE       212
 EXPRESSION (oup_buf_wready && ((!sram_read_in_prev_cyc_q)))
             -------1------    --------------2-------------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT30,T31,T33
11CoveredT1,T2,T3

 LINE       220
 EXPRESSION (((!sram_full)) && inp_buf_rvalid)
             -------1------    -------2------
-1--2-StatusTests
01Not Covered
10CoveredT1,T2,T3
11CoveredT30,T31,T33

 LINE       223
 EXPRESSION (((!sram_full)) && sram_gnt_i)
             -------1------    -----2----
-1--2-StatusTests
01Not Covered
10CoveredT1,T2,T3
11CoveredT30,T31,T33

 LINE       236
 EXPRESSION (inp_buf_wready && ( ! (sram_full && oup_buf_full) ))
             -------1------    ----------------2----------------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT30,T31,T33
11CoveredT1,T2,T3

 LINE       236
 SUB-EXPRESSION ( ! (sram_full && oup_buf_full) )
                    -------------1-------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT30,T31,T33

 LINE       236
 SUB-EXPRESSION (sram_full && oup_buf_full)
                 ----1----    ------2-----
-1--2-StatusTests
01CoveredT30,T31,T33
10Not Covered
11CoveredT30,T31,T33

Branch Coverage for Instance : tb.dut.i2c_core.u_fifos.u_rx_fifo_sram_adapter
Line No.TotalCoveredPercent
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-StatusTests
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-StatusTests
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-StatusTests
1 Covered T30,T31,T33
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-StatusTests
1 1 - Covered T30,T31,T33
1 0 - Covered T30,T31,T33
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
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 7 7 100.00 7 100.00
Cover properties 0 0 0
Cover sequences 0 0 0
Total 7 7 100.00 7 100.00




Assertion Details

NameAttemptsReal SuccessesFailuresIncomplete
MinimalSramAw_A 1657 1657 0 0
MinimalSramFifoDepth_A 1657 1657 0 0
NoErr_A 389927877 389774674 0 0
NoSramReadWhenEmpty_A 389927877 366953262 0 0
NoSramWriteWhenFull_A 389927877 223027 0 0
OupBufWreadyAfterSramRead_A 389927877 112282 0 0
SramRvalidAfterRead_A 389927877 112282 0 0


MinimalSramAw_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1657 1657 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
NameAttemptsReal SuccessesFailuresIncomplete
Total 1657 1657 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
NameAttemptsReal SuccessesFailuresIncomplete
Total 389927877 389774674 0 0
T1 2144 2055 0 0
T2 141243 141187 0 0
T3 15679 15628 0 0
T4 24413 24336 0 0
T5 14990 14892 0 0
T6 11679 11592 0 0
T7 97119 97029 0 0
T8 12797 12402 0 0
T9 77103 77043 0 0
T10 73415 73333 0 0

NoSramReadWhenEmpty_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 389927877 366953262 0 0
T1 2144 2055 0 0
T2 141243 141187 0 0
T3 15679 15628 0 0
T4 24413 24336 0 0
T5 14990 14892 0 0
T6 11679 11592 0 0
T7 97119 97029 0 0
T8 12797 12402 0 0
T9 77103 77043 0 0
T10 73415 73333 0 0

NoSramWriteWhenFull_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 389927877 223027 0 0
T30 271436 335 0 0
T31 0 2757 0 0
T33 0 3705 0 0
T44 108521 0 0 0
T45 15359 0 0 0
T46 39424 0 0 0
T64 58803 0 0 0
T68 15737 0 0 0
T71 39806 0 0 0
T72 106333 0 0 0
T73 26551 0 0 0
T74 10823 0 0 0
T78 0 121 0 0
T79 0 199 0 0
T102 0 3822 0 0
T175 0 5 0 0
T176 0 2262 0 0
T177 0 722 0 0
T178 0 3777 0 0

OupBufWreadyAfterSramRead_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 389927877 112282 0 0
T30 271436 620 0 0
T31 0 744 0 0
T33 0 1054 0 0
T44 108521 0 0 0
T45 15359 0 0 0
T46 39424 0 0 0
T64 58803 0 0 0
T68 15737 0 0 0
T71 39806 0 0 0
T72 106333 0 0 0
T73 26551 0 0 0
T74 10823 0 0 0
T78 0 682 0 0
T79 0 1178 0 0
T102 0 1240 0 0
T113 0 992 0 0
T176 0 620 0 0
T177 0 1240 0 0
T178 0 1116 0 0

SramRvalidAfterRead_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 389927877 112282 0 0
T30 271436 620 0 0
T31 0 744 0 0
T33 0 1054 0 0
T44 108521 0 0 0
T45 15359 0 0 0
T46 39424 0 0 0
T64 58803 0 0 0
T68 15737 0 0 0
T71 39806 0 0 0
T72 106333 0 0 0
T73 26551 0 0 0
T74 10823 0 0 0
T78 0 682 0 0
T79 0 1178 0 0
T102 0 1240 0 0
T113 0 992 0 0
T176 0 620 0 0
T177 0 1240 0 0
T178 0 1116 0 0

Line Coverage for Instance : tb.dut.i2c_core.u_fifos.u_acq_fifo_sram_adapter
Line No.TotalCoveredPercent
TOTAL4444100.00
CONT_ASSIGN12011100.00
CONT_ASSIGN12111100.00
CONT_ASSIGN12511100.00
CONT_ASSIGN15011100.00
CONT_ASSIGN15111100.00
CONT_ASSIGN15611100.00
CONT_ASSIGN15711100.00
CONT_ASSIGN16211100.00
ALWAYS16433100.00
ALWAYS1742828100.00
CONT_ASSIGN22811100.00
CONT_ASSIGN23611100.00
CONT_ASSIGN24011100.00
CONT_ASSIGN24411100.00
CONT_ASSIGN24911100.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: T42 T44 T71  185 1/1 oup_buf_wdata = sram_rdata_i; Tests: T42 T44 T71  186 // The output buffer must be ready; otherwise we are in an erroneous state. 187 1/1 state_err = !oup_buf_wready; Tests: T42 T44 T71  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: T42 T44 T71  197 || (fifo_rvalid_o && fifo_rready_i)) begin 198 1/1 sram_req_o = 1'b1; Tests: T42 T44 T71  199 1/1 sram_write_o = 1'b0; Tests: T42 T44 T71  200 1/1 sram_addr_o = sram_rd_addr; Tests: T42 T44 T71  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: T42 T44 T71  205 1/1 sram_write_o = 1'b1; Tests: T42 T44 T71  206 1/1 sram_addr_o = sram_wr_addr; Tests: T42 T44 T71  207 1/1 inp_buf_rready = !sram_full && sram_gnt_i; Tests: T42 T44 T71  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
TotalCoveredPercent
Conditions514282.35
Logical514282.35
Non-Logical00
Event00

 LINE       120
 EXPRESSION (fifo_wvalid_i && fifo_wready_o)
             ------1------    ------2------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT42,T50
11CoveredT10,T42,T43

 LINE       125
 EXPRESSION (sram_req_o && sram_gnt_i)
             -----1----    -----2----
-1--2-StatusTests
01Not Covered
10Not Covered
11CoveredT42,T44,T71

 LINE       150
 EXPRESSION (sram_access && sram_write_o)
             -----1-----    ------2-----
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT42,T44,T71
11CoveredT42,T44,T71

 LINE       151
 EXPRESSION (sram_access && ((!sram_write_o)))
             -----1-----    --------2--------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT42,T44,T71
11CoveredT42,T44,T71

 LINE       162
 EXPRESSION (clr_i ? 1'b0 : sram_incr_rd_ptr)
             --1--
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,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-StatusTests
00CoveredT42,T44,T71
01CoveredT42,T44,T71
10CoveredT42,T50

 LINE       196
 SUB-EXPRESSION ( ! ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full) )
                    ----------------------------1----------------------------
-1-StatusTests
0CoveredT42,T50
1CoveredT42,T44,T71

 LINE       196
 SUB-EXPRESSION ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full)
                 -------------------1-------------------    ------2-----
-1--2-StatusTests
00CoveredT42,T50
01CoveredT42,T44,T71
10CoveredT44,T71,T45

 LINE       196
 SUB-EXPRESSION (oup_buf_almost_full && oup_buf_wvalid)
                 ---------1---------    -------2------
-1--2-StatusTests
01Not Covered
10CoveredT42,T44,T71
11CoveredT44,T71,T45

 LINE       196
 SUB-EXPRESSION (fifo_rvalid_o && fifo_rready_i)
                 ------1------    ------2------
-1--2-StatusTests
01Not Covered
10CoveredT42,T44,T71
11CoveredT42,T44,T71

 LINE       204
 EXPRESSION (((!sram_full)) && inp_buf_rvalid)
             -------1------    -------2------
-1--2-StatusTests
01Not Covered
10CoveredT42,T44,T71
11CoveredT42,T44,T71

 LINE       207
 EXPRESSION (((!sram_full)) && sram_gnt_i)
             -------1------    -----2----
-1--2-StatusTests
01Not Covered
10CoveredT42,T44,T71
11CoveredT42,T44,T71

 LINE       212
 EXPRESSION (oup_buf_wready && ((!sram_read_in_prev_cyc_q)))
             -------1------    --------------2-------------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT42,T44,T71
11CoveredT1,T2,T3

 LINE       220
 EXPRESSION (((!sram_full)) && inp_buf_rvalid)
             -------1------    -------2------
-1--2-StatusTests
01Not Covered
10CoveredT1,T2,T3
11CoveredT42,T44,T71

 LINE       223
 EXPRESSION (((!sram_full)) && sram_gnt_i)
             -------1------    -----2----
-1--2-StatusTests
01Not Covered
10CoveredT1,T2,T3
11CoveredT42,T44,T71

 LINE       236
 EXPRESSION (inp_buf_wready && ( ! (sram_full && oup_buf_full) ))
             -------1------    ----------------2----------------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT42,T61,T62
11CoveredT1,T2,T3

 LINE       236
 SUB-EXPRESSION ( ! (sram_full && oup_buf_full) )
                    -------------1-------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT42,T61,T62

 LINE       236
 SUB-EXPRESSION (sram_full && oup_buf_full)
                 ----1----    ------2-----
-1--2-StatusTests
01CoveredT10,T42,T44
10Not Covered
11CoveredT42,T61,T62

Branch Coverage for Instance : tb.dut.i2c_core.u_fifos.u_acq_fifo_sram_adapter
Line No.TotalCoveredPercent
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-StatusTests
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-StatusTests
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-StatusTests
1 Covered T42,T44,T71
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-StatusTests
1 1 - Covered T42,T44,T71
1 0 - Covered T42,T44,T71
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
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 7 7 100.00 7 100.00
Cover properties 0 0 0
Cover sequences 0 0 0
Total 7 7 100.00 7 100.00




Assertion Details

NameAttemptsReal SuccessesFailuresIncomplete
MinimalSramAw_A 1657 1657 0 0
MinimalSramFifoDepth_A 1657 1657 0 0
NoErr_A 389927877 389774674 0 0
NoSramReadWhenEmpty_A 389927877 183824014 0 0
NoSramWriteWhenFull_A 389927877 62746 0 0
OupBufWreadyAfterSramRead_A 389927877 235987 0 0
SramRvalidAfterRead_A 389927877 235987 0 0


MinimalSramAw_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1657 1657 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
NameAttemptsReal SuccessesFailuresIncomplete
Total 1657 1657 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
NameAttemptsReal SuccessesFailuresIncomplete
Total 389927877 389774674 0 0
T1 2144 2055 0 0
T2 141243 141187 0 0
T3 15679 15628 0 0
T4 24413 24336 0 0
T5 14990 14892 0 0
T6 11679 11592 0 0
T7 97119 97029 0 0
T8 12797 12402 0 0
T9 77103 77043 0 0
T10 73415 73333 0 0

NoSramReadWhenEmpty_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 389927877 183824014 0 0
T1 2144 2055 0 0
T2 141243 141187 0 0
T3 15679 15628 0 0
T4 24413 24336 0 0
T5 14990 14892 0 0
T6 11679 11592 0 0
T7 97119 97029 0 0
T8 12797 12402 0 0
T9 77103 77043 0 0
T10 73415 73333 0 0

NoSramWriteWhenFull_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 389927877 62746 0 0
T30 271436 0 0 0
T42 217826 8 0 0
T43 26217 0 0 0
T44 108521 0 0 0
T45 15359 0 0 0
T46 39424 0 0 0
T50 0 13 0 0
T61 0 26 0 0
T62 0 1273 0 0
T63 0 908 0 0
T67 0 1047 0 0
T68 15737 0 0 0
T71 39806 0 0 0
T72 106333 0 0 0
T73 26551 0 0 0
T160 0 13 0 0
T162 0 20 0 0
T164 0 3 0 0
T165 0 1588 0 0

OupBufWreadyAfterSramRead_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 389927877 235987 0 0
T30 271436 0 0 0
T42 217826 36 0 0
T43 26217 0 0 0
T44 108521 257 0 0
T45 15359 5 0 0
T46 39424 139 0 0
T61 0 266 0 0
T64 0 108 0 0
T68 15737 0 0 0
T71 39806 14 0 0
T72 106333 335 0 0
T73 26551 58 0 0
T169 0 163 0 0

SramRvalidAfterRead_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 389927877 235987 0 0
T30 271436 0 0 0
T42 217826 36 0 0
T43 26217 0 0 0
T44 108521 257 0 0
T45 15359 5 0 0
T46 39424 139 0 0
T61 0 266 0 0
T64 0 108 0 0
T68 15737 0 0 0
T71 39806 14 0 0
T72 106333 335 0 0
T73 26551 58 0 0
T169 0 163 0 0

0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%