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

Line Coverage for Module : i2c_fifo_sync_sram_adapter ( parameter Width=13,Depth=268,SramAw=9,SramBaseAddr=192,DepthW=9,OupBufDepth=2,InpBufDepthW=2,OupBufDepthW=2,SramPtrW=9,SramDepthW=9,SramAddrLeadingZeros=0 )
Line Coverage for Module self-instances :
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: T5 T44 T47  185 1/1 oup_buf_wdata = sram_rdata_i; Tests: T5 T44 T47  186 // The output buffer must be ready; otherwise we are in an erroneous state. 187 1/1 state_err = !oup_buf_wready; Tests: T5 T44 T47  188 end MISSING_ELSE 189 190 // If the SRAM is not empty, data from the input buffer must flow via the SRAM. 191 1/1 if (!sram_empty) begin Tests: T1 T2 T3  192 193 // Prioritize refilling of the output buffer: if the output buffer is not being filled to the 194 // last slot in the current cycle or it is being read in the current cycle, read from the SRAM 195 // so the output buffer can be written in the next cycle. 196 1/1 if (!((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full) Tests: T5 T44 T47  197 || (fifo_rvalid_o && fifo_rready_i)) begin 198 1/1 sram_req_o = 1'b1; Tests: T5 T44 T47  199 1/1 sram_write_o = 1'b0; Tests: T5 T44 T47  200 1/1 sram_addr_o = sram_rd_addr; Tests: T5 T44 T47  201 202 // If the output buffer is full (and not being read), drain the input buffer into the SRAM. 203 end else begin 204 1/1 sram_req_o = !sram_full && inp_buf_rvalid; Tests: T5 T44 T47  205 1/1 sram_write_o = 1'b1; Tests: T5 T44 T47  206 1/1 sram_addr_o = sram_wr_addr; Tests: T5 T44 T47  207 1/1 inp_buf_rready = !sram_full && sram_gnt_i; Tests: T5 T44 T47  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
10CoveredT50,T52,T80
11CoveredT2,T3,T5

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

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

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

 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,T5
01CoveredT5,T8,T9
10Not Covered

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

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

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

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

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

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

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

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

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

 LINE       236
 EXPRESSION (inp_buf_wready && ( ! (sram_full && oup_buf_full) ))
             -------1------    ----------------2----------------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT8,T42,T149
11CoveredT1,T2,T3

 LINE       236
 SUB-EXPRESSION ( ! (sram_full && oup_buf_full) )
                    -------------1-------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT8,T42,T149

 LINE       236
 SUB-EXPRESSION (sram_full && oup_buf_full)
                 ----1----    ------2-----
-1--2-StatusTests
01CoveredT2,T3,T5
10Not Covered
11CoveredT8,T42,T149

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 T5,T8,T9
0 Covered T1,T2,T3


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

Branches:
-1--2--3-StatusTests
1 1 - Covered T5,T8,T9
1 0 - Covered T2,T3,T5
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 6656 6656 0 0
MinimalSramFifoDepth_A 6656 6656 0 0
NoErr_A 1591444448 1590818428 0 0
NoSramReadWhenEmpty_A 1591444448 1250442403 0 0
NoSramWriteWhenFull_A 1591444448 31826849 0 0
OupBufWreadyAfterSramRead_A 1591444448 638268 0 0
SramRvalidAfterRead_A 1591444448 638268 0 0


MinimalSramAw_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 6656 6656 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 6656 6656 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 1591444448 1590818428 0 0
T1 11552 11240 0 0
T2 32032 31660 0 0
T3 33056 31180 0 0
T4 10408 10024 0 0
T5 105656 105324 0 0
T6 48948 48744 0 0
T7 50772 50396 0 0
T8 56388 56052 0 0
T9 95488 95140 0 0
T10 35600 34848 0 0

NoSramReadWhenEmpty_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1591444448 1250442403 0 0
T1 11552 11240 0 0
T2 32032 25817 0 0
T3 33056 30776 0 0
T4 10408 10024 0 0
T5 105656 90102 0 0
T6 48948 44967 0 0
T7 50772 45983 0 0
T8 56388 44937 0 0
T9 95488 90181 0 0
T10 35600 34656 0 0

