Verilog基础之十七、锁相环PLL
一、前言
1.1 背景
若将一个FPGA工程看做一个人体,时钟的重要性丝毫不亚于心脏对于人体的重要性,时钟的每一个周期对于工程都是一次全面的状态更新,因此,时钟的有效使用重要性不言而喻。
以赛灵思7系列的器件为例,在之前的文章Xilinx之7系列时钟资源与时钟架构 中,第三节时钟管理单元 提到了7系列时钟管理单元CMT,CMT包含了MMCM和PLL,PLL的功能为MMCM功能的子集,可实现时钟网络去偏斜,频率合成,去抖动。
1.2 PLL结构
根据赛灵思官网用户手册,PLL的结构如下图

PLL主要的组成部分有图中3个红色框:鉴相器PFD,电荷泵CP和低通滤波器LF,压控振荡器VCO。实现的流程为VCO自身输出一个时钟CLKFBOUT反馈到PFD,PFD对输入时钟和反馈时钟的相位进行比较,将比较的相位差传输到CP和LF,LF主要用于滤除高频干扰信号。CP和LF会将结果转换成电压信号,电压信号控制VCO的输出频率。在PLL达到稳定状态后,输出频率FvcoH和输入频率Fclkin满足如下关系。

对于例化PLL的原语有两种:PLLE2_BASE,PLLE2_ADV,PLLE2_ADV的端口更多,功能更丰富。

在Vivado的Language Templates中搜索PLL可查找到7系列的4个型号Atrix,都具有PLLE2_BASE,PLLE2_ADV两种类型,类似的MMCM也有两种BASE和ADV两种类型

以PLLE2_ADV为例,各端口说明如下,其中,CLKOUT0-CLKOUT3支持PLL/MMCM间的级联连接。

二、工程设计
下面展示使用原语例化和IP核两种方式使用PLL,用CLKOUT0-CLKOUT3 4路输出示例,其中PLL IP核的配置与例化的PLL相同。
2.1 PLL IP核配置

2.2 设计代码
2.3 测试代码
2.4 仿真结果
分别对比CLKOUT0-CLKOUT3与CLKOUT0_ip-CLKOUT3_ip,两种情况下4个输出端口的波形相同,符合预期

输入参考信号切换,下图中CLKOUT1-CLKOUT3在左右两侧的频率不同,即进行了输入参考信号的切换,左侧波形松散,右侧密实,即切换后参考信号频率更高

2.5 常见问题
1)使用原语例化PLL时布线失败,报错如下图,

DRC error内容详细如下
通过该信息知设计的VCO的为300MHZ,不在允许的【800-1600MHZ】范围内,这是由于CLKIN1和CLKFBOUT_MULT设置不合理,CLKIN1为100MHZ,CLKFBOUT_MULT为3,因此VC0为300MHZ,将CLKFBOUT_MULT值改大即可

2)进行仿真,点击运行,弹出“Finish Vsim”窗口

内容如下,即仿真文件中在复位信号RST=1时进行了参考信号的切换,更改测试文件使CLKINSEL在RST为0时进行切换