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: T3 T4 T10  185 1/1 oup_buf_wdata = sram_rdata_i; Tests: T3 T4 T10  186 // The output buffer must be ready; otherwise we are in an erroneous state. 187 1/1 state_err = !oup_buf_wready; Tests: T3 T4 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: T2 T3 T4  197 || (fifo_rvalid_o && fifo_rready_i)) begin 198 1/1 sram_req_o = 1'b1; Tests: T3 T4 T10  199 1/1 sram_write_o = 1'b0; Tests: T3 T4 T10  200 1/1 sram_addr_o = sram_rd_addr; Tests: T3 T4 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: 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: T4 T5 T6  185 1/1 oup_buf_wdata = sram_rdata_i; Tests: T4 T5 T6  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 T6  188 end MISSING_ELSE 189 190 // If the SRAM is not empty, data from the input buffer must flow via the SRAM. 191 1/1 if (!sram_empty) begin Tests: T1 T2 T3  192 193 // Prioritize refilling of the output buffer: if the output buffer is not being filled to the 194 // last slot in the current cycle or it is being read in the current cycle, read from the SRAM 195 // so the output buffer can be written in the next cycle. 196 1/1 if (!((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full) Tests: T4 T5 T6  197 || (fifo_rvalid_o && fifo_rready_i)) begin 198 1/1 sram_req_o = 1'b1; Tests: T4 T5 T6  199 1/1 sram_write_o = 1'b0; Tests: T4 T5 T6  200 1/1 sram_addr_o = sram_rd_addr; Tests: T4 T5 T6  201 202 // If the output buffer is full (and not being read), drain the input buffer into the SRAM. 203 end else begin 204 1/1 sram_req_o = !sram_full && inp_buf_rvalid; Tests: T4 T5 T6  205 1/1 sram_write_o = 1'b1; Tests: T4 T5 T6  206 1/1 sram_addr_o = sram_wr_addr; Tests: T4 T5 T6  207 1/1 inp_buf_rready = !sram_full && sram_gnt_i; Tests: T4 T5 T6  208 end 209 210 // If the SRAM is empty, data must flow from the input buffer to the output buffer if the output 211 // buffer is ready and is not receiving data read from the SRAM in the previous cycle 212 1/1 end else if (oup_buf_wready && !sram_read_in_prev_cyc_q) begin Tests: T1 T2 T3  213 1/1 oup_buf_wvalid = inp_buf_rvalid; Tests: T1 T2 T3  214 1/1 oup_buf_wdata = inp_buf_rdata; Tests: T1 T2 T3  215 1/1 inp_buf_rready = oup_buf_wready; Tests: T1 T2 T3  216 217 // Otherwise the SRAM is empty but the output buffer cannot take the data from the input buffer, 218 // so drain the input buffer into the SRAM. 219 end else begin 220 1/1 sram_req_o = !sram_full && inp_buf_rvalid; Tests: T1 T2 T3  221 1/1 sram_write_o = 1'b1; Tests: T1 T2 T3  222 1/1 sram_addr_o = sram_wr_addr; Tests: T1 T2 T3  223 1/1 inp_buf_rready = !sram_full && sram_gnt_i; Tests: T1 T2 T3  224 end 225 end 226 227 // Error output is high if any of the internal errors is high 228 1/1 assign err_o = |{inp_buf_err, oup_buf_err, sram_ptrs_err, state_err}; Tests: T1 T2 T3  229 230 // The SRAM and the output buffer together form the entire architectural capacity of the FIFO. 231 // Thus, when both are full, the FIFO is no longer ready to receive writes even though the input 232 // buffer could store one additional entry. This ensures that in the cycle after an entry has 233 // been read from the full FIFO, the next entry can be written to the FIFO. 234 // (It may be possible that all input buffer slots except one can be counted to the architectural 235 // capacity of the FIFO, but this is a relatively small optimization left for future work.) 236 1/1 assign fifo_wready_o = inp_buf_wready && !(sram_full && oup_buf_full); Tests: T1 T2 T3  237 238 // The current depth of the FIFO represented by this module is the depth of all buffers plus the 239 // FIFO in the SRAM plus one if there's an entry in transition between SRAM and output buffer. 240 1/1 assign fifo_depth_o = DepthW'(inp_buf_depth) + DepthW'(sram_depth) + DepthW'(oup_buf_depth) + Tests: T1 T2 T3  241 DepthW'(sram_read_in_prev_cyc_q); 242 243 // SRAM write data always comes from the input buffer. 244 1/1 assign sram_wdata_o = inp_buf_rdata; Tests: T1 T2 T3  245 assign sram_wmask_o = '1; 246 247 // `sram_rvalid_i` is only used for assertions. 248 logic unused_sram_rvalid; 249 1/1 assign unused_sram_rvalid = sram_rvalid_i; Tests: T1 T2 T3 

