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.
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.