NoSramWriteWhenFull_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1591444448 31826849 0 0
T8 14097 2791 0 0
T9 23872 0 0 0
T10 8900 0 0 0
T11 27774 0 0 0
T23 41730 0 0 0
T27 0 87594 0 0
T30 117124 0 0 0
T34 12136 0 0 0
T38 0 178033 0 0
T42 17911 3030 0 0
T43 11618 0 0 0
T44 40483 0 0 0
T47 122045 0 0 0
T50 229572 14 0 0
T52 0 16 0 0
T63 54868 5 0 0
T64 59489 1222 0 0
T65 0 6 0 0
T68 0 988 0 0
T69 0 757 0 0
T70 14529 0 0 0
T72 32095 0 0 0
T73 11433 0 0 0
T74 137945 0 0 0
T79 331142 450 0 0
T98 1220 0 0 0
T100 2137 0 0 0
T149 0 3697 0 0
T150 0 24 0 0
T151 0 178761 0 0
T152 0 5215 0 0
T153 0 1730 0 0
T154 0 6 0 0
T155 0 5656 0 0
T156 0 4746 0 0
T157 0 162467 0 0

OupBufWreadyAfterSramRead_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1591444448 638268 0 0
T5 26414 34 0 0
T6 12237 0 0 0
T7 12693 0 0 0
T8 28194 85 0 0
T9 47744 5 0 0
T10 17800 2 0 0
T11 27774 23 0 0
T23 83460 154 0 0
T30 0 245 0 0
T31 0 30 0 0
T40 0 130 0 0
T41 0 15 0 0
T42 0 82 0 0
T44 80966 173 0 0
T45 0 193 0 0
T47 244090 343 0 0
T50 0 36 0 0
T63 0 266 0 0
T72 64190 184 0 0
T73 11433 0 0 0
T74 137945 292 0 0
T76 0 343 0 0
T79 331142 806 0 0
T80 232921 0 0 0
T148 0 214 0 0
T154 54760 0 0 0
T158 46298 0 0 0
T159 7687 0 0 0
T160 1354 0 0 0
T161 652087 0 0 0
T162 10033 0 0 0