Cond Coverage for 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
10CoveredT49,T50,T104
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
10CoveredT3,T4,T10
11CoveredT2,T3,T4

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

 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
01CoveredT3,T4,T10
10CoveredT49,T163,T164

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

 LINE       196
 SUB-EXPRESSION ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full)
                 -------------------1-------------------    ------2-----
-1--2-StatusTests
00CoveredT49,T163,T164
01CoveredT2,T3,T4
10CoveredT3,T4,T10

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

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

 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
10CoveredT3,T4,T10
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
10CoveredT11,T58,T44
11CoveredT1,T2,T3

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

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

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 T3,T4,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-StatusTests
1 1 - Covered T3,T4,T10
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 6748 6748 0 0
MinimalSramFifoDepth_A 6748 6748 0 0
NoErr_A 1756391172 1755703044 0 0
NoSramReadWhenEmpty_A 1756391172 1390447817 0 0
NoSramWriteWhenFull_A 1756391172 30593356 0 0
OupBufWreadyAfterSramRead_A 1756391172 667373 0 0
SramRvalidAfterRead_A 1756391172 667373 0 0


MinimalSramAw_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 6748 6748 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 6748 6748 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 1756391172 1755703044 0 0
T1 8992 8788 0 0
T2 41592 41268 0 0
T3 57812 54772 0 0
T4 43916 43600 0 0
T5 237744 237420 0 0
T6 180392 180080 0 0
T7 58724 58356 0 0
T8 54504 54212 0 0
T9 70272 70036 0 0
T10 24804 24228 0 0

NoSramReadWhenEmpty_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1756391172 1390447817 0 0
T1 8992 8788 0 0
T2 41592 35656 0 0
T3 57812 53506 0 0
T4 43916 39775 0 0
T5 237744 192284 0 0
T6 180392 148487 0 0
T7 58724 53690 0 0
T8 54504 47227 0 0
T9 70272 63595 0 0
T10 24804 23552 0 0

NoSramWriteWhenFull_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1756391172 30593356 0 0
T11 16352 13 0 0
T12 78674 0 0 0
T15 84866 0 0 0
T18 10453 0 0 0
T20 43628 0 0 0
T28 0 161109 0 0
T29 0 144320 0 0
T32 98836 0 0 0
T34 0 140 0 0
T44 24014 7150 0 0
T49 177024 25 0 0
T50 206714 8 0 0
T61 48363 881 0 0
T62 55490 4 0 0
T63 0 6 0 0
T64 130202 0 0 0
T67 0 1721 0 0
T68 0 1064 0 0
T73 67890 0 0 0
T74 131758 0 0 0
T76 111482 0 0 0
T86 0 36 0 0
T101 976 0 0 0
T165 0 3522 0 0
T166 0 26 0 0
T167 0 813 0 0
T168 0 16 0 0
T169 0 50152 0 0
T170 0 6001 0 0
T171 0 137676 0 0
T172 0 239898 0 0
T173 46694 0 0 0
T174 115709 0 0 0
T175 59435 0 0 0
T176 25071 0 0 0
T177 77928 0 0 0

OupBufWreadyAfterSramRead_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1756391172 667373 0 0
T3 14453 3 0 0
T4 21958 7 0 0
T5 118872 12 0 0
T6 90196 10 0 0
T7 29362 6 0 0
T8 27252 0 0 0
T9 35136 2 0 0
T10 12402 2 0 0
T11 32704 0 0 0
T12 0 94 0 0
T15 0 3 0 0
T18 0 1 0 0
T19 0 25 0 0
T20 0 14 0 0
T25 0 10 0 0
T32 0 254 0 0
T44 0 93 0 0
T45 44944 123 0 0
T51 148566 0 0 0
T62 0 266 0 0
T69 0 170 0 0
T70 3509 0 0 0
T72 0 54 0 0
T73 0 258 0 0
T85 310520 744 0 0
T104 193145 0 0 0
T163 21775 0 0 0
T178 391774 0 0 0
T179 89552 0 0 0
T180 31004 0 0 0
T181 17279 0 0 0
T182 119331 0 0 0
T183 129703 0 0 0

