ID 683621
Date 7/20/2022
Public

## 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 to 0x0 and 0x14D to 0x0.
2. In the second iteration, set 0x144 to 0x1 and 0x14D to 0x1.
4. If the DFE is enabled28, repeat Step 5 to Step 37 four times:
1. In the first iteration, set 0x144 to 0x0 and 0x14D to 0x0.
1. If DFE_tap1_sign = 0, set 0x156 to 0x0.
2. If DFE_tap1_sign = 1, set 0x156 to 0x1.
2. In the second iteration, set 0x144 to 0x0 and 0x14D to 0x1.
1. If DFE_tap1_sign = 0, set 0x156 to 0x1.
2. If DFE_tap1_sign = 1, set 0x156 to 0x0.
3. In the third iteration, set 0x144 to 0x1 and 0x14D to 0x0.
1. If DFE_tap1_sign = 0, set 0x156 to 0x0.
2. If DFE_tap1_sign = 1, set 0x156 to 0x1.
4. In the fourth iteration, set 0x144 to 0x1 and 0x14D to 0x1.
1. If DFE_tap1_sign = 0, set 0x156 to 0x1.
2. If DFE_tap1_sign = 1, set 0x156 to 0x0.
5. If the targeted device is H-tile production or H-tile ES3:
1. Set 0x100 to 0x1.
2. Set 0x0[7:0] to 0x01 to request PreSICE to calibrate the ODI samplers.
3. Read 0x481 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 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 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 to 0x0 to reset the serial bit counter.
16. Set 0x168 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 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. DFE is disabled when 0x161 = 1.
29 Wait 25 µs between setting register 0x149[5:0] and reading 0x17E or 0x17F.