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
94.12 100.00 76.47 100.00 100.00


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

Cond Coverage for Module : i2c_fifo_sync_sram_adapter
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
10CoveredT57,T58,T87
11CoveredT1,T2,T3

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

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

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

 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,T11
01CoveredT2,T3,T13
10Not Covered

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

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

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

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

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

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

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

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

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

 LINE       236
 EXPRESSION (inp_buf_wready && ( ! (sram_full && oup_buf_full) ))
             -------1------    ----------------2----------------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT68,T17,T52
11CoveredT1,T2,T3

 LINE       236
 SUB-EXPRESSION ( ! (sram_full && oup_buf_full) )
                    -------------1-------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT68,T17,T52

 LINE       236
 SUB-EXPRESSION (sram_full && oup_buf_full)
                 ----1----    ------2-----
-1--2-StatusTests
01CoveredT1,T2,T3
10Not Covered
11CoveredT68,T17,T52

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,T3,T13
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,T3,T13
1 0 - Covered T2,T3,T11
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 6788 6788 0 0
MinimalSramFifoDepth_A 6788 6788 0 0
NoErr_A 1724255092 1723561188 0 0
NoSramReadWhenEmpty_A 1724255092 1364152243 0 0
NoSramWriteWhenFull_A 1724255092 20688780 0 0
OupBufWreadyAfterSramRead_A 1724255092 662609 0 0
SramRvalidAfterRead_A 1724255092 662609 0 0


MinimalSramAw_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 6788 6788 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 6788 6788 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 1724255092 1723561188 0 0
T1 4732 4496 0 0
T2 38756 36776 0 0
T3 97500 97264 0 0
T4 41152 40808 0 0
T5 1597784 1597464 0 0
T6 208636 208428 0 0
T7 216712 216420 0 0
T8 326440 326188 0 0
T9 4720 4412 0 0
T10 365824 365584 0 0

NoSramReadWhenEmpty_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1724255092 1364152243 0 0
T1 4732 4496 0 0
T2 38756 33720 0 0
T3 97500 89474 0 0
T4 41152 32761 0 0
T5 1597784 1287372 0 0
T6 208636 195330 0 0
T7 216712 180229 0 0
T8 326440 283513 0 0
T9 4720 4412 0 0
T10 365824 294666 0 0

NoSramWriteWhenFull_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1724255092 20688780 0 0
T11 15148 0 0 0
T17 305763 105394 0 0
T20 8568 0 0 0
T42 10680 0 0 0
T48 0 129434 0 0
T52 33442 8 0 0
T53 37706 3799 0 0
T57 218742 22 0 0
T58 0 19 0 0
T68 12889 0 0 0
T71 49086 1294 0 0
T72 0 20 0 0
T73 0 14 0 0
T76 0 716 0 0
T77 0 818 0 0
T78 3000 0 0 0
T81 9308 0 0 0
T82 126785 0 0 0
T107 3396 0 0 0
T109 5682 0 0 0
T157 103252 0 0 0
T161 0 4616 0 0
T162 0 3 0 0
T163 0 17 0 0
T164 0 1799 0 0
T165 0 4619 0 0
T166 0 117666 0 0
T167 0 96951 0 0
T168 0 78606 0 0
T169 0 117731 0 0
T170 0 97413 0 0
T171 43971 0 0 0
T172 41228 0 0 0
T173 42158 0 0 0
T174 70140 0 0 0
T175 16118 0 0 0
T176 17697 0 0 0

OupBufWreadyAfterSramRead_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1724255092 662609 0 0
T2 9689 14 0 0
T3 24375 0 0 0
T4 20576 7 0 0
T5 798892 1455 0 0
T6 104318 0 0 0
T7 108356 179 0 0
T8 163220 80 0 0
T9 2360 0 0 0
T10 182912 265 0 0
T13 0 29 0 0
T16 0 2 0 0
T17 0 259 0 0
T20 0 2 0 0
T25 0 2 0 0
T28 7278 0 0 0
T49 0 172 0 0
T53 0 89 0 0
T57 218742 36 0 0
T68 12889 0 0 0
T72 0 266 0 0
T82 0 397 0 0
T83 13708 0 0 0
T87 178954 806 0 0
T158 0 8 0 0
T159 0 95 0 0
T174 0 117 0 0
T177 0 133 0 0
T178 12675 0 0 0
T179 127892 0 0 0
T180 162395 0 0 0
T181 124026 0 0 0
T182 22741 0 0 0
T183 5891 0 0 0
T184 54040 0 0 0