SramRvalidAfterRead_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1591444448 638268 0 0
T5 26414 34 0 0
T6 12237 0 0 0
T7 12693 0 0 0
T8 28194 85 0 0
T9 47744 5 0 0
T10 17800 2 0 0
T11 27774 23 0 0
T23 83460 154 0 0
T30 0 245 0 0
T31 0 30 0 0
T40 0 130 0 0
T41 0 15 0 0
T42 0 82 0 0
T44 80966 173 0 0
T45 0 193 0 0
T47 244090 343 0 0
T50 0 36 0 0
T63 0 266 0 0
T72 64190 184 0 0
T73 11433 0 0 0
T74 137945 292 0 0
T76 0 343 0 0
T79 331142 806 0 0
T80 232921 0 0 0
T148 0 214 0 0
T154 54760 0 0 0
T158 46298 0 0 0
T159 7687 0 0 0
T160 1354 0 0 0
T161 652087 0 0 0
T162 10033 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: T8 T9 T10  185 1/1 oup_buf_wdata = sram_rdata_i; Tests: T8 T9 T10  186 // The output buffer must be ready; otherwise we are in an erroneous state. 187 1/1 state_err = !oup_buf_wready; Tests: T8 T9 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 T8  197 || (fifo_rvalid_o && fifo_rready_i)) begin 198 1/1 sram_req_o = 1'b1; Tests: T8 T9 T10  199 1/1 sram_write_o = 1'b0; Tests: T8 T9 T10  200 1/1 sram_addr_o = sram_rd_addr; Tests: T8 T9 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 T8  205 1/1 sram_write_o = 1'b1; Tests: T2 T3 T8  206 1/1 sram_addr_o = sram_wr_addr; Tests: T2 T3 T8  207 1/1 inp_buf_rready = !sram_full && sram_gnt_i; Tests: T2 T3 T8  208 end 209 210 // If the SRAM is empty, data must flow from the input buffer to the output buffer if the output 211 // buffer is ready and is not receiving data read from the SRAM in the previous cycle 212 1/1 end else if (oup_buf_wready && !sram_read_in_prev_cyc_q) begin Tests: T1 T2 T3  213 1/1 oup_buf_wvalid = inp_buf_rvalid; Tests: T1 T2 T3  214 1/1 oup_buf_wdata = inp_buf_rdata; Tests: T1 T2 T3  215 1/1 inp_buf_rready = oup_buf_wready; Tests: T1 T2 T3  216 217 // Otherwise the SRAM is empty but the output buffer cannot take the data from the input buffer, 218 // so drain the input buffer into the SRAM. 219 end else begin 220 1/1 sram_req_o = !sram_full && inp_buf_rvalid; Tests: T1 T2 T3  221 1/1 sram_write_o = 1'b1; Tests: T1 T2 T3  222 1/1 sram_addr_o = sram_wr_addr; Tests: T1 T2 T3  223 1/1 inp_buf_rready = !sram_full && sram_gnt_i; Tests: T1 T2 T3  224 end 225 end 226 227 // Error output is high if any of the internal errors is high 228 1/1 assign err_o = |{inp_buf_err, oup_buf_err, sram_ptrs_err, state_err}; Tests: T1 T2 T3  229 230 // The SRAM and the output buffer together form the entire architectural capacity of the FIFO. 231 // Thus, when both are full, the FIFO is no longer ready to receive writes even though the input 232 // buffer could store one additional entry. This ensures that in the cycle after an entry has 233 // been read from the full FIFO, the next entry can be written to the FIFO. 234 // (It may be possible that all input buffer slots except one can be counted to the architectural 235 // capacity of the FIFO, but this is a relatively small optimization left for future work.) 236 1/1 assign fifo_wready_o = inp_buf_wready && !(sram_full && oup_buf_full); Tests: T1 T2 T3  237 238 // The current depth of the FIFO represented by this module is the depth of all buffers plus the 239 // FIFO in the SRAM plus one if there's an entry in transition between SRAM and output buffer. 240 1/1 assign fifo_depth_o = DepthW'(inp_buf_depth) + DepthW'(sram_depth) + DepthW'(oup_buf_depth) + Tests: T1 T2 T3  241 DepthW'(sram_read_in_prev_cyc_q); 242 243 // SRAM write data always comes from the input buffer. 244 1/1 assign sram_wdata_o = inp_buf_rdata; Tests: T1 T2 T3  245 assign sram_wmask_o = '1; 246 247 // `sram_rvalid_i` is only used for assertions. 248 logic unused_sram_rvalid; 249 1/1 assign unused_sram_rvalid = sram_rvalid_i; Tests: T1 T2 T3 

Cond Coverage for Instance : tb.dut.i2c_core.u_fifos.u_fmt_fifo_sram_adapter
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,T8

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

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

 LINE       151
 EXPRESSION (sram_access && ((!sram_write_o)))
             -----1-----    --------2--------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT2,T3,T8
11CoveredT8,T9,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,T8
01CoveredT8,T9,T10
10Not Covered

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

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

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

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

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

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

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

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

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

 LINE       236
 EXPRESSION (inp_buf_wready && ( ! (sram_full && oup_buf_full) ))
             -------1------    ----------------2----------------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT8,T42,T149
11CoveredT1,T2,T3

 LINE       236
 SUB-EXPRESSION ( ! (sram_full && oup_buf_full) )
                    -------------1-------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT8,T42,T149

 LINE       236
 SUB-EXPRESSION (sram_full && oup_buf_full)
                 ----1----    ------2-----
-1--2-StatusTests
01CoveredT2,T3,T8
10Not Covered
11CoveredT8,T42,T149

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 T8,T9,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 T8,T9,T10
1 0 - Covered T2,T3,T8
0 - 1 Covered T1,T2,T3
0 - 0 Covered T1,T2,T3


Assert Coverage for Instance : tb.dut.i2c_core.u_fifos.u_fmt_fifo_sram_adapter
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 1664 1664 0 0
MinimalSramFifoDepth_A 1664 1664 0 0
NoErr_A 397861112 397704607 0 0
NoSramReadWhenEmpty_A 397861112 330814932 0 0
NoSramWriteWhenFull_A 397861112 31227098 0 0
OupBufWreadyAfterSramRead_A 397861112 169743 0 0
SramRvalidAfterRead_A 397861112 169743 0 0