SramRvalidAfterRead_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1756391172 667373 0 0
T3 14453 3 0 0
T4 21958 7 0 0
T5 118872 12 0 0
T6 90196 10 0 0
T7 29362 6 0 0
T8 27252 0 0 0
T9 35136 2 0 0
T10 12402 2 0 0
T11 32704 0 0 0
T12 0 94 0 0
T15 0 3 0 0
T18 0 1 0 0
T19 0 25 0 0
T20 0 14 0 0
T25 0 10 0 0
T32 0 254 0 0
T44 0 93 0 0
T45 44944 123 0 0
T51 148566 0 0 0
T62 0 266 0 0
T69 0 170 0 0
T70 3509 0 0 0
T72 0 54 0 0
T73 0 258 0 0
T85 310520 744 0 0
T104 193145 0 0 0
T163 21775 0 0 0
T178 391774 0 0 0
T179 89552 0 0 0
T180 31004 0 0 0
T181 17279 0 0 0
T182 119331 0 0 0
T183 129703 0 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: T3 T10 T19  185 1/1 oup_buf_wdata = sram_rdata_i; Tests: T3 T10 T19  186 // The output buffer must be ready; otherwise we are in an erroneous state. 187 1/1 state_err = !oup_buf_wready; Tests: T3 T10 T19  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 T10  197 || (fifo_rvalid_o && fifo_rready_i)) begin 198 1/1 sram_req_o = 1'b1; Tests: T3 T10 T19  199 1/1 sram_write_o = 1'b0; Tests: T3 T10 T19  200 1/1 sram_addr_o = sram_rd_addr; Tests: T3 T10 T19  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 T10  205 1/1 sram_write_o = 1'b1; Tests: T2 T3 T10  206 1/1 sram_addr_o = sram_wr_addr; Tests: T2 T3 T10  207 1/1 inp_buf_rready = !sram_full && sram_gnt_i; Tests: T2 T3 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_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,T10

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

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

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

 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,T10
01CoveredT3,T10,T19
10Not Covered

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

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

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

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

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

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

 LINE       212
 EXPRESSION (oup_buf_wready && ((!sram_read_in_prev_cyc_q)))
             -------1------    --------------2-------------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT3,T10,T19
11CoveredT1,T2,T3

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

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

 LINE       236
 EXPRESSION (inp_buf_wready && ( ! (sram_full && oup_buf_full) ))
             -------1------    ----------------2----------------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT44,T165,T28
11CoveredT1,T2,T3

 LINE       236
 SUB-EXPRESSION ( ! (sram_full && oup_buf_full) )
                    -------------1-------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT44,T165,T28

 LINE       236
 SUB-EXPRESSION (sram_full && oup_buf_full)
                 ----1----    ------2-----
-1--2-StatusTests
01CoveredT2,T3,T10
10Not Covered
11CoveredT44,T165,T28

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 T3,T10,T19
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 T3,T10,T19
1 0 - Covered T2,T3,T10
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 1687 1687 0 0
MinimalSramFifoDepth_A 1687 1687 0 0
NoErr_A 439097793 438925761 0 0
NoSramReadWhenEmpty_A 439097793 370490542 0 0
NoSramWriteWhenFull_A 439097793 29981658 0 0
OupBufWreadyAfterSramRead_A 439097793 179565 0 0
SramRvalidAfterRead_A 439097793 179565 0 0


MinimalSramAw_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1687 1687 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 1687 1687 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 439097793 438925761 0 0
T1 2248 2197 0 0
T2 10398 10317 0 0
T3 14453 13693 0 0
T4 10979 10900 0 0
T5 59436 59355 0 0
T6 45098 45020 0 0
T7 14681 14589 0 0
T8 13626 13553 0 0
T9 17568 17509 0 0
T10 6201 6057 0 0

NoSramReadWhenEmpty_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 439097793 370490542 0 0
T1 2248 2197 0 0
T2 10398 4705 0 0
T3 14453 12427 0 0
T4 10979 10900 0 0
T5 59436 59355 0 0
T6 45098 45020 0 0
T7 14681 14589 0 0
T8 13626 13553 0 0
T9 17568 17509 0 0
T10 6201 5381 0 0

NoSramWriteWhenFull_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 439097793 29981658 0 0
T15 84866 0 0 0
T28 0 161109 0 0
T29 0 144320 0 0
T32 98836 0 0 0
T34 0 25 0 0
T44 24014 7150 0 0
T50 206714 0 0 0
T76 111482 0 0 0
T86 0 36 0 0
T101 976 0 0 0
T165 0 3522 0 0
T169 0 50152 0 0
T170 0 6001 0 0
T171 0 137676 0 0
T172 0 239898 0 0
T174 115709 0 0 0
T175 59435 0 0 0
T176 25071 0 0 0
T177 77928 0 0 0

OupBufWreadyAfterSramRead_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 439097793 179565 0 0
T3 14453 3 0 0
T4 10979 0 0 0
T5 59436 0 0 0
T6 45098 0 0 0
T7 14681 0 0 0
T8 13626 0 0 0
T9 17568 0 0 0
T10 6201 2 0 0
T11 16352 0 0 0
T12 0 94 0 0
T15 0 3 0 0
T18 0 1 0 0
T19 0 25 0 0
T20 0 14 0 0
T25 0 10 0 0
T32 0 254 0 0
T44 0 93 0 0
T45 22472 0 0 0

