Handshaking Flags - 1.0 English

Embedded FIFO Generator LogiCORE IP Product Guide (PG327)

Document ID
PG327
Release Date
2023-05-10
Version
1.0 English

Handshaking flags (data_valid, underflow, wr_ack and overflow) are supported to provide additional information regarding the status of the write and read operations. The handshaking flags are optional, and can be configured as active-High or active-Low through the Vivado IDE. These flags (configured as active-High) are illustrated in Handshaking Signals for a FIFO with Independent Clocks figure.

Write Acknowledge

The write acknowledge flag (wr_ack) is asserted at the completion of each successful write operation and indicates that the data on the din port has been stored in the FIFO. This flag is synchronous to the write clock (wr_clk).

Data Valid

The operation of the valid flag (data_valid) is dependent on the read mode of the FIFO. This flag is synchronous to the read clock (rd_clk).

Example Operation

The following figure illustrates the behavior of the FIFO flags. On the write interface, full is not asserted and writes to the FIFO are successful (as indicated by the assertion of wr_ack). When a write occurs after full is asserted, wr_ack is deasserted and overflow is asserted, indicating an overflow condition. On the read interface, after the FIFO is not empty, the FIFO accepts read requests. In standard FIFO operation, data_valid is asserted and dout is updated on the clock cycle following the read request. In FWFT operation, data_valid is asserted and dout is updated prior to a read request being issued. When a read request is issued while empty is asserted, data_valid is deasserted and underflow is asserted, indicating an underflow condition.

Figure 1. Write Interface
Figure 2. Standard Read Interface
Figure 3. FWFT Read Interface

Underflow

The underflow flag (underflow) is used to indicate that a read operation is unsuccessful. This occurs when a read is initiated and the FIFO is empty. This flag is synchronous with the read clock (rd_clk). Underflowing the FIFO does not change the state of the FIFO (it is non-destructive).

Overflow

The overflow flag (overflow) is used to indicate that a write operation is unsuccessful. This flag is asserted when a write is initiated to the FIFO while full is asserted. The overflow flag is synchronous to the write clock (wr_clk). Overflowing the FIFO does not change the state of the FIFO (it is non-destructive).

Example Operation

The following figure illustrates the Handshaking flags. On the write interface, full is deasserted and therefore writes to the FIFO are successful (indicated by the assertion of wr_ack). When a write occurs after full is asserted, wr_ack is deasserted and overflow is asserted, indicating an overflow condition. On the read interface, after the FIFO is not empty, the FIFO accepts read requests. Following a read request, VALID is asserted and dout is updated. When a read request is issued while empty is asserted, VALID underflow is asserted, indicating an underflow condition.

Figure 4. Write Interface
Figure 5. Read Interface