L-Tile和H-Tile收发器PHY用户指南

ID 683621
日期 3/29/2021
Public
文档目录

2.4.4.4.4. 扫描水平和垂直相位

扫描水平和垂直相位以获得二维眼图。

注: 水平相位步长(left_phaseright_phase)对应于前一次扫描中的零BER。没有 BER的相位步长可能环绕(wrap around),例如,从相位110到相位20。
  1. 创建一个名为ODI_error_count的130*130 2D浮点数组,并将其初始化为0。
  2. 创建一个名为ODI_pattern_count的130*130 2D浮点数组,并将其初始化为0。
  3. 如果DFE禁用 28,重复Step 5Step 37两次:
    1. 在第一次迭代中,将0x144[2]设置成0x0,将0x14D[0]设置成0x0
    2. 在第二次迭代中,将0x144[2]设置成0x1,将0x14D[0]设置成0x1
  4. 如果DFE使能28,重复Step 5Step 37四次:
    1. 在第一次迭代中,将0x144[2]设置成0x0,将0x14D[0]设置成0x0
      1. 如果DFE_tap1_sign = 0,那么将0x156[2]设置成0x0
      2. 如果DFE_tap1_sign = 1,那么将0x156[2]设置成0x1
    2. 在第二次迭代中,将0x144[2]设置成0x0,将0x14D[0]设置成0x1
      1. 如果DFE_tap1_sign = 0,那么将0x156[2]设置成0x1
      2. 如果DFE_tap1_sign = 1,那么将0x156[2]设置成0x0
    3. 在第三次迭代中,将0x144[2]设置成0x1,将0x14D[0]设置成0x0
      1. 如果DFE_tap1_sign = 0,那么将0x156[2]设置成0x0
      2. 如果DFE_tap1_sign = 1,那么将0x156[2]设置成0x1
    4. 在第四次迭代中,将0x144[2]设置成0x1,将0x14D[0]设置成0x1
      1. 如果DFE_tap1_sign = 0,那么将0x156[2]设置成0x1
      2. 如果DFE_tap1_sign = 1,那么将0x156[2]设置成0x0
  5. 如果目标器件是H-tile产品或者H-tile ES3:
    1. 0x100[4]设置成0x1
    2. 0x0[7:0]设置成0x01以请求PreSICE校准ODI采样器。
    3. 读取0x481[2],直到它变成0x0
  6. 0x171[4:1]设置成0xB以配置 Avalon® memory-mapped interface testmux。
  7. 0x157[3:2]设置成0x2来捕捉奇数眼(odd eye)。
  8. 将整数变量vertical_phase设置成0,然后重复Step 9Step 11,同时递增vertical_phase直到126。
  9. 如果垂直相位 < 0x3F
    1. 0x156[0]设置成0x1以捕捉眼的上半部。
    2. 0x143[7:2]设置成0x3Fvertical_phase
  10. 如果垂直相位 >= 0x3F:
    1. 0x156[0]设置成0x0以捕捉眼的下半部。
    2. 0x143[7:2]设置成vertical_phase0x3F
  11. 将整数horizontal_phase设置成left_phase – 10,重复Step 12Step 36,同时递增horizontal_phase直到right_phase + 10。
    1. 如果right_phase < left_phase,也就是眼被环绕,那么将right_phase递增0x80
  12. 如果horizontal_phase < 1,那么递增0x80
  13. 如果horizontal_phase < 128,那么递减0x80
  14. 0x145[6:0]设置成编码的horizontal_phase
  15. 0x168[2]设置成0x0以复位串行比特计数器。
  16. 将0x168[2]设置成0x1以释放串行比特计数器上的复位。
  17. 0x149[5:0]设置成0x1C以读取ODI状态。
  18. 读取0x17E[1] 29直到它变成0x1,表明ODI已接收到选定的比特数并已完成。
  19. 0x149[5:0]设置成0x1B以读取ODI错误比特的数量。
  20. 读取0x17E[7:0] 29,将此值保存为一个整数ODI_count_A
  21. 0x149[5:0]设置成0x1A以读取ODI错误比特的数量。
  22. 读取0x17E[7:0] 29,将此值保存为一个整数ODI_count_B
  23. 0x149[5:0]设置成0x19以读取ODI错误比特的数量。
  24. 读取0x17E[7:0] 29,将此值保存为一个整数ODI_count_C
  25. 0x149[5:0]设置成0x18以读取ODI错误比特的数量。
  26. 读取0x17E[7:0] 29,将此值保存为一个整数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]
    如果器件不是H-tile产品,那么ODI_error_count可能比实际计数大1。
  28. 0x149[5:0]设置成0x17以读取ODI错误比特的数量。
  29. 读取0x17E[7:0] 29,将此值保存为一个整数ODI_pattern_A
  30. 0x149[5:0]设置成0x16以读取ODI错误比特的数量。
  31. 读取0x17E[7:0] 29,将此值保存为一个整数ODI_pattern_B
  32. 0x149[5:0]设置成0x15以读取ODI错误比特的数量。
  33. 读取0x17E[7:0] 29,将此值保存为一个整数ODI_pattern_C
  34. 0x149[5:0]设置成0x14以读取ODI错误比特的数量。
  35. 读取0x17E[7:0] 29,将此值保存为一个整数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. 0x157[3:2]设置成0x1以捕捉偶数眼,并重复Step 8
  38. 水平相位和垂直相位上的BER = ODI_error_count[horizontal_phase][vertical_phase]/ODI_Pattern_count[horizontal_phase][vertical_phase]
28 通过读取0x161[6]来确定DFE模式。当0x161[6] = 1时,DFE禁用(disabled)。
29 在设置寄存器0x149[5:0]和读取0x17E或 0x17F之间等待25 µs。