SramRvalidAfterRead_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 439097793 179565 0 0
T3 14453 3 0 0
T4 10979 0 0 0
T5 59436 0 0 0
T6 45098 0 0 0
T7 14681 0 0 0
T8 13626 0 0 0
T9 17568 0 0 0
T10 6201 2 0 0
T11 16352 0 0 0
T12 0 94 0 0
T15 0 3 0 0
T18 0 1 0 0
T19 0 25 0 0
T20 0 14 0 0
T25 0 10 0 0
T32 0 254 0 0
T44 0 93 0 0
T45 22472 0 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: T4 T5 T6  185 1/1 oup_buf_wdata = sram_rdata_i; Tests: T4 T5 T6  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 T6  188 end MISSING_ELSE 189 190 // If the SRAM is not empty, data from the input buffer must flow via the SRAM. 191 1/1 if (!sram_empty) begin Tests: T1 T2 T3  192 193 // Prioritize refilling of the output buffer: if the output buffer is not being filled to the 194 // last slot in the current cycle or it is being read in the current cycle, read from the SRAM 195 // so the output buffer can be written in the next cycle. 196 1/1 if (!((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full) Tests: T4 T5 T6  197 || (fifo_rvalid_o && fifo_rready_i)) begin 198 1/1 sram_req_o = 1'b1; Tests: T4 T5 T6  199 1/1 sram_write_o = 1'b0; Tests: T4 T5 T6  200 1/1 sram_addr_o = sram_rd_addr; Tests: T4 T5 T6  201 202 // If the output buffer is full (and not being read), drain the input buffer into the SRAM. 203 end else begin 204 1/1 sram_req_o = !sram_full && inp_buf_rvalid; Tests: T4 T5 T6  205 1/1 sram_write_o = 1'b1; Tests: T4 T5 T6  206 1/1 sram_addr_o = sram_wr_addr; Tests: T4 T5 T6  207 1/1 inp_buf_rready = !sram_full && sram_gnt_i; Tests: T4 T5 T6  208 end 209 210 // If the SRAM is empty, data must flow from the input buffer to the output buffer if the output 211 // buffer is ready and is not receiving data read from the SRAM in the previous cycle 212 1/1 end else if (oup_buf_wready && !sram_read_in_prev_cyc_q) begin Tests: T1 T2 T3  213 1/1 oup_buf_wvalid = inp_buf_rvalid; Tests: T1 T2 T3  214 1/1 oup_buf_wdata = inp_buf_rdata; Tests: T1 T2 T3  215 1/1 inp_buf_rready = oup_buf_wready; Tests: T1 T2 T3  216 217 // Otherwise the SRAM is empty but the output buffer cannot take the data from the input buffer, 218 // so drain the input buffer into the SRAM. 219 end else begin 220 1/1 sram_req_o = !sram_full && inp_buf_rvalid; Tests: T1 T2 T3  221 1/1 sram_write_o = 1'b1; Tests: T1 T2 T3  222 1/1 sram_addr_o = sram_wr_addr; Tests: T1 T2 T3  223 1/1 inp_buf_rready = !sram_full && sram_gnt_i; Tests: T1 T2 T3  224 end 225 end 226 227 // Error output is high if any of the internal errors is high 228 1/1 assign err_o = |{inp_buf_err, oup_buf_err, sram_ptrs_err, state_err}; Tests: T1 T2 T3  229 230 // The SRAM and the output buffer together form the entire architectural capacity of the FIFO. 231 // Thus, when both are full, the FIFO is no longer ready to receive writes even though the input 232 // buffer could store one additional entry. This ensures that in the cycle after an entry has 233 // been read from the full FIFO, the next entry can be written to the FIFO. 234 // (It may be possible that all input buffer slots except one can be counted to the architectural 235 // capacity of the FIFO, but this is a relatively small optimization left for future work.) 236 1/1 assign fifo_wready_o = inp_buf_wready && !(sram_full && oup_buf_full); Tests: T1 T2 T3  237 238 // The current depth of the FIFO represented by this module is the depth of all buffers plus the 239 // FIFO in the SRAM plus one if there's an entry in transition between SRAM and output buffer. 240 1/1 assign fifo_depth_o = DepthW'(inp_buf_depth) + DepthW'(sram_depth) + DepthW'(oup_buf_depth) + Tests: T1 T2 T3  241 DepthW'(sram_read_in_prev_cyc_q); 242 243 // SRAM write data always comes from the input buffer. 244 1/1 assign sram_wdata_o = inp_buf_rdata; Tests: T1 T2 T3  245 assign sram_wmask_o = '1; 246 247 // `sram_rvalid_i` is only used for assertions. 248 logic unused_sram_rvalid; 249 1/1 assign unused_sram_rvalid = sram_rvalid_i; Tests: T1 T2 T3 

Cond Coverage for Instance : tb.dut.i2c_core.u_fifos.u_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
11CoveredT4,T5,T6

 LINE       125
 EXPRESSION (sram_req_o && sram_gnt_i)
             -----1----    -----2----
-1--2-StatusTests
01Not Covered
10Not Covered
11CoveredT4,T5,T6

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

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

 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
00CoveredT4,T5,T6
01CoveredT4,T5,T6
10Not Covered

 LINE       196
 SUB-EXPRESSION ( ! ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full) )
                    ----------------------------1----------------------------
