The NIDRU allows plotting the eye diagram using live data, i.e., without affecting the data traffic. This feature is very useful during the debug phase, as it allows measuring the receiver margin. During normal operation, this feature allows detecting links that are degrading over time before they can result in a visible BER.
The resolution of the eye scan is 256 taps for a single UI, independently on the oversampling rate.
The operating principle is based on the creation of additional sampling phases (exploring phases), on top of the one (mission phase) that is sampling the eye in the position that is supposed to be the optimal one, which is always active.
The number of exploring phases is defined with the attribute PH_NUM. Because it is DSP based, there is no limit to the number of exploring phases that can be created, and the NIDRU allows a maximum of two exploring phases.
The PH_NUM attribute is used to activate and configure the eye scan logic.
- PH_NUM=0 means no eye scan.
- PH_NUM=1 means that the eye scan operates with one exploring phase, ranging from -128 to 127, equivalent to -0.5UI to 0.5UI.
- PH_NUM=2 means that the eye scan operates with two exploring phases. Using the automatic eye scan controller, PH_0 sweeps the right portion of the eye, from 0 to 127 (i.e., from 0 to 0.5 UI). Symmetrically, PH_1 sweeps the left side of the eye, from -1 to -128.
Setting PH_NUM to 0 allows the saving of fabric resources. If the eye scan functionality is only used during debug, it can be removed after the debug phase, and the NIDRU functionality is unaffected.
In automatic mode (AUTOM=1), all steps to perform an eye scan are managed by the embedded eye scan controller and each sweep can be triggered by simply pulsing the START_EYESCAN port for at least one clock cycle. The output EYESCAN_BUSY is asserted by the NIDRU until all 256 points are swept. The port WAITING_TIME is used to specify how many clock cycles (fREFCLK ) should be devoted to each single sweeping point.
The following figure shows the timing diagram in automatic mode for PH_NUM=1.
The following figure shows the timing diagram in automatic mode for PH_NUM=2.
The measurement time for each point is user specified through the port WAITING_TIME, which specifies the error accumulation time in clock cycles of FREFCLK . The following equation allows relating the value of WAITING_TIME to the target BER.
To plot the eye scan, plot the ports ERR_PH_0 and ERR_PH_1 in the simulator viewer on an ILA core. These signals are valid only when the corresponding EN_ERR_PH_x signals are set to 1.
When PH_NUM=1, the full eye shape can be seen on one line. When PH_NUM=2, the two halves of the eye are simultaneously plotted on two independent lines.
The port TRIGGER_MODE is used only when AUTOM=1 and specifies if the eye scan should be performed repetitively (TRIGGER_MODE=1) or once (TRIGGER_MODE=0).
Keeping TRIGGER_MODE=1, the eye scan measurement is continuously updated on the output port EYE_AP, which can easily be used to define whether the NIDRU is locked to the incoming data.
In manual mode (AUTOM=0), both phases can be moved freely. To measure the eye aperture in any given point inside the eye, PH_0 is the port for phase 0 and PH_1 is the port for phase 1. The exploring phases should never be moved by more than 1 step per clock cycle.
The timing diagrams in automatic mode implemented in the eye scan controller can be used as examples to easily derive the timing diagram for any preferred eye exploration method.