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



Module Instance : tb.dut.u_upload.u_cmdfifo

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
93.75 100.00 75.00 100.00 100.00


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
93.75 100.00 75.00 100.00 100.00


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
96.37 100.00 86.11 100.00 95.74 100.00 u_upload


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
u_sync_rptr_gray 100.00 100.00 100.00
u_sync_wptr_gray 100.00 100.00 100.00



Module Instance : tb.dut.u_upload.u_addrfifo

Instance :
SCORELINECONDTOGGLEFSMBRANCHASSERT
93.75 100.00 75.00 100.00 100.00


Instance's subtree :
SCORELINECONDTOGGLEFSMBRANCHASSERT
93.75 100.00 75.00 100.00 100.00


Parent :
SCORELINECONDTOGGLEFSMBRANCHASSERTNAME
96.37 100.00 86.11 100.00 95.74 100.00 u_upload


Subtrees :
NAMESCORELINECONDTOGGLEFSMBRANCHASSERT
u_sync_rptr_gray 100.00 100.00 100.00
u_sync_wptr_gray 100.00 100.00 100.00

Line Coverage for Module : prim_fifo_async_sram_adapter ( parameter Width=16,Depth=16,SramAw=10,SramDw=32,SramBaseAddr=960,DepthW=5,PtrVW=4,PtrW=5 )
Line Coverage for Module self-instances :
SCORELINE
93.75 100.00
tb.dut.u_upload.u_cmdfifo

Line No.TotalCoveredPercent
TOTAL8686100.00
CONT_ASSIGN12111100.00
CONT_ASSIGN12311100.00
ALWAYS12666100.00
CONT_ASSIGN13511100.00
CONT_ASSIGN13611100.00
CONT_ASSIGN13811100.00
CONT_ASSIGN14911100.00
CONT_ASSIGN15011100.00
CONT_ASSIGN15111100.00
CONT_ASSIGN15311100.00
CONT_ASSIGN16311100.00
CONT_ASSIGN16511100.00
ALWAYS16866100.00
CONT_ASSIGN17711100.00
CONT_ASSIGN17811100.00
CONT_ASSIGN18011100.00
CONT_ASSIGN19111100.00
CONT_ASSIGN19211100.00
CONT_ASSIGN19311100.00
CONT_ASSIGN19511100.00
CONT_ASSIGN20111100.00
ALWAYS20444100.00
CONT_ASSIGN21111100.00
CONT_ASSIGN21711100.00
CONT_ASSIGN21811100.00
CONT_ASSIGN21911100.00
CONT_ASSIGN22211100.00
CONT_ASSIGN22411100.00
CONT_ASSIGN22511100.00
CONT_ASSIGN24511100.00
CONT_ASSIGN24711100.00
CONT_ASSIGN24811100.00
CONT_ASSIGN25111100.00
CONT_ASSIGN25211100.00
CONT_ASSIGN25411100.00
CONT_ASSIGN25611100.00
CONT_ASSIGN26011100.00
ALWAYS27044100.00
CONT_ASSIGN29111100.00
CONT_ASSIGN29711100.00
CONT_ASSIGN29911100.00
CONT_ASSIGN30111100.00
CONT_ASSIGN30411100.00
CONT_ASSIGN30811100.00
CONT_ASSIGN32111100.00
ALWAYS32499100.00
ROUTINE34777100.00
ROUTINE36899100.00

120 // Begin: Write pointer sync to read clock ======================== 121 1/1 assign w_wptr_inc = wvalid_i & wready_o; Tests: T1 T2 T3  122 123 1/1 assign w_wptr_d = w_wptr_q + PtrW'(1); Tests: T1 T2 T3  124 125 always_ff @(posedge clk_wr_i or negedge rst_wr_ni) begin 126 1/1 if (!rst_wr_ni) begin Tests: T1 T2 T3  127 1/1 w_wptr_q <= PtrW'(0); Tests: T1 T2 T3  128 1/1 w_wptr_gray_q <= PtrW'(0); Tests: T1 T2 T3  129 1/1 end else if (w_wptr_inc) begin Tests: T4 T8 T10  130 1/1 w_wptr_q <= w_wptr_d; Tests: T65 T51 T68  131 1/1 w_wptr_gray_q <= w_wptr_gray_d; Tests: T65 T51 T68  132 end MISSING_ELSE 133 end 134 135 1/1 assign w_wptr_v = w_wptr_q[0+:PtrVW]; Tests: T1 T2 T3  136 1/1 assign w_wptr_p = w_wptr_q[PtrW-1]; Tests: T1 T2 T3  137 138 1/1 assign w_wptr_gray_d = dec2gray(w_wptr_d); Tests: T1 T2 T3  139 140 prim_flop_2sync #( 141 .Width (PtrW) 142 ) u_sync_wptr_gray ( 143 .clk_i (clk_rd_i), 144 .rst_ni (rst_rd_ni), 145 .d_i (w_wptr_gray_q), 146 .q_o (r_wptr_gray) 147 ); 148 149 1/1 assign r_wptr = gray2dec(r_wptr_gray); Tests: T1 T2 T3  150 1/1 assign r_wptr_p = r_wptr[PtrW-1]; Tests: T1 T2 T3  151 1/1 assign r_wptr_v = r_wptr[0+:PtrVW]; Tests: T1 T2 T3  152 153 1/1 assign wdepth_o = (w_wptr_p == w_rptr_p) Tests: T1 T2 T3  154 ? DepthW'(w_wptr_v - w_rptr_v) 155 : DepthW'({1'b1, w_wptr_v} - {1'b 0, w_rptr_v}); 156 // End: Write pointer sync to read clock ------------------------ 157 158 // Begin: Read pointer sync to write clock ======================== 159 //assign r_rptr_inc = rvalid_o & rready_i; 160 //assign r_rptr_inc = r_sram_req_o && r_sram_gnt_i; 161 // Increase the read pointer (crossing the clock domain) only when the 162 // reader acked. 163 1/1 assign r_rptr_inc = rfifo_ack; Tests: T65 T51 T68  164 165 1/1 assign r_rptr_d = r_rptr_q + PtrW'(1); Tests: T1 T2 T3  166 167 always_ff @(posedge clk_rd_i or negedge rst_rd_ni) begin 168 1/1 if (!rst_rd_ni) begin Tests: T1 T2 T3  169 1/1 r_rptr_q <= PtrW'(0); Tests: T1 T2 T3  170 1/1 r_rptr_gray_q <= PtrW'(0); Tests: T1 T2 T3  171 1/1 end else if (r_rptr_inc) begin Tests: T1 T2 T3  172 1/1 r_rptr_q <= r_rptr_d; Tests: T65 T51 T68  173 1/1 r_rptr_gray_q <= r_rptr_gray_d; Tests: T65 T51 T68  174 end MISSING_ELSE 175 end 176 177 1/1 assign r_rptr_v = r_rptr_q[0+:PtrVW]; Tests: T1 T2 T3  178 1/1 assign r_rptr_p = r_rptr_q[PtrW-1]; Tests: T1 T2 T3  179 180 1/1 assign r_rptr_gray_d = dec2gray(r_rptr_d); Tests: T1 T2 T3  181 182 prim_flop_2sync #( 183 .Width (PtrW) 184 ) u_sync_rptr_gray ( 185 .clk_i (clk_wr_i), 186 .rst_ni (rst_wr_ni), 187 .d_i (r_rptr_gray_q), 188 .q_o (w_rptr_gray) 189 ); 190 191 1/1 assign w_rptr = gray2dec(w_rptr_gray); Tests: T1 T2 T3  192 1/1 assign w_rptr_p = w_rptr[PtrW-1]; Tests: T1 T2 T3  193 1/1 assign w_rptr_v = w_rptr[0+:PtrVW]; Tests: T1 T2 T3  194 195 1/1 assign rdepth_o = (r_wptr_p == r_rptr_p) Tests: T1 T2 T3  196 ? DepthW'(r_wptr_v - r_rptr_v) 197 : DepthW'({1'b1, r_wptr_v} - {1'b 0, r_rptr_v}); 198 // End: Read pointer sync to write clock ------------------------ 199 200 // Begin: SRAM Read pointer 201 1/1 assign r_sram_rptr_inc = rsram_ack; Tests: T1 T2 T3  202 203 always_ff @(posedge clk_rd_i or negedge rst_rd_ni) begin 204 1/1 if (!rst_rd_ni) begin Tests: T1 T2 T3  205 1/1 r_sram_rptr <= PtrW'(0); Tests: T1 T2 T3  206 1/1 end else if (r_sram_rptr_inc) begin Tests: T1 T2 T3  207 1/1 r_sram_rptr <= r_sram_rptr + PtrW'(1); Tests: T65 T51 T68  208 end MISSING_ELSE 209 end 210 211 1/1 assign r_sramrptr_empty = (r_wptr == r_sram_rptr); Tests: T1 T2 T3  212 // End: SRAM Read pointer 213 214 // Full/ Empty 215 // Lint complains PtrW'(1) << (PtrW-1). So changed as below 216 localparam logic [PtrW-1:0] XorMask = {1'b 1, {PtrW-1{1'b0}}}; 217 1/1 assign w_full = (w_wptr_q == (w_rptr ^ XorMask)); Tests: T1 T2 T3  218 1/1 assign r_full = (r_wptr == (r_rptr_q ^ XorMask)); Tests: T1 T2 T3  219 1/1 assign r_empty = (r_wptr == r_rptr_q); Tests: T1 T2 T3  220 221 logic unused_r_empty; 222 1/1 assign unused_r_empty = r_empty; Tests: T1 T2 T3  223 224 1/1 assign r_full_o = r_full; Tests: T1 T2 T3  225 1/1 assign w_full_o = w_full; Tests: T1 T2 T3  226 227 // The notempty status !(wptr == rptr) assert one clock earlier than the 228 // actual `rvalid` signals. 229 // 230 // The reason is due to the SRAM read latency. The module uses SRAM FIFO 231 // interface. When the logic in producer domain pushes entries, the pointer 232 // is increased. This triggers the FIFO logic in the consumer clock domain 233 // fetches data from SRAM. 234 // 235 // The pointer crosses the clock boundary. It takes usually two cycles (in 236 // the consumer side). Then, as the read and write pointer in the read clock 237 // domain has a gap by 1, the FIFO not empty status is raised. 238 // 239 // At this time, the logic just sent the read request to the SRAM. The data 240 // is not yet read. The `rvalid` asserts when it receives data from the 241 // SRAM. 242 // 243 // So, if the consumer reads data at the same cycle when notempty status is 244 // raised, it reads incorrect data. 245 1/1 assign r_notempty_o = rvalid_o; Tests: T1 T2 T3  246 247 1/1 assign rsram_ack = r_sram_req_o && r_sram_gnt_i; Tests: T1 T2 T3  248 1/1 assign rfifo_ack = rvalid_o && rready_i; Tests: T1 T2 T3  249 250 // SRAM Write Request 251 1/1 assign w_sram_req_o = wvalid_i && !w_full; Tests: T1 T2 T3  252 1/1 assign wready_o = !w_full && w_sram_gnt_i; Tests: T1 T2 T3  253 assign w_sram_write_o = 1'b 1; // Always write 254 1/1 assign w_sram_addr_o = SramBaseAddr + SramAw'(w_wptr_v); Tests: T1 T2 T3  255 256 1/1 assign w_sram_wdata_o = SramDw'(wdata_i); Tests: T1 T2 T3  257 assign w_sram_wmask_o = SramDw'({Width{1'b1}}); 258 259 logic unused_w_sram; 260 1/1 assign unused_w_sram = ^{w_sram_rvalid_i, w_sram_rdata_i, w_sram_rerror_i}; Tests: T1 T2 T3  261 262 // SRAM Read Request 263 // Request Scenario (!r_empty): 264 // - storage empty: Send request if 265 // !r_sram_rvalid_i || (rfifo_ack && r_sram_rvalid_i); 266 // - storage !empty: depends on the rfifo_ack: 267 // - r_rptr_inc: Can request more 268 // - !r_rptr_inc: Can't request 269 always_comb begin : r_sram_req 270 1/1 r_sram_req_o = 1'b 0; Tests: T1 T2 T3  271 // Karnough Map (!empty): sram_req 272 // {sram_rv, rfifo_ack} | 00 | 01 | 11 | 10 273 // ---------------------------------------------------------- 274 // stored | 0 | 1 | impossible | 1 | 0 275 // | 1 | 0 | 1 | X | impossible 276 // 277 // req_o = r_ptr_inc || (!stored && !r_sram_rvalid_i) 278 279 1/1 if (stored) begin Tests: T1 T2 T3  280 // storage has data. depends on rfifo_ack 281 // rfifo_ack can be replaced to rready_i as `rvalid_o` is 1 282 1/1 r_sram_req_o = !r_sramrptr_empty && rfifo_ack; Tests: T65 T51 T68  283 end else begin 284 // storage has no data. 285 // Can send request only when the reader accept the request or no 286 // previous request sent out. 287 1/1 r_sram_req_o = !r_sramrptr_empty && !(r_sram_rvalid_i ^ rfifo_ack); Tests: T1 T2 T3  288 end 289 end : r_sram_req 290 291 1/1 assign rvalid_o = stored || r_sram_rvalid_i; Tests: T1 T2 T3  292 assign r_sram_write_o = 1'b 0; // always read 293 assign r_sram_wdata_o = '0; 294 assign r_sram_wmask_o = '0; 295 296 // Send SRAM request with sram read pointer. 297 1/1 assign r_sram_addr_o = SramBaseAddr + SramAw'(r_sram_rptr[0+:PtrVW]); Tests: T1 T2 T3  298 299 1/1 assign rdata_d = (r_sram_rvalid_i) ? r_sram_rdata_i[0+:Width] : Width'(0); Tests: T1 T2 T3  300 301 1/1 assign rdata_o = (stored) ? rdata_q : rdata_d; Tests: T1 T2 T3  302 303 logic unused_rsram; 304 1/1 assign unused_rsram = ^{r_sram_rerror_i}; Tests: T1 T2 T3  305 306 if (Width < SramDw) begin : g_unused_rdata 307 logic unused_rdata; 308 1/1 assign unused_rdata = ^r_sram_rdata_i[SramDw-1:Width]; Tests: T2 T9 T10  309 end : g_unused_rdata 310 311 // read clock domain rdata storage 312 logic store_en; 313 314 // Karnough Map (r_sram_rvalid_i): 315 // rfifo_ack | 0 | 1 | 316 // --------------------- 317 // stored 0 | 1 | 0 | 318 // 1 | 0 | 1 | 319 // 320 // stored = s.r.v && XNOR(stored, rptr_inc) 321 1/1 assign store_en = r_sram_rvalid_i && !(stored ^ rfifo_ack); Tests: T1 T2 T3  322 323 always_ff @(posedge clk_rd_i or negedge rst_rd_ni) begin 324 1/1 if (!rst_rd_ni) begin Tests: T1 T2 T3  325 1/1 stored <= 1'b 0; Tests: T1 T2 T3  326 1/1 rdata_q <= Width'(0); Tests: T1 T2 T3  327 1/1 end else if (store_en) begin Tests: T1 T2 T3  328 1/1 stored <= 1'b 1; Tests: T65 T51 T68  329 1/1 rdata_q <= rdata_d; Tests: T65 T51 T68  330 1/1 end else if (!r_sram_rvalid_i && rfifo_ack) begin Tests: T1 T2 T3  331 // No request sent, host reads the data 332 1/1 stored <= 1'b 0; Tests: T65 T51 T68  333 1/1 rdata_q <= Width'(0); Tests: T65 T51 T68  334 end MISSING_ELSE 335 end 336 337 ////////////// 338 // Function // 339 ////////////// 340 341 // dec2gray / gray2dec copied from prim_fifo_async.sv 342 function automatic [PtrW-1:0] dec2gray(input logic [PtrW-1:0] decval); 343 logic [PtrW-1:0] decval_sub; 344 logic [PtrW-1:0] decval_in; 345 logic unused_decval_msb; 346 347 1/1 decval_sub = (PtrW)'(Depth) - {1'b0, decval[PtrW-2:0]} - 1'b1; Tests: T1 T2 T3  348 349 1/1 decval_in = decval[PtrW-1] ? decval_sub : decval; Tests: T1 T2 T3  350 351 // We do not care about the MSB, hence we mask it out 352 1/1 unused_decval_msb = decval_in[PtrW-1]; Tests: T1 T2 T3  353 1/1 decval_in[PtrW-1] = 1'b0; Tests: T1 T2 T3  354 355 // Perform the XOR conversion 356 1/1 dec2gray = decval_in; Tests: T1 T2 T3  357 1/1 dec2gray ^= (decval_in >> 1); Tests: T1 T2 T3  358 359 // Override the MSB 360 1/1 dec2gray[PtrW-1] = decval[PtrW-1]; Tests: T1 T2 T3  361 endfunction 362 363 // Algorithm walks up from 0..N-1 then flips the upper bit and walks down from N-1 to 0. 364 function automatic [PtrW-1:0] gray2dec(input logic [PtrW-1:0] grayval); 365 logic [PtrW-1:0] dec_tmp, dec_tmp_sub; 366 logic unused_decsub_msb; 367 368 1/1 dec_tmp = '0; Tests: T1 T2 T3  369 1/1 for (int i = PtrW-2; i >= 0; i--) begin Tests: T1 T2 T3  370 1/1 dec_tmp[i] = dec_tmp[i+1] ^ grayval[i]; Tests: T1 T2 T3  371 end 372 1/1 dec_tmp_sub = (PtrW)'(Depth) - dec_tmp - 1'b1; Tests: T1 T2 T3  373 1/1 if (grayval[PtrW-1]) begin Tests: T1 T2 T3  374 1/1 gray2dec = dec_tmp_sub; Tests: T49 T35 T50  375 // Override MSB 376 1/1 gray2dec[PtrW-1] = 1'b1; Tests: T49 T35 T50  377 1/1 unused_decsub_msb = dec_tmp_sub[PtrW-1]; Tests: T49 T35 T50  378 end else begin 379 1/1 gray2dec = dec_tmp; Tests: T1 T2 T3 