SramRvalidAfterRead_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1724255092 662609 0 0
T2 9689 14 0 0
T3 24375 0 0 0
T4 20576 7 0 0
T5 798892 1455 0 0
T6 104318 0 0 0
T7 108356 179 0 0
T8 163220 80 0 0
T9 2360 0 0 0
T10 182912 265 0 0
T13 0 29 0 0
T16 0 2 0 0
T17 0 259 0 0
T20 0 2 0 0
T25 0 2 0 0
T28 7278 0 0 0
T49 0 172 0 0
T53 0 89 0 0
T57 218742 36 0 0
T68 12889 0 0 0
T72 0 266 0 0
T82 0 397 0 0
T83 13708 0 0 0
T87 178954 806 0 0
T158 0 8 0 0
T159 0 95 0 0
T174 0 117 0 0
T177 0 133 0 0
T178 12675 0 0 0
T179 127892 0 0 0
T180 162395 0 0 0
T181 124026 0 0 0
T182 22741 0 0 0
T183 5891 0 0 0
T184 54040 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: T2 T13 T16  185 1/1 oup_buf_wdata = sram_rdata_i; Tests: T2 T13 T16  186 // The output buffer must be ready; otherwise we are in an erroneous state. 187 1/1 state_err = !oup_buf_wready; Tests: T2 T13 T16  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 T11 T42  197 || (fifo_rvalid_o && fifo_rready_i)) begin 198 1/1 sram_req_o = 1'b1; Tests: T2 T13 T16  199 1/1 sram_write_o = 1'b0; Tests: T2 T13 T16  200 1/1 sram_addr_o = sram_rd_addr; Tests: T2 T13 T16  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 T11 T42  205 1/1 sram_write_o = 1'b1; Tests: T2 T11 T42  206 1/1 sram_addr_o = sram_wr_addr; Tests: T2 T11 T42  207 1/1 inp_buf_rready = !sram_full && sram_gnt_i; Tests: T2 T11 T42  208 end 209 210 // If the SRAM is empty, data must flow from the input buffer to the output buffer if the output 211 // buffer is ready and is not receiving data read from the SRAM in the previous cycle 212 1/1 end else if (oup_buf_wready && !sram_read_in_prev_cyc_q) begin Tests: T1 T2 T3  213 1/1 oup_buf_wvalid = inp_buf_rvalid; Tests: T1 T2 T3  214 1/1 oup_buf_wdata = inp_buf_rdata; Tests: T1 T2 T3  215 1/1 inp_buf_rready = oup_buf_wready; Tests: T1 T2 T3  216 217 // Otherwise the SRAM is empty but the output buffer cannot take the data from the input buffer, 218 // so drain the input buffer into the SRAM. 219 end else begin 220 1/1 sram_req_o = !sram_full && inp_buf_rvalid; Tests: T1 T2 T3  221 1/1 sram_write_o = 1'b1; Tests: T1 T2 T3  222 1/1 sram_addr_o = sram_wr_addr; Tests: T1 T2 T3  223 1/1 inp_buf_rready = !sram_full && sram_gnt_i; Tests: T1 T2 T3  224 end 225 end 226 227 // Error output is high if any of the internal errors is high 228 1/1 assign err_o = |{inp_buf_err, oup_buf_err, sram_ptrs_err, state_err}; Tests: T1 T2 T3  229 230 // The SRAM and the output buffer together form the entire architectural capacity of the FIFO. 231 // Thus, when both are full, the FIFO is no longer ready to receive writes even though the input 232 // buffer could store one additional entry. This ensures that in the cycle after an entry has 233 // been read from the full FIFO, the next entry can be written to the FIFO. 234 // (It may be possible that all input buffer slots except one can be counted to the architectural 235 // capacity of the FIFO, but this is a relatively small optimization left for future work.) 236 1/1 assign fifo_wready_o = inp_buf_wready && !(sram_full && oup_buf_full); Tests: T1 T2 T3  237 238 // The current depth of the FIFO represented by this module is the depth of all buffers plus the 239 // FIFO in the SRAM plus one if there's an entry in transition between SRAM and output buffer. 240 1/1 assign fifo_depth_o = DepthW'(inp_buf_depth) + DepthW'(sram_depth) + DepthW'(oup_buf_depth) + Tests: T1 T2 T3  241 DepthW'(sram_read_in_prev_cyc_q); 242 243 // SRAM write data always comes from the input buffer. 244 1/1 assign sram_wdata_o = inp_buf_rdata; Tests: T1 T2 T3  245 assign sram_wmask_o = '1; 246 247 // `sram_rvalid_i` is only used for assertions. 248 logic unused_sram_rvalid; 249 1/1 assign unused_sram_rvalid = sram_rvalid_i; Tests: T1 T2 T3 