MinimalSramAw_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1664 1664 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 1664 1664 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 397861112 397704607 0 0
T1 2888 2810 0 0
T2 8008 7915 0 0
T3 8264 7795 0 0
T4 2602 2506 0 0
T5 26414 26331 0 0
T6 12237 12186 0 0
T7 12693 12599 0 0
T8 14097 14013 0 0
T9 23872 23785 0 0
T10 8900 8712 0 0

NoSramReadWhenEmpty_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 397861112 330814932 0 0
T1 2888 2810 0 0
T2 8008 2072 0 0
T3 8264 7391 0 0
T4 2602 2506 0 0
T5 26414 26331 0 0
T6 12237 12186 0 0
T7 12693 12599 0 0
T8 14097 2898 0 0
T9 23872 18826 0 0
T10 8900 8520 0 0

NoSramWriteWhenFull_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 397861112 31227098 0 0
T8 14097 2791 0 0
T9 23872 0 0 0
T10 8900 0 0 0
T11 27774 0 0 0
T23 41730 0 0 0
T27 0 87594 0 0
T38 0 178033 0 0
T42 0 3030 0 0
T44 40483 0 0 0
T47 122045 0 0 0
T72 32095 0 0 0
T73 11433 0 0 0
T74 137945 0 0 0
T149 0 3697 0 0
T151 0 178761 0 0
T152 0 5215 0 0
T155 0 5656 0 0
T156 0 4746 0 0
T157 0 162467 0 0

OupBufWreadyAfterSramRead_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 397861112 169743 0 0
T8 14097 85 0 0
T9 23872 5 0 0
T10 8900 2 0 0
T11 27774 23 0 0
T23 41730 154 0 0
T30 0 245 0 0
T31 0 30 0 0
T40 0 130 0 0
T41 0 15 0 0
T42 0 82 0 0
T44 40483 0 0 0
T47 122045 0 0 0
T72 32095 0 0 0
T73 11433 0 0 0
T74 137945 0 0 0

SramRvalidAfterRead_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 397861112 169743 0 0
T8 14097 85 0 0
T9 23872 5 0 0
T10 8900 2 0 0
T11 27774 23 0 0
T23 41730 154 0 0
T30 0 245 0 0
T31 0 30 0 0
T40 0 130 0 0
T41 0 15 0 0
T42 0 82 0 0
T44 40483 0 0 0
T47 122045 0 0 0
T72 32095 0 0 0
T73 11433 0 0 0
T74 137945 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: T5 T6 T7  185 1/1 oup_buf_wdata = sram_rdata_i; Tests: T5 T6 T7  186 // The output buffer must be ready; otherwise we are in an erroneous state. 187 1/1 state_err = !oup_buf_wready; Tests: T5 T6 T7  188 end MISSING_ELSE 189 190 // If the SRAM is not empty, data from the input buffer must flow via the SRAM. 191 1/1 if (!sram_empty) begin Tests: T1 T2 T3  192 193 // Prioritize refilling of the output buffer: if the output buffer is not being filled to the 194 // last slot in the current cycle or it is being read in the current cycle, read from the SRAM 195 // so the output buffer can be written in the next cycle. 196 1/1 if (!((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full) Tests: T5 T6 T7  197 || (fifo_rvalid_o && fifo_rready_i)) begin 198 1/1 sram_req_o = 1'b1; Tests: T5 T6 T7  199 1/1 sram_write_o = 1'b0; Tests: T5 T6 T7  200 1/1 sram_addr_o = sram_rd_addr; Tests: T5 T6 T7  201 202 // If the output buffer is full (and not being read), drain the input buffer into the SRAM. 203 end else begin 204 1/1 sram_req_o = !sram_full && inp_buf_rvalid; Tests: T5 T6 T7  205 1/1 sram_write_o = 1'b1; Tests: T5 T6 T7  206 1/1 sram_addr_o = sram_wr_addr; Tests: T5 T6 T7  207 1/1 inp_buf_rready = !sram_full && sram_gnt_i; Tests: T5 T6 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_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
11CoveredT5,T6,T7

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

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

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

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

 LINE       196
 SUB-EXPRESSION ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full)
                 -------------------1-------------------    ------2-----