-1-StatusTests
0Not Covered
1CoveredT4,T5,T6

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

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

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

 LINE       204
 EXPRESSION (((!sram_full)) && inp_buf_rvalid)
             -------1------    -------2------
-1--2-StatusTests
01Not Covered
10CoveredT4,T5,T6
11CoveredT4,T5,T6

 LINE       207
 EXPRESSION (((!sram_full)) && sram_gnt_i)
             -------1------    -----2----
-1--2-StatusTests
01Not Covered
10CoveredT4,T5,T6
11CoveredT4,T5,T6

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

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

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

 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
01CoveredT4,T5,T6
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 T4,T5,T6
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 T4,T5,T6
1 0 - Covered T4,T5,T6
0 - 1 Covered T1,T2,T3
0 - 0 Covered T1,T2,T3


Assert Coverage for Instance : tb.dut.i2c_core.u_fifos.u_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 1687 1687 0 0
MinimalSramFifoDepth_A 1687 1687 0 0
NoErr_A 439097793 438925761 0 0
NoSramReadWhenEmpty_A 439097793 416664847 0 0
NoSramWriteWhenFull_A 439097793 306425 0 0
OupBufWreadyAfterSramRead_A 439097793 117474 0 0
SramRvalidAfterRead_A 439097793 117474 0 0


MinimalSramAw_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1687 1687 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 1687 1687 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 439097793 438925761 0 0
T1 2248 2197 0 0
T2 10398 10317 0 0
T3 14453 13693 0 0
T4 10979 10900 0 0
T5 59436 59355 0 0
T6 45098 45020 0 0
T7 14681 14589 0 0
T8 13626 13553 0 0
T9 17568 17509 0 0
T10 6201 6057 0 0

NoSramReadWhenEmpty_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 439097793 416664847 0 0
T1 2248 2197 0 0
T2 10398 10317 0 0
T3 14453 13693 0 0
T4 10979 8335 0 0
T5 59436 15950 0 0
T6 45098 43065 0 0
T7 14681 11016 0 0
T8 13626 6568 0 0
T9 17568 11888 0 0
T10 6201 6057 0 0

NoSramWriteWhenFull_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 439097793 306425 0 0
T19 36176 0 0 0
T20 43628 0 0 0
T25 60272 0 0 0
T36 10071 0 0 0
T58 12965 7366 0 0
T59 0 9969 0 0
T60 0 7076 0 0
T61 48363 0 0 0
T69 65505 0 0 0
T72 49282 0 0 0
T73 67890 0 0 0
T126 0 794 0 0
T173 46694 0 0 0
T184 0 1712 0 0
T185 0 9058 0 0
T186 0 1668 0 0
T187 0 406 0 0
T188 0 7202 0 0
T189 0 10467 0 0

OupBufWreadyAfterSramRead_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 439097793 117474 0 0
T4 10979 13 0 0
T5 59436 173 0 0
T6 45098 2 0 0
T7 14681 21 0 0
T8 13626 33 0 0
T9 17568 37 0 0
T10 6201 0 0 0
T11 16352 0 0 0
T45 22472 0 0 0
T69 0 137 0 0
T70 3509 5 0 0
T72 0 103 0 0
T73 0 194 0 0

SramRvalidAfterRead_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 439097793 117474 0 0
T4 10979 13 0 0
T5 59436 173 0 0
T6 45098 2 0 0
T7 14681 21 0 0
T8 13626 33 0 0
T9 17568 37 0 0
T10 6201 0 0 0
T11 16352 0 0 0
T45 22472 0 0 0
T69 0 137 0 0
T70 3509 5 0 0
T72 0 103 0 0
T73 0 194 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: T85 T104 T105  185 1/1 oup_buf_wdata = sram_rdata_i; Tests: T85 T104 T105  186 // The output buffer must be ready; otherwise we are in an erroneous state. 187 1/1 state_err = !oup_buf_wready; Tests: T85 T104 T105  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: T11 T83 T84  197 || (fifo_rvalid_o && fifo_rready_i)) begin 198 1/1 sram_req_o = 1'b1; Tests: T85 T104 T105  199 1/1 sram_write_o = 1'b0; Tests: T85 T104 T105  200 1/1 sram_addr_o = sram_rd_addr; Tests: T85 T104 T105  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: T11 T83 T84  205 1/1 sram_write_o = 1'b1; Tests: T11 T83 T84  206 1/1 sram_addr_o = sram_wr_addr; Tests: T11 T83 T84  207 1/1 inp_buf_rready = !sram_full && sram_gnt_i; Tests: T11 T83 T84  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
10CoveredT104,T105,T106
11CoveredT3,T10,T11

 LINE       125
 EXPRESSION (sram_req_o && sram_gnt_i)
             -----1----    -----2----
