PLL(锁相环)是FPGA中常见的 IP CORE ,使用之初认为IP核进行配置后无法进行重配置,但在了解了 IOPLL Reconofig IP CORE 过后了解到原来 PLL IP CORE 也是能够进行动态重配置的

        在了解 IOPLL Reconfig IP CORE 之前首先要了解 PLL 的工作原理

动态配置androidmainfest_fpga开发

 

动态配置androidmainfest_重配置_02

        上图分别是 fPLL (小数分频)和 IOPLL(整数分频) 的内部结构图,M、N、C,分别代表的是 乘法单元、前分频器、输出分频,个人理解为 OUT_CLK[x] = IN_CLK * M / N / Cx;

        描述完PLL的一个内部结构,下面就介绍一下 IOPLL Reconofig IP CORE 的使用

首先,需要调用 IOPLL IP CORE ,具体调用不做过多介绍,主要需要注意的地方如下:

动态配置androidmainfest_数据_03

动态配置androidmainfest_动态配置androidmainfest_04

        两种使能分别为 使能锁相环动态重配置 、允许访问动态移相端口 ,具体区别在哪里下文会进行介绍

        调用完 IOPLL IP CORE 后继续调用 IOPLL Reconofig IP CORE ,并以如下这种方式进行连接

动态配置androidmainfest_重配置_05

接下来是对 PLL 重配置的详细介绍:

首先有两种动态配置方法:
1.通过初始化mif文件进行流式重配置
2.重新配置PLL设置:M、N、C重配置

配置具体操作如下:

1.写地址和数据,发送重配置命令
2.最多重复8次(内部FIFO存储会满)
3.设置初始地址9'd0,并写入任意数据
4.等待waitrequest拉低
写入配置包括:
1.计数器重配置
2.带宽重配置
3.动态相位移动配置

MIF配置操作如下

1.写地址9'b000010000,并写入用于配置PLL的mif文件的基地址,并启动IP的流操作
2.等待waitrequest拉低

另外读操作如下:

1.IP配置启动读功能,读地址
2.等待waitrequest拉低,有效数据读出
3.只可读计数器和带宽重设置,重新读至少需要间隔三拍

注:不论写还是读,在写或者读期间,未使用的地址总线和数据总线都必须为0

在进行计数器配置时,总线意义如下:

动态配置androidmainfest_数据_06

 在进行相位偏移配置时,总线意义如下:

动态配置androidmainfest_重配置_07

在进行带宽配置时,用以配置环路滤波设置和电荷泵设置:

动态配置androidmainfest_动态配置androidmainfest_08

具体对应的高、中、低 带宽如下:

动态配置androidmainfest_IP_09

 至于高、中、低带宽代表着什么,相信在配置 PLL IP CORE 时一定见到过改配置:

动态配置androidmainfest_fpga开发_10

 其实各类带宽分别代表着抖动的不同:

低带宽:锁相环具有更好的抖动抑制,但锁定时间较慢。
高带宽:锁相环具有更快的锁定时间,但跟踪更多的抖动。
中带宽:锁相环提供锁定时间和抖动抑制之间的平衡。

此外还可以通过IOPLL的动态相依特性修改PLL输出时钟的相位,以VCO(电压振荡器)周期的1/8位增量来调整。

同样有两种相位配置方法:
1.直接访问IOPLL IP核中的动态相位转移端口(支持上行、下行,一次操作中支持7次相移)此处注意
2.通过PLL Reconfig IP核(可通过mif文件或重新配置PLL进行设置,只支持写)上述重配置基包含此类相位配置方法

方法一就是在配置PLL时选择允许访问动态移相端口,此时生成的 PLL IP CORE 如下:

动态配置androidmainfest_动态配置androidmainfest_11

 各端口含义如下:

1.Phase_en:启动相位切换时钟
2.Updn:0(下行),1(上行)
3.Cntsel[4:0]:选择输出通道
4.Num_phase_shift[2:0]:偏移次数,最多7次,每次偏移1/8
5.Phase_done:操作完成

另附使用的小建议:

每次配置结束过后应当复位,复位不会修改已经配置的计数器和过滤器,但会撤销任何已执行的移相操作。目的是保持输入输出时钟稳定的相位关系。

以上即为 PLL IP CORE 重配置的操作方法。