This article describes a module that can easily be inserted into a design and interfaced to the GT's DRP port to perform a simple Eye Scan.
The data is ported to an ILA module which can then be exported to a CSV file for analysis. Some analysis can be done on screen.
The module can be inserted in the top level code that performs the Eye Scan. The instantiation and code is shown below.
There is a VIO in the module which starts the scan. This can also be used to write to the GT through the DRP ports, in order to modify parameters so that performance comparisons can be done.
... .gt0_drpaddr_in (gt0_drpaddr_i), .gt0_drpdi_in (gt0_drpdi_i), .gt0_drpdo_out (gt0_drpdo_i), .gt0_drpen_in (gt0_drpen_i), .gt0_drprdy_out (gt0_drprdy_i), .gt0_drpwe_in (gt0_drpwe_i), ... eyeScan eyeInst( .CLK(drpclk_in_i), .rst(soft_reset_i), .drpDo(gt0_drpdo_i), .drpRdy(gt0_drprdy_i), .drpAddr(gt0_drpaddr_i), .drpWe(gt0_drpwe_i), .drpEn(gt0_drpen_i), .drpDi(gt0_drpdi_i) );
Changes are needed to some attributes to enable the Eye Scan. The ES_SDATA_MASK will vary depending on the width of the internal data bus. In the case shown below it is set to 20.
.ES_ERRDET_EN ("TRUE"), .ES_QUAL_MASK (80'hFFFFFFFFFFFFFFFFFFFF), .ES_SDATA_MASK (80'hFFFFFFFFFF00000FFFFF),
In addition pma_rsv2 bit 5 needs to be set to 1. For the example design the value becomes:
The values outside of bit 5 can vary depending on the design. These attributes can be changed in the constraint file and could also be changed with the VIO ports in the eyeScan.v module.
To run the Eye Scan set the ILA to run on trigger. Then press the go button in the VIO screen. The ILA output will show the vertical and horizontal positons and the sample count and errors at that position.
In the sample shown below you can see the eye is open from 43 to -17 on the horizontal axis at a vertical position of 75.
This output can be exported to a CSV file for processing in Excel or Matlab to get the normal eye diagram.