-1--2-StatusTests
00Not Covered
01CoveredT5,T6,T7
10CoveredT6,T7,T44

 LINE       196
 SUB-EXPRESSION (oup_buf_almost_full && oup_buf_wvalid)
                 ---------1---------    -------2------
-1--2-StatusTests
01Not Covered
10CoveredT5,T6,T7
11CoveredT6,T7,T44

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

 LINE       204
 EXPRESSION (((!sram_full)) && inp_buf_rvalid)
             -------1------    -------2------
-1--2-StatusTests
01Not Covered
10CoveredT5,T6,T7
11CoveredT6,T7,T44

 LINE       207
 EXPRESSION (((!sram_full)) && sram_gnt_i)
             -------1------    -----2----
-1--2-StatusTests
01Not Covered
10CoveredT5,T6,T7
11CoveredT6,T7,T44

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

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

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

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

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

 LINE       236
 SUB-EXPRESSION (sram_full && oup_buf_full)
                 ----1----    ------2-----
-1--2-StatusTests
01CoveredT5,T6,T7
10Not Covered
11CoveredT60,T61,T62

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


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

Branches:
-1--2--3-StatusTests
1 1 - Covered T5,T6,T7
1 0 - Covered T5,T6,T7
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 1664 1664 0 0
MinimalSramFifoDepth_A 1664 1664 0 0
NoErr_A 397861112 397704607 0 0
NoSramReadWhenEmpty_A 397861112 376611331 0 0
NoSramWriteWhenFull_A 397861112 327393 0 0
OupBufWreadyAfterSramRead_A 397861112 111324 0 0
SramRvalidAfterRead_A 397861112 111324 0 0


MinimalSramAw_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1664 1664 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 1664 1664 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 397861112 397704607 0 0
T1 2888 2810 0 0
T2 8008 7915 0 0
T3 8264 7795 0 0
T4 2602 2506 0 0
T5 26414 26331 0 0
T6 12237 12186 0 0
T7 12693 12599 0 0
T8 14097 14013 0 0
T9 23872 23785 0 0
T10 8900 8712 0 0

NoSramReadWhenEmpty_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 397861112 376611331 0 0
T1 2888 2810 0 0
T2 8008 7915 0 0
T3 8264 7795 0 0
T4 2602 2506 0 0
T5 26414 25998 0 0
T6 12237 8409 0 0
T7 12693 8186 0 0
T8 14097 14013 0 0
T9 23872 23785 0 0
T10 8900 8712 0 0

NoSramWriteWhenFull_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 397861112 327393 0 0
T35 11105 0 0 0
T60 16315 10224 0 0
T61 0 7465 0 0
T62 0 3693 0 0
T65 61114 0 0 0
T68 40780 0 0 0
T96 0 8523 0 0
T163 0 11993 0 0
T164 0 8537 0 0
T165 0 8217 0 0
T166 0 1735 0 0
T167 0 7816 0 0
T168 0 2980 0 0
T169 1416 0 0 0
T170 83844 0 0 0
T171 7753 0 0 0
T172 571200 0 0 0
T173 101842 0 0 0
T174 124114 0 0 0

OupBufWreadyAfterSramRead_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 397861112 111324 0 0
T5 26414 2 0 0
T6 12237 19 0 0
T7 12693 29 0 0
T8 14097 0 0 0
T9 23872 0 0 0
T10 8900 0 0 0
T23 41730 0 0 0
T44 40483 91 0 0
T45 0 62 0 0
T47 122045 220 0 0
T72 32095 0 0 0
T73 0 46 0 0
T74 0 262 0 0
T75 0 97 0 0
T76 0 202 0 0