Cond Coverage for Instance : tb.dut.i2c_core.u_fifos.u_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
11CoveredT1,T2,T11

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

 LINE       150
 EXPRESSION (sram_access && sram_write_o)
             -----1-----    ------2-----
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT2,T13,T16
11CoveredT2,T11,T42

 LINE       151
 EXPRESSION (sram_access && ((!sram_write_o)))
             -----1-----    --------2--------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT2,T11,T42
11CoveredT2,T13,T16

 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,T11,T42
01CoveredT2,T13,T16
10Not Covered

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

 LINE       196
 SUB-EXPRESSION ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full)
                 -------------------1-------------------    ------2-----
-1--2-StatusTests
00Not Covered
01CoveredT2,T11,T42
10CoveredT2,T13,T16

 LINE       196
 SUB-EXPRESSION (oup_buf_almost_full && oup_buf_wvalid)
                 ---------1---------    -------2------
-1--2-StatusTests
01Not Covered
10CoveredT2,T11,T42
11CoveredT2,T13,T16

 LINE       196
 SUB-EXPRESSION (fifo_rvalid_o && fifo_rready_i)
                 ------1------    ------2------
-1--2-StatusTests
01Not Covered
10CoveredT2,T11,T42
11CoveredT2,T13,T16

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

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

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

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

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

 LINE       236
 EXPRESSION (inp_buf_wready && ( ! (sram_full && oup_buf_full) ))
             -------1------    ----------------2----------------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT17,T53,T161
11CoveredT1,T2,T3

 LINE       236
 SUB-EXPRESSION ( ! (sram_full && oup_buf_full) )
                    -------------1-------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT17,T53,T161

 LINE       236
 SUB-EXPRESSION (sram_full && oup_buf_full)
                 ----1----    ------2-----
-1--2-StatusTests
01CoveredT1,T2,T11
10Not Covered
11CoveredT17,T53,T161

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,T13,T16
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,T13,T16
1 0 - Covered T2,T11,T42
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 1697 1697 0 0
MinimalSramFifoDepth_A 1697 1697 0 0
NoErr_A 431063773 430890297 0 0
NoSramReadWhenEmpty_A 431063773 372364925 0 0
NoSramWriteWhenFull_A 431063773 20082508 0 0
OupBufWreadyAfterSramRead_A 431063773 179348 0 0
SramRvalidAfterRead_A 431063773 179348 0 0


MinimalSramAw_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1697 1697 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 1697 1697 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 431063773 430890297 0 0
T1 1183 1124 0 0
T2 9689 9194 0 0
T3 24375 24316 0 0
T4 10288 10202 0 0
T5 399446 399366 0 0
T6 52159 52107 0 0
T7 54178 54105 0 0
T8 81610 81547 0 0
T9 1180 1103 0 0
T10 91456 91396 0 0

NoSramReadWhenEmpty_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 431063773 372364925 0 0
T1 1183 1124 0 0
T2 9689 6138 0 0
T3 24375 24316 0 0
T4 10288 10202 0 0
T5 399446 399366 0 0
T6 52159 52107 0 0
T7 54178 54105 0 0
T8 81610 81547 0 0
T9 1180 1103 0 0
T10 91456 91396 0 0