-1--2-StatusTests
01Not Covered
10Not Covered
11CoveredT11,T83,T84

 LINE       150
 EXPRESSION (sram_access && sram_write_o)
             -----1-----    ------2-----
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT85,T104,T105
11CoveredT11,T83,T84

 LINE       151
 EXPRESSION (sram_access && ((!sram_write_o)))
             -----1-----    --------2--------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT11,T83,T84
11CoveredT85,T104,T105

 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
00CoveredT11,T83,T84
01CoveredT85,T104,T105
10Not Covered

 LINE       196
 SUB-EXPRESSION ( ! ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full) )
                    ----------------------------1----------------------------
-1-StatusTests
0Not Covered
1CoveredT11,T83,T84

 LINE       196
 SUB-EXPRESSION ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full)
                 -------------------1-------------------    ------2-----
-1--2-StatusTests
00Not Covered
01CoveredT11,T83,T84
10CoveredT85,T104,T105

 LINE       196
 SUB-EXPRESSION (oup_buf_almost_full && oup_buf_wvalid)
                 ---------1---------    -------2------
-1--2-StatusTests
01Not Covered
10CoveredT11,T83,T84
11CoveredT85,T104,T105

 LINE       196
 SUB-EXPRESSION (fifo_rvalid_o && fifo_rready_i)
                 ------1------    ------2------
-1--2-StatusTests
01Not Covered
10CoveredT11,T83,T84
11CoveredT85,T104,T105

 LINE       204
 EXPRESSION (((!sram_full)) && inp_buf_rvalid)
             -------1------    -------2------
-1--2-StatusTests
01Not Covered
10CoveredT11,T83,T84
11CoveredT11,T83,T84

 LINE       207
 EXPRESSION (((!sram_full)) && sram_gnt_i)
             -------1------    -----2----
-1--2-StatusTests
01Not Covered
10CoveredT11,T83,T84
11CoveredT11,T83,T84

 LINE       212
 EXPRESSION (oup_buf_wready && ((!sram_read_in_prev_cyc_q)))
             -------1------    --------------2-------------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT85,T104,T105
11CoveredT1,T2,T3

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

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

 LINE       236
 EXPRESSION (inp_buf_wready && ( ! (sram_full && oup_buf_full) ))
             -------1------    ----------------2----------------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT11,T83,T84
11CoveredT1,T2,T3

 LINE       236
 SUB-EXPRESSION ( ! (sram_full && oup_buf_full) )
                    -------------1-------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT11,T83,T84

 LINE       236
 SUB-EXPRESSION (sram_full && oup_buf_full)
                 ----1----    ------2-----
-1--2-StatusTests
01CoveredT11,T83,T84
10Not Covered
11CoveredT11,T83,T84

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 T85,T104,T105
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 T85,T104,T105
1 0 - Covered T11,T83,T84
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 1687 1687 0 0
MinimalSramFifoDepth_A 1687 1687 0 0
NoErr_A 439097793 438925761 0 0
NoSramReadWhenEmpty_A 439097793 414327554 0 0
NoSramWriteWhenFull_A 439097793 243723 0 0
OupBufWreadyAfterSramRead_A 439097793 122884 0 0
SramRvalidAfterRead_A 439097793 122884 0 0


MinimalSramAw_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1687 1687 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 1687 1687 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 439097793 438925761 0 0
T1 2248 2197 0 0
T2 10398 10317 0 0
T3 14453 13693 0 0
T4 10979 10900 0 0
T5 59436 59355 0 0
T6 45098 45020 0 0
T7 14681 14589 0 0
T8 13626 13553 0 0
T9 17568 17509 0 0
T10 6201 6057 0 0

NoSramReadWhenEmpty_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 439097793 414327554 0 0
T1 2248 2197 0 0
T2 10398 10317 0 0
T3 14453 13693 0 0
T4 10979 10900 0 0
T5 59436 59355 0 0
T6 45098 45020 0 0
T7 14681 14589 0 0
T8 13626 13553 0 0
T9 17568 17509 0 0
T10 6201 6057 0 0

NoSramWriteWhenFull_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 439097793 243723 0 0
T11 16352 13 0 0
T19 36176 0 0 0
T25 60272 0 0 0
T34 0 115 0 0
T45 22472 0 0 0
T58 12965 0 0 0
T69 65505 0 0 0
T70 3509 0 0 0
T75 2837 0 0 0
T82 1879 0 0 0
T83 0 4 0 0
T84 0 4 0 0
T85 0 411 0 0
T100 1300 0 0 0
T104 0 3107 0 0
T105 0 2943 0 0
T106 0 2896 0 0
T190 0 4 0 0
T191 0 3288 0 0

