LUT Register Mode

When FIFO implementation is configured to the LUT register, the synthesis tool implements the memory array using registers clocked by the wr_clk_i. This architecture creates a direct physical path from the storage registers in the write domain to the data output registers in the read domain.

While static timing analysis (STA) tools identify this as a timing violation, it is architecturally safe to ignore. The FIFO’s internal pointer logic strictly prevents the read address from matching the write address, unless the FIFO is empty, guaranteeing that the data at the read address is stable before it is sampled. Therefore, you should apply a set_false_path constraint from the RAM registers to the read data output registers to suppress these violations.

The recommended constraint is:
  • Output Register = Disable
    set_false_path -from [get_cells 
    <fifo_instance_name>/xefx_fifo_ram/ram*] -to [get_cells rdata*]
  • Output Register = Enable
    set_false_path -from [get_cells 
    <fifo_instance_name>/xefx_fifo_ram/ram*] -to [get_cells 
    <fifo_instance_name>/xefx_fifo_ram/r_rdata_1P*]