GTX中CPLL、QPLL DRP动态配置方法(详解)

一、DRP读写时序

1、DRP写时序

2、DRP读时序

二、CPLL DRP配置方法

1、CPLL线速率计算公式:

根据箭头方向可以看出:PLLCLKIN/M=(PLLCLKOUT/N1)/N2;所以得到:

发送/接收端使用双沿(上升沿和下降沿)进行采样,双沿采样速率为2×fpllclkout 。

fpllclkout为CPLL输出频率,flinerate为线速率(如:1.25G、5G等)。GTX中CPLL范围为1.6 GHz到3.3 GHz。所以GTX中使用CPLL能达到最高线速率为6.6G。

2、公式中各参数对应的寄存器

例如:配置参数M=1,N1=5,N2=4,D=1。实际往DRP寄存器中配置参数为CPLL_REFCLK_DIV=16,CPLL_FBDIV_45 =1,CPLL_FBDIV=2,TXOUT_DIV=RXOUT_DIV=0。

速率

CPLL DRP配置

GT_REFCLK

line rate(Gb/s)

M

N1

N2

D

125Mhz

1.25

1

5

4

4

2.5

1

5

4

2

3.125

1

5

5

2

5

1

5

4

1

6.25

1

5

5

1

156.25Mhz

1.25

1

4

4

4

2.5

1

4

4

2

3.125

1

5

4

2

5

1

4

4

1

6.25

1

5

4

1

速率配置过程中需对GTX进行复位,配置完后取消复位。

三、QPLL DRP配置方法

1、QPLL线速率计算公式:

根据箭头方向可以看出:PLLCLKIN/M=(2*PLLCLKOUT)/N;所以得到:

发送/接收端使用双沿(上升沿和下降沿)进行采样,双沿采样速率为2×fpllclkout 。

fpllclkout为QPLL输出频率,flinerate为线速率(如:1.25G、5G等)。GTX中QPLL范围如下:

根据公式计算GTX中最高线速率为25Gb/s(fpllclkout=12.5、D=1),最低线速率约为0.75Gb/s(fpllclkout=5.93、D=16)。所以在GTX中线速率超过6.6G时,只能选择QPLL。线速率低于6.6G时CPLL和QPLL都能选择。

  1. 公式中各参数对应的寄存器

四、GTX时钟分析

配置QPLL时需注意QPLL_REFCLK_DIV、QPLL_FBDIV、QPLL_FBDIV_RATIO在 GTX2_COMMON的DRP寄存器中进行配置,而TXOUT_DIV、RXOUT_DIV参数需在 GTX2_CHANNEL的DRP寄存器中进行配置。

配置CPLL的参数都是在GTX2_CHANNEL的DRP寄存器中进行配置。具体原因与GTX结构相关:

一个GTX Quad(bank)中包含4个GTXE2_CHANNEL,1个GTXE2_COMMON。GTXE2_COMMON是4个GTXE2_CHANNEL共用的,所以需要单独配置,而不能在某一个GTXE2_CHANNEL中进行配置。QPLL资源是在GTXE2_COMMON中,CPLL资源是在GTXE2_CHANNEL中。

根据CPLL和QPLL计算速率公式中可以看出,计算线速率公式都是一样的,只有计算PLL输出频率公式不一致。

CPLL公式:

QPLL公式:

CPLL和QPLL计算线速率Flinerate相同原因在于输入TX/RX时会进行二选一,选择CPLL和QPLL输出频率中的一个,然后再进行一次分频,从而得到Flinerate。

GTX TX输出端时钟结构:

GTX RX输入端时钟结构:

<think>好的,我现在需要帮助用户了解如何在特定条件下实现QPLLCPLL动态切换,尤其是在FPGA的PLL配置中。首先,我得回顾用户提供的引用内容,确保回答准确。 根据引用[1]和[2],QPLL用于线速率超过6.6Gbps的情况,而CPLL最高支持到6.xGbps。用户的问题是关于动态切换,这意味着在运行时根据线速率的变化切换PLL。首先,我需要确认是否支持动态切换。通常,PLL的配置可能需要在初始化时确定,但用户提到的引用[3]提到CPLL需要复位和断电步骤,这可能涉及重新配置流程。 接下来,我应该整理切换步骤。首先,检查当前线速率是否符合CPLL的范围,即低于6.6Gbps。然后,确保参考时钟符合CPLL的要求,这可能涉及分频器设置。引用[1]提到了分频器因子,需要调整这些参数。 然后,引用[3]指出,切换CPLL需要断电和复位操作。这可能意味着在切换前需要停止数据传输,进入断电状态,执行复位,然后重新配置。但用户希望动态切换,可能需要中断当前操作,保存状态,再重新初始化。 另外,软件是否支持动态切换?引用[2]提到软件会默认强制使用QPLL超过6.6Gbps时,所以切换可能需要手动配置,而不是自动。因此,用户需要手动触发切换流程,可能通过寄存器配置或者特定的控制信号。 我需要将这些步骤结构化,确保用户能按顺序操作。同时,必须注意同步和时序问题,避免在切换过程中出现信号不稳定。可能还需要验证切换后的锁定状态,比如检查CPLLLOCK信号,如引用[3]所述。 最后,考虑可能的问题,比如切换期间的时钟中断导致的数据丢失,或者配置错误导致的PLL无法锁定。因此,建议在安全状态下进行切换,并加入足够的延迟和状态检查。 总结步骤:条件检查、停止传输、断电复位CPLL配置参数、重新初始化和验证锁定状态。同时,需要参考具体的FPGA型号和文档,确保步骤的准确性。</think>在FPGA中实现QPLLCPLL动态切换需满足特定硬件约束条件,具体实现步骤如下: ### 1. 切换条件验证 - **速率限制**:当前线速率需降至$6.6Gbps$以下[^2] - **时钟兼容性**:确认参考时钟满足CPLL的$f_{ref}$范围(通常$1.6-3.3GHz$)[^1] - **分频器配置**:根据目标速率调整CPLL的分频因子(参照图10分频器参数表)[^1] ### 2. 动态切换操作流程 ```verilog // 步骤1:停止收发器数据传输 disable GTX_CHANNEL; // 步骤2:QPLL断电(若共享QPLL需确认多通道同步) QPLLPD = 1'b1; // 引用QPLL断电协议[^3] // 步骤3:CPLL复位序列 CPLLPD = 1'b0; // 解除CPLL断电 #10ns; CPLLRESET = 1'b1; // 启动复位 wait(CPLLLOCK == 0); CPLLRESET = 1'b0; // 释放复位 wait(CPLLLOCK == 1); // 确认锁定 // 步骤4:重配置收发器参数 write_register(CLK_DIV, 0x03); // 设置分频因子 write_register(RATE_MODE, 0x01); // 切换至CPLL模式 // 步骤5:重新初始化通道 enable GTX_CHANNEL; ``` ### 3. 关键时序要求 $$ t_{LOCK\_MAX} = \frac{1}{f_{VCO}} \times N_{DIV} + 50ns \quad (N_{DIV}=分频系数) $$ 需确保CPLL复位脉冲宽度$>100ns$,且锁定检测后延迟$t_{WAIT}=1μs$再恢复数据传输。 ### 4. 注意事项 - 切换过程中需保持参考时钟稳定 - Xilinx UltraScale+器件建议使用动态配置端口(DRP)实现安全切换 - 7系列FPGA需通过共享反馈路径避免相位偏移
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值