OupBufWreadyAfterSramRead_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 439097793 122884 0 0
T34 0 682 0 0
T51 148566 0 0 0
T85 310520 744 0 0
T86 0 620 0 0
T97 0 1178 0 0
T99 0 1178 0 0
T104 193145 930 0 0
T105 0 806 0 0
T106 0 868 0 0
T163 21775 0 0 0
T178 391774 0 0 0
T179 89552 0 0 0
T180 31004 0 0 0
T181 17279 0 0 0
T182 119331 0 0 0
T183 129703 0 0 0
T191 0 1116 0 0
T192 0 1240 0 0

SramRvalidAfterRead_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 439097793 122884 0 0
T34 0 682 0 0
T51 148566 0 0 0
T85 310520 744 0 0
T86 0 620 0 0
T97 0 1178 0 0
T99 0 1178 0 0
T104 193145 930 0 0
T105 0 806 0 0
T106 0 868 0 0
T163 21775 0 0 0
T178 391774 0 0 0
T179 89552 0 0 0
T180 31004 0 0 0
T181 17279 0 0 0
T182 119331 0 0 0
T183 129703 0 0 0
T191 0 1116 0 0
T192 0 1240 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: T4 T5 T6  185 1/1 oup_buf_wdata = sram_rdata_i; Tests: T4 T5 T6  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 T6  188 end MISSING_ELSE 189 190 // If the SRAM is not empty, data from the input buffer must flow via the SRAM. 191 1/1 if (!sram_empty) begin Tests: T1 T2 T3  192 193 // Prioritize refilling of the output buffer: if the output buffer is not being filled to the 194 // last slot in the current cycle or it is being read in the current cycle, read from the SRAM 195 // so the output buffer can be written in the next cycle. 196 1/1 if (!((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full) Tests: T4 T5 T6  197 || (fifo_rvalid_o && fifo_rready_i)) begin 198 1/1 sram_req_o = 1'b1; Tests: T4 T5 T6  199 1/1 sram_write_o = 1'b0; Tests: T4 T5 T6  200 1/1 sram_addr_o = sram_rd_addr; Tests: T4 T5 T6  201 202 // If the output buffer is full (and not being read), drain the input buffer into the SRAM. 203 end else begin 204 1/1 sram_req_o = !sram_full && inp_buf_rvalid; Tests: T4 T5 T6  205 1/1 sram_write_o = 1'b1; Tests: T4 T5 T6  206 1/1 sram_addr_o = sram_wr_addr; Tests: T4 T5 T6  207 1/1 inp_buf_rready = !sram_full && sram_gnt_i; Tests: T4 T5 T6  208 end 209 210 // If the SRAM is empty, data must flow from the input buffer to the output buffer if the output 211 // buffer is ready and is not receiving data read from the SRAM in the previous cycle 212 1/1 end else if (oup_buf_wready && !sram_read_in_prev_cyc_q) begin Tests: T1 T2 T3  213 1/1 oup_buf_wvalid = inp_buf_rvalid; Tests: T1 T2 T3  214 1/1 oup_buf_wdata = inp_buf_rdata; Tests: T1 T2 T3  215 1/1 inp_buf_rready = oup_buf_wready; Tests: T1 T2 T3  216 217 // Otherwise the SRAM is empty but the output buffer cannot take the data from the input buffer, 218 // so drain the input buffer into the SRAM. 219 end else begin 220 1/1 sram_req_o = !sram_full && inp_buf_rvalid; Tests: T1 T2 T3  221 1/1 sram_write_o = 1'b1; Tests: T1 T2 T3  222 1/1 sram_addr_o = sram_wr_addr; Tests: T1 T2 T3  223 1/1 inp_buf_rready = !sram_full && sram_gnt_i; Tests: T1 T2 T3  224 end 225 end 226 227 // Error output is high if any of the internal errors is high 228 1/1 assign err_o = |{inp_buf_err, oup_buf_err, sram_ptrs_err, state_err}; Tests: T1 T2 T3  229 230 // The SRAM and the output buffer together form the entire architectural capacity of the FIFO. 231 // Thus, when both are full, the FIFO is no longer ready to receive writes even though the input 232 // buffer could store one additional entry. This ensures that in the cycle after an entry has 233 // been read from the full FIFO, the next entry can be written to the FIFO. 234 // (It may be possible that all input buffer slots except one can be counted to the architectural 235 // capacity of the FIFO, but this is a relatively small optimization left for future work.) 236 1/1 assign fifo_wready_o = inp_buf_wready && !(sram_full && oup_buf_full); Tests: T1 T2 T3  237 238 // The current depth of the FIFO represented by this module is the depth of all buffers plus the 239 // FIFO in the SRAM plus one if there's an entry in transition between SRAM and output buffer. 240 1/1 assign fifo_depth_o = DepthW'(inp_buf_depth) + DepthW'(sram_depth) + DepthW'(oup_buf_depth) + Tests: T1 T2 T3  241 DepthW'(sram_read_in_prev_cyc_q); 242 243 // SRAM write data always comes from the input buffer. 244 1/1 assign sram_wdata_o = inp_buf_rdata; Tests: T1 T2 T3  245 assign sram_wmask_o = '1; 246 247 // `sram_rvalid_i` is only used for assertions. 248 logic unused_sram_rvalid; 249 1/1 assign unused_sram_rvalid = sram_rvalid_i; Tests: T1 T2 T3 

