Asynchronous FIFO

When wr_clk_i and rd_clk_i are asynchronous, the standard CDC handling is required. The write and read pointers are transferred across clock domains using Gray code encoding and synchronizers.

When the same clock is used for both wr_clk_i and rd_clk_i, the FIFO operates synchronously. However, the internal pointer synchronization logic remains structurally asynchronous. As a result, STA may report timing violations on the Gray code pointer paths to the synchronizer flop if not constrained properly. In this case, it is safe to apply set_false_path constraints on the Gray code pointer paths from the source pointer registers to the synchronizer flops input.

The recommended constraint is:
set_false_path -from [get_cells 
<fifo_instance_name>/xefx_fifo_ctl/async_clk.waddr_cntr_gry_r*] -to [get_cells 
<fifo_instance_name>/xefx_fifo_ctl/async_clk.wr2rd_addr_sync/async_reg[0]*]
set_false_path -from [get_cells 
<fifo_instance_name>/xefx_fifo_ctl/async_clk.raddr_cntr_gry_r*] -to [get_cells 
<fifo_instance_name>/xefx_fifo_ctl/async_clk.xrd2wr_addr_sync/async_reg[0]*]