The transmitter packet buffer continues to attempt to fetch frame data from the AXI system memory until the packet buffer itself is full, it then attempts to maintain the full level.
To accommodate the status and statistics associated with each frame, three words per packet are reserved at the end of the packet data. If the packet was bad and it should be dropped, the status and statistics are the only information held on that packet. Storing the status in the DPRAM is required to decouple the DMA interface of the buffer from the MAC interface, to update the MAC status/statistics, and to generate interrupts that are in the order that the packets they represent were fetched from the AXI memory.
If any errors occur on the AXI while reading the transmit frame, the fetching of packet data from AXI memory is halted. The MAC transmitter continues to fetch packet data, thereby emptying the packet buffer, and allowing any good non-errored frames to be transmitted successfully. When these are fully transmitted, the status/statistics for the errored frame is updated and software is informed through an interrupt that an AXI error occurred. The error is reported in the correct packet order.
The transmit packet buffer only attempts to read more frame data from the AXI when space is available in the packet buffer memory. If space is not available, it must wait until the packet fetched by the MAC completes transmission and is subsequently removed from the packet buffer memory.
When full store and forward mode is active, and a single frame is fetched that is too large for the packet buffer memory, the frame is flushed and the DMA is halted with an error status. A complete frame must be written into the packet buffer before transmission can begin, and therefore the minimum packet buffer memory size should be chosen to satisfy the maximum frame to be transmitted in the application.
When the complete transmit frame is written into the packet buffer memory, a trigger is sent across to the MAC transmitter, which then begins reading the frame from the packet buffer memory. Because the whole frame is present and stable in the packet buffer memory, an underflow of the transmitter is not possible.
In half-duplex mode, the frame is kept in the packet buffer until notification is received from the MAC that the frame data has either been successfully transmitted or can no longer be re-transmitted (too many retries in half-duplex mode). When this notification is received, the frame is flushed from memory to make room for a new frame to be fetched from AXI system memory.
In full-duplex mode, the frame is removed from the packet buffer in real time.
Other than underflow, the only MAC related errors that can occur are due to collisions during half-duplex transmissions. When a collision occurs, the frame still exists in the packet buffer memory, and can be retried directly from there. Only when the MAC transmitter has failed to transmit after sixteen attempts is the frame finally flushed from the packet buffer.