SramRvalidAfterRead_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 397861112 111324 0 0
T5 26414 2 0 0
T6 12237 19 0 0
T7 12693 29 0 0
T8 14097 0 0 0
T9 23872 0 0 0
T10 8900 0 0 0
T23 41730 0 0 0
T44 40483 91 0 0
T45 0 62 0 0
T47 122045 220 0 0
T72 32095 0 0 0
T73 0 46 0 0
T74 0 262 0 0
T75 0 97 0 0
T76 0 202 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: T79 T80 T81  185 1/1 oup_buf_wdata = sram_rdata_i; Tests: T79 T80 T81  186 // The output buffer must be ready; otherwise we are in an erroneous state. 187 1/1 state_err = !oup_buf_wready; Tests: T79 T80 T81  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: T79 T80 T81  197 || (fifo_rvalid_o && fifo_rready_i)) begin 198 1/1 sram_req_o = 1'b1; Tests: T79 T80 T81  199 1/1 sram_write_o = 1'b0; Tests: T79 T80 T81  200 1/1 sram_addr_o = sram_rd_addr; Tests: T79 T80 T81  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: T79 T80 T81  205 1/1 sram_write_o = 1'b1; Tests: T79 T80 T81  206 1/1 sram_addr_o = sram_wr_addr; Tests: T79 T80 T81  207 1/1 inp_buf_rready = !sram_full && sram_gnt_i; Tests: T79 T80 T81  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
10CoveredT80,T32,T101
11CoveredT9,T10,T11

 LINE       125
 EXPRESSION (sram_req_o && sram_gnt_i)
             -----1----    -----2----
-1--2-StatusTests
01Not Covered
10Not Covered
11CoveredT79,T80,T81

 LINE       150
 EXPRESSION (sram_access && sram_write_o)
             -----1-----    ------2-----
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT79,T80,T81
11CoveredT79,T80,T81

 LINE       151
 EXPRESSION (sram_access && ((!sram_write_o)))
             -----1-----    --------2--------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT79,T80,T81
11CoveredT79,T80,T81

 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
00CoveredT79,T80,T81
01CoveredT79,T80,T81
10Not Covered

 LINE       196
 SUB-EXPRESSION ( ! ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full) )
                    ----------------------------1----------------------------