NoSramWriteWhenFull_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 431063773 20082508 0 0
T17 305763 105394 0 0
T20 4284 0 0 0
T48 0 129434 0 0
T52 16721 0 0 0
T53 18853 3799 0 0
T107 1698 0 0 0
T109 2841 0 0 0
T161 0 4616 0 0
T165 0 4619 0 0
T166 0 117666 0 0
T167 0 96951 0 0
T168 0 78606 0 0
T169 0 117731 0 0
T170 0 97413 0 0
T172 20614 0 0 0
T173 21079 0 0 0
T174 35070 0 0 0
T175 8059 0 0 0

OupBufWreadyAfterSramRead_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 431063773 179348 0 0
T2 9689 14 0 0
T3 24375 0 0 0
T4 10288 0 0 0
T5 399446 0 0 0
T6 52159 0 0 0
T7 54178 0 0 0
T8 81610 0 0 0
T9 1180 0 0 0
T10 91456 0 0 0
T13 0 29 0 0
T16 0 2 0 0
T17 0 259 0 0
T20 0 2 0 0
T25 0 2 0 0
T49 0 172 0 0
T53 0 89 0 0
T83 6854 0 0 0
T174 0 117 0 0
T177 0 133 0 0

SramRvalidAfterRead_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 431063773 179348 0 0
T2 9689 14 0 0
T3 24375 0 0 0
T4 10288 0 0 0
T5 399446 0 0 0
T6 52159 0 0 0
T7 54178 0 0 0
T8 81610 0 0 0
T9 1180 0 0 0
T10 91456 0 0 0
T13 0 29 0 0
T16 0 2 0 0
T17 0 259 0 0
T20 0 2 0 0
T25 0 2 0 0
T49 0 172 0 0
T53 0 89 0 0
T83 6854 0 0 0
T174 0 117 0 0
T177 0 133 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: T3 T4 T5  185 1/1 oup_buf_wdata = sram_rdata_i; Tests: T3 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: T3 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: T3 T4 T5  197 || (fifo_rvalid_o && fifo_rready_i)) begin 198 1/1 sram_req_o = 1'b1; Tests: T3 T4 T5  199 1/1 sram_write_o = 1'b0; Tests: T3 T4 T5  200 1/1 sram_addr_o = sram_rd_addr; Tests: T3 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: T3 T4 T5  205 1/1 sram_write_o = 1'b1; Tests: T3 T4 T5  206 1/1 sram_addr_o = sram_wr_addr; Tests: T3 T4 T5  207 1/1 inp_buf_rready = !sram_full && sram_gnt_i; Tests: T3 T4 T5  208 end 209 210 // If the SRAM is empty, data must flow from the input buffer to the output buffer if the output 211 // buffer is ready and is not receiving data read from the SRAM in the previous cycle 212 1/1 end else if (oup_buf_wready && !sram_read_in_prev_cyc_q) begin Tests: T1 T2 T3  213 1/1 oup_buf_wvalid = inp_buf_rvalid; Tests: T1 T2 T3  214 1/1 oup_buf_wdata = inp_buf_rdata; Tests: T1 T2 T3  215 1/1 inp_buf_rready = oup_buf_wready; Tests: T1 T2 T3  216 217 // Otherwise the SRAM is empty but the output buffer cannot take the data from the input buffer, 218 // so drain the input buffer into the SRAM. 219 end else begin 220 1/1 sram_req_o = !sram_full && inp_buf_rvalid; Tests: T1 T2 T3  221 1/1 sram_write_o = 1'b1; Tests: T1 T2 T3  222 1/1 sram_addr_o = sram_wr_addr; Tests: T1 T2 T3  223 1/1 inp_buf_rready = !sram_full && sram_gnt_i; Tests: T1 T2 T3  224 end 225 end 226 227 // Error output is high if any of the internal errors is high 228 1/1 assign err_o = |{inp_buf_err, oup_buf_err, sram_ptrs_err, state_err}; Tests: T1 T2 T3  229 230 // The SRAM and the output buffer together form the entire architectural capacity of the FIFO. 231 // Thus, when both are full, the FIFO is no longer ready to receive writes even though the input 232 // buffer could store one additional entry. This ensures that in the cycle after an entry has 233 // been read from the full FIFO, the next entry can be written to the FIFO. 234 // (It may be possible that all input buffer slots except one can be counted to the architectural 235 // capacity of the FIFO, but this is a relatively small optimization left for future work.) 236 1/1 assign fifo_wready_o = inp_buf_wready && !(sram_full && oup_buf_full); Tests: T1 T2 T3  237 238 // The current depth of the FIFO represented by this module is the depth of all buffers plus the 239 // FIFO in the SRAM plus one if there's an entry in transition between SRAM and output buffer. 240 1/1 assign fifo_depth_o = DepthW'(inp_buf_depth) + DepthW'(sram_depth) + DepthW'(oup_buf_depth) + Tests: T1 T2 T3  241 DepthW'(sram_read_in_prev_cyc_q); 242 243 // SRAM write data always comes from the input buffer. 244 1/1 assign sram_wdata_o = inp_buf_rdata; Tests: T1 T2 T3  245 assign sram_wmask_o = '1; 246 247 // `sram_rvalid_i` is only used for assertions. 248 logic unused_sram_rvalid; 249 1/1 assign unused_sram_rvalid = sram_rvalid_i; Tests: T1 T2 T3 

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
11CoveredT3,T4,T5

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

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

 LINE       151
 EXPRESSION (sram_access && ((!sram_write_o)))
             -----1-----    --------2--------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT3,T4,T5
