pg046-aurora-8b10b-en-us-11.1
pg046-aurora-8b10b-en-us-11.1
Chapter 1: Overview
Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Licensing and Ordering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Appendix B: Upgrading
Device Migration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Upgrading in the Vivado Design Suite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Migrating Local Link-based Aurora Cores to the AXI4-Stream Aurora Core . . . . . . . . . . . . . . . . . . 91
Appendix C: Debugging
Finding Help with AMD Adaptive Computing Solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Technical Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Debug Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Simulation Debug. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Next Step . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Hardware Debug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
AXI4-Stream Interface Debug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Introduction
LogiCORE IP Facts Table
The AMD LogiCORE™ IP Aurora 8B/10B core
Core Specifics
supports the AMBA® protocol AXI4-Stream
Supported AMD UltraScale+™(2), AMD UltraScale™(2),
user interface. The core implements the Aurora Device AMD Zynq™ 7000,
8B/10B protocol using the high-speed serial Family(1) AMD 7 Series(3)
transceivers on AMD Zynq™ 7000 SoC, AMD Supported
AXI4-Stream
Artix™ 7, AMD Kintex™ 7 and AMD Virtex™ 7 User Interfaces
families, AMD UltraScale™ and AMD Resources Performance and Resource Utilization web page
UltraScale+ ™ families. Provided with Core
• General-purpose data channels with throughput Test Bench Verilog and VHDL(4)
range from 480 Mbps to 84.48 Gbps Constraints
Xilinx Design Constraints (XDC)
• Supports up to 16 consecutively bonded 7 File
series GTX/GTH, UltraScale™ GTH or UltraScale+ Simulation Source HDL with SecureIP transceiver simulation
GTH transceivers and up to four bonded GTP Model models
transceivers
Supported
• Aurora 8B/10B protocol specification v2.3 S/W Driver
N/A
compliant
Tested Design Flows(5)
• Low resource cost (see Resource Utilization)
Design Entry AMD Vivado™ Design Suite
• Easy-to-use AXI4-Stream based framing (or
streaming) and flow control interfaces For supported simulators, see the
Simulation Vivado Design Suite User Guide: Release Notes,
• Automatically initializes and maintains the Installation, and Licensing.
channel
Synthesis Vivado Synthesis
• Full-duplex or simplex operation
Support
• 16-bit additive scrambler/descrambler
Release Notes
• 16-bit or 32-bit Cyclic Redundancy Check (CRC) and Known Master Answer Record: 54367
for user data Issues
Overview
This guide describes how to generate an AMD LogiCORE™ IP Aurora 8B/10B core using
AMD UltraScale™ and UltraScale+™ family GTH transceivers, AMD Kintex™ 7, Virtex™ 7
FPGA GTX and GTH transceivers, AMD Artix™ 7 FPGA GTP transceivers, and AMD Zynq™
7000 device GTX and GTP transceivers. The Aurora 8B/10B core supports the AMBA®
protocol AXI4-Stream user interface.
The AMD Vivado™ Design Suite produces source code for Aurora 8B/10B cores with a
configurable datapath width. The cores can be simplex or full-duplex, and feature one of
two simple user interfaces and optional flow control.
The Aurora 8B/10B core (Figure 1-1) is a scalable, lightweight, link-layer protocol for
high-speed serial communication. The protocol is open and can be implemented using
AMD FPGA technology. The protocol is typically used in applications requiring simple,
low-cost, high-rate, data channels and is used to transfer data between devices using one
or many transceivers.
X-Ref Target - Figure 1-1
Aurora Channel
Partners
Aurora Aurora
Lane 1 Channel
User User
User Interface Interface User
Aurora Core Aurora Core
Application Application
Aurora
Lane n
Aurora 8B/10B cores automatically initialize a channel when they are connected to an
Aurora channel partner and pass data freely across the channel as frames or streams of data.
Aurora frames can be any size, and can be interrupted at any time. Gaps between valid data
bytes are automatically filled with idles to maintain lock and prevent excessive
electromagnetic interference. Flow control can be used to reduce the rate of incoming data
or to send brief, high-priority messages through the channel.
Streams are single, unending frames. In the absence of data, idles are transmitted to keep
the link alive. The Aurora 8B/10B core detects single-bit and most multi-bit errors using
8B/10B coding rules. Excessive bit errors, disconnections, or equipment failures cause the
core to reset and attempt to re-initialize a new channel.
RECOMMENDED: Although the Aurora 8B/10B core is a fully-verified solution, the challenge associated
with implementing a complete design varies depending on the configuration and functionality of the
application. For best results, experience building high-performance, pipelined FPGA designs using AMD
implementation tools and constraints files (XDC) with the Vivado Design Suite is recommended. Read
Status, Control, and the Transceiver Interface, carefully.
Contact your local AMD representative for a closer review and estimation for your specific
requirements.
Applications
Aurora 8B/10B cores can be used in a wide variety of applications because of their low
resource cost, scalable throughput, and flexible data interface. Examples of core
applications include:
Product Specification
Figure 2-1 shows a block diagram of the implementation of the Aurora 8B/10B core.
X-Ref Target - Figure 2-1
X14612
• Lane Logic: Each GTP, GTX, or GTH transceiver (hereinafter called transceiver) is driven
by an instance of the lane logic module, which initializes each individual transceiver
and handles the encoding and decoding of control characters and error detection.
• Global Logic: The global logic module performs the bonding and verification phases of
channel initialization. During operation, the module generates the random idle
characters required by the Aurora protocol and monitors all the lane logic modules for
errors.
• RX User Interface: The AXI4-Stream RX user interface moves data from the channel to
the application and performs flow control functions.
• TX User Interface: The AXI4-Stream TX user interface moves data from the application
to the channel and performs flow control TX functions. The standard clock
compensation module is embedded inside the core. This module controls periodic
transmission of the clock compensation (CC) character.
Performance
Maximum Frequencies
For details about maximum frequencies, visit the Performance and Resource Utilization web
page.
Latency
Latency through an Aurora 8B/10B core is caused by pipeline delays through the protocol
engine (PE) and through the transceivers. The PE pipeline delay increases as the
AXI4-Stream interface width increases. The transceiver delays are dependent on the
features and attributes of the selected transceivers.
This section outlines expected latency for the Aurora 8B/10B core AXI4-Stream user
interface in terms of user_clk cycles for 2-byte-per-lane and 4-byte-per-lane designs. For
the purposes of illustrating latency, the Aurora 8B/10B modules are partitioned into
transceiver logic and protocol engine (PE) logic which is implemented in the FPGA
programmable logic.
Note: These numbers do not include the latency incurred due to the length of the serial connection
between each side of the Aurora 8B/10B channel.
Figure 2-2 illustrates the latency of the datapath for the default configuration. Latency can
vary based on the transceiver(s) used in the design and the IP configuration.
X-Ref Target - Figure 2-2
;
The pipeline delays are designed to maintain the clock speed. If there is no dependency,
check if the latency can be added through other optional features.
Throughput
Aurora 8B/10B core throughput depends on the number of the transceivers and the
targeted line rate. Throughput varies from 0.4 Gb/s to 84.48 Gb/s for a single lane design to
a 16-lane design, respectively. The throughput was calculated using 20% overhead of the
Aurora 8B/10B protocol encoding and 0.5 Gb/s to 6.6 Gb/s line rate range.
Resource Utilization
For full details about performance and resource utilization, visit the Performance and
Resource Utilization web page.
Port Descriptions
The parameters used to generate each Aurora 8B/10B core determine the interfaces
available for that specific core. The interfaces are visible in the IP symbol as seen in
Figure 2-4. In the IP symbol, if you left-click the + sign beside the interface, you can see the
ports grouped in it. In this section, that is, Port Descriptions, in general, the interface
appears as a single row entry followed by the ports which are grouped in it. For example in
Table 2-1 (TX) the USER_DATA_S_AXIS_TX is the interface and the s_axi_tx_* ports are
grouped into that interface. The cores have four to six interfaces.
X-Ref Target - Figure 2-4
Notes:
1. [n:0] bus format is used when the Little Endian Support option is selected.
2. [0:n] bus format is used when the Big Endian Support option is selected.
3. Ports are active-High unless otherwise specified.
User Interface
The Aurora 8B/10B core can be generated with either a framing or streaming user data
interface. This interface includes all the ports needed for streaming or framed data transfer.
The framing user interface complies with the AMBA® AXI4-Stream Protocol Specification
[Ref 4] and comprises the signals necessary for transmitting and receiving framed user data.
The streaming interface allows data to be sent without frame delimiters, is simpler to
operate, and uses fewer resources than a framing interface. The data port width depends on
the lane width and the number of lanes selected.
Top-Level Architecture
The Aurora 8B/10B core top level (block level) file instantiates the lane logic module, TX and
RX AXI4-Stream modules, the global logic module, and the wrapper for the transceiver. Also
instantiated are the clock, reset circuit, frame generator and checker modules in the
example design.
Figure 2-5 shows the Aurora 8B/10B core top level for a duplex configuration. The top-level
file is the starting point for a user design.
X-Ref Target - Figure 2-5
TX Transceiver
AXI4-Stream Wrapper
TX
Stream
RX
AXI4-Stream
RX
Stream
TX_D 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 n0 n1 n2 n3 n4 n5 n6 n
Most significant bit transmitted first Least significant bit transmitted last
X129
Notes:
1. This port is not available if the Streaming interface option is chosen.
USER_DATA_M_AXI_RX
m_axi_rx_tdata[0:8(n–1)] or Incoming data from channel partner (Ascending bit
Output user_clk
m_axi_rx_tdata[8(n–1):0] order).
Signals the end of the incoming frame (asserted for
m_axi_rx_tlast(1) Output user_clk
a single user clock cycle).
m_axi_rx_tkeep[0:(n–1)] or Specifies the number of valid bytes in the last data
Output user_clk
m_axi_rx_tkeep[(n–1):0] (1) beat.
Asserted when outgoing data and control signals
m_axi_rx_tvalid Output user_clk or data and control signals from an Aurora 8B/10B
core are valid.
Notes:
1. This port is not available if the Streaming interface option is chosen.
Framing Interface
Figure 2-7 shows the framing user interface of the Aurora 8B/10B core, with the
AXI4-Stream compliant ports for TX and RX data.
X-Ref Target - Figure 2-7
s_axi_tx_data m_axi_rx_tdata
s_axi_tx_tkeep m_axi_rx_tkeep
s_axi_tx_tlast m_axi_rx_tlast
Framing
s_axi_tx_tvalid m_axi_rx_tvalid
Interface
s_axi_tx_tready
reset
X12992
user_clk
Transmitting Data
To transmit data, the user application manipulates control signals to cause the core to do
the following:
• Take data from the user interface on the s_axi_tx_tdata bus when
s_axi_tx_tvalid and s_axi_tx_tready signals are asserted.
• Stripe the data across lanes in the Aurora 8B/10B channel.
• Use the s_axi_tx_tvalid signal to transmit data. The user application can deassert
s_axi_tx_tvalid to insert idles on the line (introduce stalls or pause).
• Pause data (that is, insert idles) (s_axi_tx_tvalid is deasserted).
• Detects and discards control bytes (idles, clock compensation, Start of Channel PDU
(SCP), End of Channel Protocol Data Unit (ECPDU) and PAD.
• Asserts framing signal (m_axi_rx_tlast) and specifies the number of valid bytes in
the last data beat (m_axi_rx_tkeep).
• Recovers data from the lanes
• Assembles data for presentation to the user interface on the m_axi_rx_tdata bus by
asserting of the m_axi_rx_tvalid signal.
The Aurora 8B/10B core samples data only when both s_axi_tx_tready and
s_axi_tx_tvalid are asserted (High).
AXI4-Stream data is only valid when it is framed. Data outside of a frame is ignored. To start
a frame, assert s_axi_tx_tvalid while the first word of data is on the s_axi_tx_tdata
port. To end a frame, assert s_axi_tx_tlast while the last word (or partial word) of data
is on the s_axi_tx_tdata port and use s_axi_tx_tkeep to specify the number of valid
bytes in the last data beat.
In the case of frames that are a single word long or less, s_axi_tx_tvalid and
s_axi_tx_tlast are asserted simultaneously.
Length
The user application controls the channel frame length by manipulation of the
s_axi_tx_tvalid and s_axi_tx_tlast signals. The Aurora 8B/10B core responds with
start-of-frame and end-of-frame ordered sets, /SCP/ and /ECP/ respectively, as shown in
Table 2-3.
Figure 2-8 shows an example of a simple data transfer on an AXI4-Stream interface that is
n-bytes wide. In this case, the amount of data being sent is 3n bytes and so requires three
data beats. s_axi_tx_tready is asserted, indicating that the AXI4-Stream interface is
ready to transmit data.
The user application asserts s_axi_tx_tvalid during the first n bytes to begin data
transfer. An /SCP/ ordered set is placed on the first two bytes of the channel to indicate the
start of the frame. Then the first n–2 data bytes are placed on the channel. Because of the
offset required for the /SCP/, the last two bytes in each data beat are always delayed one
cycle and transmitted on the first two bytes of the next beat of the channel.
To end the data transfer, the user application asserts s_axi_tx_tlast, the last data bytes,
and the appropriate value on the s_axi_tx_tkeep bus. In this example,
s_axi_tx_tkeep is set to N in the waveform for the demonstration to indicate that all
bytes are valid in the last data beat. When s_axi_tx_tlast is asserted,
s_axi_tx_tready is deasserted in the next clock cycle and the core uses the gap in the
data flow to send the final offset data bytes and the /ECP/ ordered set, indicating the end
of the frame. s_axi_tx_tready is reasserted on the next cycle to allow data transfers to
continue.
X-Ref Target - Figure 2-8
user_clk
s_axi_tx_tvalid
s_axi_tx_tready
s_axi_tx_tlast
s_axi_tx_tkeep[0:(n-1)] X N X
x14617
Figure 2-9 shows an example of a (3n–1)-byte data transfer that requires the use of a pad.
The Aurora 8B/10B core appends a pad character for a frame with an odd number of bytes
as per the protocol requirement. A transfer of 3n–1 data bytes requires two full n-byte data
words and one partial data word. In this example, s_axi_tx_tkeep is set to N–1 to
indicate n–1 valid bytes in the last data word.
user_clk
s_axi_tx_tvalid
s_axi_tx_tready
s_axi_tx_tlast
s_axi_tx_tdata [0:(8n-1)]
s_axi_tx_tkeep [0:(n-1)]
X13796
Figure 2-10 shows how a user interface can pause data transmission during a frame
transfer. In this example, the user application pauses the data flow after the first n bytes by
deasserting s_axi_tx_tvalid, and transmitting idles instead. The pause continues until
s_axi_tx_tvalid is deasserted.
X-Ref Target - Figure 2-10
user_clk
s_axi_tx_tvalid
s_axi_tx_tready
s_axi_tx_tlast
s_axi_tx_tdata [0:(8n-1)]
s_axi_tx_tkeep [0:(n-1)]
X13797
The Aurora 8B/10B core automatically interrupts data transmission when it sends clock
compensation sequences. The clock compensation sequence imposes 12 bytes of overhead
per lane every 10,000 bytes.
Figure 2-11 shows how the Aurora 8B/10B core pauses data transmission during the clock
compensation sequence.
X-Ref Target - Figure 2-11
user_clk
s_axi_tx_tvalid
s_axi_tx_tready
s_axi_tx_tlast
s_axi_tx_tdata [0:(8n-1)]
s_axi_tx_tkeep [0:(n-1)]
X13795
Receiving Data
The RX submodules have no built-in elastic buffer for user data. As a result, there is no
m_axi_rx_tready signal on the RX AXI4-Stream interface. The only way for the user
application to control the flow of data from an Aurora 8B/10B channel is to use one of the
core optional flow control features.
The m_axi_rx_tvalid signal is asserted concurrently with the first word of each frame
from the Aurora 8B/10B core. m_axi_rx_tlast is asserted concurrently with the last word
or partial word of each frame. The m_axi_rx_tkeep port indicates the number of valid
bytes in the final word of each frame.The m_axi_rx_tkeep signal is only valid when
m_axi_rx_tlast is asserted.
The Aurora 8B/10B core can deassert m_axi_rx_tvalid anytime, even during a frame.
The core can occasionally deassert m_axi_rx_tvalid even if the frame was originally
transmitted without pauses. These pauses are a result of the framing character stripping
and left alignment process.
Figure 2-12 shows an example of 3n bytes of received data interrupted by a pause. Data is
presented on the m_axi_rx_tdata bus. When the first n bytes are placed on the bus,
m_axi_rx_tvalid is asserted to indicate that data is ready for the user application. The
core deasserts m_axi_rx_tvalid on the clock cycle following the first data beat to
indicate a pause in the data flow.
After the pause, the core asserts m_axi_rx_tvalid and continues to assemble the
remaining data on the m_axi_rx_tdata bus. At the end of the frame, the core asserts
m_axi_rx_tlast. The core also computes the value of m_axi_rx_tkeep bus and
presents it to the user application based on the total number of valid bytes in the final word
of the frame.
X-Ref Target - Figure 2-12
user_clk
m_axi_rx_tvalid PAUSE
m_axi_rx_tlast
m_axi_rx_tdata[0:(8n-1)] X Data 0 X Data 1 Data 2 X
m_axi_rx_tkeep[0:(n-1)] X N X
X14615
Framing Efficiency
There are two factors that affect framing efficiency in the Aurora 8B/10B core:
The CC sequence, which uses 12 bytes on every lane every 10,000 bytes, consumes about
0.12% of the total channel bandwidth.
All bytes in the Aurora 8B/10B core are sent in two-byte code groups. Aurora 8B/10B frames
with an even number of bytes have four bytes of overhead, two bytes for SCP (start of
frame) and two bytes for ECP (end of frame). Aurora 8B/10B frames with an odd number of
bytes have five bytes of overhead, four bytes of framing overhead plus an additional byte
for the pad byte.
The core transmits frame delimiters only in specific lanes of the channel. SCP is only
transmitted in the left-most (most-significant) lane, and ECP is only transmitted in the
right-most (least-significant) lane. Any space in the channel between the last code group
with data and the ECP code group is padded with idles. The result is reduced resource cost
for the design, at the expense of a minimal additional throughput cost. Though the SCP and
ECP could be optimized for additional throughput, the single frame per cycle limitation
imposed by the user interface would make this improvement unusable in most cases.
Use the formula shown in Equation 2-1 to calculate the efficiency for a design of any
number of lanes, any width of interface, and frames of any number of bytes.
° w = Interface width
Table 2-4 is an example calculated from Equation 2-1. It shows the efficiency for an 8-byte,
4-lane channel and illustrates that the efficiency increases as the length of channel frames
increases.
Table 2-5 shows the overhead in an 8-byte, 4-lane channel when transmitting 256 bytes of
frame data across the four lanes. The resulting data unit is 264 bytes long due to start and
end characters, and due to the idles necessary to fill out the lanes. This amounts to 3.03%
of overhead in the transmitter. In addition, a 12-byte clock compensation sequence occurs
on each lane every 10,000 bytes, which adds a small amount more to the overhead. The
receiver can handle a slightly more efficient data stream because it does not require any
idle pattern.
Table 2-6 shows the overhead that occurs with each value of s_axi_tx_tkeep.
1000_0000 1 11
6
1100_0000 0 10
1110_0000 1 9
4
1111_0000 0 8
2 2
1111_1000 1 7
2
1111_1100 0 6
1111_1110 1 5
0
1111_1111 0 4
Note: When the Little Endian option is selected in the Vivado Integrated Design Environment (IDE),
s_axi_tx_tkeep bit ordering changes from MSB to LSB.
Streaming Interface
Figure 2-13 shows an example of an Aurora 8B/10B core configured with a streaming user
interface.
X-Ref Target - Figure 2-13
s_axi_tx_data m_axi_rx_tdata
s_axi_tx_tvalid
Streaming m_axi_rx_tvalid
s_axi_tx_tready
Interface
reset X12993
user_clk
When s_axi_tx_tvalid is deasserted, gaps are created between words and the gaps are
preserved, except when clock compensation sequences are being transmitted.
When data arrives at the RX side of the Aurora 8B/10B channel it is presented on the
m_axi_rx_tdata bus and m_axi_rx_tvalid is asserted. The data must be read
immediately or it is lost. If this is unacceptable, a buffer must be connected to the RX
interface to hold the data until it can be used.
Figure 2-14 shows a typical example of streaming data. The Aurora 8B/10B core indicates
that it is ready to transfer data by asserting s_axi_tx_tready. One cycle later, the user
logic indicates that it is ready to transfer data by asserting the s_axi_tx_tdata bus and
the s_axi_tx_tvalid signal. Because both ready signals are now asserted, data D0 is
transferred from the user logic to the Aurora 8B/10B core. Data D1 is transferred on the
following clock cycle. In this example, the Aurora 8B/10B core deasserts its ready signal,
s_axi_tx_tready, and no data is transferred until the next clock cycle when, again, the
s_axi_tx_tready signal is asserted. Then the user logic deasserts s_axi_tx_tvalid
on the next clock cycle, and no data is transferred until both ready signals are asserted.
user_clk
s_axi_tx_tvalid
s_axi_tx_tready
X13805
Figure 2-15 shows the receiving end of the data transfer that is shown in Figure 2-14.
X-Ref Target - Figure 2-15
user_clk
m_axi_rx_tvalid
m_axi_rx_tdata [0:(8n-1)]
X13802
Flow Control
This section explains how to use Aurora 8B/10B flow control. Two optional flow control
interfaces are available on cores using a framing interface. Native flow control (NFC)
regulates the data transmission rate at the receiving end of a full-duplex channel. User flow
control (UFC) accommodates high-priority messages for control operations.
user_clk m_axi_ufc_rx_tdata[0:(8n-1)]
reset m_axi_ufc_rx_tkeep[0:1]
UFC
s_axi_ufc_tx_tvalid m_axi_ufc_rx_tvalid
Interface
s_axi_ufc_tx_tdata[0:2] m_axi_ufc_rx_tlast
s_axi_ufc_tx_tready
UFC_S_AXIS_TX
Asserted to request a UFC message be sent to
the channel partner. Must be held until
s_axi_ufc_tx_tready is asserted. Do not assert
s_axi_ufc_tx_tvalid Input user_clk
this signal unless the entire UFC message is
ready to be sent; a UFC message cannot be
interrupted after it has started.
Specifies the size of the UFC message that is
s_axi_ufc_tx_tdata[0:2] or
Input user_clk sent. The SIZE encoding is a value between 0 and
s_axi_ufc_tx_tdata[2:0]
7. See Table 2-8.
Asserted when an Aurora 8B/10B core is ready to
read the contents of the UFC message. On the
cycle after the s_axi_ufc_tx_tready signal is
asserted, data on the s_axi_tx_tdata port is
s_axi_ufc_tx_tready Output user_clk treated as UFC data. s_axi_tx_tdata data
continues to be used to fill the UFC message
until enough cycles have passed to send the
complete message. Unused bytes from a UFC
cycle are discarded.
UFC_M_AXIS_RX
m_axi_ufc_rx_tdata[0:(8n–1)] or Incoming UFC message data from the channel
Output user_clk
m_axi_ufc_rx_tdata[(8n–1):0] partner (n = 16 bytes maximum).
Asserted when the values on the
m_axi_ufc_rx_tvalid Output user_clk
m_axi_ufc_rx_tdata ports are valid.
To send a UFC message, the user application asserts s_axi_ufc_tx_tvalid while driving
the s_axi_ufc_tx_tdata port with the desired SIZE code. The s_axi_ufc_tx_tvalid
signal must be held until the Aurora 8B/10B core asserts the s_axi_ufc_tx_tready
signal. The data for the UFC message must be placed on the s_axi_tx_tdata port,
starting on the first cycle after s_axi_ufc_tx_tready is asserted. The core deasserts
s_axi_tx_tready while the s_axi_tx_tdata port is being used for UFC data.
Note: A UFC request should be given only after completion of the current UFC request; back-to-back
UFC requests might not honored by IP.
Figure 2-17 shows a useful circuit for switching TX_D from sending regular data to UFC
data.
X-Ref Target - Figure 2-17
UFC Data 0
s_axi_tx_tdata Data Interface
Regular Data 1
s_axi_tx_tready
UFC Interface
X12996-072717
12 Bytes 5
2
14 Bytes 6
16 Bytes 7
The procedure for transmitting a single cycle UFC message is shown in Figure 2-18. In this
case, a 4-byte message is being sent on a 4-byte interface.
Note: The s_axi_ufc_tx_tready signal is deasserted for two cycles. Aurora 8B/10B cores use
this gap in the data flow to transmit the UFC header and message data.
X-Ref Target - Figure 2-18
user_clk
s_axi_ufc_tx_tvalid
s_axi_ufc_tx_tready
s_axi_ufc_tx_tdata[0:2]
s_axi_tx_tready
s_axi_tx_tdata [0:(8n-1)]
X13803
The procedure for transmitting a two-cycle UFC message is shown in Figure 2-19. In this
case the user application is sending a 4-byte message using a 2-byte interface.
s_axi_tx_tready is deasserted for three cycles: one cycle for the UFC header which is
sent during the s_axi_ufc_tx_tready cycle, and two cycles for UFC data.
X-Ref Target - Figure 2-19
user_clk
s_axi_ufc_tx_tvalid
s_axi_ufc_tx_tready
s_axi_ufc_tx_tdata[0:2] X X 1 X X X
s_axi_tx_tready
Figure 2-20 shows an Aurora 8B/10B core with a 4-byte data interface receiving a 4-byte
UFC message. The core presents this data to the user application by asserting
m_axi_ufc_rx_tvalid and m_axi_ufc_rx_tlast to indicate a single cycle frame.
m_axi_ufc_rx_tkeep is set to 4'hF, indicating only the four most significant bytes of
the interface are valid.
X-Ref Target - Figure 2-20
user_clk
m_axi_ufc_rx_tvalid
m_axi_ufc_rx_tlast
m_axi_ufc_rx_tkeep [0:(n-1)]
m_axi_ufc_rx_tdata [0:(8n-1)]
X13801
Figure 2-21 shows an Aurora 8B/10B core with a 4-byte interface receiving an 8-byte
message.
Note: The resulting frame is two cycles long, with m_axi_ufc_rx_tkeep set to 4'hF on the
second cycle indicating that all four bytes of the data are valid.
user_clk
m_axi_ufc_rx_tvalid
m_axi_ufc_rx_last
m_axi_ufc_rx_tkeep[0:(8n–1)] X X X X 4'hF X X
X13798
user_clk m_axi_nfc_tx_tvalid
reset m_axi_nfc_tx_tdata[0:3]
NFC
s_axi_nfc_tx_tvalid
Interface
s_axi_nfc_tx_tdata[0:3]
s_axi_nfc_tx_tready
Table 2-10 lists the ports for the NFC interface available only in full-duplex Aurora 8B/10B
cores.
NFC_S_AXIS_TX
s_axi_nfc_tx_tready Output user_clk Asserted when the core accepts an NFC request.
s_axi_nfc_tx_tdata[0:3] Indicates the number of PAUSE idles the channel
or Input user_clk partner must send when it receives the NFC message.
s_axi_nfc_tx_tdata[3:0] Must be held until s_axi_nfc_tx_tready is asserted.
Asserted to request an NFC message be sent to the
s_axi_nfc_tx_tvalid Input user_clk channel partner. Must be held until s_axi_nfc_tx_tready
is asserted.
NFC_M_AXIS_RX
m_axi_nfc_tx_tvalid Output user_clk Indicates an NFC message is received from the partner.
m_axi_nfc_tx_tdata[0:3]
or Indicates the PAUSE value of the received NFC
Output user_clk message. This port should be sampled with
m_axi_nfc_tx_tdata[3:0]
m_axi_nfc_tx_tvalid.
Table 2-11 shows the codes for native flow control (NFC). These values are driven on bits
[0:3] for big endian format and [3:0] for little endian format.
The s_axi_nfc_tx_tready signal is deasserted for one cycle (assumes that n is at least
2) to create the gap in the data flow in which the NFC message is placed.
X-Ref Target - Figure 2-23
user_clk
s_axi_tx_tkeep [0:(n-1)]
s_axi_tx_tlast
s_axi_tx_tvalid
s_axi_tx_tready
s_axi_tx_tdata [0:(8n-1)]
X13799
Notes:
1. m is the number of transceivers. See Error Status Signals for more details.
2. Only available in TX-only simplex dataflow mode and sideband as back channel core configuration.
3. Only available in RX-only simplex dataflow mode and sideband as back channel core configuration.
Full-Duplex Cores
Full-Duplex Status and Control Ports
Full-duplex cores provide a TX and an RX Aurora 8B/10B channel connection. Figure 2-25
shows the status and control interface for a full-duplex Aurora 8B/10B core.
X-Ref Target - Figure 2-25
loopback hard_err
power_down Full-Duplex soft_err
Status and
reset frame_err
Control
gt_reset Interface channel_up
init_clk_in lane_up
X13002
Equipment problems and channel noise can cause errors during Aurora 8B/10B channel
operation. 8B/10B encoding allows the Aurora 8B/10B core to detect all single-bit errors
and most multi-bit errors that occur in the channel and to assert soft_err on every cycle.
The TX simplex cores do not include a soft_err port. All transmit data is assumed to be
correct at transmission unless there is an equipment issue.
The core also monitors each transceiver for hardware errors such as buffer
overflow/underflow and loss of lock and asserts the hard_err signal. RX-side hard errors
in simplex cores are reported using the rx_hard_err signal. Catastrophic hardware errors
can also manifest themselves as a burst of soft errors. The core uses the leaky bucket
algorithm described in the Aurora 8B/10B Protocol Specification (SP002) [Ref 5] to detect
large numbers of soft errors occurring in a short period of time, and asserts the hard_err
or rx_hard_err signal.
Whenever a hard error is detected, the core automatically resets itself and attempts to
re-initialize. This allows the channel to re-initialize and to be reestablished as soon as the
hardware issue that caused the hard error is resolved. Soft errors do not lead to a reset
unless enough of them occur in a short period of time.
Aurora 8B/10B cores with the AXI4-Stream data interface can also detect errors in Aurora
8B/10B frames and assert the frame_err signal. Frame errors can be frames with no data,
consecutive Start of Frame symbols, and consecutive End of Frame symbols. This signal is
not available with simplex TX cores. When available, this signal is usually asserted close to
a soft_err assertion, with soft errors being the main cause of frame errors.
Table 2-13 summarizes the error conditions Aurora 8B/10B cores can detect and the error
signals used to alert the user application.
Full-Duplex Initialization
Full-duplex cores initialize automatically after power-up, reset, or hard error and perform
the Aurora 8B/10B initialization procedure until the channel is ready for use. The lane_up
bus indicates which lanes in the channel have finished the lane initialization procedure. This
signal can be used to help debug equipment problems in a multi-lane channel.
channel_up is asserted only after the core completes the entire initialization procedure.
Aurora 8B/10B cores cannot receive data before channel_up is asserted. Only the
m_axi_rx_tvalid signal on the user interface should be used to qualify incoming data.
channel_up can be inverted and used to reset modules that drive the TX side of a
full-duplex channel, because no transmission can occur until after channel_up. If user
application modules need to be reset before data reception, one of the lane_up signals
can be inverted and used. Data cannot be received until after all the lane_up signals are
asserted.
Simplex Cores
Simplex TX Status and Control Ports
Simplex TX cores allow user applications to transmit data to a simplex RX core. They have no
RX connection. Figure 2-26 shows the status and control interface for a simplex TX core.
X-Ref Target - Figure 2-26
power_down tx_hard_err
tx_system_reset tx_channel_up
Simplex TX
tx_aligned Status and tx_lane_up
tx_bonded Control
tx_verify
Interface
tx_reset
X13004
Simplex RX cores allow user applications to receive data from a simplex TX core. Figure 2-27
shows the status and control interface for a simplex RX core.
X-Ref Target - Figure 2-27
power_down rx_hard_err
rx_system_reset soft_err
frame_err
Simplex RX rx_channel_up
Status and
rx_lane_up
Control
Interface rx_aligned
rx_bonded
rx_verify
rx_reset
X13003
Simplex Initialization
Simplex cores do not depend on signals from an Aurora 8B/10B channel for initialization.
Instead, the TX and RX sides of simplex channels communicate their initialization state
through a set of sideband initialization signals: aligned, bonded, verify, and reset;
one set for the TX side with a TX_ prefix, and one set for the RX side with an RX_ prefix. The
bonded port is only used for multi-lane cores.
There are two ways to initialize a simplex module using the sideband initialization signals:
• Send the information from the RX sideband initialization ports to the TX sideband
initialization ports
• Drive the TX sideband initialization ports independently of the RX sideband
initialization ports using timed initialization intervals
A back channel is the safest way to initialize and maintain a simplex channel in the absence
of a channel between RX and TX. The back channel need only deliver messages to the TX
side to indicate which of the sideband initialization signals is asserted when the signals
change.
The example design included in the example_design directory with simplex Aurora 8B/10B
cores shows a simple side channel that uses three or four I/O pins on the device.
Using Timers
If a back channel is not possible, serial channels can be initialized by driving the TX simplex
initialization with a set of timers. The timers must be designed carefully to meet the needs
of the system because the average time for initialization depends on many channel specific
conditions such as clock rate, channel latency, skew between lanes, and noise.
C_ALIGNED_TIMER, C_BONDED_TIMER, and C_VERIFY_TIMER are timers used for assertion
of tx_aligned, tx_bonded, and tx_verify signals, respectively. These timers use
worst-case values obtained from corner case functional simulations and implemented in the
<component name>_core module.
Note: These signals are not updated on the actual status of the channel, but after the timer expires.
Some of the initialization logic in the Aurora 8B/10B module uses watchdog timers to
prevent deadlock. These watchdog timers are used on the RX side of the channel, and can
interfere with the proper operation of TX initialization timers. If the RX simplex module goes
from aligned, bonded or verify, to reset, make sure that it is not because the TX logic
spend too much time in one of those states. If a particularly long timer is required to meet
the needs of the system, the watchdog timers can be adjusted by editing the module. For
most cases, this should not be necessary and is not recommended.
Aurora 8B/10B channels normally re-initialize only in the case of failure. When there is no
back channel available, event-triggered re-initialization is impossible for most errors
because, typically, the RX side detects the failure while the condition must be handled by
the TX side. The solution is to make timer-driven TX simplex modules re-initialize on a
regular basis. If a catastrophic error occurs, the channel is reset and running again after the
next re-initialization period arrives. System designers should balance the average time
required for re-initialization against the maximum time their system can tolerate an
inoperative channel to determine the optimum re-initialization period for their systems.
Transceiver Interface
IMPORTANT: The ports in the Transceiver Control And Status Interface must be driven in accordance
with the appropriate GT user guide. Using the input signals listed in Table 2-14 improperly might result
in unpredictable behavior of the IP core.
This interface includes the serial I/O ports of the transceivers, and the control and status.
gt<lane>_eyescantrigge
r_in/ Input user_clk Causes a trigger event.
gt_eyescantrigger(4)(9)
This signal from the comma detection and
realignment circuit is High to indicate that
the parallel data stream is properly aligned
on byte boundaries according to comma
gt<lane>_rxbyteisaligne detection.
Output user_clk
d_out(4) (9)(10)
• 0: Parallel data stream not aligned to byte
boundaries
• 1: Parallel data stream aligned to byte
boundaries
This signal is asserted when the comma
alignment block detects a comma. The
gt<lane>_rxcommadet_ assertion occurs several cycles before the
out/ Output user_clk comma is available at the FPGA RX interface.
gt_rxcommadet(4)(9)
• 0: Comma not detected
• 1: Comma detected
Indicates the corresponding byte shown on
gt<lane>_rx_disp_err_o
Output user_clk rxdata has a disparity error. The rxdisperr pin
ut(4)(9)(10)
of the transceiver is connected to this port.
Indicates the corresponding byte shown on
gt<lane>_rx_not_in_tabl rxdata was not a valid character in the 8B/10B
Output user_clk
e_out (4) (9)(10) table. rxnotintable pin of the transceiver is
connected to this port.
This signal from the comma detection and
realignment circuit indicates that the byte
alignment within the serial data stream has
changed due to comma detection.
• 0: Byte alignment has not changed
gt<lane>_rx_realign_ou • 1: Byte alignment has changed
Output user_clk
t(4)(9)(10) Data can be lost or repeated when alignment
occurs, which can cause data errors (and
disparity errors when
the 8B/10B decoder is used).
The rxbyterealign pin of the transceiver is
connected to this port.
gt<lane>_rx_buf_err_ou RX buffer status. rxbufstatus[2] is connected
Output user_clk
t(4)(9)(10) to this port.
PLL0LOCK and PLL1LOCK of the 7 series FPGA
gt0_pll0lock_out,
Output async GTP transceiver COMMON block.
gt0_pll1lock_out (4)
Available shared logic is in core.
gt<lane>_rxprbserr_out
This non-sticky status output indicates that
/ Output user_clk
PRBS errors have occurred.
gt_rxprbserr(4)(9)
gt<lane>_rxprbssel_in/
Input user_clk Receiver PRBS checker test pattern control.
gt_rxprbssel(4)(9)
gt<lane>_rxpcsreset_in/ This port is driven High and then deasserted
Input user_clk
gt_rxpcsreset(4)(9) to start the PCS reset process.
gt<lane>_rxpmareset_in
This port is driven High and then deasserted
/ Input async
to start RX PMA reset process.
gt_rxpmareset (4)(9)
This active-High signal indicates GTH/GTP RX
PMA reset is complete. This port is driven
gt<lane>_rxpmaresetdo Low when gtrxreset or rxpmareset is
ne_out/ Output async asserted.
gt_rxpmaresetdone(4) Available for duplex and RX-Only simplex
configuration and applicable for 7 series GTP
and GTH transceivers only.
gt<lane>_dmonitorout_
out/ Output async Digital Monitor Output Bus
gt_dmonitorout (4)(9)
This port is driven High and then deasserted
to start the RX elastic buffer reset process. In
gt<lane>_rxbufreset_in/
Input async either single mode or sequential mode,
gt_rxbufreset(4)(9)
activating rxbufreset resets the RX elastic
buffer only.
Notes:
1. m is the number of transceivers.
2. The transceiver debug ports are enabled if the Additional transceiver control and status ports check-box option is
selected in the Vivado IDE.
3. <lane> takes values from 0 to AURORA_LANES.
4. For designs using UltraScale devices, the prefixes of the optional transceiver debug ports for single-lane cores are
changed from gt<lane> to gt, and the postfixes _in and _out are removed. For multi-lane cores, the prefixes of the
optional transceiver debug ports gt(n) are aggregated into a single port.
5. See the relevant transceiver user guide for more information on transceiver debug ports.
6. Available with duplex and TX-only simplex configurations.
7. Available with duplex and RX-only simplex configurations and applicable to 7 series FPGAs GTP transceivers only.
8. Available with duplex and RX-only simplex configurations and applicable to 7 series FPGAs GTX and GTH transceivers
only.
9. Available with duplex and RX-only simplex configurations.
10.Not available with UltraScale devices.
11.Not available in 7 series devices.
12.Refer to the relevant UG transceiver guide for more information on DRP ports.
Clock Interface
The clock interface has ports for the transceiver reference clock, and parallel clocks that the
Aurora 8B/10B core shares with application logic.
Table 2-16 provides details about the port changes due to selection of the Shared Logic
option.
Notes:
1. Ports from GTPE2_COMMON are applicable only to Artix 7 FPGA GTP transceiver designs.
2. Ports from GTXE2_COMMON/GTHE2_COMMON are applicable only to 7 series FPGA GTX/GTH transceiver
designs.
3. These ports are enabled for each selected quad. <quad> refers to the transceiver quad numbered from 1 to 12.
CRC
The CRC module provides a 16-bit or 32-bit CRC, implemented for user data. Table 2-17
describes the CRC module ports.
Notes:
1. See UltraScale FPGAs Transceivers Wizard LogiCORE IP Product Guide (PG182)[Ref 16] for more information.
2. See UltraScale Architecture GTH Transceivers User Guide (UG576) [Ref 1], 7 Series FPGAs GTP Transceivers User
Guide (UG482) [Ref 2] and 7 Series FPGAs GTX/GTH Transceivers User Guide (UG476) [Ref 3] for more information
on polarity inversion
All Aurora 8B/10B core implementations require careful attention to system performance
requirements. Pipelining, logic mappings, placement constraints, and logic duplications are
all methods that help boost system performance.
Keep It Registered
To simplify timing and increase system performance in an FPGA design, keep all inputs and
outputs registered with flip-flops between the user application and the core in its respective
clock domain. Registering signals might not be possible for all paths, but doing so
simplifies timing analysis and makes it easier for the AMD tools to place-and-route the
design.
IMPORTANT: The following rules must be observed when sharing a reference clock to ensure that jitter
margins for high-speed designs are met:
• The total number of GTX or GTH transceiver quads sourced by an external clock pin pair
(mgtrefclkn/mgtrefclkp) in 7 series FPGAs must not exceed three quads (one quad
above and one quad below), or 12 GTXE2_CHANNEL/GTHE2_CHANNEL transceivers.
Designs with more than 12 transceivers or more than three quads in 7 series FPGAs
should use multiple external clock pins.
• The total number of transceiver quads sourced by an external clock pin pair
(mgtrefclkn/mgtrefclkp) in UltraScale architecture FPGAs must not exceed five
quads (two quads above and two quads below), or 20 GTHE3_CHANNEL transceivers.
IMPORTANT: Manual edits are not recommended, but are possible using the recommendations in the
UltraScale FPGAs GTH Transceivers User Guide (UG576) [Ref 1] and 7 Series FPGAs GTX/GTH
Transceivers User Guide (UG476) [Ref 3].
On full-duplex modules, the reset signal resets both the TX and RX sides of the channel.
On simplex modules, tx_system_reset resets TX channels and rx_system_reset
resets RX channels. The gt_reset signal resets the transceivers which eventually resets the
core.
Note: The tx_system_reset is separate from the tx_reset and rx_reset signals used on the
simplex sideband interface.
user_clk
reset
channel_up
X14616
init_clk
gt_reset
user_clk
channel_up
X14613
TX_IP RX_IP
Simplex-TX Simplex-RX
tx_system_reset rx_system_reset
Core Core
Note: Long delays between each board reset assertion/de-assertion are not anticipated. System
level considerations might be necessary to ensure each board goes through the reset sequence flow
without long delays. AMD highly recommends timely de-assertion of both board reset signals, with
a suggested gap to be within a few µs to avoid long delays.
X-Ref Target - Figure 3-4
Note: The above use cases describes the impact on channel up with the assertion of resets during
normal operation.
(boardA) INIT_CLK
gt_reset
de-assert synchronous
reset to user_clk
(boardB) INIT_CLK
gt_reset
de-assert synchronous
reset to user_clk
X15654-120915
gt_reset C
reset D
X15653-120915
programmable logic reaches a known reset state before the user_clk is suppressed by the
assertion of gt_reset. The assertion time of gt_reset must be a minimum of six
init_clk time periods, to satisfy the de-bouncing circuit included in the core.
X-Ref Target - Figure 3-8
(boardB RX)
INIT_CLK
gt_reset
reset
X15652-120915
Power Down
This is an active-High signal. When powerdown is asserted, the transceivers in the Aurora
8B/10B core are turned off, putting them into a non-operating, low-power mode. When
powerdown is deasserted, the core automatically resets. gt_reset must be asserted after
powerdown deassertion as indicated in the guidelines of the transceiver user guide.
CAUTION! Use care when asserting the powerdown signal on cores that use tx_out_clk (see Serial
Transceiver Reference Clock Interface, page 53). tx_out_clk stops when the GTP, GTX, and GTH
transceivers are powered down. See the 7 Series FPGAs GTX/GTH Transceivers User Guide (UG476)
[Ref 3], 7 Series FPGAs GTP Transceivers User Guide (ug482) [Ref 2], and the UltraScale Architecture
GTH Transceivers User Guide (UG576) [Ref 1].
Shared Logic
The shared logic option in the Vivado IDE configures the core to include sharable resources
such as the transceiver quad PLL (QPLL), the transceiver differential refclk buffer
(IBUFDS_GTE2), and clocking and reset logic in the core or in the example design. When the
include shared logic in core option is selected, all sharable resources are available to
multiple instances of the core minimizing the amount of HDL modifications required while
retaining the flexibility to address more use cases.
Note: The Single Ended option when share logic is in the core will exclude respective differential
clock buffers from the core.
Note: Grayed blocks in Figure 3-9 and Figure 3-10 refer to the IP core.
X-Ref Target - Figure 3-9
<component_name>_exdes
<component_name>
<component_name>_support
X14120
<component_name>_exdes
<component_name>_support
<component_name>
Shared Logic
<component_name>_core
X14121
The contents of the shared logic depend upon the physical interface and the target device.
Shared logic contains instance(s) of the transceiver differential buffer
(IBUFDS_GTE2/IBUFDS_GTE3), support reset logic, and an instantiation of
<USER_COMPONENT_NAME:>_CLOCK_MODULE. Shared logic also contains an instance of
the transceiver common, GTPE2_COMMON, GTXE2_COMMON or GTHE2_COMMON, based
on the selected transceiver type. Support reset logic contains the de-bouncer logic for the
reset and gt_reset ports.
Note: The Aurora 8B/10B core uses CPLL and does not use QPLL (that is,
GTXE2_COMMON/GTHE2_COMMON). QPLL is brought out for Zynq 7000 and 7 series devices and
instantiated in shared logic for uniformity with other AMD serial connectivity cores.
Figure 3-11 shows the sharable resource connections from the core having shared logic
included (aurora_8b10b_0) to the instance of another core without shared logic
(aurora_8b10b_1). Some ports might change based on the core configuration and the type
of transceiver selected. Table 2-16, page 47 provides details about the port changes due to
selection of the Shared Logic option.
It ensures non-occurrence of repetitive data over long periods of time. The scrambler and
descrambler are synchronized based on transmission and reception of the clock
compensation characters respectively.
Using CRC
A 16-bit or 32-bit CRC, implemented for user data, is available in the
<component name>_crc_top.v[hd] module. CRC16 is generated for 2-byte designs,
and CRC32 is generated for 4-byte designs. The crc_valid and crc_pass_fail_n
signals indicate the result of a received CRC with a transmitted CRC (see Table 2-17,
page 49). The CRC-CCITT (16'h1021) and the standard Ethernet polynomial (32'h04C11DB7)
are used as CRC polynomials for 16-bit and 32-bit respectively. The CRC is computed per
lane and is suffixed to the data. At the receiver AXI interface, the CRC is removed and the
packet is sent as received at the AXI interface of the transmitter. Figure 3-12 illustrates how
the same data packet is sent without CRC and when CRC option is enabled.
X-Ref Target - Figure 3-12
Hot-Plug Logic
Hot-plug logic in Aurora 8B/10B (using the free-running init_clk signal) is based on the
received clock compensation characters. Reception of clock compensation characters by
the Aurora RX interface implies that the communication channel is alive and not broken. If
clock compensation characters are not received in a predetermined time, the hot-plug logic
resets the core and the transceiver. The clock compensation module must be used for
Aurora 8B/10B designs.
IMPORTANT: To ensure predictable link operation, It is highly recommended that hot-plug logic is not
disabled.
Clock Compensation
Clock compensation is a feature allowing up to ±100 ppm difference in the reference clock
frequencies used on each side of an Aurora 8B/10B channel. A standard clock compensation
module <component_name>_standard_cc_module.v[hd] is generated with the core
in accordance with the Aurora 8B/10B Protocol Specification (SP002) [Ref 5].
The number of lookahead cycles required to prevent a 16-byte UFC message from colliding
with a clock compensation sequence depends on the number of lanes in the channel and
the width of each lane.
Native flow control message requests are not acknowledged during clock compensation
character transmission. This helps to prevent the collision of an NFC message and the clock
compensation sequence.
IMPORTANT: The parameter CC_FREQ_FACTOR determines the frequency of the CC sequence. Any
attempt to increase or decrease the parameter should be done with careful analysis and testing.
• Be sure the duration and period selected is sufficient to correct for the maximum
difference between the frequencies of the clocks that are used.
• Do not perform multiple clock correction sequences within eight cycles of one another.
• Replacing long sequences of idles (>12 cycles) with CC sequences can reduce EMI.
• Vivado Design Suite User Guide: Designing IP Subsystems using IP Integrator (UG994)
[Ref 6]
• Vivado Design Suite User Guide: Designing with IP (UG896) [Ref 7]
• Vivado Design Suite User Guide: Getting Started (UG910) [Ref 8]
• Vivado Design Suite User Guide: Logic Simulation (UG900) [Ref 9]
When customizing and generating the core in the Vivado IP integrator, see the Vivado
Design Suite User Guide: Designing IP Subsystems using IP Integrator (UG994) [Ref 6] for
detailed information. IP integrator might auto-compute certain configuration values when
validating or generating the design. To check whether the values change, see the
description of the parameter in this chapter. To view the parameter value, run the
validate_bd_design command in the Tcl Console.
IP can be customized for use in a design by specifying values for the various parameters
associated with the IP core using these steps:
For details, see the Vivado Design Suite User Guide: Designing with IP (UG896) [Ref 7] and
the Vivado Design Suite User Guide: Getting Started (UG910) [Ref 8].
Note: Figures in this chapter are illustrations of the Vivado Integrated Design Environment (IDE).
This layout might vary from the current version.
The Aurora 8B/10B core can be customized to suit a wide variety of requirements using the
Vivado IP catalog tool. This chapter details the available customization parameters and how
these parameters are specified within the Customize IP interface.
Customize IP
Figure 4-1 shows the Core Options tab of the Customize IP interface with the default
options for Zynq™ 7000 and 7 series devices. The left side displays a representative block
diagram of the Aurora 8B/10B core as currently configured. The right side consists of
user-configurable parameters.
The GT Selections tab is shown in Figure 4-5 for Virtex™ 7 and Kintex™ 7 FPGA GTX and GTH
transceivers.
X-Ref Target - Figure 4-1
Figure 4‐1: Aurora 8B/10B Core Options Tab for Zynq 7000 and 7 Series Devices
Figure 4‐2: Aurora 8B/10B Core Options Tab for UltraScale Devices
Figure 4‐3: Aurora 8B/10B Core Options Tab for UltraScale Devices showing Advanced GT Options
The following four customization options are shown only in the Core Options tab for
UltraScale devices. See UltraScale FPGAs Transceivers Wizard (PG182)[Ref 16] for additional
details on the Advanced GT options selection.
Figure 4-2 and Figure 4-3 shows the Core Options tab for UltraScale™ devices.
Component Name
Enter the top-level name for the core in this text box. Illegal names are highlighted in red
until they are corrected.
Default: aurora_8b10b_0
Lane Width
Select the byte width of the transceivers used in the core.
This parameter defines the TXDATA/RXDATA width of the transceiver and the user interface
data bus width as well. Valid values are 2 and 4.
Default: 2
Line Rate
Enter a line rate value in gigabits per second within the valid range from 0.5 (Gb/s) to 6.6
(Gb/s).
This value is the unencoded bit rate at which data is transferred over the serial link. The
aggregate data rate of the core is (0.8 x line rate) x Aurora 8B/10B lanes. Line rate is limited
based on the speed grade and package of the selected device (see the respective device
family data sheet for details on the line rate limits).
Column Used
Select appropriate GT column from the drop-down list.
Default: Right
Lanes
Select the number of lanes to be used in the core. The valid range depends on the target
device selected.
Default: 1
Starting GT Quad
Select the starting GT Quad of the starting lane from the drop-down list. The core gets
configured with a consecutive number of lanes with the lane selection option selected.
Starting GT Lane
Select the starting lane of the core from the drop-down list. With a starting Quad, lanes and
starting lane, the core gets generated with a consecutive number of lanes.
Default: X1Y0
Note: Channel bonding across SLR boundaries are not supported by the core and restricted from
the Vivado IDE.
GT Refclk Selection
Select reference clock sources for the UltraScale device transceivers from the drop-down
list.
GT REFCLK (MHz)
Select a reference clock frequency for the transceiver from the drop-down list. Reference
clock frequencies depend on the line rate selected. For best results, select the highest rate
that can be practically applied to the reference clock input of the target device.
Default: 50 MHz for Zynq 7000 and 7 series devices, (line_rate/lane_width) for
UltraScale devices.
Default: 50 MHz
Dataflow Mode
Select the options for the direction of the channel that the Aurora 8B/10B core supports.
Simplex Aurora 8B/10B cores have a single, unidirectional serial port that connects to a
complementary simplex Aurora 8B/10B core. Available options are RX-only Simplex,
TX-only Simplex, and Duplex.
Default: Duplex
Interface
Select the type of datapath interface used for the core. Select Framing to use an
AXI4-Stream interface that allows encapsulation of data frames of any length. Select
Streaming to use a simple AXI4-Stream interface to stream data through the Aurora 8B/10B
channel.
Default: Framing
Flow Control
Select the required option to add flow control to the core. User flow control (UFC) allows
applications to send a brief, high-priority message through the Aurora 8B/10B channel.
Native flow control (NFC) allows full duplex receivers to regulate the rate of the data sent to
them. Immediate mode allows idle codes to be inserted within data frames while
completion mode only inserts idle codes between complete data frames.
• None
• UFC
• Immediate NFC
• Completion NFC
• UFC + Immediate NFC
• UFC + Completion NFC
Default: None
Back Channel
Select the options for Back Channel only for simplex Aurora cores; duplex Aurora cores do
not require this option. The available options are:
• Sidebands
• Timer
Default: Sidebands
Use Scrambler/Descrambler
Select to include the 16-bit additive scrambler/descrambler to the Aurora 8B/10B design.
See Using the Scrambler/Descrambler in Chapter 3 for more information.
Default: Unchecked
Default: Unchecked
Default: Unchecked
Default: Unchecked
Use CRC
Select to include the CRC for user data. Depending on the Lane Width of 2 or 4, the core
implements CRC16 or CRC32 respectively. See Using CRC in Chapter 3 for more information.
Default: Unchecked
C_DOUBLE_GTRXRESET
This parameter can be set to 1 using the TCL console while customizing the IP. Enable this
parameter to assert an additional reset in case of frequent buffer overflow/underflow as a
result of very high ppm differences. During IP hardware debug, you may also set this
parameter if RX electrical idle exit condition is seen after the gt_reset_i is deasserted.
Shared Logic
Figure 4-4 shows the Shared Logic tab of the Customize IP interface.
X-Ref Target - Figure 4-4
Select the option to include the transceiver common PLL and its logic either in the IP core
or in the example design.
Available options:
Column/Row Used
This option will be visible only for the device which has more than one column/row.
Select the appropriate column/row of transceivers used from the drop-down list. The
column used is enabled only for Virtex 7 and Kintex 7 devices and the row used is enabled
only for Artix™ 7 devices.
Default: left/top
Lanes
Select the number of lanes (transceivers) to be used in the core. The valid range is from 1 to
16 and depends on the target device selected.
Default: 1
Lane Assignment
See the diagram in the information area in Figure 4-5. Two rows or four boxes represent a
quad. Each active box represents an available transceiver. A tooltip is provided to specify
which transceiver (for example, GTXE2_CHANNEL_X0Y0) is being implemented in hardware.
The Aurora 8B/10B core generates transceiver placement (LOC) constraints in ascending
fashion. Lane numbering serves only to enable the lanes and not to assign lane numbers.
Note: The value of n depends upon the serial transceiver (GTX or GTH) position.
Core Generation
Click OK to generate the core. The modules for the Aurora 8B/10B core are written to the
Vivado design tools project directory using the same name as the top level of the core. See
Output Generation, page 78 for details about the example_design directory and files.
Notes:
1. In the IP integrator the Aurora 8B/10B core sets the expected frequency values in long
format as per the IP integrator guidelines; however, internally the core precision is the
same as shown in Vivado IDE.
2. Data and flow control ports are grouped into AXI4-Stream interfaces. The other input
and output ports are grouped into display interfaces.
3. For the ports grouped in display interfaces the connections should be made manually.
User Parameters
Table 4-1 shows the relationship between the fields in the Vivado IDE and the User
Parameters (which can be viewed in the Tcl Console).
Output Generation
The customized Aurora 8B/10B core is delivered as a set of HDL source modules in the
language selected. These files are arranged in a predetermined directory structure under
the project directory name provided to the IP catalog when the project is created.
If the VHDL language is selected for UltraScale devices, the IP top-level wrapper file is VHDL
and the underlying design source files are Verilog.
For details, see the Vivado Design Suite User Guide: Designing with IP (UG896) [Ref 7].
Required Constraints
This section is not applicable for this IP core.
Clock Frequencies
The Aurora 8B/10B core example design clock constraints can be grouped into following
three categories:
The Aurora 8B/10B core example design uses a minimum of one and a maximum of two
reference clocks. The number of GT reference clocks is dependent upon the transceiver
selection. The GT REFCLK value selected on the first page of the Vivado IDE is used to
constrain the GT reference clock using the create_clock XDC command.
Note: For UltraScale devices, the GT reference clock location constraint should be added to
<user_component_name>_example.xdc .
TXOUTCLK is generated by the transceiver based on the input reference clock and the
divider settings of the transceiver. The create_clock XDC command is used to
constrain TXOUTCLK.
The Aurora 8B/10B core example design uses a debounce circuit to sample GT_RESET
which is clocked asynchronously by the system clock. The create_clock XDC
command is used to constrain the system clock.
RECOMMENDED: Use a system clock frequency lower than the GT reference clock frequency.
Clock Management
Not Applicable
Clock Placement
Not Applicable
Banking
Not Applicable
Transceiver Placement
The set_property XDC command is used to constrain the transceiver location. This is
provided as a tooltip on the second page of the Vivado IDE. A sample XDC is provided for
reference.
False Paths
The set_false_path XDC command is used to constrain the false paths (signal crossing
clock domain).
################################################################################
## XDC generated for xc7vx690t-ffg1761-2 device
# 125.0MHz GT Reference clock constraint
create_clock -name GT_REFCLK1 -period 8.0 [get_ports GTHQ1_P]
####################### GT reference clock LOC #######################
set_property LOC AW9 [get_ports GTHQ1_N]
set_property LOC AW10 [get_ports GTHQ1_P]
# USER_CLK Constraint: Value is selected based on the line rate (3.125 Gb/s) and lane width (2-Byte)
# create_clock -name user_clk_i -period 6.400 [get_pins aurora_module_i/clock_module_i/user_clk_buf_
i/I]
##################################################################
The preceding XDC is provided for reference. The example design XDC is created
automatically when the core is generated from the Vivado design tools.
Simulation
This section contains information about simulating IP in the Vivado design suite. For
comprehensive information about Vivado design suite simulation components, as well as
information about using supported third-party tools, see the Vivado Design Suite User
Guide: Logic Simulation (UG900) [Ref 9].
IMPORTANT: For cores targeting UltraScale, 7 series or Zynq 7000 devices, UNIFAST libraries are not
supported. AMD IP is tested and qualified with UNISIM libraries only.
The Aurora 8B/10B core delivers a demonstration test bench for the example design. The
TEST COMPLETED SUCCESSFULLY message signifies the completion of the example design
simulation.
Note: The Reached max. simulation time limit message means that simulation was
not successful. See Appendix C, Debugging for more information.
Simulating the duplex core is a single-step process after generating an example design.
Simplex core simulation requires partner generation. The partner core is generated
automatically and the synthesized netlist is available under the simulation file set when
clicking Open IP Example Design. Due to the synthesizing of the partner core, opening a
simplex core example design takes more time than the duplex example design generation.
Simulation speed up
The C_EXAMPLE_SIMULATION parameter is introduced to speed up post
synthesis/implementation netlist functional simulations:
1. If you are using the tcl script to generate an IP Core, add the Parameter
c_example_simulation to set to true as part of the tcl script.
Note: This mode of IP core generation is only for Simulation purposes. If you intend to test on
board, the above command should not be added as part of the IP core generation.
2. If you do not want to set tcl commands during IP core generation and instead edit the
code to see the simulation speed up, then change the EXAMPLE_SIMULATION
parameter in the generated RTL code to 1 in the following file to speed up functional
simulations:
<USER_COMPONENT_NAME>_core.v[hd]
For more information, see the Vivado Design Suite User Guide: Designing with IP (UG896)
[Ref 7].
Implementation Overview
The quick start example consists of the following components:
• An instance of the Aurora 8B/10B core generated using the default parameters
° AXI4-Stream interface
• A demonstration test bench to simulate two instances of the example design
The Aurora 8B/10B example design has been tested with the Vivado design suite for
synthesis and Mentor Graphics Questa Advanced Simulator for simulation.
Example Design
Each Aurora 8B/10B core includes an example design (<component name>_exdes) that
uses the core in a simple data transfer system.
Figure 5-1 illustrates the block diagram of the example design for a full-duplex core.
X-Ref Target - Figure 5-1
FRAME_GEN TX
Aurora
8B/10B
FRAME_CHECK RX
Demonstration
Test Bench
(<component name>_TB)
FRAME_GEN TX
Aurora
8B/10B
FRAME_CHECK RX
X12997
The example design uses all of the core interfaces. Simplex cores without a TX or RX
interface have no FRAME_GEN or FRAME_CHECK block, respectively.
The FRAME_GEN module generates user traffic to each of the PDU, UFC and NFC interfaces
following the AXI4-Stream protocol. This module contains a pseudo-random number
generator using a linear feedback shift register (LFSR) with a specific initial value to
generate a predictable sequence of data. The FRAME_CHECK module uses this data
sequence to verify the integrity of the Aurora data channel. Module inputs are user_clk,
reset and channel_up.
The FRAME_CHECK module verifies the integrity of the RX data. This module uses the same
LFSR and initial value as the FRAME_GEN module to generate the expected RX frame data.
The received user data is compared with the locally-generated stream and any errors are
reported per the AXI4-Stream protocol. The FRAME_CHECK module is applicable to PDU,
UFC and NFC interfaces.
The example design can be used to quickly get an Aurora 8B/10B design up and running on
a board, or perform a quick simulation of the module. The design can also be used as a
reference for the connecting the more complicated interfaces of the Aurora 8B/10B core,
such as the clocking interface.
When using the example design on a board, be sure to edit the <component name>_
exdes.xdc file to supply the correct pins and clock constraints.
RX Serial
rxn[0:m–1] Input Negative differential serial data input pin.
Clock
RX Serial
rxp[0:m–1] Input Positive differential serial data input pin.
Clock
TX Serial
txn[0:m–1] Output Negative differential serial data output pin.
Clock
TX Serial
txp[0:m–1] Output Positive differential serial data output pin.
Clock
Count of the number of data words received
err_count[0:7] Output user_clk by the frame checker that did not match the
expected value.
Reset signal for the example design. The
reset Input user_clk reset is debounced using a user_clk signal
generated from the reference clock input.
GT Reset signal for the example design.
gt_reset Input init_clk_in gt_reset is debounced using the init_clk_in
signal.
Notes:
1. See Status, Control, and the Transceiver Interface, page 33 for details.
See the Vivado Design Suite User Guide: Programming and Debugging (UG908) [Ref 11].
Test Bench
The Aurora 8B/10B core delivers a demonstration test bench for the example design. This
chapter describes the Aurora test bench and its functionality. The test bench consist of the
following modules:
The Aurora test bench components can change based on the selected Aurora 8B/10B core
configurations, but the basic functionality remains the same for all of the core
configurations.
X-Ref Target - Figure 6-1
High Speed
AXI4-Stream Interface AXI4-Stream Interface
Serial Interface
Status Monitor
X13546
The Aurora test bench environment connects the Aurora duplex core in loopback using a
high-speed serial interface. Figure 6-1 shows the Aurora test bench for the duplex
configuration.
The test bench first verifies the channel state, then monitors the integrity of the user and
UFC data for a predetermined simulation time. The channel_up assertion message
indicates successful link training and channel bonding (in the case of multi-lane designs). A
counter is maintained in the FRAME_CHECK module to track the reception of any erroneous
data. The test bench flags an error when erroneous data is received.
X-Ref Target - Figure 6-2
High Speed
AXI4-Stream Interface AXI4-Stream Interface
Serial Interface
Simplex Partner
Aurora Core Simplex
Aurora Core
FRAME_GEN FRAME_CHECK
TXP/TXN RXP/RXN
RX_AURORA_IP_TX
AURORA_IP_TX (Aurora Exdes) (Partner Aurora Exdes)
Status Monitor
X13545
The test bench first verifies the state of the transmitter and receiver channels, then
monitors the integrity of the user data for a predetermined simulation time. The
tx_channel_up and rx_channel_up assertion messages indicate successful link
training and channel bonding (in case of multi-lane designs).
Aurora 8B/10B cores are verified for protocol compliance using an array of automated
hardware and simulation tests. The core comes with an example design implemented using
a linear feedback shift register (LFSR) for understanding/verification of the core features.
Aurora 8B/10B cores are tested in hardware for functionality, performance, and reliability
using AMD evaluation platforms. Aurora verification test suites for all possible modules are
continuously being updated to increase test coverage across the range of possible
parameters for each individual module.
A series of Aurora 8B/10B core test scenarios are validated using the various AMD
development boards listed in Table A-1. These boards permit the prototyping of system
designs where the Aurora 8B/10B core allows high-speed serial communication between
two boards. The testing of Aurora example design for various configurations are performed
either by board-to-board testing using standard Bulls Eye connectors or SMA connectors.
External cable loopback tests are performed as part of reset stress testing. The test
sequence uses AMD Vivado™ Lab Tools and follows the sequence and tests represented in
the example design simulation. AMD recommends the use of an Aurora IP with link partners
of the same version.
Note: There is no particular requirement with respect to the sequence of resets applied on the
boards. The system functions as designed, irrespective of which board is reset first. For reset
sequencing of Simplex use cases, see, Reset and Power Down.
Note: Interoperability is not tested beyond one generation. It is advised to be cautious on Reset and
Power Sequencing when not using compatible GTs.
Upgrading
This appendix contains information about migrating a design to a different device and for
upgrading to a more recent version of the IP core. For customers upgrading in the AMD
Vivado™ design suite, important details (where applicable) about any port changes and
other impact to user logic are included.
Device Migration
When migrating from a 7 series GTX or GTH transceiver device to an UltraScale™
architecture GTH transceiver, the prefixes of the optional transceiver debug ports for
single-lane cores are changed from “gt0”, “gt1” to “gt”, and the postfix “_in” and “_out” are
dropped. For multi-lane cores, the prefixes of the optional transceiver debug ports, gt(n),
are aggregated into a single port. For example: gt0_gtrxreset and gt1_gtrxreset
now become gt_gtrxreset[1:0]. This rule applies for all ports, with the exception of
the DRP buses which follow the convention of gt(n)_drpxyz.
IMPORTANT: Update your design to use the new transceiver debug port names. For more information
about migration to UltraScale architecture devices, see the UltraScale Architecture Migration
Methodology Guide (UG1026) [Ref 12].
IMPORTANT: When upgrading across different Devices, you need to double check the GT locations and
corresponding customization parameters for a new target device.
As part of the hierarchical changes to the core, it is now possible to have the core itself
include all of the logic which can be shared between multiple cores, which was previously
exposed in the example design for the core.
RECOMMENDED: When updating from a previous version to a recent version with shared logic, there is
no simple upgrade path and AMD recommends that you consult the Shared Logic sections of this
document for more guidance.
Prerequisites
• Vivado design tools build containing the Aurora 8B/10B core supporting the
AXI4-Stream protocol
• Familiarity with the Aurora directory structure
• Familiarity with running the Aurora example design
• Basic knowledge of the AXI4-Stream and LocalLink protocols
• Latest product guide (PG046) of the core with the AXI4-Stream updates
• Legacy LogiCORE IP Aurora 8B/10B Data Sheet (DS637) [Ref 13] and LogiCORE IP Aurora
8B/10B User Guide (UG353) [Ref 14] for reference.
• Migration guide (this appendix)
Limitations
This section outlines the limitations of the Aurora 8B/10B core for AXI4-Stream support. It
is essential to observe two limitations while interfacing the Aurora 8B/10B core with the
AXI4-Stream compliant interface core:
• The Aurora 8B/10B core supports only continuous aligned streams and continuous
unaligned streams. The position bytes are valid only at the end of packet. In other
words, tkeep is sampled only at tlast assertion.
• The AXI4-Stream protocol supports transfers with zero data at the end of the packet,
but the Aurora 8B/10B core expects at least one byte to be valid at the end of the
packet. In other words, tkeep should contain a non-zero value during tlast
assertion.
Block Diagram
Figure B-1 shows an example Aurora design using the legacy LocalLink interface. Figure B-2
shows an example Aurora design using the AXI4-Stream interface.
X-Ref Target - Figure B-1
LocalLink
FRAME GEN
LocalLink
AURORA DESIGN
LocalLink
FRAME CHECK
X13194
LL to AXI4_S
X13193
Migration Steps
Begin by generating an AXI4-Stream Aurora 8B/10B core from the Vivado Design Suite.
Debugging
This appendix provides information on using resources available on the AMD Support
website, available debug tools, and a step-by-step process for debugging designs that use
the Aurora 8B/10B core. This appendix uses a flow diagram as a guide to the debug process.
Documentation
This product guide is the main document associated with the Aurora 8B/10B core. This
guide, along with documentation related to all products that aid in the design process, can
be found on the Support web page or by using the AMD Adaptive Computing
Documentation Navigator.
Download the Documentation Navigator from the Downloads page. For more information
about this tool and the features available, open the online help after installation.
Solution Centers
See the Aurora Solutions Center for support specific to the Aurora 8B/10B core.
Answer Records
Answer Records include information on commonly encountered problems, helpful
information on how to resolve these problems, and any known issues with an AMD Adaptive
Computing product. Answer Records are created and maintained daily to ensure that users
have access to the most accurate information available.
Answer Records for this core can be located by using the Search Support box on the main
Support web page. To maximize your search results, use proper keywords such as:
• Product name
• Tool message(s)
• Summary of the issue encountered
A filter search is available after results are returned to further target the results.
° To see all answer records directly related to the Aurora 8B/10B core, search for the
phrase "Aurora 8B10B"
Master Answer Record for the Aurora 8B/10B Core AR: 54367
Technical Support
AMD provides technical support on the Community Forums for this LogiCORE™ IP product
when used as described in the product documentation. AMD Adaptive Computing cannot
guarantee timing, functionality, or support of the product if you do the following:
• Implement the solution in devices that are not defined in the documentation.
• Customize the solution beyond that allowed in the product documentation.
• Change any section of the design labeled DO NOT MODIFY.
To ask questions, navigate to the Community Forums. Also, see GT_Debug_Flowchart for
transceiver debugging mentioned in the following Answer Record.
AR: 57237
Debug Tools
There are many tools available to address Aurora 8B/10B core design issues. It is important
to know which tools are useful for debugging various situations.
Note: The init_clk_in clock input is provided as a stable and free running clock to drive the
Debug cores and the stability of this clock source is key to ensure debugging is proper. Ensure that
only after this clock is stable the pma_init input of the IP is deasserted. The init_clk_in must
always be stable.
Transceiver Wizard
Serial transceiver attributes play a vital role in Aurora 8B/10B core functionality and
performance. See Appendix D, Generating a Wrapper File from the Transceiver Wizard to
get the latest attribute updates for the core.
Simulation Debug
Lanes and Channel do not come up in simulation
• The most effective method of debugging this condition is to view the signals from one
instance of the serial transceivers that is not working.
• Make sure that the serial transceiver reference clock and user clocks are all toggling.
• Check to see that txoutclk from the serial transceiver wrapper is toggling. If not, it
might take longer for the PMA to finish locking. Wait for lane up and channel up. It
might take even longer for simplex designs.
• Make sure that txn and txp are toggling. If not, make sure to wait long enough and
ensure that the TX signal is not being driven by another signal.
• Check the pll_not_locked signal in the design. If it is held active-High, the Aurora
module is unable to initialize.
• Be sure the power_down signal is not asserted.
• If you assert rx_reset while using Timer mode and simplex configuration, you
should also assert tx_reset to ensure that the core transmits the required
initialization patterns for the rx_lane_up and rx_channel_up to come up.
• If you are using Verilog simulation, instantiate the glbl module and use it to drive the
power_up reset at the beginning of the simulation. This procedure simulates the reset
that occurs after configuration. Hold this reset for a few cycles.
initial
begin
gts_r = 1'b0;
gsr_r = 1'b1;
#(16*CLOCKPERIOD_1);
gsr_r = 1'b0;
end
If using a multi-lane channel, make sure all of the serial transceivers on each side of the
channel are connected in the correct order.
Bytes and words are being lost as they travel through the
Aurora channel
• If using the AXI4-Stream interface, make sure the data is written correctly. The most
common mistake is to assume words are written without monitoring tvalid. Also
remember that the tkeep signal must be used to indicate which bytes are valid when
tlast is asserted. tkeep is ignored when tlast is not asserted (active-High).
• Make sure to read correctly from the RX interface. Data and framing signals are only
valid when tvalid is asserted.
• If you still see bytes/words being lost on the receiver side, check the GT receiver output
data interface. If you notice that data is already lost at the GT receiver output interface,
the issue could be caused by GT or any earlier stage in the system.
Next Step
If the debug suggestions listed previously do not resolve the issue, open a support case to
have the appropriate AMD expert assist with the issue.
To create a technical support case, see the Service Portal web page.
• Detailed description of the issue and results of the steps listed previously.
• Attach a value change dump (VCD) or wave log format (WLF) dump of the simulation.
• Attach the XCI/XCO file from the IP.
• If any modifications are updated to the IP generated out of Vivado and reasons for
doing the changes.
• The.ila dump of the Hardware captures optionally, if available.
Hardware Debug
Most Vivado Integrated Design Environment (IDE) fields have tool tips which serve as
guidelines to configure and generate the core properly. Refer to and follow all
RECOMMENDED and IMPORTANT notes in the product guide.
RECOMMENDED: Ensure that the serial transceiver attributes are updated. See Appendix D, Generating
a Wrapper File from the Transceiver Wizard for instructions and information about updating the serial
transceiver attribute settings. This section provides a debug flow diagram for resolving some of the
most common issues.
This section provides a debug flow diagram for resolving some of the most common issues.
See GT_Debug_Flowchart for transceiver debugging mentioned in the following Answer
Record: AR: 57237
The Transceiver Debug ports mentioned in Table 2-11, page 31 are operational when you
enable the Additional Transceiver Control and Status Ports option in Aurora_8b10b
interface. Refer to Aurora_8b10b IP Example design for recommended connections for
additional transceiver control and status ports in the following guides:
Figure C-1 shows the various steps for performing a hardware debug.
X-Ref Target - Figure C-1
START
Transceiver Attribute
Check (Step 1)
GT TX/RX RESETDONE
Check (Step 3)
USER_CLK Generation
Check (Step 4)
RXDISPERR/
RXNOTINTABLE Check
(Step 6)
END
Transceiver attributes must match with the silicon version of the device being used on
the board. Apply all applicable workarounds and Answer Records given for the
respective silicon version.
2. GT REFCLK and GT PLL LOCK check
A low-jitter differential clock must be provided to the transceiver reference clock. Check
and make sure the REFCLK location constraints are correct with respect to the board
schematics. REFCLK should be active and should meet the phase noise requirements of
the transceiver.
The transceiver locks on to the incoming GT REFCLK signal and asserts the PLL0LOCK
signal. If PLL0LOCK is toggling periodically, check that the FSM reset done signals are
toggling. Make sure that the GT PLL attributes are set correctly and that the transceiver
generates the txoutclk with the expected frequency for the given line rate and
datapath width options. Note that the Aurora 8B/10B core uses Channel PLL (CPLL) in
the generated core for AMD Virtex™ 7 and Kintex™ 7 FPGA GTX and GTH transceivers
and PLL0/PLL1 for Artix™ 7 FPGA GTP transceivers. Check the transceiver power supply
MGTAVCC value.
3. Transceiver TX/RX FSM RESETDONE check
The Aurora 8B/10B core uses sequential reset mode; all of the transceiver components
are reset sequentially, one after another. The txresetdone and rxresetdone signals
should be asserted at the end of the transceiver initialization. In general, rxresetdone
assertion takes longer compared to the TXRESETDONE assertion. Check if user_clk
and sync_clk are connected properly. Make sure the gt_reset signal pulse width
duration complies with the respective transceiver guideline. Probe the signals and FSM
states from the RX/TX STARTUP FSM module. If the RX/TX fsm_resetdone signals are
asserted and the partner is reprogrammed, GTRXRESET should be asserted manually if
hot-plug logic is disabled.
• The sequence defined in the Aurora 8B/10B protocol being transferred between
channel partners
• Successful reception of four verification sequences
Enable loopback mode and check for lane_up assertions. The CHANNEL_INIT_SM module
FSM state signals must be brought to debug if channel_up is not asserted. For a simplex
link, the simplex TX transceiver might have already achieved channel_up status. If the TX
transceiver needs to be reset as per the system design, increase the SIMPLEX_TIMER_VALUE
attribute based on the latency between the release of TX_RESET and RX_RESET. See the
Channel Verification Procedure in the Aurora 8B/10B Protocol Specification v2.2 (SP002)
[Ref 5] for channel_up assertion.
Note: The ENABLE_SOFT_ERR_MONITOR parameter is available in the err_detect module under the
src directory to control the leaky bucket algorithm. This parameter can be to set to 0 to disable the
leaky bucket algorithm for debug purposes.
Traffic
Checker
TX-PMA TX-PCS
TX-PCS 1 TX-PMA 2 3 4
Traffic
Generator
RX-PMA RX-PCS
X13196
Additional Assistance
If the debug suggestions listed previously do not resolve the issue, open a support case to
have the appropriate AMD expert assist with the issue.
• Detailed description of the issue and results of the steps listed previously.
• Attach Vivado lab tools captures taken in the previous steps.
RECOMMENDED: AMD strongly recommends that the transceiver wrapper file is updated in the AMD
Vivado™ Design Suite tool releases when the transceiver wizard has been updated but the Aurora core
has not.
Use these steps to generate the transceiver wrapper file using the 7 series FPGAs
transceivers wizard:
1. Using the Vivado IP catalog, run the latest version of the 7 Series FPGAs Transceivers
Wizard. Make sure the Component Name of the transceiver wizard matches the
Component Name of the Aurora 8B/10B core.
2. Select the protocol template from the following based on the number of lane(s) and lane
width:
The transceiver settings for the Aurora 8B/10B core are now up to date.
Note: The UltraScale™ architecture Aurora 8B/10B core uses the hierarchical core calling method to
call the UltraScale device gtwizard IP core. In this way, all the transceiver attributes, parameters, and
required workarounds are in place and correct. Manual editing of the UltraScale device transceiver
files are not required in most of the cases. The attribute(s) in the Aurora 8B/10B core example design
XDC file can be updated.
• Line rate
• Transceiver datapath width (2/4 bytes)
• Number of unused transceivers between two selected transceivers
As a result of one or more of these parameters, timing errors can occur because:
Use the Lane Assignment in the Aurora 8B/10B AMD Vivado™ Integrated Design
Environment (IDE) to select the transceivers during core generation.
Note: Most of the timing errors are due to unused transceivers and channel bonding signals
connections among transceivers.
• Use the Strategies options provided for implementation in the Vivado Design Suite. See
the Vivado Design Suite User Guide: Designing with IP (UG896) [Ref 7] for instructions
on how to use the Strategies options.
Support Resources
For support resources such as Answers, Documentation, Downloads, and Forums, see
Support.
Documentation Navigator
Documentation Navigator (DocNav) is an installed tool that provides access to AMD
Adaptive Computing documents, videos, and support resources, which you can filter and
search to find information. To open DocNav:
• From the AMD Vivado IDE, select Help > Documentation and Tutorials.
• On Windows, click the Start button and select Xilinx Design Tools > DocNav.
• At the Linux command prompt, enter docnav.
Note: For more information on DocNav, refer to the Documentation Navigator User Guide (UG968).
Design Hubs
AMD Design Hubs provide links to documentation organized by design tasks and other
topics, which you can use to learn key concepts and address frequently asked questions. To
access the Design Hubs:
References
These documents provide supplemental material useful with this product guide. You should
be familiar with these documents prior to generating an Aurora 8B/10B core.
Revision History
The following table shows the revision history for this document.
© Copyright 2012–2023 Advanced Micro Devices, Inc. AMD, the AMD Arrow logo, Artix, Kintex, UltraScale+, Virtex, Vivado, Zynq,
and combinations thereof are trademarks of Advanced Micro Devices, Inc. Other product names used in this publication are for
identification purposes only and may be trademarks of their respective companies. AMBA, AMBA Designer, Arm, ARM1176JZ-S,
CoreSight, Cortex, PrimeCell, Mali, and MPCore are trademarks of Arm Limited in the EU and other countries. MATLAB and
Simulink are registered trademarks of The MathWorks, Inc. All other trademarks are the property of their respective owners.