Cond Coverage for Instance : tb.dut.i2c_core.u_fifos.u_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
10CoveredT49,T50
11CoveredT4,T5,T6

 LINE       125
 EXPRESSION (sram_req_o && sram_gnt_i)
             -----1----    -----2----
-1--2-StatusTests
01Not Covered
10Not Covered
11CoveredT4,T5,T6

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

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

 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
00CoveredT4,T5,T6
01CoveredT4,T5,T6
10CoveredT49,T163,T164

 LINE       196
 SUB-EXPRESSION ( ! ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full) )
                    ----------------------------1----------------------------
-1-StatusTests
0CoveredT49,T163,T164
1CoveredT4,T5,T6

 LINE       196
 SUB-EXPRESSION ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full)
                 -------------------1-------------------    ------2-----
-1--2-StatusTests
00CoveredT49,T163,T164
01CoveredT4,T5,T6
10CoveredT4,T5,T6

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

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

 LINE       204
 EXPRESSION (((!sram_full)) && inp_buf_rvalid)
             -------1------    -------2------
-1--2-StatusTests
01Not Covered
10CoveredT4,T5,T6
11CoveredT4,T5,T6

 LINE       207
 EXPRESSION (((!sram_full)) && sram_gnt_i)
             -------1------    -----2----
-1--2-StatusTests
01Not Covered
10CoveredT4,T5,T6
11CoveredT4,T5,T6

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

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

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

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

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

 LINE       236
 SUB-EXPRESSION (sram_full && oup_buf_full)
                 ----1----    ------2-----
-1--2-StatusTests
01CoveredT4,T5,T6
10Not Covered
11CoveredT61,T62,T49

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 T4,T5,T6
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 T4,T5,T6
1 0 - Covered T4,T5,T6
0 - 1 Covered T1,T2,T3
0 - 0 Covered T1,T2,T3


Assert Coverage for Instance : tb.dut.i2c_core.u_fifos.u_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 1687 1687 0 0
MinimalSramFifoDepth_A 1687 1687 0 0
NoErr_A 439097793 438925761 0 0
NoSramReadWhenEmpty_A 439097793 188964874 0 0
NoSramWriteWhenFull_A 439097793 61550 0 0
OupBufWreadyAfterSramRead_A 439097793 247450 0 0
SramRvalidAfterRead_A 439097793 247450 0 0


MinimalSramAw_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1687 1687 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 1687 1687 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 439097793 438925761 0 0
T1 2248 2197 0 0
T2 10398 10317 0 0
T3 14453 13693 0 0
T4 10979 10900 0 0
T5 59436 59355 0 0
T6 45098 45020 0 0
T7 14681 14589 0 0
T8 13626 13553 0 0
T9 17568 17509 0 0
T10 6201 6057 0 0

NoSramReadWhenEmpty_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 439097793 188964874 0 0
T1 2248 2197 0 0
T2 10398 10317 0 0
T3 14453 13693 0 0
T4 10979 9640 0 0
T5 59436 57624 0 0
T6 45098 15382 0 0
T7 14681 13496 0 0
T8 13626 13553 0 0
T9 17568 16689 0 0
T10 6201 6057 0 0

NoSramWriteWhenFull_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 439097793 61550 0 0
T12 78674 0 0 0
T18 10453 0 0 0
T20 43628 0 0 0
T49 177024 25 0 0
T50 0 8 0 0
T61 48363 881 0 0
T62 55490 4 0 0
T63 0 6 0 0
T64 130202 0 0 0
T67 0 1721 0 0
T68 0 1064 0 0
T73 67890 0 0 0
T74 131758 0 0 0
T166 0 26 0 0
T167 0 813 0 0
T168 0 16 0 0
T173 46694 0 0 0

OupBufWreadyAfterSramRead_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 439097793 247450 0 0
T4 10979 7 0 0
T5 59436 12 0 0
T6 45098 10 0 0
T7 14681 6 0 0
T8 13626 0 0 0
T9 17568 2 0 0
T10 6201 0 0 0
T11 16352 0 0 0
T45 22472 123 0 0
T62 0 266 0 0
T69 0 170 0 0
T70 3509 0 0 0
T72 0 54 0 0
T73 0 258 0 0

SramRvalidAfterRead_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 439097793 247450 0 0
T4 10979 7 0 0
T5 59436 12 0 0
T6 45098 10 0 0
T7 14681 6 0 0
T8 13626 0 0 0
T9 17568 2 0 0
T10 6201 0 0 0
T11 16352 0 0 0
T45 22472 123 0 0
T62 0 266 0 0
T69 0 170 0 0
T70 3509 0 0 0
T72 0 54 0 0
T73 0 258 0 0

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