11CoveredT3,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
00CoveredT3,T4,T5
01CoveredT3,T4,T5
10Not Covered

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

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

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

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

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

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

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

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

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

 LINE       236
 EXPRESSION (inp_buf_wready && ( ! (sram_full && oup_buf_full) ))
             -------1------    ----------------2----------------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT68,T69,T70
11CoveredT1,T2,T3

 LINE       236
 SUB-EXPRESSION ( ! (sram_full && oup_buf_full) )
                    -------------1-------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT68,T69,T70

 LINE       236
 SUB-EXPRESSION (sram_full && oup_buf_full)
                 ----1----    ------2-----
-1--2-StatusTests
01CoveredT3,T4,T5
10Not Covered
11CoveredT68,T69,T70

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 T3,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 T3,T4,T5
1 0 - Covered T3,T4,T5
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 1697 1697 0 0
MinimalSramFifoDepth_A 1697 1697 0 0
NoErr_A 431063773 430890297 0 0
NoSramReadWhenEmpty_A 431063773 409701965 0 0
NoSramWriteWhenFull_A 431063773 310933 0 0
OupBufWreadyAfterSramRead_A 431063773 112765 0 0
SramRvalidAfterRead_A 431063773 112765 0 0


MinimalSramAw_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1697 1697 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 1697 1697 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 431063773 430890297 0 0
T1 1183 1124 0 0
T2 9689 9194 0 0
T3 24375 24316 0 0
T4 10288 10202 0 0
T5 399446 399366 0 0
T6 52159 52107 0 0
T7 54178 54105 0 0
T8 81610 81547 0 0
T9 1180 1103 0 0
T10 91456 91396 0 0

NoSramReadWhenEmpty_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 431063773 409701965 0 0
T1 1183 1124 0 0
T2 9689 9194 0 0
T3 24375 16526 0 0
T4 10288 3465 0 0
T5 399446 293481 0 0
T6 52159 39009 0 0
T7 54178 39051 0 0
T8 81610 70420 0 0
T9 1180 1103 0 0
T10 91456 63709 0 0

NoSramWriteWhenFull_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 431063773 310933 0 0
T11 15148 0 0 0
T42 10680 0 0 0
T68 12889 6447 0 0
T69 0 7843 0 0
T70 0 6132 0 0
T71 49086 0 0 0
T78 3000 0 0 0
T79 1601 0 0 0
T81 9308 0 0 0
T82 126785 0 0 0
T131 0 10500 0 0
T157 103252 0 0 0
T171 43971 0 0 0
T182 0 958 0 0
T185 0 349 0 0
T186 0 7392 0 0
T187 0 6831 0 0
T188 0 9773 0 0
T189 0 11192 0 0

OupBufWreadyAfterSramRead_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 431063773 112765 0 0
T3 24375 5 0 0
T4 10288 15 0 0
T5 399446 683 0 0
T6 52159 95 0 0
T7 54178 122 0 0
T8 81610 66 0 0
T9 1180 0 0 0
T10 91456 157 0 0
T57 218742 0 0 0
T81 0 40 0 0
T82 0 186 0 0
T83 6854 0 0 0
T157 0 244 0 0

