由于Arria®10器件分数PLL(fPLL)硬锁定检测电路存在问题,当使用分数“精确k”模式时,fPLL可能会报告解锁状态。
当fPLL处于分数模式时,反馈计数器值是M和K的函数(pll_dsm_fractional_division)。公式为“M(整数)+ K / 2 ^ 32”。 K的合法值是1到2 ^ 32-1
“K因子”定义为“ pll_dsm_fractional_division / 2 ^ 32 ”,
当K因子小于0.1或大于0.9时,fPLL硬锁定检测电路不可靠。
当K因子在0.1和0.9之间时,fPLL硬锁定检测电路是可靠的。
例
以下示例描述了Arria 10 fPLL锁定检测电路何时可靠且不可靠。
refclk(频率)= 100MHz
N计数器= 1
M计数器= 40
K计数器(pll_dsm_fractional_division)= 2147483648
L counter = 4
PLL输出(频率)=(refclk(频率)/ N)*((M +( K / 2 ^ 32 ))/ L)
在这种情况下,
PLL输出(频率)= 100 *((40 +(2147483648/2 ^ 32 ))/ 4)
= 100 *((40 + 0.5 )/ 4)
= 100 *(40.5 / 4)
= 100 * 10.125
= 1012.5 MHz
因为小数值是0.5 (2147483648/2 ^ 32,其中K = 2147483648)并且它在0.1和0.9之间,所以锁定信号是可靠的。
解决/修复方法
当分数值小于0.1或大于0.9时,fPLL锁定信号不可靠。在这种情况下,您可以实例化以下软IP锁定检测逻辑
下载此soft_lockppm_det.zip文件
soft_lckppm_det.v文件已加密,但可用于综合,仿真和硬件测试。
软锁检测电路文件的端口列表和描述如下
端口名称 |
输入输出 |
问题描述 |
REF_CLK |
输入 |
fpll的参考时钟输入 |
clk_low |
输入 |
时钟从fpll开始低电平,总是切换,频率可能会关闭输出reg pll_locked |
dead_ref_clk |
产量 |
表示引用clk没有足够快地切换并被视为已死。默认阈值由模块参数PPM_THRESHOLD_FOR_DEAD_CLK定义 |
calibration_done |
输入 |
来自fpll的cal_done。可以认为是二次重置 |
config_en |
输入 |
配置端口启用 |
config_clk |
输入 |
配置端口时钟 |
config_data |
输入 |
配置端口数据。当config_en为高电平时,数据在config_clk的上升沿采样,并移入内部寄存器,存储锁定和死区时钟条件的阈值。寄存器宽度由模块参数CLK_LOW_CNT_WIDTH定义。因此,需要在所有数据中移位的总周期为2 * CLK_LOW_CNT_WIDTH周期。移位操作从锁定条件的寄存器的LSB开始。在2 * CLK_LOW_CNT_WIDTH周期后,config_data上的值将成为dead_lock条件的寄存器的MSB |
重启 |
输入 |
从fpll重置 |
没有回复内容