pluto_hdl_adi/docs/library/axi_adxcvr/index.rst

329 lines
12 KiB
ReStructuredText
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

.. _axi_adxcvr:
AXI_ADXCVR
================================================================================
.. hdl-component-diagram::
:path: library/xilinx/axi_adxcvr
The AXI_ADXCVR utility IP core is used to control and configure the highspeed
transceivers.
There are separate AXI_ADXCVR cores for Intel and AMD Xilinx designs, due to the
small differences between the AMD Xilinx's and Intel's transceivers architecture.
For the AMD Xilinx architecture, the transceivers are instantiated in
:ref:`UTIL_ADXCVR <util_adxcvr>`.
Features
--------------------------------------------------------------------------------
- Supports :git-hdl:`Intel <library/intel/axi_adxcvr>`
and :git-hdl:`AMD Xilinx <library/xilinx/axi_adxcvr>` devices.
- Software can access the core's registers through an AXI4 Lite Memory Mapped
interface.
- Link reset and monitor for Intel and AMD Xilinx.
- Reconfiguration interface control with broadcast capability for AMD Xilinx.
- Access to the Statistical eye scan interface of the PHY (AMD Xilinx).
- Supports up to 16 transceiver lanes per link (AMD Xilinx).
Intel Devices
--------------------------------------------------------------------------------
For Intel devices, the adi_jesd204 IP is using the axi_adxcvr core, which can be
accessed by the **link_management** interface. It provides a global reset signal
for the JESD204B framework. Resets the XCVR reset controller IP, the link PLL
reset controller, the PHY itself, and also the link layer of the stack. Besides
the reset generation, monitors the PLLs and the PHY state.
Parameters
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. hdl-parameters::
:path: library/xilinx/axi_adxcvr
* - ID
- Instance identification number, if more than one instance is used.
* - NUM_OF_LANES
- The number of lanes (primitives) used in this link.
* - XCVR_TYPE
- Refers to the transceiver speed grade 0-9.
* - FPGA_TECHNOLOGY
- Encoded value describing the technology/generation of the FPGA device
(e.g. Cyclone V, Arria 10, Stratix 10).
* - FPGA_FAMILY
- Encoded value describing the family variant of the FPGA device
(e.g. SX, GX, GT).
* - SPEED_GRADE
- Encoded value describing the FPGAs speed-grade.
* - DEV_PACKAGE
- Encoded value describing the device package. The package might affect
high-speed interfaces.
* - FPGA_VOLTAGE
- Contains the value(0-5000 mV) at wich the FPGA device supplied.
* - TX_OR_RX_N
- If set (0x1), configures the link in transmit mode, otherwise receive.
Interfaces
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. hdl-interfaces::
:path: library/xilinx/axi_adxcvr
* - s_axi_aclk
- System clock. (in general 100 MHz)
* - s_axi_aresetn
- System reset.
* - s_axi
- Subordinate AXI4 Lite Memory Mapped interface
* - up_ch_*
- | Connect logical port ``pll_locked`` to the fPLLs **pll_locked** pin;
| Connect logical port ``ready`` to PHY reset controller.
Register Map
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. hdl-regmap::
:name: INTEL_XCVR
:no-type-info:
Software Guidelines
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
When the board powers up, both ATX and fPLL's must have a stable reference clock
in order to lock automatically. If this requirement can not be respected by the
system (e.g. the reference clocks are generated by a device that requires
software configuration, through an interface implemented in FPGA), the software
needs to reconfigure both PLLs, and just after that resets the transceivers.
AMD Xilinx Devices
--------------------------------------------------------------------------------
In AMD Xilinx Devices, the core configures itself to be interfaced with the GT
variant supported by the UTIL_ADXCVR core. All the transceiver primitives are
configured and programmed identically.
.. _parameters-1:
Parameters
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. hdl-parameters::
:path: library/xilinx/axi_adxcvr
* - ID
- Instance identification number, if more than one instance is used
* - NUM_OF_LANES
- The number of lanes (primitives) used in this link
* - XCVR_TYPE
- Define the current GT type, GTXE2(2), GTHE3(5), GTHE4(7)
* - FPGA_TECHNOLOGY
- Encoded value describing the technology/generation of the FPGA device
(7series/ultrascale)
* - FPGA_FAMILY
- Encoded value describing the family variant of the FPGA device(e.g.,
zynq, kintex, virtex)
* - SPEED_GRADE
- Encoded value describing the FPGA's speed-grade
* - DEV_PACKAGE
- Encoded value describing the device package. The package might affect
high-speed interfaces
* - FPGA_VOLTAGE
- Contains the value(0-5000 mV) at wich the FPGA device supplied
* - TX_OR_RX_N
- If set (0x1), configures the link in transmit mode, otherwise receive
* - QPLL_ENABLE
- If set (0x1), configures the link to use QPLL on QUAD basis. If multiple
links are sharing the same transceiver, only one of them may enable the
QPLL.
* - LPM_OR_DFE_N
- Chosing between LPM or DFE of modes for the RX Equalizer
* - RATE
- Defines the initial values for Transceiver Control Register (CONTROL
0x0008)
* - TX_DIFFCTRL
- Driver Swing Control(TX Configurable Driver)
* - TX_POSTCURSOR
- Transmitter post-cursor TX pre-emphasis control
* - TX_PRECURSOR
- Transmitter pre-cursor TX pre-emphasis control
* - SYS_CLK_SEL
- Selects the PLL reference clock source to drive the RXOUTCLK
:ref:`Table 1 <axi_adxcvr table_one_label>`
* - OUT_CLK_SEL
- select the transceiver reference clock as the source of TXOUTCLK
:ref:`Table 2 <axi_adxcvr table_two_label>`
Interfaces
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. hdl-interfaces::
:path: library/xilinx/axi_adxcvr
.. _register-map-1:
Register Map
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. hdl-regmap::
:name: XCVR
:no-type-info:
.. _software-guidelines-1:
Software Guidelines
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The system must have active DRP and reference clocks before any software access.
The software is expected to write necessary control parameters to LPM_DFE_N,
RATE, SYSCLK_SEL, OUTCLK_SEL register bits and then set RESETN bit to 0x1.
After that, monitor the STATUS bit to be set. There are no other requirements
for initialization.
The DRP access is identical for common and channel interfaces. The SEL bits may
be set to a specific transceiver lane or 0xff to broadcast. A write to the
CONTROL register (bits WR, ADDR, WDATA) initiates DRP access in hardware. A read
to this register has no effect. In order to write to the transceiver, set WR to
0x1 with the address. In order to read from the transceiver, set WR to 0x0 with
the address. As soon as this register is written, the BUSY signal is set and is
cleared only after the access is complete. The broadcast read is a logical OR of
all the channels. After an access is started, do NOT interrupt the core for any
reason (including setting RESETN to 0x0), allow the access to finish itself.
Though the core itself is immune to a software abort, the transceiver may fail
on further accesses and may require a system-wide reset.
The eye-scan feature also allows a SEL option and a broadcast has the effect of
a combined mask. That is, the error counter will be zero ONLY if all the
transceiver error counters are zero. To start eye-scan, set ES_REQ to 0x1 and
wait for the same bit to self-clear. If eye-scan needs to be stopped, set the
ES_REQ bit to 0x0.
.. _axi_adxcvr table_one_label:
Table 1
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. list-table::
:header-rows: 1
* - SYSCLK_SEL
- 00
- 01
- 10
- 11
* - GTXE2
- CPLL
- RESERVED
- RESERVED
- QPLL
* - GTHE3
- CPLL
- RESERVED
- QPLL1
- QPLL0
* - GTHE4
- CPLL
- RESERVED
- QPLL1
- QPLL0
* - GTYE4
- CPLL
- RESERVED
- QPLL1
- QPLL0
.. _axi_adxcvr table_two_label:
Table 2
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. list-table::
:header-rows: 1
* - OUTCLK_SEL
- 001
- 010
- 011
- 100
- 101
- All other combinations
* - GTXE2
- OUTCLKPCS
- OUTCLKPMA
- REFCLK
- REFCLK/2
- RESERVED
- RESERVED
* - GTHE3
- OUTCLKPCS
- OUTCLKPMA
- REFCLK
- REFCLK/2
- PROGDIVCLK
- RESERVED
* - GTHE4
- OUTCLKPCS
- OUTCLKPMA
- REFCLK
- REFCLK/2
- PROGDIVCLK
- RESERVED
* - GTYE4
- OUTCLKPCS
- OUTCLKPMA
- REFCLK
- REFCLK/2
- PROGDIVCLK
- RESERVED
The REFCLK selected by OUTCLK_SEL depends on the SYSCLK_SEL, it may be CPLL,
QPLL0 or QPLL1 refclk.
Physical layer PRBS testing
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The PRBS_CNTRL and PRBS_STATUS registers expose controls of internal
PRBS generators and checkers allowing the testing the multi-gigabit serial link
at the physical layer without the need of the link layer bringup.
TX link procedure
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#. Configure the reference clock and device clocks for under test lane rate.
Bring XCVR out from reset.
#. In the PRBS_CNTRL registers set PRBSSEL to a non-zero value. See the
transceiver guides for exact values, different transceiver families may have
different encoding for the same pattern.
#. On the receiving side of the link, set the checker for the same pattern and
reset the error counters.
#. No error should be recorded on the receiver side.
#. Set the PRBSFORCEERR bit in the PRBS_CNTRL register to force the error
injection into the stream of bits.
#. The error should be detected and recorded on the receiver side.
RX link procedure
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#. Configure the reference clock and device clocks for under test lane rate.
Bring XCVR out from reset.
#. On the transmit side of the link, set a test pattern that is available in the
receiving transceiver. Consult the transceiver documentation for details.
#. In the PRBS_CNTRL registers set PRBSSEL to the corresponding pattern.
Reset the error counters with PRBSCNTRESET.
#. Check PRBS_STATUS fields for results. If the check is successful for
non-GTX transceivers the PRBSLOCKED bit must appear as set and PRBSERR must
stay low. For GTX transceivers the PRBSLOCKED bit can be ignored and checking
the PRBSERR alone is sufficient. If PRBSERR is set, check with DRP accesses
the internal error counter to get the number of errors received. See the
transceiver guide for details.
More Information
--------------------------------------------------------------------------------
- :ref:`jesd204`
- :dokuwiki:`JESD204B/C AXI_ADXCVR Highspeed Transceivers Linux Driver <resources/tools-software/linux-drivers/jesd204/axi_adxcvr>`
Reference
--------------------------------------------------------------------------------
- :intel:`Intel® Arria® 10 Transceiver PHY User Guide <content/dam/www/programmable/us/en/pdfs/literature/hb/arria-10/ug_arria10_xcvr_phy.pdf>`
- `7 Series FPGAs GTX/GTH Transceivers User Guide - AMD Xilinx <https://docs.amd.com/v/u/en-US/ug476_7Series_Transceivers>`_
- `Ultrascale Architecture GTH Transceivers User Guide - AMD Xilinx <https://docs.amd.com/v/u/en-US/ug576-ultrascale-gth-transceivers>`_