SramRvalidAfterRead_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 431063773 112765 0 0
T3 24375 5 0 0
T4 10288 15 0 0
T5 399446 683 0 0
T6 52159 95 0 0
T7 54178 122 0 0
T8 81610 66 0 0
T9 1180 0 0 0
T10 91456 157 0 0
T57 218742 0 0 0
T81 0 40 0 0
T82 0 186 0 0
T83 6854 0 0 0
T157 0 244 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: T87 T88 T89  185 1/1 oup_buf_wdata = sram_rdata_i; Tests: T87 T88 T89  186 // The output buffer must be ready; otherwise we are in an erroneous state. 187 1/1 state_err = !oup_buf_wready; Tests: T87 T88 T89  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: T52 T86 T87  197 || (fifo_rvalid_o && fifo_rready_i)) begin 198 1/1 sram_req_o = 1'b1; Tests: T87 T88 T89  199 1/1 sram_write_o = 1'b0; Tests: T87 T88 T89  200 1/1 sram_addr_o = sram_rd_addr; Tests: T87 T88 T89  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: T52 T86 T87  205 1/1 sram_write_o = 1'b1; Tests: T52 T86 T87  206 1/1 sram_addr_o = sram_wr_addr; Tests: T52 T86 T87  207 1/1 inp_buf_rready = !sram_full && sram_gnt_i; Tests: T52 T86 T87  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
10CoveredT87,T110,T111
11CoveredT12,T13,T16

 LINE       125
 EXPRESSION (sram_req_o && sram_gnt_i)
             -----1----    -----2----
-1--2-StatusTests
01Not Covered
10Not Covered
11CoveredT52,T86,T87

 LINE       150
 EXPRESSION (sram_access && sram_write_o)
             -----1-----    ------2-----
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT87,T88,T89
11CoveredT52,T86,T87

 LINE       151
 EXPRESSION (sram_access && ((!sram_write_o)))
             -----1-----    --------2--------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT52,T86,T87
11CoveredT87,T88,T89

 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
00CoveredT52,T86,T87
01CoveredT87,T88,T89
10Not Covered

 LINE       196
 SUB-EXPRESSION ( ! ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full) )
                    ----------------------------1----------------------------
-1-StatusTests
0Not Covered
1CoveredT52,T86,T87

 LINE       196
 SUB-EXPRESSION ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full)
                 -------------------1-------------------    ------2-----
-1--2-StatusTests
00Not Covered
01CoveredT52,T86,T87
10CoveredT87,T88,T89

 LINE       196
 SUB-EXPRESSION (oup_buf_almost_full && oup_buf_wvalid)
                 ---------1---------    -------2------
-1--2-StatusTests
01Not Covered
10CoveredT52,T86,T87
11CoveredT87,T88,T89

 LINE       196
 SUB-EXPRESSION (fifo_rvalid_o && fifo_rready_i)
                 ------1------    ------2------
-1--2-StatusTests
01Not Covered
10CoveredT52,T86,T87
11CoveredT87,T88,T89

 LINE       204
 EXPRESSION (((!sram_full)) && inp_buf_rvalid)
             -------1------    -------2------
-1--2-StatusTests
01Not Covered
10CoveredT52,T86,T87
11CoveredT52,T86,T87

 LINE       207
 EXPRESSION (((!sram_full)) && sram_gnt_i)
             -------1------    -----2----
-1--2-StatusTests
01Not Covered
10CoveredT52,T86,T87
11CoveredT52,T86,T87

 LINE       212
 EXPRESSION (oup_buf_wready && ((!sram_read_in_prev_cyc_q)))
             -------1------    --------------2-------------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT87,T88,T89
11CoveredT1,T2,T3

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

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

 LINE       236
 EXPRESSION (inp_buf_wready && ( ! (sram_full && oup_buf_full) ))
             -------1------    ----------------2----------------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT52,T86,T87
