由于 Arria® 10 设备分段式 PLL (fPLL) 硬锁检测电路出现问题,fPLL 可在使用分段式"精确 k"模式时报告未锁频的状况。
当 fPLL 处于分段模式时,反馈计数器值是 M 和 K(pll_dsm_fractional_division)的函数。公式为"M(整数)K/2^32"。 K 的合法值为 1 到 2^32-1
"K Factor"定义为"pll_dsm_fractional_division/2^32",
当 K Factor 小于 0.1 或大于 0.9 时,fPLL 硬锁检测电路不可靠。
当 K Factor 在 0.1 到 0.9 之间时,fPLL 硬锁检测电路是可靠的。
例子
下面的示例描述了 Arria 10 fPLL 锁检测电路是否可靠。
refclk(频率) = 100MHz
N 计数器 = 1
M 计数器 = 40
K 计数器 (pll_dsm_fractional_division) = 2147483648
L 计数器 = 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 | 输入 | cal_done从 fpll 提供。可视为辅助重置 |
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上的值将成为寄存器的 MSB,以用于dead_lock状况。 |
重 置 | 输入 | 从 fpll 重置 |