Line Coverage for Module : prim_fifo_async_sram_adapter ( parameter Width=32,Depth=16,SramAw=10,SramDw=32,SramBaseAddr=976,DepthW=5,PtrVW=4,PtrW=5 )
Line Coverage for Module self-instances :
SCORELINE
93.75 100.00
tb.dut.u_upload.u_addrfifo

Line No.TotalCoveredPercent
TOTAL8585100.00
CONT_ASSIGN12111100.00
CONT_ASSIGN12311100.00
ALWAYS12666100.00
CONT_ASSIGN13511100.00
CONT_ASSIGN13611100.00
CONT_ASSIGN13811100.00
CONT_ASSIGN14911100.00
CONT_ASSIGN15011100.00
CONT_ASSIGN15111100.00
CONT_ASSIGN15311100.00
CONT_ASSIGN16311100.00
CONT_ASSIGN16511100.00
ALWAYS16866100.00
CONT_ASSIGN17711100.00
CONT_ASSIGN17811100.00
CONT_ASSIGN18011100.00
CONT_ASSIGN19111100.00
CONT_ASSIGN19211100.00
CONT_ASSIGN19311100.00
CONT_ASSIGN19511100.00
CONT_ASSIGN20111100.00
ALWAYS20444100.00
CONT_ASSIGN21111100.00
CONT_ASSIGN21711100.00
CONT_ASSIGN21811100.00
CONT_ASSIGN21911100.00
CONT_ASSIGN22211100.00
CONT_ASSIGN22411100.00
CONT_ASSIGN22511100.00
CONT_ASSIGN24511100.00
CONT_ASSIGN24711100.00
CONT_ASSIGN24811100.00
CONT_ASSIGN25111100.00
CONT_ASSIGN25211100.00
CONT_ASSIGN25411100.00
CONT_ASSIGN25611100.00
CONT_ASSIGN26011100.00
ALWAYS27044100.00
CONT_ASSIGN29111100.00
CONT_ASSIGN29711100.00
CONT_ASSIGN29911100.00
CONT_ASSIGN30111100.00
CONT_ASSIGN30411100.00
CONT_ASSIGN32111100.00
ALWAYS32499100.00
ROUTINE34777100.00
ROUTINE36899100.00

120 // Begin: Write pointer sync to read clock ======================== 121 1/1 assign w_wptr_inc = wvalid_i & wready_o; Tests: T1 T2 T3  122 123 1/1 assign w_wptr_d = w_wptr_q + PtrW'(1); Tests: T1 T2 T3  124 125 always_ff @(posedge clk_wr_i or negedge rst_wr_ni) begin 126 1/1 if (!rst_wr_ni) begin Tests: T1 T2 T3  127 1/1 w_wptr_q <= PtrW'(0); Tests: T1 T2 T3  128 1/1 w_wptr_gray_q <= PtrW'(0); Tests: T1 T2 T3  129 1/1 end else if (w_wptr_inc) begin Tests: T4 T8 T10  130 1/1 w_wptr_q <= w_wptr_d; Tests: T65 T68 T52  131 1/1 w_wptr_gray_q <= w_wptr_gray_d; Tests: T65 T68 T52  132 end MISSING_ELSE 133 end 134 135 1/1 assign w_wptr_v = w_wptr_q[0+:PtrVW]; Tests: T1 T2 T3  136 1/1 assign w_wptr_p = w_wptr_q[PtrW-1]; Tests: T1 T2 T3  137 138 1/1 assign w_wptr_gray_d = dec2gray(w_wptr_d); Tests: T1 T2 T3  139 140 prim_flop_2sync #( 141 .Width (PtrW) 142 ) u_sync_wptr_gray ( 143 .clk_i (clk_rd_i), 144 .rst_ni (rst_rd_ni), 145 .d_i (w_wptr_gray_q), 146 .q_o (r_wptr_gray) 147 ); 148 149 1/1 assign r_wptr = gray2dec(r_wptr_gray); Tests: T1 T2 T3  150 1/1 assign r_wptr_p = r_wptr[PtrW-1]; Tests: T1 T2 T3  151 1/1 assign r_wptr_v = r_wptr[0+:PtrVW]; Tests: T1 T2 T3  152 153 1/1 assign wdepth_o = (w_wptr_p == w_rptr_p) Tests: T1 T2 T3  154 ? DepthW'(w_wptr_v - w_rptr_v) 155 : DepthW'({1'b1, w_wptr_v} - {1'b 0, w_rptr_v}); 156 // End: Write pointer sync to read clock ------------------------ 157 158 // Begin: Read pointer sync to write clock ======================== 159 //assign r_rptr_inc = rvalid_o & rready_i; 160 //assign r_rptr_inc = r_sram_req_o && r_sram_gnt_i; 161 // Increase the read pointer (crossing the clock domain) only when the 162 // reader acked. 163 1/1 assign r_rptr_inc = rfifo_ack; Tests: T65 T68 T52  164 165 1/1 assign r_rptr_d = r_rptr_q + PtrW'(1); Tests: T1 T2 T3  166 167 always_ff @(posedge clk_rd_i or negedge rst_rd_ni) begin 168 1/1 if (!rst_rd_ni) begin Tests: T1 T2 T3  169 1/1 r_rptr_q <= PtrW'(0); Tests: T1 T2 T3  170 1/1 r_rptr_gray_q <= PtrW'(0); Tests: T1 T2 T3  171 1/1 end else if (r_rptr_inc) begin Tests: T1 T2 T3  172 1/1 r_rptr_q <= r_rptr_d; Tests: T65 T68 T52  173 1/1 r_rptr_gray_q <= r_rptr_gray_d; Tests: T65 T68 T52  174 end MISSING_ELSE 175 end 176 177 1/1 assign r_rptr_v = r_rptr_q[0+:PtrVW]; Tests: T1 T2 T3  178 1/1 assign r_rptr_p = r_rptr_q[PtrW-1]; Tests: T1 T2 T3  179 180 1/1 assign r_rptr_gray_d = dec2gray(r_rptr_d); Tests: T1 T2 T3  181 182 prim_flop_2sync #( 183 .Width (PtrW) 184 ) u_sync_rptr_gray ( 185 .clk_i (clk_wr_i), 186 .rst_ni (rst_wr_ni), 187 .d_i (r_rptr_gray_q), 188 .q_o (w_rptr_gray) 189 ); 190 191 1/1 assign w_rptr = gray2dec(w_rptr_gray); Tests: T1 T2 T3  192 1/1 assign w_rptr_p = w_rptr[PtrW-1]; Tests: T1 T2 T3  193 1/1 assign w_rptr_v = w_rptr[0+:PtrVW]; Tests: T1 T2 T3  194 195 1/1 assign rdepth_o = (r_wptr_p == r_rptr_p) Tests: T1 T2 T3  196 ? DepthW'(r_wptr_v - r_rptr_v) 197 : DepthW'({1'b1, r_wptr_v} - {1'b 0, r_rptr_v}); 198 // End: Read pointer sync to write clock ------------------------ 199 200 // Begin: SRAM Read pointer 201 1/1 assign r_sram_rptr_inc = rsram_ack; Tests: T1 T2 T3  202 203 always_ff @(posedge clk_rd_i or negedge rst_rd_ni) begin 204 1/1 if (!rst_rd_ni) begin Tests: T1 T2 T3  205 1/1 r_sram_rptr <= PtrW'(0); Tests: T1 T2 T3  206 1/1 end else if (r_sram_rptr_inc) begin Tests: T1 T2 T3  207 1/1 r_sram_rptr <= r_sram_rptr + PtrW'(1); Tests: T65 T68 T52  208 end MISSING_ELSE 209 end 210 211 1/1 assign r_sramrptr_empty = (r_wptr == r_sram_rptr); Tests: T1 T2 T3  212 // End: SRAM Read pointer 213 214 // Full/ Empty 215 // Lint complains PtrW'(1) << (PtrW-1). So changed as below 216 localparam logic [PtrW-1:0] XorMask = {1'b 1, {PtrW-1{1'b0}}}; 217 1/1 assign w_full = (w_wptr_q == (w_rptr ^ XorMask)); Tests: T1 T2 T3  218 1/1 assign r_full = (r_wptr == (r_rptr_q ^ XorMask)); Tests: T1 T2 T3  219 1/1 assign r_empty = (r_wptr == r_rptr_q); Tests: T1 T2 T3  220 221 logic unused_r_empty; 222 1/1 assign unused_r_empty = r_empty; Tests: T1 T2 T3  223 224 1/1 assign r_full_o = r_full; Tests: T1 T2 T3  225 1/1 assign w_full_o = w_full; Tests: T1 T2 T3  226 227 // The notempty status !(wptr == rptr) assert one clock earlier than the 228 // actual `rvalid` signals. 229 // 230 // The reason is due to the SRAM read latency. The module uses SRAM FIFO 231 // interface. When the logic in producer domain pushes entries, the pointer 232 // is increased. This triggers the FIFO logic in the consumer clock domain 233 // fetches data from SRAM. 234 // 235 // The pointer crosses the clock boundary. It takes usually two cycles (in 236 // the consumer side). Then, as the read and write pointer in the read clock 237 // domain has a gap by 1, the FIFO not empty status is raised. 238 // 239 // At this time, the logic just sent the read request to the SRAM. The data 240 // is not yet read. The `rvalid` asserts when it receives data from the 241 // SRAM. 242 // 243 // So, if the consumer reads data at the same cycle when notempty status is 244 // raised, it reads incorrect data. 245 1/1 assign r_notempty_o = rvalid_o; Tests: T1 T2 T3  246 247 1/1 assign rsram_ack = r_sram_req_o && r_sram_gnt_i; Tests: T1 T2 T3  248 1/1 assign rfifo_ack = rvalid_o && rready_i; Tests: T1 T2 T3  249 250 // SRAM Write Request 251 1/1 assign w_sram_req_o = wvalid_i && !w_full; Tests: T1 T2 T3  252 1/1 assign wready_o = !w_full && w_sram_gnt_i; Tests: T1 T2 T3  253 assign w_sram_write_o = 1'b 1; // Always write 254 1/1 assign w_sram_addr_o = SramBaseAddr + SramAw'(w_wptr_v); Tests: T1 T2 T3  255 256 1/1 assign w_sram_wdata_o = SramDw'(wdata_i); Tests: T1 T2 T3  257 assign w_sram_wmask_o = SramDw'({Width{1'b1}}); 258 259 logic unused_w_sram; 260 1/1 assign unused_w_sram = ^{w_sram_rvalid_i, w_sram_rdata_i, w_sram_rerror_i}; Tests: T1 T2 T3  261 262 // SRAM Read Request 263 // Request Scenario (!r_empty): 264 // - storage empty: Send request if 265 // !r_sram_rvalid_i || (rfifo_ack && r_sram_rvalid_i); 266 // - storage !empty: depends on the rfifo_ack: 267 // - r_rptr_inc: Can request more 268 // - !r_rptr_inc: Can't request 269 always_comb begin : r_sram_req 270 1/1 r_sram_req_o = 1'b 0; Tests: T1 T2 T3  271 // Karnough Map (!empty): sram_req 272 // {sram_rv, rfifo_ack} | 00 | 01 | 11 | 10 273 // ---------------------------------------------------------- 274 // stored | 0 | 1 | impossible | 1 | 0 275 // | 1 | 0 | 1 | X | impossible 276 // 277 // req_o = r_ptr_inc || (!stored && !r_sram_rvalid_i) 278 279 1/1 if (stored) begin Tests: T1 T2 T3  280 // storage has data. depends on rfifo_ack 281 // rfifo_ack can be replaced to rready_i as `rvalid_o` is 1 282 1/1 r_sram_req_o = !r_sramrptr_empty && rfifo_ack; Tests: T65 T68 T52  283 end else begin 284 // storage has no data. 285 // Can send request only when the reader accept the request or no 286 // previous request sent out. 287 1/1 r_sram_req_o = !r_sramrptr_empty && !(r_sram_rvalid_i ^ rfifo_ack); Tests: T1 T2 T3  288 end 289 end : r_sram_req 290 291 1/1 assign rvalid_o = stored || r_sram_rvalid_i; Tests: T1 T2 T3  292 assign r_sram_write_o = 1'b 0; // always read 293 assign r_sram_wdata_o = '0; 294 assign r_sram_wmask_o = '0; 295 296 // Send SRAM request with sram read pointer. 297 1/1 assign r_sram_addr_o = SramBaseAddr + SramAw'(r_sram_rptr[0+:PtrVW]); Tests: T1 T2 T3  298 299 1/1 assign rdata_d = (r_sram_rvalid_i) ? r_sram_rdata_i[0+:Width] : Width'(0); Tests: T1 T2 T3  300 301 1/1 assign rdata_o = (stored) ? rdata_q : rdata_d; Tests: T1 T2 T3  302 303 logic unused_rsram; 304 1/1 assign unused_rsram = ^{r_sram_rerror_i}; Tests: T1 T2 T3  305 306 if (Width < SramDw) begin : g_unused_rdata 307 logic unused_rdata; 308 assign unused_rdata = ^r_sram_rdata_i[SramDw-1:Width]; 309 end : g_unused_rdata 310 311 // read clock domain rdata storage 312 logic store_en; 313 314 // Karnough Map (r_sram_rvalid_i): 315 // rfifo_ack | 0 | 1 | 316 // --------------------- 317 // stored 0 | 1 | 0 | 318 // 1 | 0 | 1 | 319 // 320 // stored = s.r.v && XNOR(stored, rptr_inc) 321 1/1 assign store_en = r_sram_rvalid_i && !(stored ^ rfifo_ack); Tests: T1 T2 T3  322 323 always_ff @(posedge clk_rd_i or negedge rst_rd_ni) begin 324 1/1 if (!rst_rd_ni) begin Tests: T1 T2 T3  325 1/1 stored <= 1'b 0; Tests: T1 T2 T3  326 1/1 rdata_q <= Width'(0); Tests: T1 T2 T3  327 1/1 end else if (store_en) begin Tests: T1 T2 T3  328 1/1 stored <= 1'b 1; Tests: T65 T68 T52  329 1/1 rdata_q <= rdata_d; Tests: T65 T68 T52  330 1/1 end else if (!r_sram_rvalid_i && rfifo_ack) begin Tests: T1 T2 T3  331 // No request sent, host reads the data 332 1/1 stored <= 1'b 0; Tests: T65 T68 T52  333 1/1 rdata_q <= Width'(0); Tests: T65 T68 T52  334 end MISSING_ELSE 335 end 336 337 ////////////// 338 // Function // 339 ////////////// 340 341 // dec2gray / gray2dec copied from prim_fifo_async.sv 342 function automatic [PtrW-1:0] dec2gray(input logic [PtrW-1:0] decval); 343 logic [PtrW-1:0] decval_sub; 344 logic [PtrW-1:0] decval_in; 345 logic unused_decval_msb; 346 347 1/1 decval_sub = (PtrW)'(Depth) - {1'b0, decval[PtrW-2:0]} - 1'b1; Tests: T1 T2 T3  348 349 1/1 decval_in = decval[PtrW-1] ? decval_sub : decval; Tests: T1 T2 T3  350 351 // We do not care about the MSB, hence we mask it out 352 1/1 unused_decval_msb = decval_in[PtrW-1]; Tests: T1 T2 T3  353 1/1 decval_in[PtrW-1] = 1'b0; Tests: T1 T2 T3  354 355 // Perform the XOR conversion 356 1/1 dec2gray = decval_in; Tests: T1 T2 T3  357 1/1 dec2gray ^= (decval_in >> 1); Tests: T1 T2 T3  358 359 // Override the MSB 360 1/1 dec2gray[PtrW-1] = decval[PtrW-1]; Tests: T1 T2 T3  361 endfunction 362 363 // Algorithm walks up from 0..N-1 then flips the upper bit and walks down from N-1 to 0. 364 function automatic [PtrW-1:0] gray2dec(input logic [PtrW-1:0] grayval); 365 logic [PtrW-1:0] dec_tmp, dec_tmp_sub; 366 logic unused_decsub_msb; 367 368 1/1 dec_tmp = '0; Tests: T1 T2 T3  369 1/1 for (int i = PtrW-2; i >= 0; i--) begin Tests: T1 T2 T3  370 1/1 dec_tmp[i] = dec_tmp[i+1] ^ grayval[i]; Tests: T1 T2 T3  371 end 372 1/1 dec_tmp_sub = (PtrW)'(Depth) - dec_tmp - 1'b1; Tests: T1 T2 T3  373 1/1 if (grayval[PtrW-1]) begin Tests: T1 T2 T3  374 1/1 gray2dec = dec_tmp_sub; Tests: T35 T116 T117  375 // Override MSB 376 1/1 gray2dec[PtrW-1] = 1'b1; Tests: T35 T116 T117  377 1/1 unused_decsub_msb = dec_tmp_sub[PtrW-1]; Tests: T35 T116 T117  378 end else begin 379 1/1 gray2dec = dec_tmp; Tests: T1 T2 T3 