11CoveredT1,T2,T3

 LINE       236
 SUB-EXPRESSION ( ! (sram_full && oup_buf_full) )
                    -------------1-------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT52,T86,T87

 LINE       236
 SUB-EXPRESSION (sram_full && oup_buf_full)
                 ----1----    ------2-----
-1--2-StatusTests
01CoveredT52,T86,T87
10Not Covered
11CoveredT52,T86,T87

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 T87,T88,T89
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 T87,T88,T89
1 0 - Covered T52,T86,T87
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 1697 1697 0 0
MinimalSramFifoDepth_A 1697 1697 0 0
NoErr_A 431063773 430890297 0 0
NoSramReadWhenEmpty_A 431063773 406030124 0 0
NoSramWriteWhenFull_A 431063773 232089 0 0
OupBufWreadyAfterSramRead_A 431063773 124558 0 0
SramRvalidAfterRead_A 431063773 124558 0 0


MinimalSramAw_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1697 1697 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 1697 1697 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 431063773 430890297 0 0
T1 1183 1124 0 0
T2 9689 9194 0 0
T3 24375 24316 0 0
T4 10288 10202 0 0
T5 399446 399366 0 0
T6 52159 52107 0 0
T7 54178 54105 0 0
T8 81610 81547 0 0
T9 1180 1103 0 0
T10 91456 91396 0 0

NoSramReadWhenEmpty_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 431063773 406030124 0 0
T1 1183 1124 0 0
T2 9689 9194 0 0
T3 24375 24316 0 0
T4 10288 10202 0 0
T5 399446 399366 0 0
T6 52159 52107 0 0
T7 54178 54105 0 0
T8 81610 81547 0 0
T9 1180 1103 0 0
T10 91456 91396 0 0

NoSramWriteWhenFull_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 431063773 232089 0 0
T20 4284 0 0 0
T52 16721 8 0 0
T53 18853 0 0 0
T86 0 5 0 0
T87 0 2829 0 0
T88 0 547 0 0
T89 0 596 0 0
T107 1698 0 0 0
T109 2841 0 0 0
T110 0 2067 0 0
T111 0 2246 0 0
T172 20614 0 0 0
T173 21079 0 0 0
T174 35070 0 0 0
T175 8059 0 0 0
T176 17697 0 0 0
T178 0 4 0 0
T190 0 13 0 0
T191 0 12 0 0

OupBufWreadyAfterSramRead_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 431063773 124558 0 0
T21 0 682 0 0
T28 7278 0 0 0
T87 178954 806 0 0
T88 0 682 0 0
T89 0 744 0 0
T90 0 1054 0 0
T110 0 620 0 0
T111 0 744 0 0
T149 0 1240 0 0
T178 12675 0 0 0
T179 127892 0 0 0
T180 162395 0 0 0
T181 124026 0 0 0
T182 22741 0 0 0
T183 5891 0 0 0
T184 54040 0 0 0
T192 0 1054 0 0
T193 0 806 0 0
T194 81678 0 0 0

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

Cond Coverage for Instance : tb.dut.i2c_core.u_fifos.u_acq_fifo_sram_adapter
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
10CoveredT57,T58
11CoveredT3,T4,T5

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

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

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

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

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

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

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

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

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

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

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

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

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

 LINE       236
 EXPRESSION (inp_buf_wready && ( ! (sram_full && oup_buf_full) ))
             -------1------    ----------------2----------------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT57,T71,T72
11CoveredT1,T2,T3

 LINE       236
 SUB-EXPRESSION ( ! (sram_full && oup_buf_full) )
                    -------------1-------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT57,T71,T72

 LINE       236
 SUB-EXPRESSION (sram_full && oup_buf_full)
                 ----1----    ------2-----
-1--2-StatusTests
01CoveredT3,T4,T5
10Not Covered
11CoveredT57,T71,T72

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,T7
0 Covered T1,T2,T3


