L- and H-Tile Transceiver PHY User Guide

ID 683621
Date 1/30/2024
Public
Document Table of Contents

2.4.4.4.5. Scanning the Horizontal and Vertical Phases

Sweep the horizontal and vertical phases to get a two-dimensional eye diagram.

Note: The horizontal phase steps (left_phase and right_phase) correspond to zero BER in the previous sweep. The phase steps with no BER may wrap around, for example, from phase 110 to phase 20.
  1. Create a 130*130 2D floating point array called ODI_error_count and initialize it to 0.
  2. Create a 130*130 2D floating point array called ODI_pattern_count and initialize it to 0.
  3. If DFE is disabled 28, repeat Step 5 to Step 37 two times:
    1. In the first iteration, set 0x144[2] to 0x0 and 0x14D[0] to 0x0.
    2. In the second iteration, set 0x144[2] to 0x1 and 0x14D[0] to 0x1.
  4. If the DFE is enabled28, repeat Step 5 to Step 37 four times:
    1. In the first iteration, set 0x144[2] to 0x0 and 0x14D[0] to 0x0.
      1. If DFE_tap1_sign = 0, set 0x156[2] to 0x0.
      2. If DFE_tap1_sign = 1, set 0x156[2] to 0x1.
    2. In the second iteration, set 0x144[2] to 0x0 and 0x14D[0] to 0x1.
      1. If DFE_tap1_sign = 0, set 0x156[2] to 0x1.
      2. If DFE_tap1_sign = 1, set 0x156[2] to 0x0.
    3. In the third iteration, set 0x144[2] to 0x1 and 0x14D[0] to 0x0.
      1. If DFE_tap1_sign = 0, set 0x156[2] to 0x0.
      2. If DFE_tap1_sign = 1, set 0x156[2] to 0x1.
    4. In the fourth iteration, set 0x144[2] to 0x1 and 0x14D[0] to 0x1.
      1. If DFE_tap1_sign = 0, set 0x156[2] to 0x1.
      2. If DFE_tap1_sign = 1, set 0x156[2] to 0x0.
  5. If the targeted device is H-tile production or H-tile ES3:
    1. Set 0x100[4] to 0x1.
    2. Set 0x0[7:0] to 0x01 to request PreSICE to calibrate the ODI samplers.
    3. Read 0x481[2] until it becomes 0x0.
  6. Set 0x171[4:1] to 0xB to configure the Avalon® memory-mapped interface testmux.
  7. Set 0x157[3:2] to 0x2 to capture the odd eye.
  8. Set integer variable vertical_phase to 0 and repeat Step 9 to Step 11 while incrementing vertical_phase until it reaches 126.
  9. If the vertical phase < 0x3F:
    1. Set 0x156[0] to 0x1 to capture the top half of the eye.
    2. Set 0x143[7:2] to 0x3Fvertical_phase.
  10. If the vertical phase >= 0x3F:
    1. Set 0x156[0] to 0x0 to capture the bottom half of the eye.
    2. Set 0x143[7:2] to vertical_phase0x3F.
  11. Set an integer horizontal_phase to left_phase – 10 and repeat Step 12 to Step 36 while incrementing horizontal_phase until it reaches right_phase + 10.
    1. If right_phase < left_phase, in other words, the eye is wrapped around, increment right_phase by 0x80.
  12. If horizontal_phase is < 1, increment it by 0x80.
  13. If horizontal_phase > 128, decrement it by 0x80.
  14. Set 0x145[6:0] to the encoded horizontal_phase.
  15. Set 0x168[2] to 0x0 to reset the serial bit counter.
  16. Set 0x168[2] to 0x1 to release the reset on the serial bit counter.
  17. Set 0x149[5:0] to 0x1C to read the ODI status.
  18. Read 0x17E[1] 29 until it becomes 0x1 to indicate that the ODI has received the selected number of bits and has completed.
  19. Set 0x149[5:0] to 0x1B to read the number of ODI error bits.
  20. Read 0x17E[7:0] 29, and save it as an integer ODI_count_A.
  21. Set 0x149[5:0] to 0x1A to read the number of ODI error bits.
  22. Read 0x17E[7:0] 29, and save it as an integer ODI_count_B.
  23. Set 0x149[5:0] to 0x19 to read the number of ODI error bits.
  24. Read 0x17E[7:0] 29, and save it as an integer ODI_count_C.
  25. Set 0x149[5:0] to 0x18 to read the number of ODI error bits.
  26. Read 0x17E[7:0] 29, and save it as an integer ODI_count_D.
  27. ODI_error_count[horizontal_phase][vertical_phase] = ODI_count_A * 224 + ODI_count_B * 216 + ODI_count_C * 28 + ODI_count_D + ODI_error_count[horizontal_phase][vertical_phase]
    If the device is not H-tile production, the ODI_error_count may be greater than the actual count by 1.
  28. Set 0x149[5:0] to 0x17 to read the number of ODI error bits.
  29. Read 0x17E[7:0] 29, and save it as an integer ODI_pattern_A.
  30. Set 0x149[5:0] to 0x16 to read the number of ODI error bits.
  31. Read 0x17E[7:0] 29, and save it as an integer ODI_pattern_B.
  32. Set 0x149[5:0] to 0x15 to read the number of ODI error bits.
  33. Read 0x17E[7:0] 29, and save it as an integer ODI_pattern_C.
  34. Set 0x149[5:0] to 0x14 to read the number of ODI error bits.
  35. Read 0x17E[7:0] 29, and save it as an integer ODI_pattern_D.
  36. ODI_pattern_count[horizontal_phase][vertical_phase] = ODI_pattern_A * 224 + ODI_pattern_B * 216 + ODI_pattern_C * 28 + ODI_pattern_D + ODI_pattern_count[horizontal_phase][vertical_phase]
  37. Set 0x157[3:2] to 0x1 to capture the even eye, and repeat Step 8.
  38. The BER at the horizontal phase and vertical phase = ODI_error_count[horizontal_phase][vertical_phase]/ODI_Pattern_count[horizontal_phase][vertical_phase].
28 To determine DFE mode, read 0x161[6]. DFE is disabled when 0x161[6] = 1.
29 Wait 25 µs between setting register 0x149[5:0] and reading 0x17E or 0x17F.