User manual

Table Of Contents
Zynq-7000 AP SoC Technical Reference Manual www.xilinx.com 514
UG585 (v1.11) September 27, 2016
Chapter 16: Gigabit Ethernet Controller
16.3.8 Transmitting Frames
Example: Transmitting a Frame
1. Allocate buffers in system memory to contain the Ethernet frame. GigE supports
scatter-gather functionality; hence an Ethernet frame can be split into multiple buffers with each
buffer processed by a buffer descriptor.
2. Write the Ethernet frame data in the allocated buffers. These Ethernet frames should have
their header fields such as destination MAC address, source MAC address and type/length field
set appropriately.
Notes:
°
The FCS field is added by the MAC in most cases. However if there is a need to append a
custom FCS, bit 16 in word 1 of the corresponding buffer descriptor must be set.
°
The buffer that contains the Ethernet frame data should be flushed from cache if cached
memory is being used.
3. Allocate buffer descriptor(s) for the Ethernet frame buffers. This involves setting bits 0-31 in
the buffer descriptor word 0 with the address of the buffer and setting bits 0-13 in word 1 with
the length of the buffer to be transmitted.
Notes:
°
For single buffer Ethernet frames, bit 15 (Last buffer bit) of the word 1 must also be set.
°
For Ethernet frames scattered across multiple buffers the buffer descriptors must be
allocated serially and the buffer descriptor containing the last buffer should have the bit 15
of word 1 set.
Example: For an Ethernet frame of 1,000 bytes split across two buffers with the first buffer
containing the Ethernet header (14 bytes) and the next buffer containing the remaining 986
bytes, the buffer descriptor with index N should be allocated for the first buffer and the buffer
descriptor with index N+1 should be allocated for the second buffer. Bit 15 of word 1 of the N+1
buffer descriptor must also be set to mark it as the last buffer in the scattered list of Ethernet
frames.
4. Clear the used bit (bit 31) in the word 1 of the allocated buffer descriptors.
5. Enable transmission. Write a 1 to gem.net_ctrl[start_tx].
6. Wait until the transmission is complete. An interrupt is generated by the controller upon
successful completion of the transmission. Read and clear the gem.intr_status[tx_complete] bit
by writing a 1 to the bit In the interrupt handler. Also read and clear the gem.tx_status register by
writing a 1 to gem.tx_status[tx_complete] bit. Clear all bits in the BD except the used and wrap
bits.
16.3.9 Receiving Frames
When a frame is received with the receive circuits enabled, the controller checks the address and the
frame is written to system memory in the following cases:
The destination address matches one of the four specific address registers. This is applicable for
cases where the MAC address for the controller is set in thr gem.spec_addr{1:4}_bot and
gem.spec_addr{1:4}_top registers.