191 if (!sram_empty) begin -1- 192 193 // Prioritize refilling of the output buffer: if the output buffer is not being filled to the 194 // last slot in the current cycle or it is being read in the current cycle, read from the SRAM 195 // so the output buffer can be written in the next cycle. 196 if (!((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full) -2- 197 || (fifo_rvalid_o && fifo_rready_i)) begin 198 sram_req_o = 1'b1; ==> 199 sram_write_o = 1'b0; 200 sram_addr_o = sram_rd_addr; 201 202 // If the output buffer is full (and not being read), drain the input buffer into the SRAM. 203 end else begin 204 sram_req_o = !sram_full && inp_buf_rvalid; ==> 205 sram_write_o = 1'b1; 206 sram_addr_o = sram_wr_addr; 207 inp_buf_rready = !sram_full && sram_gnt_i; 208 end 209 210 // If the SRAM is empty, data must flow from the input buffer to the output buffer if the output 211 // buffer is ready and is not receiving data read from the SRAM in the previous cycle 212 end else if (oup_buf_wready && !sram_read_in_prev_cyc_q) begin -3- 213 oup_buf_wvalid = inp_buf_rvalid; ==> 214 oup_buf_wdata = inp_buf_rdata; 215 inp_buf_rready = oup_buf_wready; 216 217 // Otherwise the SRAM is empty but the output buffer cannot take the data from the input buffer, 218 // so drain the input buffer into the SRAM. 219 end else begin 220 sram_req_o = !sram_full && inp_buf_rvalid; ==>

Branches:
-1--2--3-StatusTests
1 1 - Covered T4,T5,T7
1 0 - Covered T4,T5,T7
0 - 1 Covered T1,T2,T3
0 - 0 Covered T1,T2,T3


Assert Coverage for Instance : tb.dut.i2c_core.u_fifos.u_acq_fifo_sram_adapter
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 1697 1697 0 0
MinimalSramFifoDepth_A 1697 1697 0 0
NoErr_A 431063773 430890297 0 0
NoSramReadWhenEmpty_A 431063773 176055229 0 0
NoSramWriteWhenFull_A 431063773 63250 0 0
OupBufWreadyAfterSramRead_A 431063773 245938 0 0
SramRvalidAfterRead_A 431063773 245938 0 0


MinimalSramAw_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1697 1697 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 1697 1697 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 431063773 430890297 0 0
T1 1183 1124 0 0
T2 9689 9194 0 0
T3 24375 24316 0 0
T4 10288 10202 0 0
T5 399446 399366 0 0
T6 52159 52107 0 0
T7 54178 54105 0 0
T8 81610 81547 0 0
T9 1180 1103 0 0
T10 91456 91396 0 0

NoSramReadWhenEmpty_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 431063773 176055229 0 0
T1 1183 1124 0 0
T2 9689 9194 0 0
T3 24375 24316 0 0
T4 10288 8892 0 0
T5 399446 195159 0 0
T6 52159 52107 0 0
T7 54178 32968 0 0
T8 81610 49999 0 0
T9 1180 1103 0 0
T10 91456 48165 0 0

NoSramWriteWhenFull_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 431063773 63250 0 0
T11 15148 0 0 0
T42 10680 0 0 0
T57 218742 22 0 0
T58 0 19 0 0
T68 12889 0 0 0
T71 49086 1294 0 0
T72 0 20 0 0
T73 0 14 0 0
T76 0 716 0 0
T77 0 818 0 0
T78 3000 0 0 0
T81 9308 0 0 0
T82 126785 0 0 0
T157 103252 0 0 0
T162 0 3 0 0
T163 0 17 0 0
T164 0 1799 0 0
T171 43971 0 0 0

OupBufWreadyAfterSramRead_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 431063773 245938 0 0
T4 10288 7 0 0
T5 399446 1455 0 0
T6 52159 0 0 0
T7 54178 179 0 0
T8 81610 80 0 0
T9 1180 0 0 0
T10 91456 265 0 0
T57 218742 36 0 0
T68 12889 0 0 0
T72 0 266 0 0
T82 0 397 0 0
T83 6854 0 0 0
T158 0 8 0 0
T159 0 95 0 0

SramRvalidAfterRead_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 431063773 245938 0 0
T4 10288 7 0 0
T5 399446 1455 0 0
T6 52159 0 0 0
T7 54178 179 0 0
T8 81610 80 0 0
T9 1180 0 0 0
T10 91456 265 0 0
T57 218742 36 0 0
T68 12889 0 0 0
T72 0 266 0 0
T82 0 397 0 0
T83 6854 0 0 0
T158 0 8 0 0
T159 0 95 0 0

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