Cond Coverage for Module : prim_fifo_async_sram_adapter ( parameter Width=16,Depth=16,SramAw=10,SramDw=32,SramBaseAddr=960,DepthW=5,PtrVW=4,PtrW=5 )
Cond Coverage for Module self-instances :
SCORECOND
93.75 75.00
tb.dut.u_upload.u_cmdfifo

TotalCoveredPercent
Conditions685175.00
Logical685175.00
Non-Logical00
Event00

 LINE       121
 EXPRESSION (wvalid_i & wready_o)
             ----1---   ----2---
-1--2-StatusTests
01Not Covered
10Not Covered
11CoveredT65,T51,T68

 LINE       153
 EXPRESSION ((w_wptr_p == w_rptr_p) ? (5'((w_wptr_v - w_rptr_v))) : (5'(({1'b1, w_wptr_v} - {1'b0, w_rptr_v}))))
             -----------1----------
-1-StatusTests
0CoveredT49,T35,T50
1CoveredT1,T2,T3

 LINE       153
 SUB-EXPRESSION (w_wptr_p == w_rptr_p)
                -----------1----------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       195
 EXPRESSION ((r_wptr_p == r_rptr_p) ? (5'((r_wptr_v - r_rptr_v))) : (5'(({1'b1, r_wptr_v} - {1'b0, r_rptr_v}))))
             -----------1----------
-1-StatusTests
0CoveredT49,T35,T50
1CoveredT1,T2,T3

 LINE       195
 SUB-EXPRESSION (r_wptr_p == r_rptr_p)
                -----------1----------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       211
 EXPRESSION (r_wptr == r_sram_rptr)
            -----------1-----------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       217
 EXPRESSION (w_wptr_q == (w_rptr ^ XorMask))
            ----------------1---------------
-1-StatusTests
0CoveredT1,T2,T3
1Not Covered

 LINE       218
 EXPRESSION (r_wptr == (r_rptr_q ^ XorMask))
            ----------------1---------------
-1-StatusTests
0CoveredT1,T2,T3
1Not Covered

 LINE       219
 EXPRESSION (r_wptr == r_rptr_q)
            ----------1---------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       247
 EXPRESSION (r_sram_req_o && r_sram_gnt_i)
             ------1-----    ------2-----
-1--2-StatusTests
01Not Covered
10Not Covered
11CoveredT65,T51,T68

 LINE       248
 EXPRESSION (rvalid_o && rready_i)
             ----1---    ----2---
-1--2-StatusTests
01Not Covered
10CoveredT65,T51,T68
11CoveredT65,T51,T68

 LINE       251
 EXPRESSION (wvalid_i && ((!w_full)))
             ----1---    -----2-----
-1--2-StatusTests
01CoveredT1,T2,T3
10Not Covered
11CoveredT65,T51,T68

 LINE       252
 EXPRESSION (((!w_full)) && w_sram_gnt_i)
             -----1-----    ------2-----
-1--2-StatusTests
01Not Covered
10CoveredT1,T2,T3
11CoveredT65,T51,T68

 LINE       282
 EXPRESSION (((!r_sramrptr_empty)) && rfifo_ack)
             ----------1----------    ----2----
-1--2-StatusTests
01CoveredT65,T51,T68
10Not Covered
11Not Covered

 LINE       287
 EXPRESSION (((!r_sramrptr_empty)) && ( ! (r_sram_rvalid_i ^ rfifo_ack) ))
             ----------1----------    -----------------2-----------------
-1--2-StatusTests
01CoveredT1,T2,T3
10Not Covered
11CoveredT65,T51,T68

 LINE       287
 SUB-EXPRESSION ( ! (r_sram_rvalid_i ^ rfifo_ack) )
                    --------------1--------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT65,T51,T68

 LINE       287
 SUB-EXPRESSION (r_sram_rvalid_i ^ rfifo_ack)
                 -------1-------   ----2----
-1--2-StatusTests
00CoveredT1,T2,T3
01Not Covered
10CoveredT65,T51,T68
11Not Covered

 LINE       291
 EXPRESSION (stored || r_sram_rvalid_i)
             ---1--    -------2-------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT65,T51,T68
