The timing of a normal frame transfer is
shown in the following figure. When the client wants to transmit a frame, it asserts tx_axis_tvalid and places the data and control in tx_axis_tdata and tx_axis_tkeep in
the same clock cycle. When this data is accepted by the core, indicated by tx_axis_tready being asserted, the client must provide the next
cycle of data. If tx_axis_tready is not asserted by the
core, the client must hold the current valid data value until it is. The end of the packet
is in dictated to the core by tx_axis_tlast asserted for one
cycle. The bits of tx_axis_tkeep are set appropriately to
indicate the number of valid bytes in the final data transfer. tx_axis_tuser is also asserted to indicate a bad packet.
After tx_axis_tlast is deasserted, any
data and control is deemed invalid until tx_axis_tvalid is next
asserted.