一、PLL原理
锁相环(PLL,Phase Lock Loop)的主要作用是实现输出时钟对输入参考时钟的相位与频率的精确跟踪和同步。锁相环(PLL)的主要模块包括相位频率检测器(PFD)、电荷泵、环路滤波器、压控振荡器(VCO)以及计数器,例如反馈计数器(M)、预分频计数器(N)和后分频计数器(C)。锁相环的架构取决于您在设计中所使用的器件。典型的PLL结构如下所示(参考Altera文档Altera Phase-Locked Loop (Altera PLL) IP Core User Guide):
用户可以重新配置计数器,修改电荷泵和环路滤波器组件来实时更新输出时钟频率、PLL带宽和相移,且无需重配置整个 FPGA。本案例主要是配置不同的频率输出,主要关注这些计数器的重配置:
预分频计数器N
反馈计数器M
后分频计数器C
关于输出频率fout和输入频率fin之间的换算公式如下:
pll_controller.v代码里面给出了不同频率下M、N、C的经验值:
二、 ALTPLL RECONFIG IP
本案例是通过一个PLL控制器(pll_controller.v)根据不同的显示模式(mode)将不同的参数传输给ALTPLL RECONFIG IP处理后继而传递给ALTPLL IP以实现PLL输出频率的改变。
如下是PLL控制器、ALTPLL RECONFIG IP和ALTPLL IP的RTL视图:
ALTPLL RECONFIG IP是Altera 公司提供的 IP核,用于动态实时地重新配置 ALTPLL IP。借助该 IP 核,无需重新配置整个 FPGA,就可以实时更新 ALTPLL 的输出时钟频率、PLL 带宽和相移等参数。
在实际应用中可将ALTPLL RECONFIG IP、单口 ROM 和.mif 文件三者配合工作来实现对 ALTPLL IP 内核中参数的更新,也可以设计一个PLL控制器直接对ALTPLL RECONFIG IP的参数进行更新。本案例选择后者。
PLL控制器、ALTPLL RECONFIG IP和ALTPLL IP之间的关系简化一下得到如下框图:
PLL控制器通过mgmt接口(mgmt代表管理接口Management Interface)控制ALTPLL RECONFIG IP,mgmt 接口采用的是 Avalon-MM(Avalon Memory-Mapped)协议,它是一种简单的内存映射接口协议,支持主从机之间的通信,适合用于配置、控制和数据传输等场景。
Avalon-MM的读写接口核心信号包括:
地址线(address):指定要访问的从机内部寄存器或存储单元地址。
数据线(writedata/readdata):写操作时传递要写入的数据,读操作时返回读取的数据。
写使能(write):高电平有效时,将writedata 写入 address 指定的位置。读使能(read):高电平有效时,从address 指定的位置读取数据到 readdata。
通过Avalon-MM 协议,主设备可以通过地址、数据和控制信号(如读 / 写使能)与 ALTPLL_RECONFIG IP 进行交互,完成对 PLL 配置参数的读取和修改。更多关于Avalon-MM协议请参考Altera文档1. Introduction to the Avalon Interface Specifications
基于Avalon-MM接口的PLL动态重配置波形举例如下(本教程采用polling模式):
PLL控制器则是按照上述时序对ALTPLL_RECONFIG IP 进行控制,其中与频率重配置相关的寄存器描述如下(更多详情参考Altera文档1.1.1.4.1. Fractional PLL Dynamic Reconfiguration Registers and...):
| 寄存器名称 | 位宽 | 地址 | 设置 | 读/写 |
| Mode Register | 1 | 0 | 设置0选择Waitrequest模式 设置1选择polling模式 |
Read/Write |
| Status Register | 1 | 1 | 读取0代表busy,读取1代表配置完成 | Read |
| Start Register | 1 | 2 | 写0或者写1都可以开启PLL 重配置 | Write |
| N Counter | 18 | 3 | N_counter[7:0]=low_count N_counter[15:8]=high_count Total_p=high_count+low_count N_counter[16]=0, fREF= fIN/Total_p N_counter[16] = 1,选择bypassed N_counter[17]=0,偶分频 N_counter[17]=1,奇分频 |
Read/Write |
| M Counter | 18 | 4 | M_counter[7:0]=low_count M_counter[15:8]=high_count Total_p=high_count+low_count M_counter[16]=0,fFB=fVCO/Total_p M_counter[16]=1,选择bypassed M_counter[17]=0,偶分频 M_counter[17] =1,奇分频 |
Read/Write |
| C Counter | 23 | 5 | C_counter[7:0]=low_count C_counter[15:8]=high_count Total_p=high_count+low_count C_counter[16]=0, fOUT= fVCO/Total_ p C_counter[16] = 1,选择bypassed C_counter[17]=0,偶分频 C_counter[17]=1,奇分频 C_counter[22:18],范围00000到10001 (0–17)没用来指示选哪个Ccounter,比如选择C2,则设置C_ counter[22:18]=00010 |
Read/Write |
| BandwidthSetting | 4 | 8 | 参考pll-reconfiguration-calculator.xlsx | Read/Write |
| ChargePump Setting | 3 | 9 | 参考pll-reconfiguration-calculator.xlsx | Read/Write |
三、ALTPLL IP
ALTPLL IP是Altera 公司提供的锁相环 IP 核,通过振荡器产生的波形相位匹配输入信号相位来工作,可实现时钟倍频、分频、相位偏移和可编程占空比等功能,为 FPGA 系统提供稳定的时钟信号。
设置ALTPLL IP时其参考时钟填入50MHz,输出时钟填入162MHz(上电后配置FPGA时ALTPLL 默认输出162MHz):
在PLL IP 的Settings选项勾选Enable dynamic reconfiguration of PLL,就会多出reconfig_to_pll 和 reconfig_from_pll 这两组信号:
reconfig_to_pll:由ALTPLL RECONFIG IP 输出,发送到 ALTPLL IP,用于传递配置指令和参数。例如,动态修改 PLL 的输出频率、相位偏移、带宽等参数的控制信号和数据,都是通过这组信号从配置 IP 传输到 PLL 核。
reconfig_from_pll:由ALTPLL IP 输出,反馈到 ALTPLL RECONFIG IP,用于传递PLL 的状态信息。例如,PLL 的锁定状态(locked)、配置是否成功的响应信号等,帮助配置 IP 确认操作结果或监测 PLL 工作状态。
这两组信号是专用的内部接口(非Avalon 协议),仅用于两个 IP 核之间的直接通信,实现 PLL 动态重配置的底层数据交互,无需用户手动干预信号时序。在IP例化时,ALTPLL_RECONFIG IP实例的reconfig_to_pll[63:0]总线连接到 ALTPLL IP实例的reconfig_to_pll[63:0]总线,同时将 ALTPLL IP实例的reconfig_from_pll[63:0]总线连接到 ALTPLL_RECONFIG IP实例的reconfig_from_pll[63:0]总线即可。