10CoveredT65,T51,T68

 LINE       299
 EXPRESSION (r_sram_rvalid_i ? r_sram_rdata_i[0+:Width] : (16'(0)))
             -------1-------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT65,T51,T68

 LINE       301
 EXPRESSION (stored ? rdata_q : rdata_d)
             ---1--
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT65,T51,T68

 LINE       321
 EXPRESSION (r_sram_rvalid_i && ( ! (stored ^ rfifo_ack) ))
             -------1-------    -------------2------------
-1--2-StatusTests
01CoveredT1,T2,T3
10Not Covered
11CoveredT65,T51,T68

 LINE       321
 SUB-EXPRESSION ( ! (stored ^ rfifo_ack) )
                    ----------1---------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT65,T51,T68

 LINE       321
 SUB-EXPRESSION (stored ^ rfifo_ack)
                 ---1--   ----2----
-1--2-StatusTests
00CoveredT1,T2,T3
01Not Covered
10CoveredT65,T51,T68
11CoveredT65,T51,T68

 LINE       330
 EXPRESSION (((!r_sram_rvalid_i)) && rfifo_ack)
             ----------1---------    ----2----
-1--2-StatusTests
01Not Covered
10CoveredT1,T2,T3
11CoveredT65,T51,T68

 LINE       349
 EXPRESSION (decval[(PtrW - 1)] ? decval_sub : decval)
             ---------1--------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT49,T35,T50

 LINE       370
 EXPRESSION (dec_tmp[(i + 1)] ^ grayval[i])
             --------1-------   -----2----
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT65,T51,T68
10CoveredT51,T52,T67
11CoveredT65,T51,T68

Cond Coverage for Module : prim_fifo_async_sram_adapter ( parameter Width=32,Depth=16,SramAw=10,SramDw=32,SramBaseAddr=976,DepthW=5,PtrVW=4,PtrW=5 )
Cond Coverage for Module self-instances :
SCORECOND
93.75 75.00
tb.dut.u_upload.u_addrfifo

TotalCoveredPercent
Conditions685175.00
Logical685175.00
Non-Logical00
Event00

 LINE       121
 EXPRESSION (wvalid_i & wready_o)
             ----1---   ----2---
-1--2-StatusTests
01Not Covered
10Not Covered
11CoveredT65,T68,T52

 LINE       153
 EXPRESSION ((w_wptr_p == w_rptr_p) ? (5'((w_wptr_v - w_rptr_v))) : (5'(({1'b1, w_wptr_v} - {1'b0, w_rptr_v}))))
             -----------1----------
-1-StatusTests
0CoveredT35,T116,T117
1CoveredT1,T2,T3

 LINE       153
 SUB-EXPRESSION (w_wptr_p == w_rptr_p)
                -----------1----------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       195
 EXPRESSION ((r_wptr_p == r_rptr_p) ? (5'((r_wptr_v - r_rptr_v))) : (5'(({1'b1, r_wptr_v} - {1'b0, r_rptr_v}))))
             -----------1----------
-1-StatusTests
0CoveredT35,T116,T117
1CoveredT1,T2,T3

 LINE       195
 SUB-EXPRESSION (r_wptr_p == r_rptr_p)
                -----------1----------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       211
 EXPRESSION (r_wptr == r_sram_rptr)
            -----------1-----------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       217
 EXPRESSION (w_wptr_q == (w_rptr ^ XorMask))
            ----------------1---------------
-1-StatusTests
0CoveredT1,T2,T3
1Not Covered

 LINE       218
 EXPRESSION (r_wptr == (r_rptr_q ^ XorMask))
            ----------------1---------------
-1-StatusTests
0CoveredT1,T2,T3
1Not Covered

 LINE       219
 EXPRESSION (r_wptr == r_rptr_q)
            ----------1---------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       247
 EXPRESSION (r_sram_req_o && r_sram_gnt_i)
             ------1-----    ------2-----
-1--2-StatusTests
01Not Covered
10Not Covered
11CoveredT65,T68,T52

 LINE       248
 EXPRESSION (rvalid_o && rready_i)
             ----1---    ----2---
-1--2-StatusTests
01Not Covered
10CoveredT65,T68,T52
11CoveredT65,T68,T52

 LINE       251
 EXPRESSION (wvalid_i && ((!w_full)))
             ----1---    -----2-----
-1--2-StatusTests
01CoveredT1,T2,T3
10Not Covered
11CoveredT65,T68,T52

 LINE       252
 EXPRESSION (((!w_full)) && w_sram_gnt_i)
             -----1-----    ------2-----
-1--2-StatusTests
01Not Covered
10CoveredT1,T2,T3
11CoveredT65,T68,T52

 LINE       282
 EXPRESSION (((!r_sramrptr_empty)) && rfifo_ack)
             ----------1----------    ----2----
-1--2-StatusTests
01CoveredT65,T68,T52
10Not Covered
11Not Covered

 LINE       287
 EXPRESSION (((!r_sramrptr_empty)) && ( ! (r_sram_rvalid_i ^ rfifo_ack) ))
             ----------1----------    -----------------2-----------------
-1--2-StatusTests
01CoveredT1,T2,T3
10Not Covered
11CoveredT65,T68,T52

 LINE       287
 SUB-EXPRESSION ( ! (r_sram_rvalid_i ^ rfifo_ack) )
                    --------------1--------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT65,T68,T52

 LINE       287
 SUB-EXPRESSION (r_sram_rvalid_i ^ rfifo_ack)
                 -------1-------   ----2----
-1--2-StatusTests
00CoveredT1,T2,T3
01Not Covered
10CoveredT65,T68,T52
11Not Covered

 LINE       291
 EXPRESSION (stored || r_sram_rvalid_i)
             ---1--    -------2-------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT65,T68,T52
10CoveredT65,T68,T52

 LINE       299
 EXPRESSION (r_sram_rvalid_i ? r_sram_rdata_i[0+:Width] : (32'(0)))
             -------1-------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT65,T68,T52

 LINE       301
 EXPRESSION (stored ? rdata_q : rdata_d)
             ---1--
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT65,T68,T52

 LINE       321
 EXPRESSION (r_sram_rvalid_i && ( ! (stored ^ rfifo_ack) ))
             -------1-------    -------------2------------
-1--2-StatusTests
01CoveredT1,T2,T3
10Not Covered
11CoveredT65,T68,T52

 LINE       321
 SUB-EXPRESSION ( ! (stored ^ rfifo_ack) )
                    ----------1---------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT65,T68,T52

 LINE       321
 SUB-EXPRESSION (stored ^ rfifo_ack)
                 ---1--   ----2----
-1--2-StatusTests
00CoveredT1,T2,T3
01Not Covered
10CoveredT65,T68,T52
11CoveredT65,T68,T52

 LINE       330
 EXPRESSION (((!r_sram_rvalid_i)) && rfifo_ack)
             ----------1---------    ----2----
-1--2-StatusTests
01Not Covered
10CoveredT1,T2,T3
11CoveredT65,T68,T52

 LINE       349
 EXPRESSION (decval[(PtrW - 1)] ? decval_sub : decval)
             ---------1--------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT35,T116,T117

 LINE       370
 EXPRESSION (dec_tmp[(i + 1)] ^ grayval[i])
             --------1-------   -----2----
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT65,T68,T52
10CoveredT52,T67,T53
11CoveredT65,T68,T52

Branch Coverage for Module : prim_fifo_async_sram_adapter
Line No.TotalCoveredPercent
Branches 27 27 100.00
TERNARY 153 2 2 100.00
TERNARY 195 2 2 100.00
TERNARY 299 2 2 100.00
TERNARY 301 2 2 100.00
IF 126 3 3 100.00
IF 168 3 3 100.00
IF 204 3 3 100.00
IF 279 2 2 100.00
IF 324 4 4 100.00
TERNARY 349 2 2 100.00
IF 373 2 2 100.00


153 assign wdepth_o = (w_wptr_p == w_rptr_p) 154 ? DepthW'(w_wptr_v - w_rptr_v) -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T1,T2,T3
0 Covered T49,T35,T50


195 assign rdepth_o = (r_wptr_p == r_rptr_p) 196 ? DepthW'(r_wptr_v - r_rptr_v) -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T1,T2,T3
0 Covered T49,T35,T50


299 assign rdata_d = (r_sram_rvalid_i) ? r_sram_rdata_i[0+:Width] : Width'(0); -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T65,T51,T68
0 Covered T1,T2,T3


301 assign rdata_o = (stored) ? rdata_q : rdata_d; -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T65,T51,T68
0 Covered T1,T2,T3


126 if (!rst_wr_ni) begin -1- 127 w_wptr_q <= PtrW'(0); ==> 128 w_wptr_gray_q <= PtrW'(0); 129 end else if (w_wptr_inc) begin -2- 130 w_wptr_q <= w_wptr_d; ==> 131 w_wptr_gray_q <= w_wptr_gray_d; 132 end MISSING_ELSE ==>

Branches:
-1--2-StatusTests
1 - Covered T1,T2,T3
0 1 Covered T65,T51,T68
0 0 Covered T4,T8,T10


168 if (!rst_rd_ni) begin -1- 169 r_rptr_q <= PtrW'(0); ==> 170 r_rptr_gray_q <= PtrW'(0); 171 end else if (r_rptr_inc) begin -2- 172 r_rptr_q <= r_rptr_d; ==> 173 r_rptr_gray_q <= r_rptr_gray_d; 174 end MISSING_ELSE ==>

Branches:
-1--2-StatusTests
1 - Covered T1,T2,T3
0 1 Covered T65,T51,T68
0 0 Covered T1,T2,T3


204 if (!rst_rd_ni) begin -1- 205 r_sram_rptr <= PtrW'(0); ==> 206 end else if (r_sram_rptr_inc) begin -2- 207 r_sram_rptr <= r_sram_rptr + PtrW'(1); ==> 208 end MISSING_ELSE ==>

Branches:
-1--2-StatusTests
1 - Covered T1,T2,T3
0 1 Covered T65,T51,T68
0 0 Covered T1,T2,T3


279 if (stored) begin -1- 280 // storage has data. depends on rfifo_ack 281 // rfifo_ack can be replaced to rready_i as `rvalid_o` is 1 282 r_sram_req_o = !r_sramrptr_empty && rfifo_ack; ==> 283 end else begin 284 // storage has no data. 285 // Can send request only when the reader accept the request or no 286 // previous request sent out. 287 r_sram_req_o = !r_sramrptr_empty && !(r_sram_rvalid_i ^ rfifo_ack); ==>

Branches:
-1-StatusTests
1 Covered T65,T51,T68
0 Covered T1,T2,T3


324 if (!rst_rd_ni) begin -1- 325 stored <= 1'b 0; ==> 326 rdata_q <= Width'(0); 327 end else if (store_en) begin -2- 328 stored <= 1'b 1; ==> 329 rdata_q <= rdata_d; 330 end else if (!r_sram_rvalid_i && rfifo_ack) begin -3- 331 // No request sent, host reads the data 332 stored <= 1'b 0; ==> 333 rdata_q <= Width'(0); 334 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
1 - - Covered T1,T2,T3
0 1 - Covered T65,T51,T68
0 0 1 Covered T65,T51,T68
0 0 0 Covered T1,T2,T3


349 decval_in = decval[PtrW-1] ? decval_sub : decval; -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T49,T35,T50
0 Covered T1,T2,T3


373 if (grayval[PtrW-1]) begin -1- 374 gray2dec = dec_tmp_sub; ==> 375 // Override MSB 376 gray2dec[PtrW-1] = 1'b1; 377 unused_decsub_msb = dec_tmp_sub[PtrW-1]; 378 end else begin 379 gray2dec = dec_tmp; ==>

Branches:
-1-StatusTests
1 Covered T49,T35,T50
0 Covered T1,T2,T3


Assert Coverage for Module : prim_fifo_async_sram_adapter
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 13 13 100.00 13 100.00
Cover properties 0 0 0
Cover sequences 0 0 0
Total 13 13 100.00 13 100.00




Assertion Details

NameAttemptsReal SuccessesFailuresIncomplete
MinDepth_A 1952 1952 0 0
NoRAckInEmpty_A 887347086 4189 0 0
NoWAckInFull_A 306284570 4189 0 0
ParamCheckDepth_A 1952 1952 0 0
RSramRvalidOneCycle_M 887347086 4189 0 0
RptrGrayOneBitAtATime_A 887347086 4189 0 0
RptrIncDataValid_A 887347086 4189 0 0
RptrIncrease_A 887347086 4189 0 0
SramRvalid_A 887347086 4189 0 0
WSramRvalid_A 306284570 306284570 0 0
WidthMatch_A 1952 1952 0 0
WptrGrayOneBitAtATime_A 306284570 4189 0 0
WptrIncrease_A 306284570 4189 0 0


MinDepth_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1952 1952 0 0
T1 2 2 0 0
T2 2 2 0 0
T3 2 2 0 0
T4 2 2 0 0
T5 2 2 0 0
T6 2 2 0 0
T7 2 2 0 0
T8 2 2 0 0
T9 2 2 0 0
T10 2 2 0 0

NoRAckInEmpty_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 887347086 4189 0 0
T48 0 16 0 0
T51 0 4 0 0
T52 0 10 0 0
T53 0 8 0 0
T65 95598 4 0 0
T67 0 6 0 0
T68 0 4 0 0
T83 20278 0 0 0
T84 109896 0 0 0
T86 4236 0 0 0
T87 64384 0 0 0
T102 0 17 0 0
T103 0 2 0 0
T104 0 2 0 0
T105 121826 0 0 0
T106 144222 0 0 0
T107 141308 0 0 0
T108 42140 0 0 0
T109 0 12 0 0
T113 20474 0 0 0
T114 0 4 0 0
T115 0 4 0 0

NoWAckInFull_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 306284570 4189 0 0
T48 0 16 0 0
T51 0 4 0 0
T52 0 10 0 0
T53 0 8 0 0
T55 21216 0 0 0
T65 192092 4 0 0
T67 0 6 0 0
T68 0 4 0 0
T83 4320 0 0 0
T84 194046 0 0 0
T86 1008 0 0 0
T87 28186 0 0 0
T102 0 17 0 0
T103 0 2 0 0
T104 0 2 0 0
T105 38232 0 0 0
T106 68568 0 0 0
T107 16896 0 0 0
T108 16428 0 0 0
T109 0 12 0 0
T114 0 4 0 0
T115 0 4 0 0

ParamCheckDepth_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1952 1952 0 0
T1 2 2 0 0
T2 2 2 0 0
T3 2 2 0 0
T4 2 2 0 0
T5 2 2 0 0
T6 2 2 0 0
T7 2 2 0 0
T8 2 2 0 0
T9 2 2 0 0
T10 2 2 0 0

RSramRvalidOneCycle_M
NameAttemptsReal SuccessesFailuresIncomplete
Total 887347086 4189 0 0
T48 0 16 0 0
T51 0 4 0 0
T52 0 10 0 0
T53 0 8 0 0
T65 95598 4 0 0
T67 0 6 0 0
T68 0 4 0 0
T83 20278 0 0 0
T84 109896 0 0 0
T86 4236 0 0 0
T87 64384 0 0 0
T102 0 17 0 0
T103 0 2 0 0
T104 0 2 0 0
T105 121826 0 0 0
T106 144222 0 0 0
T107 141308 0 0 0
T108 42140 0 0 0
T109 0 12 0 0
T113 20474 0 0 0
T114 0 4 0 0
T115 0 4 0 0

RptrGrayOneBitAtATime_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 887347086 4189 0 0
T48 0 16 0 0
T51 0 4 0 0
T52 0 10 0 0
T53 0 8 0 0
T65 95598 4 0 0
T67 0 6 0 0
T68 0 4 0 0
T83 20278 0 0 0
T84 109896 0 0 0
T86 4236 0 0 0
T87 64384 0 0 0
T102 0 17 0 0
T103 0 2 0 0
T104 0 2 0 0
T105 121826 0 0 0
T106 144222 0 0 0
T107 141308 0 0 0
T108 42140 0 0 0
T109 0 12 0 0
T113 20474 0 0 0
T114 0 4 0 0
T115 0 4 0 0

RptrIncDataValid_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 887347086 4189 0 0
T48 0 16 0 0
T51 0 4 0 0
T52 0 10 0 0
T53 0 8 0 0
T65 95598 4 0 0
T67 0 6 0 0
T68 0 4 0 0
T83 20278 0 0 0
T84 109896 0 0 0
T86 4236 0 0 0
T87 64384 0 0 0
T102 0 17 0 0
T103 0 2 0 0
T104 0 2 0 0
T105 121826 0 0 0
T106 144222 0 0 0
T107 141308 0 0 0
T108 42140 0 0 0
T109 0 12 0 0
T113 20474 0 0 0
T114 0 4 0 0
T115 0 4 0 0

RptrIncrease_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 887347086 4189 0 0
T48 0 16 0 0
T51 0 4 0 0
T52 0 10 0 0
T53 0 8 0 0
T65 95598 4 0 0
T67 0 6 0 0
T68 0 4 0 0
T83 20278 0 0 0
T84 109896 0 0 0
T86 4236 0 0 0
T87 64384 0 0 0
T102 0 17 0 0
T103 0 2 0 0
T104 0 2 0 0
T105 121826 0 0 0
T106 144222 0 0 0
T107 141308 0 0 0
T108 42140 0 0 0
T109 0 12 0 0
T113 20474 0 0 0
T114 0 4 0 0
T115 0 4 0 0

SramRvalid_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 887347086 4189 0 0
T48 0 16 0 0
T51 0 4 0 0
T52 0 10 0 0
T53 0 8 0 0
T65 95598 4 0 0
T67 0 6 0 0
T68 0 4 0 0
T83 20278 0 0 0
T84 109896 0 0 0
T86 4236 0 0 0
T87 64384 0 0 0
T102 0 17 0 0
T103 0 2 0 0
T104 0 2 0 0
T105 121826 0 0 0
T106 144222 0 0 0
T107 141308 0 0 0
T108 42140 0 0 0
T109 0 12 0 0
T113 20474 0 0 0
T114 0 4 0 0
T115 0 4 0 0

WSramRvalid_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 306284570 306284570 0 0
T4 1498 1498 0 0
T8 1008 1008 0 0
T10 2798 2798 0 0
T11 8626 8626 0 0
T13 31676 31676 0 0
T15 35882 35882 0 0
T16 113172 113172 0 0
T17 432 432 0 0
T18 37272 37272 0 0
T19 250980 250980 0 0

WidthMatch_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 1952 1952 0 0
T1 2 2 0 0
T2 2 2 0 0
T3 2 2 0 0
T4 2 2 0 0
T5 2 2 0 0
T6 2 2 0 0
T7 2 2 0 0
T8 2 2 0 0
T9 2 2 0 0
T10 2 2 0 0

WptrGrayOneBitAtATime_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 306284570 4189 0 0
T48 0 16 0 0
T51 0 4 0 0
T52 0 10 0 0
T53 0 8 0 0
T55 21216 0 0 0
T65 192092 4 0 0
T67 0 6 0 0
T68 0 4 0 0
T83 4320 0 0 0
T84 194046 0 0 0
T86 1008 0 0 0
T87 28186 0 0 0
T102 0 17 0 0
T103 0 2 0 0
T104 0 2 0 0
T105 38232 0 0 0
T106 68568 0 0 0
T107 16896 0 0 0
T108 16428 0 0 0
T109 0 12 0 0
T114 0 4 0 0
T115 0 4 0 0

WptrIncrease_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 306284570 4189 0 0
T48 0 16 0 0
T51 0 4 0 0
T52 0 10 0 0
T53 0 8 0 0
T55 21216 0 0 0
T65 192092 4 0 0
T67 0 6 0 0
T68 0 4 0 0
T83 4320 0 0 0
T84 194046 0 0 0
T86 1008 0 0 0
T87 28186 0 0 0
T102 0 17 0 0
T103 0 2 0 0
T104 0 2 0 0
T105 38232 0 0 0
T106 68568 0 0 0
T107 16896 0 0 0
T108 16428 0 0 0
T109 0 12 0 0
T114 0 4 0 0
T115 0 4 0 0

Line Coverage for Instance : tb.dut.u_upload.u_cmdfifo
Line No.TotalCoveredPercent
TOTAL8686100.00
CONT_ASSIGN12111100.00
CONT_ASSIGN12311100.00
ALWAYS12666100.00
CONT_ASSIGN13511100.00
CONT_ASSIGN13611100.00
CONT_ASSIGN13811100.00
CONT_ASSIGN14911100.00
CONT_ASSIGN15011100.00
CONT_ASSIGN15111100.00
CONT_ASSIGN15311100.00
CONT_ASSIGN16311100.00
CONT_ASSIGN16511100.00
ALWAYS16866100.00
CONT_ASSIGN17711100.00
CONT_ASSIGN17811100.00
CONT_ASSIGN18011100.00
CONT_ASSIGN19111100.00
CONT_ASSIGN19211100.00
CONT_ASSIGN19311100.00
CONT_ASSIGN19511100.00
CONT_ASSIGN20111100.00
ALWAYS20444100.00
CONT_ASSIGN21111100.00
CONT_ASSIGN21711100.00
CONT_ASSIGN21811100.00
CONT_ASSIGN21911100.00
CONT_ASSIGN22211100.00
CONT_ASSIGN22411100.00
CONT_ASSIGN22511100.00
CONT_ASSIGN24511100.00
CONT_ASSIGN24711100.00
CONT_ASSIGN24811100.00
CONT_ASSIGN25111100.00
CONT_ASSIGN25211100.00
CONT_ASSIGN25411100.00
CONT_ASSIGN25611100.00
CONT_ASSIGN26011100.00
ALWAYS27044100.00
CONT_ASSIGN29111100.00
CONT_ASSIGN29711100.00
CONT_ASSIGN29911100.00
CONT_ASSIGN30111100.00
CONT_ASSIGN30411100.00
CONT_ASSIGN30811100.00
CONT_ASSIGN32111100.00
ALWAYS32499100.00
ROUTINE34777100.00
ROUTINE36899100.00

120 // Begin: Write pointer sync to read clock ======================== 121 1/1 assign w_wptr_inc = wvalid_i & wready_o; Tests: T1 T2 T3  122 123 1/1 assign w_wptr_d = w_wptr_q + PtrW'(1); Tests: T1 T2 T3  124 125 always_ff @(posedge clk_wr_i or negedge rst_wr_ni) begin 126 1/1 if (!rst_wr_ni) begin Tests: T1 T2 T3  127 1/1 w_wptr_q <= PtrW'(0); Tests: T1 T2 T3  128 1/1 w_wptr_gray_q <= PtrW'(0); Tests: T1 T2 T3  129 1/1 end else if (w_wptr_inc) begin Tests: T4 T8 T10  130 1/1 w_wptr_q <= w_wptr_d; Tests: T65 T51 T68  131 1/1 w_wptr_gray_q <= w_wptr_gray_d; Tests: T65 T51 T68  132 end MISSING_ELSE 133 end 134 135 1/1 assign w_wptr_v = w_wptr_q[0+:PtrVW]; Tests: T1 T2 T3  136 1/1 assign w_wptr_p = w_wptr_q[PtrW-1]; Tests: T1 T2 T3  137 138 1/1 assign w_wptr_gray_d = dec2gray(w_wptr_d); Tests: T1 T2 T3  139 140 prim_flop_2sync #( 141 .Width (PtrW) 142 ) u_sync_wptr_gray ( 143 .clk_i (clk_rd_i), 144 .rst_ni (rst_rd_ni), 145 .d_i (w_wptr_gray_q), 146 .q_o (r_wptr_gray) 147 ); 148 149 1/1 assign r_wptr = gray2dec(r_wptr_gray); Tests: T1 T2 T3  150 1/1 assign r_wptr_p = r_wptr[PtrW-1]; Tests: T1 T2 T3  151 1/1 assign r_wptr_v = r_wptr[0+:PtrVW]; Tests: T1 T2 T3  152 153 1/1 assign wdepth_o = (w_wptr_p == w_rptr_p) Tests: T1 T2 T3  154 ? DepthW'(w_wptr_v - w_rptr_v) 155 : DepthW'({1'b1, w_wptr_v} - {1'b 0, w_rptr_v}); 156 // End: Write pointer sync to read clock ------------------------ 157 158 // Begin: Read pointer sync to write clock ======================== 159 //assign r_rptr_inc = rvalid_o & rready_i; 160 //assign r_rptr_inc = r_sram_req_o && r_sram_gnt_i; 161 // Increase the read pointer (crossing the clock domain) only when the 162 // reader acked. 163 1/1 assign r_rptr_inc = rfifo_ack; Tests: T65 T51 T68  164 165 1/1 assign r_rptr_d = r_rptr_q + PtrW'(1); Tests: T1 T2 T3  166 167 always_ff @(posedge clk_rd_i or negedge rst_rd_ni) begin 168 1/1 if (!rst_rd_ni) begin Tests: T1 T2 T3  169 1/1 r_rptr_q <= PtrW'(0); Tests: T1 T2 T3  170 1/1 r_rptr_gray_q <= PtrW'(0); Tests: T1 T2 T3  171 1/1 end else if (r_rptr_inc) begin Tests: T1 T2 T3  172 1/1 r_rptr_q <= r_rptr_d; Tests: T65 T51 T68  173 1/1 r_rptr_gray_q <= r_rptr_gray_d; Tests: T65 T51 T68  174 end MISSING_ELSE 175 end 176 177 1/1 assign r_rptr_v = r_rptr_q[0+:PtrVW]; Tests: T1 T2 T3  178 1/1 assign r_rptr_p = r_rptr_q[PtrW-1]; Tests: T1 T2 T3  179 180 1/1 assign r_rptr_gray_d = dec2gray(r_rptr_d); Tests: T1 T2 T3  181 182 prim_flop_2sync #( 183 .Width (PtrW) 184 ) u_sync_rptr_gray ( 185 .clk_i (clk_wr_i), 186 .rst_ni (rst_wr_ni), 187 .d_i (r_rptr_gray_q), 188 .q_o (w_rptr_gray) 189 ); 190 191 1/1 assign w_rptr = gray2dec(w_rptr_gray); Tests: T1 T2 T3  192 1/1 assign w_rptr_p = w_rptr[PtrW-1]; Tests: T1 T2 T3  193 1/1 assign w_rptr_v = w_rptr[0+:PtrVW]; Tests: T1 T2 T3  194 195 1/1 assign rdepth_o = (r_wptr_p == r_rptr_p) Tests: T1 T2 T3  196 ? DepthW'(r_wptr_v - r_rptr_v) 197 : DepthW'({1'b1, r_wptr_v} - {1'b 0, r_rptr_v}); 198 // End: Read pointer sync to write clock ------------------------ 199 200 // Begin: SRAM Read pointer 201 1/1 assign r_sram_rptr_inc = rsram_ack; Tests: T1 T2 T3  202 203 always_ff @(posedge clk_rd_i or negedge rst_rd_ni) begin 204 1/1 if (!rst_rd_ni) begin Tests: T1 T2 T3  205 1/1 r_sram_rptr <= PtrW'(0); Tests: T1 T2 T3  206 1/1 end else if (r_sram_rptr_inc) begin Tests: T1 T2 T3  207 1/1 r_sram_rptr <= r_sram_rptr + PtrW'(1); Tests: T65 T51 T68  208 end MISSING_ELSE 209 end 210 211 1/1 assign r_sramrptr_empty = (r_wptr == r_sram_rptr); Tests: T1 T2 T3  212 // End: SRAM Read pointer 213 214 // Full/ Empty 215 // Lint complains PtrW'(1) << (PtrW-1). So changed as below 216 localparam logic [PtrW-1:0] XorMask = {1'b 1, {PtrW-1{1'b0}}}; 217 1/1 assign w_full = (w_wptr_q == (w_rptr ^ XorMask)); Tests: T1 T2 T3  218 1/1 assign r_full = (r_wptr == (r_rptr_q ^ XorMask)); Tests: T1 T2 T3  219 1/1 assign r_empty = (r_wptr == r_rptr_q); Tests: T1 T2 T3  220 221 logic unused_r_empty; 222 1/1 assign unused_r_empty = r_empty; Tests: T1 T2 T3  223 224 1/1 assign r_full_o = r_full; Tests: T1 T2 T3  225 1/1 assign w_full_o = w_full; Tests: T1 T2 T3  226 227 // The notempty status !(wptr == rptr) assert one clock earlier than the 228 // actual `rvalid` signals. 229 // 230 // The reason is due to the SRAM read latency. The module uses SRAM FIFO 231 // interface. When the logic in producer domain pushes entries, the pointer 232 // is increased. This triggers the FIFO logic in the consumer clock domain 233 // fetches data from SRAM. 234 // 235 // The pointer crosses the clock boundary. It takes usually two cycles (in 236 // the consumer side). Then, as the read and write pointer in the read clock 237 // domain has a gap by 1, the FIFO not empty status is raised. 238 // 239 // At this time, the logic just sent the read request to the SRAM. The data 240 // is not yet read. The `rvalid` asserts when it receives data from the 241 // SRAM. 242 // 243 // So, if the consumer reads data at the same cycle when notempty status is 244 // raised, it reads incorrect data. 245 1/1 assign r_notempty_o = rvalid_o; Tests: T1 T2 T3  246 247 1/1 assign rsram_ack = r_sram_req_o && r_sram_gnt_i; Tests: T1 T2 T3  248 1/1 assign rfifo_ack = rvalid_o && rready_i; Tests: T1 T2 T3  249 250 // SRAM Write Request 251 1/1 assign w_sram_req_o = wvalid_i && !w_full; Tests: T1 T2 T3  252 1/1 assign wready_o = !w_full && w_sram_gnt_i; Tests: T1 T2 T3  253 assign w_sram_write_o = 1'b 1; // Always write 254 1/1 assign w_sram_addr_o = SramBaseAddr + SramAw'(w_wptr_v); Tests: T1 T2 T3  255 256 1/1 assign w_sram_wdata_o = SramDw'(wdata_i); Tests: T1 T2 T3  257 assign w_sram_wmask_o = SramDw'({Width{1'b1}}); 258 259 logic unused_w_sram; 260 1/1 assign unused_w_sram = ^{w_sram_rvalid_i, w_sram_rdata_i, w_sram_rerror_i}; Tests: T1 T2 T3  261 262 // SRAM Read Request 263 // Request Scenario (!r_empty): 264 // - storage empty: Send request if 265 // !r_sram_rvalid_i || (rfifo_ack && r_sram_rvalid_i); 266 // - storage !empty: depends on the rfifo_ack: 267 // - r_rptr_inc: Can request more 268 // - !r_rptr_inc: Can't request 269 always_comb begin : r_sram_req 270 1/1 r_sram_req_o = 1'b 0; Tests: T1 T2 T3  271 // Karnough Map (!empty): sram_req 272 // {sram_rv, rfifo_ack} | 00 | 01 | 11 | 10 273 // ---------------------------------------------------------- 274 // stored | 0 | 1 | impossible | 1 | 0 275 // | 1 | 0 | 1 | X | impossible 276 // 277 // req_o = r_ptr_inc || (!stored && !r_sram_rvalid_i) 278 279 1/1 if (stored) begin Tests: T1 T2 T3  280 // storage has data. depends on rfifo_ack 281 // rfifo_ack can be replaced to rready_i as `rvalid_o` is 1 282 1/1 r_sram_req_o = !r_sramrptr_empty && rfifo_ack; Tests: T65 T51 T68  283 end else begin 284 // storage has no data. 285 // Can send request only when the reader accept the request or no 286 // previous request sent out. 287 1/1 r_sram_req_o = !r_sramrptr_empty && !(r_sram_rvalid_i ^ rfifo_ack); Tests: T1 T2 T3  288 end 289 end : r_sram_req 290 291 1/1 assign rvalid_o = stored || r_sram_rvalid_i; Tests: T1 T2 T3  292 assign r_sram_write_o = 1'b 0; // always read 293 assign r_sram_wdata_o = '0; 294 assign r_sram_wmask_o = '0; 295 296 // Send SRAM request with sram read pointer. 297 1/1 assign r_sram_addr_o = SramBaseAddr + SramAw'(r_sram_rptr[0+:PtrVW]); Tests: T1 T2 T3  298 299 1/1 assign rdata_d = (r_sram_rvalid_i) ? r_sram_rdata_i[0+:Width] : Width'(0); Tests: T1 T2 T3  300 301 1/1 assign rdata_o = (stored) ? rdata_q : rdata_d; Tests: T1 T2 T3  302 303 logic unused_rsram; 304 1/1 assign unused_rsram = ^{r_sram_rerror_i}; Tests: T1 T2 T3  305 306 if (Width < SramDw) begin : g_unused_rdata 307 logic unused_rdata; 308 1/1 assign unused_rdata = ^r_sram_rdata_i[SramDw-1:Width]; Tests: T2 T9 T10  309 end : g_unused_rdata 310 311 // read clock domain rdata storage 312 logic store_en; 313 314 // Karnough Map (r_sram_rvalid_i): 315 // rfifo_ack | 0 | 1 | 316 // --------------------- 317 // stored 0 | 1 | 0 | 318 // 1 | 0 | 1 | 319 // 320 // stored = s.r.v && XNOR(stored, rptr_inc) 321 1/1 assign store_en = r_sram_rvalid_i && !(stored ^ rfifo_ack); Tests: T1 T2 T3  322 323 always_ff @(posedge clk_rd_i or negedge rst_rd_ni) begin 324 1/1 if (!rst_rd_ni) begin Tests: T1 T2 T3  325 1/1 stored <= 1'b 0; Tests: T1 T2 T3  326 1/1 rdata_q <= Width'(0); Tests: T1 T2 T3  327 1/1 end else if (store_en) begin Tests: T1 T2 T3  328 1/1 stored <= 1'b 1; Tests: T65 T51 T68  329 1/1 rdata_q <= rdata_d; Tests: T65 T51 T68  330 1/1 end else if (!r_sram_rvalid_i && rfifo_ack) begin Tests: T1 T2 T3  331 // No request sent, host reads the data 332 1/1 stored <= 1'b 0; Tests: T65 T51 T68  333 1/1 rdata_q <= Width'(0); Tests: T65 T51 T68  334 end MISSING_ELSE 335 end 336 337 ////////////// 338 // Function // 339 ////////////// 340 341 // dec2gray / gray2dec copied from prim_fifo_async.sv 342 function automatic [PtrW-1:0] dec2gray(input logic [PtrW-1:0] decval); 343 logic [PtrW-1:0] decval_sub; 344 logic [PtrW-1:0] decval_in; 345 logic unused_decval_msb; 346 347 1/1 decval_sub = (PtrW)'(Depth) - {1'b0, decval[PtrW-2:0]} - 1'b1; Tests: T1 T2 T3  348 349 1/1 decval_in = decval[PtrW-1] ? decval_sub : decval; Tests: T1 T2 T3  350 351 // We do not care about the MSB, hence we mask it out 352 1/1 unused_decval_msb = decval_in[PtrW-1]; Tests: T1 T2 T3  353 1/1 decval_in[PtrW-1] = 1'b0; Tests: T1 T2 T3  354 355 // Perform the XOR conversion 356 1/1 dec2gray = decval_in; Tests: T1 T2 T3  357 1/1 dec2gray ^= (decval_in >> 1); Tests: T1 T2 T3  358 359 // Override the MSB 360 1/1 dec2gray[PtrW-1] = decval[PtrW-1]; Tests: T1 T2 T3  361 endfunction 362 363 // Algorithm walks up from 0..N-1 then flips the upper bit and walks down from N-1 to 0. 364 function automatic [PtrW-1:0] gray2dec(input logic [PtrW-1:0] grayval); 365 logic [PtrW-1:0] dec_tmp, dec_tmp_sub; 366 logic unused_decsub_msb; 367 368 1/1 dec_tmp = '0; Tests: T1 T2 T3  369 1/1 for (int i = PtrW-2; i >= 0; i--) begin Tests: T1 T2 T3  370 1/1 dec_tmp[i] = dec_tmp[i+1] ^ grayval[i]; Tests: T1 T2 T3  371 end 372 1/1 dec_tmp_sub = (PtrW)'(Depth) - dec_tmp - 1'b1; Tests: T1 T2 T3  373 1/1 if (grayval[PtrW-1]) begin Tests: T1 T2 T3  374 1/1 gray2dec = dec_tmp_sub; Tests: T49 T35 T50  375 // Override MSB 376 1/1 gray2dec[PtrW-1] = 1'b1; Tests: T49 T35 T50  377 1/1 unused_decsub_msb = dec_tmp_sub[PtrW-1]; Tests: T49 T35 T50  378 end else begin 379 1/1 gray2dec = dec_tmp; Tests: T1 T2 T3 

Cond Coverage for Instance : tb.dut.u_upload.u_cmdfifo
TotalCoveredPercent
Conditions685175.00
Logical685175.00
Non-Logical00
Event00

 LINE       121
 EXPRESSION (wvalid_i & wready_o)
             ----1---   ----2---
-1--2-StatusTests
01Not Covered
10Not Covered
11CoveredT65,T51,T68

 LINE       153
 EXPRESSION ((w_wptr_p == w_rptr_p) ? (5'((w_wptr_v - w_rptr_v))) : (5'(({1'b1, w_wptr_v} - {1'b0, w_rptr_v}))))
             -----------1----------
-1-StatusTests
0CoveredT49,T35,T50
1CoveredT1,T2,T3

 LINE       153
 SUB-EXPRESSION (w_wptr_p == w_rptr_p)
                -----------1----------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       195
 EXPRESSION ((r_wptr_p == r_rptr_p) ? (5'((r_wptr_v - r_rptr_v))) : (5'(({1'b1, r_wptr_v} - {1'b0, r_rptr_v}))))
             -----------1----------
-1-StatusTests
0CoveredT49,T35,T50
1CoveredT1,T2,T3

 LINE       195
 SUB-EXPRESSION (r_wptr_p == r_rptr_p)
                -----------1----------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       211
 EXPRESSION (r_wptr == r_sram_rptr)
            -----------1-----------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       217
 EXPRESSION (w_wptr_q == (w_rptr ^ XorMask))
            ----------------1---------------
-1-StatusTests
0CoveredT1,T2,T3
1Not Covered

 LINE       218
 EXPRESSION (r_wptr == (r_rptr_q ^ XorMask))
            ----------------1---------------
-1-StatusTests
0CoveredT1,T2,T3
1Not Covered

 LINE       219
 EXPRESSION (r_wptr == r_rptr_q)
            ----------1---------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       247
 EXPRESSION (r_sram_req_o && r_sram_gnt_i)
             ------1-----    ------2-----
-1--2-StatusTests
01Not Covered
10Not Covered
11CoveredT65,T51,T68

 LINE       248
 EXPRESSION (rvalid_o && rready_i)
             ----1---    ----2---
-1--2-StatusTests
01Not Covered
10CoveredT65,T51,T68
11CoveredT65,T51,T68

 LINE       251
 EXPRESSION (wvalid_i && ((!w_full)))
             ----1---    -----2-----
-1--2-StatusTests
01CoveredT1,T2,T3
10Not Covered
11CoveredT65,T51,T68

 LINE       252
 EXPRESSION (((!w_full)) && w_sram_gnt_i)
             -----1-----    ------2-----
-1--2-StatusTests
01Not Covered
10CoveredT1,T2,T3
11CoveredT65,T51,T68

 LINE       282
 EXPRESSION (((!r_sramrptr_empty)) && rfifo_ack)
             ----------1----------    ----2----
-1--2-StatusTests
01CoveredT65,T51,T68
10Not Covered
11Not Covered

 LINE       287
 EXPRESSION (((!r_sramrptr_empty)) && ( ! (r_sram_rvalid_i ^ rfifo_ack) ))
             ----------1----------    -----------------2-----------------
-1--2-StatusTests
01CoveredT1,T2,T3
10Not Covered
11CoveredT65,T51,T68

 LINE       287
 SUB-EXPRESSION ( ! (r_sram_rvalid_i ^ rfifo_ack) )
                    --------------1--------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT65,T51,T68

 LINE       287
 SUB-EXPRESSION (r_sram_rvalid_i ^ rfifo_ack)
                 -------1-------   ----2----
-1--2-StatusTests
00CoveredT1,T2,T3
01Not Covered
10CoveredT65,T51,T68
11Not Covered

 LINE       291
 EXPRESSION (stored || r_sram_rvalid_i)
             ---1--    -------2-------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT65,T51,T68
10CoveredT65,T51,T68

 LINE       299
 EXPRESSION (r_sram_rvalid_i ? r_sram_rdata_i[0+:Width] : (16'(0)))
             -------1-------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT65,T51,T68

 LINE       301
 EXPRESSION (stored ? rdata_q : rdata_d)
             ---1--
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT65,T51,T68

 LINE       321
 EXPRESSION (r_sram_rvalid_i && ( ! (stored ^ rfifo_ack) ))
             -------1-------    -------------2------------
-1--2-StatusTests
01CoveredT1,T2,T3
10Not Covered
11CoveredT65,T51,T68

 LINE       321
 SUB-EXPRESSION ( ! (stored ^ rfifo_ack) )
                    ----------1---------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT65,T51,T68

 LINE       321
 SUB-EXPRESSION (stored ^ rfifo_ack)
                 ---1--   ----2----
-1--2-StatusTests
00CoveredT1,T2,T3
01Not Covered
10CoveredT65,T51,T68
11CoveredT65,T51,T68

 LINE       330
 EXPRESSION (((!r_sram_rvalid_i)) && rfifo_ack)
             ----------1---------    ----2----
-1--2-StatusTests
01Not Covered
10CoveredT1,T2,T3
11CoveredT65,T51,T68

 LINE       349
 EXPRESSION (decval[(PtrW - 1)] ? decval_sub : decval)
             ---------1--------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT49,T35,T50

 LINE       370
 EXPRESSION (dec_tmp[(i + 1)] ^ grayval[i])
             --------1-------   -----2----
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT65,T51,T68
10CoveredT51,T52,T67
11CoveredT65,T51,T68

Branch Coverage for Instance : tb.dut.u_upload.u_cmdfifo
Line No.TotalCoveredPercent
Branches 27 27 100.00
TERNARY 153 2 2 100.00
TERNARY 195 2 2 100.00
TERNARY 299 2 2 100.00
TERNARY 301 2 2 100.00
IF 126 3 3 100.00
IF 168 3 3 100.00
IF 204 3 3 100.00
IF 279 2 2 100.00
IF 324 4 4 100.00
TERNARY 349 2 2 100.00
IF 373 2 2 100.00


153 assign wdepth_o = (w_wptr_p == w_rptr_p) 154 ? DepthW'(w_wptr_v - w_rptr_v) -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T1,T2,T3
0 Covered T49,T35,T50


195 assign rdepth_o = (r_wptr_p == r_rptr_p) 196 ? DepthW'(r_wptr_v - r_rptr_v) -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T1,T2,T3
0 Covered T49,T35,T50


299 assign rdata_d = (r_sram_rvalid_i) ? r_sram_rdata_i[0+:Width] : Width'(0); -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T65,T51,T68
0 Covered T1,T2,T3


301 assign rdata_o = (stored) ? rdata_q : rdata_d; -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T65,T51,T68
0 Covered T1,T2,T3


126 if (!rst_wr_ni) begin -1- 127 w_wptr_q <= PtrW'(0); ==> 128 w_wptr_gray_q <= PtrW'(0); 129 end else if (w_wptr_inc) begin -2- 130 w_wptr_q <= w_wptr_d; ==> 131 w_wptr_gray_q <= w_wptr_gray_d; 132 end MISSING_ELSE ==>

Branches:
-1--2-StatusTests
1 - Covered T1,T2,T3
0 1 Covered T65,T51,T68
0 0 Covered T4,T8,T10


168 if (!rst_rd_ni) begin -1- 169 r_rptr_q <= PtrW'(0); ==> 170 r_rptr_gray_q <= PtrW'(0); 171 end else if (r_rptr_inc) begin -2- 172 r_rptr_q <= r_rptr_d; ==> 173 r_rptr_gray_q <= r_rptr_gray_d; 174 end MISSING_ELSE ==>

Branches:
-1--2-StatusTests
1 - Covered T1,T2,T3
0 1 Covered T65,T51,T68
0 0 Covered T1,T2,T3


204 if (!rst_rd_ni) begin -1- 205 r_sram_rptr <= PtrW'(0); ==> 206 end else if (r_sram_rptr_inc) begin -2- 207 r_sram_rptr <= r_sram_rptr + PtrW'(1); ==> 208 end MISSING_ELSE ==>

Branches:
-1--2-StatusTests
1 - Covered T1,T2,T3
0 1 Covered T65,T51,T68
0 0 Covered T1,T2,T3


279 if (stored) begin -1- 280 // storage has data. depends on rfifo_ack 281 // rfifo_ack can be replaced to rready_i as `rvalid_o` is 1 282 r_sram_req_o = !r_sramrptr_empty && rfifo_ack; ==> 283 end else begin 284 // storage has no data. 285 // Can send request only when the reader accept the request or no 286 // previous request sent out. 287 r_sram_req_o = !r_sramrptr_empty && !(r_sram_rvalid_i ^ rfifo_ack); ==>

Branches:
-1-StatusTests
1 Covered T65,T51,T68
0 Covered T1,T2,T3


324 if (!rst_rd_ni) begin -1- 325 stored <= 1'b 0; ==> 326 rdata_q <= Width'(0); 327 end else if (store_en) begin -2- 328 stored <= 1'b 1; ==> 329 rdata_q <= rdata_d; 330 end else if (!r_sram_rvalid_i && rfifo_ack) begin -3- 331 // No request sent, host reads the data 332 stored <= 1'b 0; ==> 333 rdata_q <= Width'(0); 334 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
1 - - Covered T1,T2,T3
0 1 - Covered T65,T51,T68
0 0 1 Covered T65,T51,T68
0 0 0 Covered T1,T2,T3


349 decval_in = decval[PtrW-1] ? decval_sub : decval; -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T49,T35,T50
0 Covered T1,T2,T3


373 if (grayval[PtrW-1]) begin -1- 374 gray2dec = dec_tmp_sub; ==> 375 // Override MSB 376 gray2dec[PtrW-1] = 1'b1; 377 unused_decsub_msb = dec_tmp_sub[PtrW-1]; 378 end else begin 379 gray2dec = dec_tmp; ==>

Branches:
-1-StatusTests
1 Covered T49,T35,T50
0 Covered T1,T2,T3


Assert Coverage for Instance : tb.dut.u_upload.u_cmdfifo
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 13 13 100.00 13 100.00
Cover properties 0 0 0
Cover sequences 0 0 0
Total 13 13 100.00 13 100.00




Assertion Details

NameAttemptsReal SuccessesFailuresIncomplete
MinDepth_A 976 976 0 0
NoRAckInEmpty_A 443673543 2363 0 0
NoWAckInFull_A 153142285 2363 0 0
ParamCheckDepth_A 976 976 0 0
RSramRvalidOneCycle_M 443673543 2363 0 0
RptrGrayOneBitAtATime_A 443673543 2363 0 0
RptrIncDataValid_A 443673543 2363 0 0
RptrIncrease_A 443673543 2363 0 0
SramRvalid_A 443673543 2363 0 0
WSramRvalid_A 153142285 153142285 0 0
WidthMatch_A 976 976 0 0
WptrGrayOneBitAtATime_A 153142285 2363 0 0
WptrIncrease_A 153142285 2363 0 0


MinDepth_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 976 976 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

NoRAckInEmpty_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 443673543 2363 0 0
T48 0 8 0 0
T51 0 4 0 0
T52 0 5 0 0
T53 0 4 0 0
T65 47799 2 0 0
T67 0 3 0 0
T68 0 2 0 0
T83 10139 0 0 0
T84 54948 0 0 0
T86 2118 0 0 0
T87 32192 0 0 0
T102 0 10 0 0
T103 0 2 0 0
T104 0 2 0 0
T105 60913 0 0 0
T106 72111 0 0 0
T107 70654 0 0 0
T108 21070 0 0 0
T113 10237 0 0 0

NoWAckInFull_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 153142285 2363 0 0
T48 0 8 0 0
T51 0 4 0 0
T52 0 5 0 0
T53 0 4 0 0
T55 10608 0 0 0
T65 96046 2 0 0
T67 0 3 0 0
T68 0 2 0 0
T83 2160 0 0 0
T84 97023 0 0 0
T86 504 0 0 0
T87 14093 0 0 0
T102 0 10 0 0
T103 0 2 0 0
T104 0 2 0 0
T105 19116 0 0 0
T106 34284 0 0 0
T107 8448 0 0 0
T108 8214 0 0 0

ParamCheckDepth_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 976 976 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

RSramRvalidOneCycle_M
NameAttemptsReal SuccessesFailuresIncomplete
Total 443673543 2363 0 0
T48 0 8 0 0
T51 0 4 0 0
T52 0 5 0 0
T53 0 4 0 0
T65 47799 2 0 0
T67 0 3 0 0
T68 0 2 0 0
T83 10139 0 0 0
T84 54948 0 0 0
T86 2118 0 0 0
T87 32192 0 0 0
T102 0 10 0 0
T103 0 2 0 0
T104 0 2 0 0
T105 60913 0 0 0
T106 72111 0 0 0
T107 70654 0 0 0
T108 21070 0 0 0
T113 10237 0 0 0

RptrGrayOneBitAtATime_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 443673543 2363 0 0
T48 0 8 0 0
T51 0 4 0 0
T52 0 5 0 0
T53 0 4 0 0
T65 47799 2 0 0
T67 0 3 0 0
T68 0 2 0 0
T83 10139 0 0 0
T84 54948 0 0 0
T86 2118 0 0 0
T87 32192 0 0 0
T102 0 10 0 0
T103 0 2 0 0
T104 0 2 0 0
T105 60913 0 0 0
T106 72111 0 0 0
T107 70654 0 0 0
T108 21070 0 0 0
T113 10237 0 0 0

RptrIncDataValid_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 443673543 2363 0 0
T48 0 8 0 0
T51 0 4 0 0
T52 0 5 0 0
T53 0 4 0 0
T65 47799 2 0 0
T67 0 3 0 0
T68 0 2 0 0
T83 10139 0 0 0
T84 54948 0 0 0
T86 2118 0 0 0
T87 32192 0 0 0
T102 0 10 0 0
T103 0 2 0 0
T104 0 2 0 0
T105 60913 0 0 0
T106 72111 0 0 0
T107 70654 0 0 0
T108 21070 0 0 0
T113 10237 0 0 0

RptrIncrease_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 443673543 2363 0 0
T48 0 8 0 0
T51 0 4 0 0
T52 0 5 0 0
T53 0 4 0 0
T65 47799 2 0 0
T67 0 3 0 0
T68 0 2 0 0
T83 10139 0 0 0
T84 54948 0 0 0
T86 2118 0 0 0
T87 32192 0 0 0
T102 0 10 0 0
T103 0 2 0 0
T104 0 2 0 0
T105 60913 0 0 0
T106 72111 0 0 0
T107 70654 0 0 0
T108 21070 0 0 0
T113 10237 0 0 0

SramRvalid_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 443673543 2363 0 0
T48 0 8 0 0
T51 0 4 0 0
T52 0 5 0 0
T53 0 4 0 0
T65 47799 2 0 0
T67 0 3 0 0
T68 0 2 0 0
T83 10139 0 0 0
T84 54948 0 0 0
T86 2118 0 0 0
T87 32192 0 0 0
T102 0 10 0 0
T103 0 2 0 0
T104 0 2 0 0
T105 60913 0 0 0
T106 72111 0 0 0
T107 70654 0 0 0
T108 21070 0 0 0
T113 10237 0 0 0

WSramRvalid_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 153142285 153142285 0 0
T4 749 749 0 0
T8 504 504 0 0
T10 1399 1399 0 0
T11 4313 4313 0 0
T13 15838 15838 0 0
T15 17941 17941 0 0
T16 56586 56586 0 0
T17 216 216 0 0
T18 18636 18636 0 0
T19 125490 125490 0 0

WidthMatch_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 976 976 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

WptrGrayOneBitAtATime_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 153142285 2363 0 0
T48 0 8 0 0
T51 0 4 0 0
T52 0 5 0 0
T53 0 4 0 0
T55 10608 0 0 0
T65 96046 2 0 0
T67 0 3 0 0
T68 0 2 0 0
T83 2160 0 0 0
T84 97023 0 0 0
T86 504 0 0 0
T87 14093 0 0 0
T102 0 10 0 0
T103 0 2 0 0
T104 0 2 0 0
T105 19116 0 0 0
T106 34284 0 0 0
T107 8448 0 0 0
T108 8214 0 0 0

WptrIncrease_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 153142285 2363 0 0
T48 0 8 0 0
T51 0 4 0 0
T52 0 5 0 0
T53 0 4 0 0
T55 10608 0 0 0
T65 96046 2 0 0
T67 0 3 0 0
T68 0 2 0 0
T83 2160 0 0 0
T84 97023 0 0 0
T86 504 0 0 0
T87 14093 0 0 0
T102 0 10 0 0
T103 0 2 0 0
T104 0 2 0 0
T105 19116 0 0 0
T106 34284 0 0 0
T107 8448 0 0 0
T108 8214 0 0 0

Line Coverage for Instance : tb.dut.u_upload.u_addrfifo
Line No.TotalCoveredPercent
TOTAL8585100.00
CONT_ASSIGN12111100.00
CONT_ASSIGN12311100.00
ALWAYS12666100.00
CONT_ASSIGN13511100.00
CONT_ASSIGN13611100.00
CONT_ASSIGN13811100.00
CONT_ASSIGN14911100.00
CONT_ASSIGN15011100.00
CONT_ASSIGN15111100.00
CONT_ASSIGN15311100.00
CONT_ASSIGN16311100.00
CONT_ASSIGN16511100.00
ALWAYS16866100.00
CONT_ASSIGN17711100.00
CONT_ASSIGN17811100.00
CONT_ASSIGN18011100.00
CONT_ASSIGN19111100.00
CONT_ASSIGN19211100.00
CONT_ASSIGN19311100.00
CONT_ASSIGN19511100.00
CONT_ASSIGN20111100.00
ALWAYS20444100.00
CONT_ASSIGN21111100.00
CONT_ASSIGN21711100.00
CONT_ASSIGN21811100.00
CONT_ASSIGN21911100.00
CONT_ASSIGN22211100.00
CONT_ASSIGN22411100.00
CONT_ASSIGN22511100.00
CONT_ASSIGN24511100.00
CONT_ASSIGN24711100.00
CONT_ASSIGN24811100.00
CONT_ASSIGN25111100.00
CONT_ASSIGN25211100.00
CONT_ASSIGN25411100.00
CONT_ASSIGN25611100.00
CONT_ASSIGN26011100.00
ALWAYS27044100.00
CONT_ASSIGN29111100.00
CONT_ASSIGN29711100.00
CONT_ASSIGN29911100.00
CONT_ASSIGN30111100.00
CONT_ASSIGN30411100.00
CONT_ASSIGN32111100.00
ALWAYS32499100.00
ROUTINE34777100.00
ROUTINE36899100.00

120 // Begin: Write pointer sync to read clock ======================== 121 1/1 assign w_wptr_inc = wvalid_i & wready_o; Tests: T1 T2 T3  122 123 1/1 assign w_wptr_d = w_wptr_q + PtrW'(1); Tests: T1 T2 T3  124 125 always_ff @(posedge clk_wr_i or negedge rst_wr_ni) begin 126 1/1 if (!rst_wr_ni) begin Tests: T1 T2 T3  127 1/1 w_wptr_q <= PtrW'(0); Tests: T1 T2 T3  128 1/1 w_wptr_gray_q <= PtrW'(0); Tests: T1 T2 T3  129 1/1 end else if (w_wptr_inc) begin Tests: T4 T8 T10  130 1/1 w_wptr_q <= w_wptr_d; Tests: T65 T68 T52  131 1/1 w_wptr_gray_q <= w_wptr_gray_d; Tests: T65 T68 T52  132 end MISSING_ELSE 133 end 134 135 1/1 assign w_wptr_v = w_wptr_q[0+:PtrVW]; Tests: T1 T2 T3  136 1/1 assign w_wptr_p = w_wptr_q[PtrW-1]; Tests: T1 T2 T3  137 138 1/1 assign w_wptr_gray_d = dec2gray(w_wptr_d); Tests: T1 T2 T3  139 140 prim_flop_2sync #( 141 .Width (PtrW) 142 ) u_sync_wptr_gray ( 143 .clk_i (clk_rd_i), 144 .rst_ni (rst_rd_ni), 145 .d_i (w_wptr_gray_q), 146 .q_o (r_wptr_gray) 147 ); 148 149 1/1 assign r_wptr = gray2dec(r_wptr_gray); Tests: T1 T2 T3  150 1/1 assign r_wptr_p = r_wptr[PtrW-1]; Tests: T1 T2 T3  151 1/1 assign r_wptr_v = r_wptr[0+:PtrVW]; Tests: T1 T2 T3  152 153 1/1 assign wdepth_o = (w_wptr_p == w_rptr_p) Tests: T1 T2 T3  154 ? DepthW'(w_wptr_v - w_rptr_v) 155 : DepthW'({1'b1, w_wptr_v} - {1'b 0, w_rptr_v}); 156 // End: Write pointer sync to read clock ------------------------ 157 158 // Begin: Read pointer sync to write clock ======================== 159 //assign r_rptr_inc = rvalid_o & rready_i; 160 //assign r_rptr_inc = r_sram_req_o && r_sram_gnt_i; 161 // Increase the read pointer (crossing the clock domain) only when the 162 // reader acked. 163 1/1 assign r_rptr_inc = rfifo_ack; Tests: T65 T68 T52  164 165 1/1 assign r_rptr_d = r_rptr_q + PtrW'(1); Tests: T1 T2 T3  166 167 always_ff @(posedge clk_rd_i or negedge rst_rd_ni) begin 168 1/1 if (!rst_rd_ni) begin Tests: T1 T2 T3  169 1/1 r_rptr_q <= PtrW'(0); Tests: T1 T2 T3  170 1/1 r_rptr_gray_q <= PtrW'(0); Tests: T1 T2 T3  171 1/1 end else if (r_rptr_inc) begin Tests: T1 T2 T3  172 1/1 r_rptr_q <= r_rptr_d; Tests: T65 T68 T52  173 1/1 r_rptr_gray_q <= r_rptr_gray_d; Tests: T65 T68 T52  174 end MISSING_ELSE 175 end 176 177 1/1 assign r_rptr_v = r_rptr_q[0+:PtrVW]; Tests: T1 T2 T3  178 1/1 assign r_rptr_p = r_rptr_q[PtrW-1]; Tests: T1 T2 T3  179 180 1/1 assign r_rptr_gray_d = dec2gray(r_rptr_d); Tests: T1 T2 T3  181 182 prim_flop_2sync #( 183 .Width (PtrW) 184 ) u_sync_rptr_gray ( 185 .clk_i (clk_wr_i), 186 .rst_ni (rst_wr_ni), 187 .d_i (r_rptr_gray_q), 188 .q_o (w_rptr_gray) 189 ); 190 191 1/1 assign w_rptr = gray2dec(w_rptr_gray); Tests: T1 T2 T3  192 1/1 assign w_rptr_p = w_rptr[PtrW-1]; Tests: T1 T2 T3  193 1/1 assign w_rptr_v = w_rptr[0+:PtrVW]; Tests: T1 T2 T3  194 195 1/1 assign rdepth_o = (r_wptr_p == r_rptr_p) Tests: T1 T2 T3  196 ? DepthW'(r_wptr_v - r_rptr_v) 197 : DepthW'({1'b1, r_wptr_v} - {1'b 0, r_rptr_v}); 198 // End: Read pointer sync to write clock ------------------------ 199 200 // Begin: SRAM Read pointer 201 1/1 assign r_sram_rptr_inc = rsram_ack; Tests: T1 T2 T3  202 203 always_ff @(posedge clk_rd_i or negedge rst_rd_ni) begin 204 1/1 if (!rst_rd_ni) begin Tests: T1 T2 T3  205 1/1 r_sram_rptr <= PtrW'(0); Tests: T1 T2 T3  206 1/1 end else if (r_sram_rptr_inc) begin Tests: T1 T2 T3  207 1/1 r_sram_rptr <= r_sram_rptr + PtrW'(1); Tests: T65 T68 T52  208 end MISSING_ELSE 209 end 210 211 1/1 assign r_sramrptr_empty = (r_wptr == r_sram_rptr); Tests: T1 T2 T3  212 // End: SRAM Read pointer 213 214 // Full/ Empty 215 // Lint complains PtrW'(1) << (PtrW-1). So changed as below 216 localparam logic [PtrW-1:0] XorMask = {1'b 1, {PtrW-1{1'b0}}}; 217 1/1 assign w_full = (w_wptr_q == (w_rptr ^ XorMask)); Tests: T1 T2 T3  218 1/1 assign r_full = (r_wptr == (r_rptr_q ^ XorMask)); Tests: T1 T2 T3  219 1/1 assign r_empty = (r_wptr == r_rptr_q); Tests: T1 T2 T3  220 221 logic unused_r_empty; 222 1/1 assign unused_r_empty = r_empty; Tests: T1 T2 T3  223 224 1/1 assign r_full_o = r_full; Tests: T1 T2 T3  225 1/1 assign w_full_o = w_full; Tests: T1 T2 T3  226 227 // The notempty status !(wptr == rptr) assert one clock earlier than the 228 // actual `rvalid` signals. 229 // 230 // The reason is due to the SRAM read latency. The module uses SRAM FIFO 231 // interface. When the logic in producer domain pushes entries, the pointer 232 // is increased. This triggers the FIFO logic in the consumer clock domain 233 // fetches data from SRAM. 234 // 235 // The pointer crosses the clock boundary. It takes usually two cycles (in 236 // the consumer side). Then, as the read and write pointer in the read clock 237 // domain has a gap by 1, the FIFO not empty status is raised. 238 // 239 // At this time, the logic just sent the read request to the SRAM. The data 240 // is not yet read. The `rvalid` asserts when it receives data from the 241 // SRAM. 242 // 243 // So, if the consumer reads data at the same cycle when notempty status is 244 // raised, it reads incorrect data. 245 1/1 assign r_notempty_o = rvalid_o; Tests: T1 T2 T3  246 247 1/1 assign rsram_ack = r_sram_req_o && r_sram_gnt_i; Tests: T1 T2 T3  248 1/1 assign rfifo_ack = rvalid_o && rready_i; Tests: T1 T2 T3  249 250 // SRAM Write Request 251 1/1 assign w_sram_req_o = wvalid_i && !w_full; Tests: T1 T2 T3  252 1/1 assign wready_o = !w_full && w_sram_gnt_i; Tests: T1 T2 T3  253 assign w_sram_write_o = 1'b 1; // Always write 254 1/1 assign w_sram_addr_o = SramBaseAddr + SramAw'(w_wptr_v); Tests: T1 T2 T3  255 256 1/1 assign w_sram_wdata_o = SramDw'(wdata_i); Tests: T1 T2 T3  257 assign w_sram_wmask_o = SramDw'({Width{1'b1}}); 258 259 logic unused_w_sram; 260 1/1 assign unused_w_sram = ^{w_sram_rvalid_i, w_sram_rdata_i, w_sram_rerror_i}; Tests: T1 T2 T3  261 262 // SRAM Read Request 263 // Request Scenario (!r_empty): 264 // - storage empty: Send request if 265 // !r_sram_rvalid_i || (rfifo_ack && r_sram_rvalid_i); 266 // - storage !empty: depends on the rfifo_ack: 267 // - r_rptr_inc: Can request more 268 // - !r_rptr_inc: Can't request 269 always_comb begin : r_sram_req 270 1/1 r_sram_req_o = 1'b 0; Tests: T1 T2 T3  271 // Karnough Map (!empty): sram_req 272 // {sram_rv, rfifo_ack} | 00 | 01 | 11 | 10 273 // ---------------------------------------------------------- 274 // stored | 0 | 1 | impossible | 1 | 0 275 // | 1 | 0 | 1 | X | impossible 276 // 277 // req_o = r_ptr_inc || (!stored && !r_sram_rvalid_i) 278 279 1/1 if (stored) begin Tests: T1 T2 T3  280 // storage has data. depends on rfifo_ack 281 // rfifo_ack can be replaced to rready_i as `rvalid_o` is 1 282 1/1 r_sram_req_o = !r_sramrptr_empty && rfifo_ack; Tests: T65 T68 T52  283 end else begin 284 // storage has no data. 285 // Can send request only when the reader accept the request or no 286 // previous request sent out. 287 1/1 r_sram_req_o = !r_sramrptr_empty && !(r_sram_rvalid_i ^ rfifo_ack); Tests: T1 T2 T3  288 end 289 end : r_sram_req 290 291 1/1 assign rvalid_o = stored || r_sram_rvalid_i; Tests: T1 T2 T3  292 assign r_sram_write_o = 1'b 0; // always read 293 assign r_sram_wdata_o = '0; 294 assign r_sram_wmask_o = '0; 295 296 // Send SRAM request with sram read pointer. 297 1/1 assign r_sram_addr_o = SramBaseAddr + SramAw'(r_sram_rptr[0+:PtrVW]); Tests: T1 T2 T3  298 299 1/1 assign rdata_d = (r_sram_rvalid_i) ? r_sram_rdata_i[0+:Width] : Width'(0); Tests: T1 T2 T3  300 301 1/1 assign rdata_o = (stored) ? rdata_q : rdata_d; Tests: T1 T2 T3  302 303 logic unused_rsram; 304 1/1 assign unused_rsram = ^{r_sram_rerror_i}; Tests: T1 T2 T3  305 306 if (Width < SramDw) begin : g_unused_rdata 307 logic unused_rdata; 308 assign unused_rdata = ^r_sram_rdata_i[SramDw-1:Width]; 309 end : g_unused_rdata 310 311 // read clock domain rdata storage 312 logic store_en; 313 314 // Karnough Map (r_sram_rvalid_i): 315 // rfifo_ack | 0 | 1 | 316 // --------------------- 317 // stored 0 | 1 | 0 | 318 // 1 | 0 | 1 | 319 // 320 // stored = s.r.v && XNOR(stored, rptr_inc) 321 1/1 assign store_en = r_sram_rvalid_i && !(stored ^ rfifo_ack); Tests: T1 T2 T3  322 323 always_ff @(posedge clk_rd_i or negedge rst_rd_ni) begin 324 1/1 if (!rst_rd_ni) begin Tests: T1 T2 T3  325 1/1 stored <= 1'b 0; Tests: T1 T2 T3  326 1/1 rdata_q <= Width'(0); Tests: T1 T2 T3  327 1/1 end else if (store_en) begin Tests: T1 T2 T3  328 1/1 stored <= 1'b 1; Tests: T65 T68 T52  329 1/1 rdata_q <= rdata_d; Tests: T65 T68 T52  330 1/1 end else if (!r_sram_rvalid_i && rfifo_ack) begin Tests: T1 T2 T3  331 // No request sent, host reads the data 332 1/1 stored <= 1'b 0; Tests: T65 T68 T52  333 1/1 rdata_q <= Width'(0); Tests: T65 T68 T52  334 end MISSING_ELSE 335 end 336 337 ////////////// 338 // Function // 339 ////////////// 340 341 // dec2gray / gray2dec copied from prim_fifo_async.sv 342 function automatic [PtrW-1:0] dec2gray(input logic [PtrW-1:0] decval); 343 logic [PtrW-1:0] decval_sub; 344 logic [PtrW-1:0] decval_in; 345 logic unused_decval_msb; 346 347 1/1 decval_sub = (PtrW)'(Depth) - {1'b0, decval[PtrW-2:0]} - 1'b1; Tests: T1 T2 T3  348 349 1/1 decval_in = decval[PtrW-1] ? decval_sub : decval; Tests: T1 T2 T3  350 351 // We do not care about the MSB, hence we mask it out 352 1/1 unused_decval_msb = decval_in[PtrW-1]; Tests: T1 T2 T3  353 1/1 decval_in[PtrW-1] = 1'b0; Tests: T1 T2 T3  354 355 // Perform the XOR conversion 356 1/1 dec2gray = decval_in; Tests: T1 T2 T3  357 1/1 dec2gray ^= (decval_in >> 1); Tests: T1 T2 T3  358 359 // Override the MSB 360 1/1 dec2gray[PtrW-1] = decval[PtrW-1]; Tests: T1 T2 T3  361 endfunction 362 363 // Algorithm walks up from 0..N-1 then flips the upper bit and walks down from N-1 to 0. 364 function automatic [PtrW-1:0] gray2dec(input logic [PtrW-1:0] grayval); 365 logic [PtrW-1:0] dec_tmp, dec_tmp_sub; 366 logic unused_decsub_msb; 367 368 1/1 dec_tmp = '0; Tests: T1 T2 T3  369 1/1 for (int i = PtrW-2; i >= 0; i--) begin Tests: T1 T2 T3  370 1/1 dec_tmp[i] = dec_tmp[i+1] ^ grayval[i]; Tests: T1 T2 T3  371 end 372 1/1 dec_tmp_sub = (PtrW)'(Depth) - dec_tmp - 1'b1; Tests: T1 T2 T3  373 1/1 if (grayval[PtrW-1]) begin Tests: T1 T2 T3  374 1/1 gray2dec = dec_tmp_sub; Tests: T35 T116 T117  375 // Override MSB 376 1/1 gray2dec[PtrW-1] = 1'b1; Tests: T35 T116 T117  377 1/1 unused_decsub_msb = dec_tmp_sub[PtrW-1]; Tests: T35 T116 T117  378 end else begin 379 1/1 gray2dec = dec_tmp; Tests: T1 T2 T3 

Cond Coverage for Instance : tb.dut.u_upload.u_addrfifo
TotalCoveredPercent
Conditions685175.00
Logical685175.00
Non-Logical00
Event00

 LINE       121
 EXPRESSION (wvalid_i & wready_o)
             ----1---   ----2---
-1--2-StatusTests
01Not Covered
10Not Covered
11CoveredT65,T68,T52

 LINE       153
 EXPRESSION ((w_wptr_p == w_rptr_p) ? (5'((w_wptr_v - w_rptr_v))) : (5'(({1'b1, w_wptr_v} - {1'b0, w_rptr_v}))))
             -----------1----------
-1-StatusTests
0CoveredT35,T116,T117
1CoveredT1,T2,T3

 LINE       153
 SUB-EXPRESSION (w_wptr_p == w_rptr_p)
                -----------1----------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       195
 EXPRESSION ((r_wptr_p == r_rptr_p) ? (5'((r_wptr_v - r_rptr_v))) : (5'(({1'b1, r_wptr_v} - {1'b0, r_rptr_v}))))
             -----------1----------
-1-StatusTests
0CoveredT35,T116,T117
1CoveredT1,T2,T3

 LINE       195
 SUB-EXPRESSION (r_wptr_p == r_rptr_p)
                -----------1----------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       211
 EXPRESSION (r_wptr == r_sram_rptr)
            -----------1-----------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       217
 EXPRESSION (w_wptr_q == (w_rptr ^ XorMask))
            ----------------1---------------
-1-StatusTests
0CoveredT1,T2,T3
1Not Covered

 LINE       218
 EXPRESSION (r_wptr == (r_rptr_q ^ XorMask))
            ----------------1---------------
-1-StatusTests
0CoveredT1,T2,T3
1Not Covered

 LINE       219
 EXPRESSION (r_wptr == r_rptr_q)
            ----------1---------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT1,T2,T3

 LINE       247
 EXPRESSION (r_sram_req_o && r_sram_gnt_i)
             ------1-----    ------2-----
-1--2-StatusTests
01Not Covered
10Not Covered
11CoveredT65,T68,T52

 LINE       248
 EXPRESSION (rvalid_o && rready_i)
             ----1---    ----2---
-1--2-StatusTests
01Not Covered
10CoveredT65,T68,T52
11CoveredT65,T68,T52

 LINE       251
 EXPRESSION (wvalid_i && ((!w_full)))
             ----1---    -----2-----
-1--2-StatusTests
01CoveredT1,T2,T3
10Not Covered
11CoveredT65,T68,T52

 LINE       252
 EXPRESSION (((!w_full)) && w_sram_gnt_i)
             -----1-----    ------2-----
-1--2-StatusTests
01Not Covered
10CoveredT1,T2,T3
11CoveredT65,T68,T52

 LINE       282
 EXPRESSION (((!r_sramrptr_empty)) && rfifo_ack)
             ----------1----------    ----2----
-1--2-StatusTests
01CoveredT65,T68,T52
10Not Covered
11Not Covered

 LINE       287
 EXPRESSION (((!r_sramrptr_empty)) && ( ! (r_sram_rvalid_i ^ rfifo_ack) ))
             ----------1----------    -----------------2-----------------
-1--2-StatusTests
01CoveredT1,T2,T3
10Not Covered
11CoveredT65,T68,T52

 LINE       287
 SUB-EXPRESSION ( ! (r_sram_rvalid_i ^ rfifo_ack) )
                    --------------1--------------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT65,T68,T52

 LINE       287
 SUB-EXPRESSION (r_sram_rvalid_i ^ rfifo_ack)
                 -------1-------   ----2----
-1--2-StatusTests
00CoveredT1,T2,T3
01Not Covered
10CoveredT65,T68,T52
11Not Covered

 LINE       291
 EXPRESSION (stored || r_sram_rvalid_i)
             ---1--    -------2-------
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT65,T68,T52
10CoveredT65,T68,T52

 LINE       299
 EXPRESSION (r_sram_rvalid_i ? r_sram_rdata_i[0+:Width] : (32'(0)))
             -------1-------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT65,T68,T52

 LINE       301
 EXPRESSION (stored ? rdata_q : rdata_d)
             ---1--
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT65,T68,T52

 LINE       321
 EXPRESSION (r_sram_rvalid_i && ( ! (stored ^ rfifo_ack) ))
             -------1-------    -------------2------------
-1--2-StatusTests
01CoveredT1,T2,T3
10Not Covered
11CoveredT65,T68,T52

 LINE       321
 SUB-EXPRESSION ( ! (stored ^ rfifo_ack) )
                    ----------1---------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT65,T68,T52

 LINE       321
 SUB-EXPRESSION (stored ^ rfifo_ack)
                 ---1--   ----2----
-1--2-StatusTests
00CoveredT1,T2,T3
01Not Covered
10CoveredT65,T68,T52
11CoveredT65,T68,T52

 LINE       330
 EXPRESSION (((!r_sram_rvalid_i)) && rfifo_ack)
             ----------1---------    ----2----
-1--2-StatusTests
01Not Covered
10CoveredT1,T2,T3
11CoveredT65,T68,T52

 LINE       349
 EXPRESSION (decval[(PtrW - 1)] ? decval_sub : decval)
             ---------1--------
-1-StatusTests
0CoveredT1,T2,T3
1CoveredT35,T116,T117

 LINE       370
 EXPRESSION (dec_tmp[(i + 1)] ^ grayval[i])
             --------1-------   -----2----
-1--2-StatusTests
00CoveredT1,T2,T3
01CoveredT65,T68,T52
10CoveredT52,T67,T53
11CoveredT65,T68,T52

Branch Coverage for Instance : tb.dut.u_upload.u_addrfifo
Line No.TotalCoveredPercent
Branches 27 27 100.00
TERNARY 153 2 2 100.00
TERNARY 195 2 2 100.00
TERNARY 299 2 2 100.00
TERNARY 301 2 2 100.00
IF 126 3 3 100.00
IF 168 3 3 100.00
IF 204 3 3 100.00
IF 279 2 2 100.00
IF 324 4 4 100.00
TERNARY 349 2 2 100.00
IF 373 2 2 100.00


153 assign wdepth_o = (w_wptr_p == w_rptr_p) 154 ? DepthW'(w_wptr_v - w_rptr_v) -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T1,T2,T3
0 Covered T35,T116,T117


195 assign rdepth_o = (r_wptr_p == r_rptr_p) 196 ? DepthW'(r_wptr_v - r_rptr_v) -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T1,T2,T3
0 Covered T35,T116,T117


299 assign rdata_d = (r_sram_rvalid_i) ? r_sram_rdata_i[0+:Width] : Width'(0); -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T65,T68,T52
0 Covered T1,T2,T3


301 assign rdata_o = (stored) ? rdata_q : rdata_d; -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T65,T68,T52
0 Covered T1,T2,T3


126 if (!rst_wr_ni) begin -1- 127 w_wptr_q <= PtrW'(0); ==> 128 w_wptr_gray_q <= PtrW'(0); 129 end else if (w_wptr_inc) begin -2- 130 w_wptr_q <= w_wptr_d; ==> 131 w_wptr_gray_q <= w_wptr_gray_d; 132 end MISSING_ELSE ==>

Branches:
-1--2-StatusTests
1 - Covered T1,T2,T3
0 1 Covered T65,T68,T52
0 0 Covered T4,T8,T10


168 if (!rst_rd_ni) begin -1- 169 r_rptr_q <= PtrW'(0); ==> 170 r_rptr_gray_q <= PtrW'(0); 171 end else if (r_rptr_inc) begin -2- 172 r_rptr_q <= r_rptr_d; ==> 173 r_rptr_gray_q <= r_rptr_gray_d; 174 end MISSING_ELSE ==>

Branches:
-1--2-StatusTests
1 - Covered T1,T2,T3
0 1 Covered T65,T68,T52
0 0 Covered T1,T2,T3


204 if (!rst_rd_ni) begin -1- 205 r_sram_rptr <= PtrW'(0); ==> 206 end else if (r_sram_rptr_inc) begin -2- 207 r_sram_rptr <= r_sram_rptr + PtrW'(1); ==> 208 end MISSING_ELSE ==>

Branches:
-1--2-StatusTests
1 - Covered T1,T2,T3
0 1 Covered T65,T68,T52
0 0 Covered T1,T2,T3


279 if (stored) begin -1- 280 // storage has data. depends on rfifo_ack 281 // rfifo_ack can be replaced to rready_i as `rvalid_o` is 1 282 r_sram_req_o = !r_sramrptr_empty && rfifo_ack; ==> 283 end else begin 284 // storage has no data. 285 // Can send request only when the reader accept the request or no 286 // previous request sent out. 287 r_sram_req_o = !r_sramrptr_empty && !(r_sram_rvalid_i ^ rfifo_ack); ==>

Branches:
-1-StatusTests
1 Covered T65,T68,T52
0 Covered T1,T2,T3


324 if (!rst_rd_ni) begin -1- 325 stored <= 1'b 0; ==> 326 rdata_q <= Width'(0); 327 end else if (store_en) begin -2- 328 stored <= 1'b 1; ==> 329 rdata_q <= rdata_d; 330 end else if (!r_sram_rvalid_i && rfifo_ack) begin -3- 331 // No request sent, host reads the data 332 stored <= 1'b 0; ==> 333 rdata_q <= Width'(0); 334 end MISSING_ELSE ==>

Branches:
-1--2--3-StatusTests
1 - - Covered T1,T2,T3
0 1 - Covered T65,T68,T52
0 0 1 Covered T65,T68,T52
0 0 0 Covered T1,T2,T3


349 decval_in = decval[PtrW-1] ? decval_sub : decval; -1- ==> ==>

Branches:
-1-StatusTests
1 Covered T35,T116,T117
0 Covered T1,T2,T3


373 if (grayval[PtrW-1]) begin -1- 374 gray2dec = dec_tmp_sub; ==> 375 // Override MSB 376 gray2dec[PtrW-1] = 1'b1; 377 unused_decsub_msb = dec_tmp_sub[PtrW-1]; 378 end else begin 379 gray2dec = dec_tmp; ==>

Branches:
-1-StatusTests
1 Covered T35,T116,T117
0 Covered T1,T2,T3


Assert Coverage for Instance : tb.dut.u_upload.u_addrfifo
TotalAttemptedPercentSucceeded/MatchedPercent
Assertions 13 13 100.00 13 100.00
Cover properties 0 0 0
Cover sequences 0 0 0
Total 13 13 100.00 13 100.00




Assertion Details

NameAttemptsReal SuccessesFailuresIncomplete
MinDepth_A 976 976 0 0
NoRAckInEmpty_A 443673543 1826 0 0
NoWAckInFull_A 153142285 1826 0 0
ParamCheckDepth_A 976 976 0 0
RSramRvalidOneCycle_M 443673543 1826 0 0
RptrGrayOneBitAtATime_A 443673543 1826 0 0
RptrIncDataValid_A 443673543 1826 0 0
RptrIncrease_A 443673543 1826 0 0
SramRvalid_A 443673543 1826 0 0
WSramRvalid_A 153142285 153142285 0 0
WidthMatch_A 976 976 0 0
WptrGrayOneBitAtATime_A 153142285 1826 0 0
WptrIncrease_A 153142285 1826 0 0


MinDepth_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 976 976 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

NoRAckInEmpty_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 443673543 1826 0 0
T48 0 8 0 0
T52 0 5 0 0
T53 0 4 0 0
T65 47799 2 0 0
T67 0 3 0 0
T68 0 2 0 0
T83 10139 0 0 0
T84 54948 0 0 0
T86 2118 0 0 0
T87 32192 0 0 0
T102 0 7 0 0
T105 60913 0 0 0
T106 72111 0 0 0
T107 70654 0 0 0
T108 21070 0 0 0
T109 0 12 0 0
T113 10237 0 0 0
T114 0 4 0 0
T115 0 4 0 0

NoWAckInFull_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 153142285 1826 0 0
T48 0 8 0 0
T52 0 5 0 0
T53 0 4 0 0
T55 10608 0 0 0
T65 96046 2 0 0
T67 0 3 0 0
T68 0 2 0 0
T83 2160 0 0 0
T84 97023 0 0 0
T86 504 0 0 0
T87 14093 0 0 0
T102 0 7 0 0
T105 19116 0 0 0
T106 34284 0 0 0
T107 8448 0 0 0
T108 8214 0 0 0
T109 0 12 0 0
T114 0 4 0 0
T115 0 4 0 0

ParamCheckDepth_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 976 976 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

RSramRvalidOneCycle_M
NameAttemptsReal SuccessesFailuresIncomplete
Total 443673543 1826 0 0
T48 0 8 0 0
T52 0 5 0 0
T53 0 4 0 0
T65 47799 2 0 0
T67 0 3 0 0
T68 0 2 0 0
T83 10139 0 0 0
T84 54948 0 0 0
T86 2118 0 0 0
T87 32192 0 0 0
T102 0 7 0 0
T105 60913 0 0 0
T106 72111 0 0 0
T107 70654 0 0 0
T108 21070 0 0 0
T109 0 12 0 0
T113 10237 0 0 0
T114 0 4 0 0
T115 0 4 0 0

RptrGrayOneBitAtATime_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 443673543 1826 0 0
T48 0 8 0 0
T52 0 5 0 0
T53 0 4 0 0
T65 47799 2 0 0
T67 0 3 0 0
T68 0 2 0 0
T83 10139 0 0 0
T84 54948 0 0 0
T86 2118 0 0 0
T87 32192 0 0 0
T102 0 7 0 0
T105 60913 0 0 0
T106 72111 0 0 0
T107 70654 0 0 0
T108 21070 0 0 0
T109 0 12 0 0
T113 10237 0 0 0
T114 0 4 0 0
T115 0 4 0 0

RptrIncDataValid_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 443673543 1826 0 0
T48 0 8 0 0
T52 0 5 0 0
T53 0 4 0 0
T65 47799 2 0 0
T67 0 3 0 0
T68 0 2 0 0
T83 10139 0 0 0
T84 54948 0 0 0
T86 2118 0 0 0
T87 32192 0 0 0
T102 0 7 0 0
T105 60913 0 0 0
T106 72111 0 0 0
T107 70654 0 0 0
T108 21070 0 0 0
T109 0 12 0 0
T113 10237 0 0 0
T114 0 4 0 0
T115 0 4 0 0

RptrIncrease_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 443673543 1826 0 0
T48 0 8 0 0
T52 0 5 0 0
T53 0 4 0 0
T65 47799 2 0 0
T67 0 3 0 0
T68 0 2 0 0
T83 10139 0 0 0
T84 54948 0 0 0
T86 2118 0 0 0
T87 32192 0 0 0
T102 0 7 0 0
T105 60913 0 0 0
T106 72111 0 0 0
T107 70654 0 0 0
T108 21070 0 0 0
T109 0 12 0 0
T113 10237 0 0 0
T114 0 4 0 0
T115 0 4 0 0

SramRvalid_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 443673543 1826 0 0
T48 0 8 0 0
T52 0 5 0 0
T53 0 4 0 0
T65 47799 2 0 0
T67 0 3 0 0
T68 0 2 0 0
T83 10139 0 0 0
T84 54948 0 0 0
T86 2118 0 0 0
T87 32192 0 0 0
T102 0 7 0 0
T105 60913 0 0 0
T106 72111 0 0 0
T107 70654 0 0 0
T108 21070 0 0 0
T109 0 12 0 0
T113 10237 0 0 0
T114 0 4 0 0
T115 0 4 0 0

WSramRvalid_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 153142285 153142285 0 0
T4 749 749 0 0
T8 504 504 0 0
T10 1399 1399 0 0
T11 4313 4313 0 0
T13 15838 15838 0 0
T15 17941 17941 0 0
T16 56586 56586 0 0
T17 216 216 0 0
T18 18636 18636 0 0
T19 125490 125490 0 0

WidthMatch_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 976 976 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

WptrGrayOneBitAtATime_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 153142285 1826 0 0
T48 0 8 0 0
T52 0 5 0 0
T53 0 4 0 0
T55 10608 0 0 0
T65 96046 2 0 0
T67 0 3 0 0
T68 0 2 0 0
T83 2160 0 0 0
T84 97023 0 0 0
T86 504 0 0 0
T87 14093 0 0 0
T102 0 7 0 0
T105 19116 0 0 0
T106 34284 0 0 0
T107 8448 0 0 0
T108 8214 0 0 0
T109 0 12 0 0
T114 0 4 0 0
T115 0 4 0 0

WptrIncrease_A
NameAttemptsReal SuccessesFailuresIncomplete
Total 153142285 1826 0 0
T48 0 8 0 0
T52 0 5 0 0
T53 0 4 0 0
T55 10608 0 0 0
T65 96046 2 0 0
T67 0 3 0 0
T68 0 2 0 0
T83 2160 0 0 0
T84 97023 0 0 0
T86 504 0 0 0
T87 14093 0 0 0
T102 0 7 0 0
T105 19116 0 0 0
T106 34284 0 0 0
T107 8448 0 0 0
T108 8214 0 0 0
T109 0 12 0 0
T114 0 4 0 0
T115 0 4 0 0

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