-1-StatusTests
0Not Covered
1CoveredT79,T80,T81

 LINE       196
 SUB-EXPRESSION ((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full)
                 -------------------1-------------------    ------2-----
-1--2-StatusTests
00Not Covered
01CoveredT79,T80,T81
10CoveredT79,T80,T81

 LINE       196
 SUB-EXPRESSION (oup_buf_almost_full && oup_buf_wvalid)
                 ---------1---------    -------2------
-1--2-StatusTests
01Not Covered
10CoveredT79,T80,T81
11CoveredT79,T80,T81

 LINE       196
 SUB-EXPRESSION (fifo_rvalid_o && fifo_rready_i)
                 ------1------    ------2------
-1--2-StatusTests
01Not Covered
10CoveredT79,T80,T81
11CoveredT79,T80,T81

 LINE       204
 EXPRESSION (((!sram_full)) && inp_buf_rvalid)
             -------1------    -------2------
-1--2-StatusTests
01Not Covered
10CoveredT79,T80,T81
11CoveredT79,T80,T81

 LINE       207
 EXPRESSION (((!sram_full)) && sram_gnt_i)
             -------1------    -----2----
-1--2-StatusTests
01Not Covered
10CoveredT79,T80,T81
11CoveredT79,T80,T81

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

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

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

 LINE       236
 EXPRESSION (inp_buf_wready && ( ! (sram_full && oup_buf_full) ))
             -------1------    ----------------2----------------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT79,T80,T81
11CoveredT1,T2,T3

 LINE       236
 SUB-EXPRESSION ( ! (sram_full && oup_buf_full) )
                    -------------1-------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT79,T80,T81

 LINE       236
 SUB-EXPRESSION (sram_full && oup_buf_full)
                 ----1----    ------2-----
-1--2-StatusTests
01CoveredT79,T80,T81
10Not Covered
11CoveredT79,T80,T81

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 T79,T80,T81
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 T79,T80,T81
1 0 - Covered T79,T80,T81
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 1664 1664 0 0
MinimalSramFifoDepth_A 1664 1664 0 0
NoErr_A 397861112 397704607 0 0
NoSramReadWhenEmpty_A 397861112 374660475 0 0
NoSramWriteWhenFull_A 397861112 214201 0 0
OupBufWreadyAfterSramRead_A 397861112 114700 0 0
SramRvalidAfterRead_A 397861112 114700 0 0


MinimalSramAw_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1664 1664 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 1664 1664 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 397861112 397704607 0 0
T1 2888 2810 0 0
T2 8008 7915 0 0
T3 8264 7795 0 0
T4 2602 2506 0 0
T5 26414 26331 0 0
T6 12237 12186 0 0
T7 12693 12599 0 0
T8 14097 14013 0 0
T9 23872 23785 0 0
T10 8900 8712 0 0

NoSramReadWhenEmpty_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 397861112 374660475 0 0
T1 2888 2810 0 0
T2 8008 7915 0 0
T3 8264 7795 0 0
T4 2602 2506 0 0
T5 26414 26331 0 0
T6 12237 12186 0 0
T7 12693 12599 0 0
T8 14097 14013 0 0
T9 23872 23785 0 0
T10 8900 8712 0 0

NoSramWriteWhenFull_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 397861112 214201 0 0
T32 0 4041 0 0
T79 331142 450 0 0
T80 232921 3764 0 0
T81 0 823 0 0
T82 0 108 0 0
T101 0 3020 0 0
T112 0 890 0 0
T154 54760 0 0 0
T155 22165 0 0 0
T158 46298 0 0 0
T159 7687 0 0 0
T160 1354 0 0 0
T161 652087 0 0 0
T162 10033 0 0 0
T175 0 3 0 0
T176 0 16 0 0
T177 0 113 0 0
T178 25510 0 0 0

OupBufWreadyAfterSramRead_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 397861112 114700 0 0
T32 0 1178 0 0
T79 331142 806 0 0
T80 232921 992 0 0
T81 0 1054 0 0
T82 0 620 0 0
T101 0 992 0 0
T112 0 1054 0 0
T154 54760 0 0 0
T155 22165 0 0 0
T158 46298 0 0 0
T159 7687 0 0 0
T160 1354 0 0 0
T161 652087 0 0 0
T162 10033 0 0 0
T177 0 682 0 0
T178 25510 0 0 0
T179 0 1116 0 0
T180 0 806 0 0

SramRvalidAfterRead_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 397861112 114700 0 0
T32 0 1178 0 0
T79 331142 806 0 0
T80 232921 992 0 0
T81 0 1054 0 0
T82 0 620 0 0
T101 0 992 0 0
T112 0 1054 0 0
T154 54760 0 0 0
T155 22165 0 0 0
T158 46298 0 0 0
T159 7687 0 0 0
T160 1354 0 0 0
T161 652087 0 0 0
T162 10033 0 0 0
T177 0 682 0 0
T178 25510 0 0 0
T179 0 1116 0 0
T180 0 806 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: T5 T44 T47  185 1/1 oup_buf_wdata = sram_rdata_i; Tests: T5 T44 T47  186 // The output buffer must be ready; otherwise we are in an erroneous state. 187 1/1 state_err = !oup_buf_wready; Tests: T5 T44 T47  188 end MISSING_ELSE 189 190 // If the SRAM is not empty, data from the input buffer must flow via the SRAM. 191 1/1 if (!sram_empty) begin Tests: T1 T2 T3  192 193 // Prioritize refilling of the output buffer: if the output buffer is not being filled to the 194 // last slot in the current cycle or it is being read in the current cycle, read from the SRAM 195 // so the output buffer can be written in the next cycle. 196 1/1 if (!((oup_buf_almost_full && oup_buf_wvalid) || oup_buf_full) Tests: T5 T44 T47  197 || (fifo_rvalid_o && fifo_rready_i)) begin 198 1/1 sram_req_o = 1'b1; Tests: T5 T44 T47  199 1/1 sram_write_o = 1'b0; Tests: T5 T44 T47  200 1/1 sram_addr_o = sram_rd_addr; Tests: T5 T44 T47  201 202 // If the output buffer is full (and not being read), drain the input buffer into the SRAM. 203 end else begin 204 1/1 sram_req_o = !sram_full && inp_buf_rvalid; Tests: T5 T44 T47  205 1/1 sram_write_o = 1'b1; Tests: T5 T44 T47  206 1/1 sram_addr_o = sram_wr_addr; Tests: T5 T44 T47  207 1/1 inp_buf_rready = !sram_full && sram_gnt_i; Tests: T5 T44 T47  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
10CoveredT50,T52
11CoveredT5,T6,T7

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

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

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

 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
00CoveredT5,T44,T47
01CoveredT5,T44,T47
10Not Covered

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

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

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

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

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

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

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

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

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

 LINE       236
 EXPRESSION (inp_buf_wready && ( ! (sram_full && oup_buf_full) ))
             -------1------    ----------------2----------------
-1--2-StatusTests
01CoveredT1,T2,T3
10CoveredT63,T50,T64
11CoveredT1,T2,T3

 LINE       236
 SUB-EXPRESSION ( ! (sram_full && oup_buf_full) )
                    -------------1-------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT63,T50,T64

 LINE       236
 SUB-EXPRESSION (sram_full && oup_buf_full)
                 ----1----    ------2-----
-1--2-StatusTests
01CoveredT5,T6,T44
10Not Covered
11CoveredT63,T50,T64

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 T5,T44,T47
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 T5,T44,T47
1 0 - Covered T5,T44,T47
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 1664 1664 0 0
MinimalSramFifoDepth_A 1664 1664 0 0
NoErr_A 397861112 397704607 0 0
NoSramReadWhenEmpty_A 397861112 168355665 0 0
NoSramWriteWhenFull_A 397861112 58157 0 0
OupBufWreadyAfterSramRead_A 397861112 242501 0 0
SramRvalidAfterRead_A 397861112 242501 0 0


MinimalSramAw_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1664 1664 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 1664 1664 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 397861112 397704607 0 0
T1 2888 2810 0 0
T2 8008 7915 0 0
T3 8264 7795 0 0
T4 2602 2506 0 0
T5 26414 26331 0 0
T6 12237 12186 0 0
T7 12693 12599 0 0
T8 14097 14013 0 0
T9 23872 23785 0 0
T10 8900 8712 0 0

NoSramReadWhenEmpty_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 397861112 168355665 0 0
T1 2888 2810 0 0
T2 8008 7915 0 0
T3 8264 7795 0 0
T4 2602 2506 0 0
T5 26414 11442 0 0
T6 12237 12186 0 0
T7 12693 12599 0 0
T8 14097 14013 0 0
T9 23872 23785 0 0
T10 8900 8712 0 0

NoSramWriteWhenFull_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 397861112 58157 0 0
T30 117124 0 0 0
T34 12136 0 0 0
T42 17911 0 0 0
T43 11618 0 0 0
T50 229572 14 0 0
T52 0 16 0 0
T63 54868 5 0 0
T64 59489 1222 0 0
T65 0 6 0 0
T68 0 988 0 0
T69 0 757 0 0
T70 14529 0 0 0
T98 1220 0 0 0
T100 2137 0 0 0
T150 0 24 0 0
T153 0 1730 0 0
T154 0 6 0 0

OupBufWreadyAfterSramRead_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 397861112 242501 0 0
T5 26414 34 0 0
T6 12237 0 0 0
T7 12693 0 0 0
T8 14097 0 0 0
T9 23872 0 0 0
T10 8900 0 0 0
T23 41730 0 0 0
T44 40483 173 0 0
T45 0 193 0 0
T47 122045 343 0 0
T50 0 36 0 0
T63 0 266 0 0
T72 32095 184 0 0
T74 0 292 0 0
T76 0 343 0 0
T148 0 214 0 0

SramRvalidAfterRead_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 397861112 242501 0 0
T5 26414 34 0 0
T6 12237 0 0 0
T7 12693 0 0 0
T8 14097 0 0 0
T9 23872 0 0 0
T10 8900 0 0 0
T23 41730 0 0 0
T44 40483 173 0 0
T45 0 193 0 0
T47 122045 343 0 0
T50 0 36 0 0
T63 0 266 0 0
T72 32095 184 0 0
T74 0 292 0 0
T76 0 343 0 0
T148 0 214 0 0

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