We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

Page Bookmarked

AR# 67295

Manual Eye Scan with UltraScale GTH in 9 steps


Manual Eye Scan:

UltraScale GTH and GTY allow a real-time, not disruptive Eye Scan. The user can at the same time receive data and check the equalized signal eye extension for a full BER and signal margin control, without missing a single bit.

Most of the information required can be found in (UG576) UltraScale and UltraScale+ GTH and (UG578) UltraScale and UltraScale+ GTY, RX Margin Analysis.

This Answer Record will guide you through a step-by-step simple case of running a Manual Eye Scan.


The Eye Scan feature is already implemented in IBERT, where a GUI helps with a simple customization of the Eye Scan, and IBERT drives the Eye Scan automatically.

However, some additional HDL is required to pair the Eye Scan feature with your design (this option is referred to here as Manual Eye Scan).

Because the Eye Scan engine is controlled by a few attributes mapped in the DRP space, most of the required code is just to take care of the DRP Read, Modify and Write operations.

For those designs where the DRP port is already used, this comes for free.

The ports required for the Eye Scan are listed in Table 4-18 of (UG576) and (UG578).

The following steps are required once before a Manual Eye Scan:

  1. Correctly set the Eye Scan attributes
  2. Reset the GT (with EYESCANRESET included)


The following steps can be cycled during an Eye Scan sweep

  1. Set the offset sampler position
  2. Trigger the Eye Scan State Machine
  3. Evaluate the counters values at the end of the scan process


The Manual Eye Scan can get very sophisticated, and can do the following:

  • Sweep the full eye or part of it
  • Run continuously or one shot
  • Vary the BER target depending on the offset sampler position
  • Evaluate the signal quality and monitor its changes with time 

It can also have different utilities to a plain Eye Scan, as will be shown later.

However, the atomic access to the Eye Scan will always step through the few simple passages given. There are many options to get to the same result; probably the more flexible is to let a microprocessor handle the Eye Scan.

A very fast Eye Scan could be developed entirely in HDL. (Xilinx Answer 64098) is a good example of a simple Eye Scan measurement realized with the ILA.

Flow diagram and step by step GTH Eye Scan


Once the transceiver is correctly set up and working, the basic Eye Scan goes through the measurement loop of the FSM. The FSM default startup state is WAIT.

By changing the ES_CONTROL[1:0] (the signals arm and run, respectively), from the WAIT state, run initiates the BER measurement loop (left) and arm starts the diagnostic loop (right). In this Answer Record only the measurement loop is explored.

The FSM automatically starts the error counting and the received samples counting. The counters are updated continuously, until one of the two counters reaches the saturation point. At this point the FSM reaches the state END.

We always have access to the FSM actual status by reading the ES_CONTROL_STATUS.

In the END status it is possible to read the counters and calculate the BER.


9 Steps for a BER measurement

The following step by step path should guide you to a single sample position error measurement in LPM mode, when the offset sampler is on 0V differential and +4/64 UI right offset.

By sweeping the offset sampler position inside the eye extension, the user can complete the Eye Scan. Please refer to the User Guide for the complete description of each attribute used.


Step 1: Be ready for the scan:

ES_CONTROL [5:0] = 6b000000

ES_EYE_SCAN_EN = 1b1 enables the Eye Scan

ES_ERRDET_EN = 1b1 enables the error detection: each bit of the Sdata bus is 1 if and only if the corresponding offset data sample does not agree with the recovered data sample.

ES_PRESCALE according to the BER target (we can set it to be very small initially: i.e. 5b00100)

Step 2: Reset the GT. The GT should be up and running. Here for example, you configure the transmitter and receiver equalizers, run the reset sequences, wait for reset done, and check that buffers are not overflowing etc.. In this example the LPM mode is used.

Step 3: Before running the error counting, we need to tell the Eye Scan engine what to measure. This is well described in the User Guide, in the Eye Scan Architecture chapter. 

Commonly, a statistical eye view uses the following:

ES_SDATA_MASK = {40{1b1}, 40{1b0}} for 80-bit data

ES_QUAL_MASK = {80{1b1}}

Step 4: set the vertical offset. For example:

RX_EYESCAN_VS_NEG_DIR = 1b0 (Equivalent to ES_VERT_OFFSET[7] in 7 series devices)

RX_EYESCAN_VS_UT_SIGN = 1b0 (Equivalent to ES_VERT_OFFSET[8] in 7 series devices)

RX_EYESCAN_VS_CODE = 7b0000000 (Equivalent to ES_VERT_OFFSET[6:0] in 7 series devices)

RX_EYESCAN_VS_RANGE = 2b00 (This sets scale factor for eye scan)

Step 5: set the horizontal offset position. For example, 4 taps to the right with respect to the data sampler:

ES_HORZ_OFFSET[10:0] = 11'b00000000100 ; always set ES_HORZ_OFFSET[11] = ES_HORZ_OFFSET[10]

Step 6: run the Scan by bringing the FSM to RESET and decide on the measurement loop:

Set the ES_CONTROL = 6b000001

Step 7: check that the FSM is in END status.

Read ES_CONTROL_STATUS should be equal to 3b010

Step 8: when the FSM is in END status we can finally read the errors, the samples, and calculate the BER.

Step 9: bring back the FSM to WAIT status and cycle again.

set ES_CONTROL [5:0] = 6b000000


Repeat for a different offset position starting from Step 5.


AR# 67295
Date 05/09/2017
Status Active
Type General Article
  • Kintex UltraScale
  • Virtex UltraScale