US+/US GTY如何计算PLL参数

作者:Zhang Cheng,AMD工程师;来源:AMD开发者社区

在 UltraScale / UltraScale+(US / US+)器件的 GTY 架构中,每个 GT Quad 内部包含 两组 QPLL和4 个GTY  Channel,而每个 Channel 内部又各自集成了一个 CPLL。在常规基于 GT Wizard 的设计流程中,用户只需输入目标线速率以及实际使用的参考时钟频率,工具即可自动计算并配置所需的各类倍频与分频参数,通常无需用户手动参与 PLL 参数的计算。

然而,在某些 需要动态切换线速率 的应用场景中,GT 的 PLL 参数必须在运行过程中进行重新配置。这类应用往往需要用户自行计算对应的分频和倍频参数,并通过 DRP(Dynamic Reconfiguration Port)接口将相关参数写入寄存器。本文将围绕这一需求,着重介绍 GT PLL 相关参数的计算方法并且通过GT Wizard创建工程验证计算结果。

  1. QPLL参数计算

每个 Quad 内部包含两组基于 LC 的锁相环,称为 Quad PLL(QPLL0 和 QPLL1)。在同一个 Quad 内,任意一个 QPLL 都可以被多个串行收发器通道共享,但 不能跨 Quad 被其他通道共享。当通道的工作线速率高于 CPLL 的工作范围 时,必须使用 QPLL0 或 QPLL1。当使用任意一个 QPLL 时,必须实例化GTYE3/4_COMMON 原语,该原语封装了 GTY 的 QPLL0 和 QPLL1。

下图给出了 QPLL0/1 架构的示意图。输入参考时钟在送入相位频率检测器(PFD)之前,可以先经过一个 M 倍分频器。反馈分频器 N 决定了 VCO 的倍频比例。当线速率低于 28.1 Gb/s 时,支持 分数-N 分频,此时的有效倍频比由 整数 N 值加上一个分数部分 共同决定。QPLL0/1 的输出频率取决于 QPLL0/1 CLKOUT_RATE 的设置:当该参数设为 HALF 时,输出频率为 VCO 频率的一半;当设为 FULL 时,输出频率与 VCO 频率相同。

1.png

了解了QPLL的大致结构,接下去在GT wizard中设置参数,这里假定线速率为4.5G,期望的GTY的reference clock频率为156.25MHz,点击Calc,这里Wizard计算出的实际reference clock频率为156.2500001MHz,下面我们就根据GT的参数以及UG578提供的计算公式来做验证。

2.png

参数设置完成后点击OK产生XCI,右击open example design,完成综合后open synthesized design,找到GTY和GT_COMMON。

根据UG578给出的计算公式,主要关注下面几个参数:

3.png

1)根据公式2-4得:fPLLClkout = fLineRate *D / 2,根据文档说明D是TXOUT_DIV,工程中这个参数为2

4.png

由此可得:fPLLClkout = fLineRate *D / 2 = 4.5*2/2 = 4.5G

2)根据公式2-3得:fPLLClkout = fPLLClkin *(N.FractionPart) / (M*QPLL_CLKOUTRATE),接下去在工程中找到这些参数:

a.M的定义是QPLL0/1_REFCLK_DIV,工程中这个参数为1

5.png

b. QPLL_CLKOUTRATE对应的属性是QPLL1CLKOUT_RATE,工程中这个参数为Half,对应为2

6.png

fPLLClkin 是Reference clock频率,工程中设置为156.25MHz,由此可得:N.FractionPart = fPLLClkout / fPLLClkin *QPLL1_REFCLK_DIV*QPLL_CLKOUTRATE = 4500 / 156.25*1*2= 57.6。

3) N.FractionPart是由整数和小数两部分组成,其中N的定义是QPLL0/1_FBDIV,FractionPart可以由公式2-5计算得出:

7.png

工程中的SDM1WIDTH是0,对应24位。

8.png

尽管SDM0/1DATA在GT_COMMON中被定义为 [24:0] ,但是其中的最高位Bit24未被使用,实际位宽还是[23:0] 总共24位,SDM1DATA参数的计算结果如下:

9.png

如果计算出的Fractional part是0,则表示小数分频功能被关闭。

4) Actual reference clock (MHz) 列表中会列举出所有支持的参考时钟频率。当用户选择了其中一个参考时钟频率后,GT Wizard会根据这个值来计算相应的PLL分频和倍频系数。

10.png

比如在列表中选择153.58MHz这个频率,则QPLL1_FBDIV参数将被设置为58

5) 此外,文档对SDM0/1DATA和SDM0/1WIDTH的描述不是很准确,这两个参数不是Attribute(属性),而是GT_COMMON的Port(端口)。

11.png

2. CPLL参数计算

CPLL的结构相对简单,其性能不如QPLL强大。GTY 收发器中的 CPLL 标称工作范围是 2.0 GHz 至 6.25 GHz,不支持小数分频。

下图示展示了 CPLL 的架构。输入时钟在送入鉴相鉴频器(PFD)之前,可以先被一个 M 分频。反馈分频器 N1 和 N2 决定了 VCO 的倍频参数以及 CPLL 的输出频率。锁定指示模块通过比较参考时钟与 VCO 反馈时钟的频率,来判断是否已经实现频率锁定。

12.png

从GT Wizard中可以看出,在同样4.5G线速率的情况下,使用CPLL时的Reference clock的频率选择相对QPLL要少一些,并且不支持客户自定义填入reference clock频率,只能选择Wizard列出的频率点。这个工程先设置reference clock频率为90MHz。

同样地,这里也通过一个example design来说明CPLL分频参数的计算过程。

UG578给出的CPLL计算公式如下:

13.JPG

1) 公式2-2与QPLL一致,因此得出:fPLLClkout = fLineRate *D / 2 = 4.5*1/2 = 2.25G

14.png

2) 接下去也是在工程中找到公式2-1 fPLLClkout = fPLLClkin *(N1 * N2) / M这些参数:

a. M的定义是CPLL_REFCLK_DIV,工程中这个参数为1           

15.png

b. N1的定义是CPLL_FBDIV_45,工程中这个参数为5 

16.png

c. N2的定义是CPLL_FBDIV,工程中这个参数为5

17.png

 3) 由公式2-1可得fPLLClkin = fPLLClkout * M / (N1 * N2) = 2250 * 1 / (5 * 5) = 90MHz,这与之前在Wizard中的设置一致。

4) 相应地,通过改变N1和N2的参数组合,可实现更多的reference clock频率。

比如:

CPLL_FBDIV=5, CPLL_FBDIV_45=4,可以设置fPLLClkin为112.5MHz;

CPLL_FBDIV=4, CPLL_FBDIV_45=4,可以设置fPLLClkin为140.625MHz;

CPLL_FBDIV=3, CPLL_FBDIV_45=5,可以设置fPLLClkin为150MHz;

下图GT Wizard中可选择的reference clock频率点就是这样配置出来的。

18.png