altera可重配置pll使用手册

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1 应用需求
在实际应用中,FPGA的工作时钟频率可能在几个时间段内变动,对于与之相关的锁相环(PLL),若PLL的输入时钟在初始设定的时钟频率的基础上变化不太大时,PLL一般可以自己调整过来,并重新锁定时钟,获得正确的时钟输出;但是,若PLL的输入时钟频率较之原来设定的时钟频率变化较大时(比如,PLL输入时钟频率由50MHz变为200MHz),PLL将无法重新锁定时钟,其输出时钟频率将变为不确定的值。

对于后面这种情况,一般的可有两种处理方法:
方法一,是针对不同的输入时钟使用不同的PLL分别进行配置,当输入时钟变化时,内部逻辑根据不同PLL的锁定情况,选择合适的时钟作为工作时钟;
方法二,是利用FPGA开发厂商提供的PLL可重新配置宏(比如Altera的ALTPLL_RECONFIG宏模块),通过对其参数进行重新设定,然后,实时地重新配置PLL,使其在新的输入时钟下可以正常锁定和工作。

方法一的实现较为直观,但需要更多的PLL资源;方法二则通过对原来的PLL资源进行参数的重新配置,使其适应新的工作时钟,其实现较为复杂,但不需要额外的PLL资源。

FPGA内的PLL能否实时地实现重新配置,与该FPGA是否提供相关的可重新配置机制有关,具体请参考相应厂商的FPGA的使用手册。

本文档主要是以Altera公司的Stratix II系列的FPGA器件为例,介绍了其内嵌的增强型可重配置PLL在不同的输入时钟频率之间的动态适应,其目的是通过提供PLL的重配置功能,使得不需要对FPGA进行重新编程就可以通过软件手段完成PLL的重新配置,以重新锁定和正常工作。

2 PLL原理与可重配置PLL
PLL结构与原理
锁相环(PLL,Phase Lock Loop)主要作用就是把内部/外部时钟的相位和频率同步于输入参考时钟。

PLL一般由模拟电路所实现,其结构如图2-1所示。

图2-1锁相环(PLL)结构
PLL工作的原理:PLL采用一个相位频率检测器(PFD)把参考输入时钟的上升沿和反馈时钟对齐。

当PFD检测到输入时钟和反馈时钟边沿对其时,锁相环就锁定了。

压控振荡器(VCO)通过自振输出一个时钟,同时反馈给输入端的频率相位检测器(PFD),PFD 根据比较输入时钟和反馈时钟的相位来判断VCO输出的快慢,同时输出上升(Pump-up)或下降(Pump-down)信号,决定VCO是否需要以更高或更低的频率工作。

PFD的输出施加在电荷泵(CP)和环路滤波器(LF),产生控制电压设置VCO的频率。

如果PFD产生上升信号,然后VCO就会增加。

反之,下降信号会降低VCO的频率。

PFD输出这些上升和下降信号给电荷泵(CP)。

如果电荷泵收到上升信号,电流注入环路滤波器(I CP增大)。

反之,如果收到下降信号,电流就会流出环路滤波器(I CP减小)。

环路滤波器把这些上升和下降信号转换为电压,作为VCO的偏置电压。

环路滤波器还消除了电荷泵的干扰,防止电压过冲,这样就会最小化VCO的抖动。

环滤波器的电压决定了VCO操作的速度。

可重配置PLL
Altera公司的Stratix II等系列的FPGA提供了可重配置的PLL,从而可以实时地对PLL 进行重新配置,使其适应新的工作要求。

通过Altera的Quartus II软件可以生成一个可重配置的PLL,如图2-2右边altpll模块所示;另外,生成一个重配置模块,如图2-2左边所示的altpll_reconfig模块,来对此PLL的具体参数进行实时配置。

这两个用Quartus II工具生成的模块按照图2-2所示的方式进行连接,然后,图2-2左边所列的输入端口就可以提供给软件编程人员,由软件来实时地对进行重配置。

比如,这组端口中时钟采用PCI接口的时钟,其他端口可以让FPGA以寄存器的方式通过PCI接口提供给上层软件编程,从而可以
图2-2 错误!未找到引用源。

Stratix II可重配置的PLL
让软件能实时地对PLL进行重配置,以适应不同的PLL应用环境。

具体地,被设置成可写寄存器的端口有reconfig、read_param、write_param、data_in[8:0]、counter_type[3:0]、counter_param[2:0]和reset;设置成只读寄存器的端口有:busy和data_out[8:0]。

PLL的可配置信息被组织在一个称为扫描链(scan chain)的结构中,按特定顺序排列。

2.2.1 PLL的扫描链(Scanchain)
Stratix II系列FPGA内的增强型锁相环(EPLL,Enhanced PLLs)和快速锁相环(FPLL,Fast PLLs)提供了若干可用于锁相环实时配置的计数器,包括:
⏹预缩放计数器(n)(Pre-scale counter(n))
⏹反馈计数器(m)(Feedback counter(m))和相应的VCO相位间隙选择(VCO phase
tap select(Фm))
⏹后缩放计数器(C0-C5)(Post-scale counter(C0-C5))和相应的VCO相位间隙选择
(VCO phase tap select,Фc0-c5)
⏹快速地可动态调整电荷泵电流(I cp)和环路滤波器组件(包括环路滤波器电阻R
和电容C),以满足PLL频带宽度(通带宽度,bandwidth)的要求。

这些可用于配置的计数器按照特定顺序组织在PLL的扫描链中。

增强型锁相环(EPLL,Enhanced PLL)和快速锁相环(FPLL,Fast PLL)的扫描链长度是不同的。

对于EPLL,其可配置的计数器总计有174位(bit0-bit173),其扫描链与具体的可配置计数器的关系如表2-1所示。

FPLL的扫描链只有75位,因为FPLL的使用与EPLL类似,本文着重针对EPLL
的使用进行介绍,有关FPLL的使用请参照附录。

表2-1 EPLL配置扫描链位图
一开始所提到的若干可用于锁相环实时配置的计数器与扫描链中的计数器的具体对应关系如下(用于增强型PLL的):
✧预缩放计数器(n)(Pre-scale counter(n))具体包括表2-1中提到的:n计数器nominal
count、n计数器旁路位(n counter odd bit)、n计数器spread count和n spread counter
旁路位。

✧反馈计数器(m)(Feedback counter(m))包括表2-1中提到的:m相位移位设置、
m计数器nominal count、m计数器旁路位、m计数器spread count和m spread counter
旁路位。

✧后缩放计数器(C0-C5)(Post-scale counter(C0-C5))包括表2-1中提到的:C0-C5
计数器相位移位设置、C0-C5计数器高脉冲计数、C0-C5计数器旁路位、C0-C5计
数器低脉冲计数和C0-C5计数器奇数划分位。

即对应每个PLL的时钟输出端
(C0-C5)都有一组可用于调整的计数器。

✧电荷泵和环路滤波器的用于调整的计数器包括表2-1中提到的:电荷泵设置[3:0]
和环路滤波器设置[11:4]。

环路滤波器中有6位([9:4])是用于环路滤波器的电阻
(Rlf)设置,剩下的2位([11:10])用于环路滤波器的电容(Clf)设置。

通常所说的M、N计数器指的是M计数器nominal count和N计数器nominal count,或直接指整个反馈计数器(m)和预缩放计数器(n)。

.
各个计数器的具体用处,将在下文中结合具体的例子进行详细的说明。

在用Quartus II工具的Tools选项下的“MegaWizard Plug-In Manager”生成可重配置的PLL时,会自动生成一个后缀为.mif文件(或.hex文件)(如图2-3所示的),此文件是一个扫描链的位图文件,包含了当前PLL配置的扫描链信息。

可以根据这些信息,调整PLL的扫描链中相应的计数器,来达到调整PLL的目的。

图2-3 在用MegaWizard生成PLL时选择生成.mif文件
图2-4 PLL的重配置时序波形
图2-4给出了EPLL重配置的时序波形。

由图可看出,PLL重配置的过程主要是将扫描链信息从最高位(bit173)到最低位(bit0)依次连续地读入可重配置PLL的过程。

2.2.2 PLL的重配置模块
从图2-4可以看出,PLL的配置过程是按位按序连续进行的,因此,直接操作起来比较不方便。

为此,Altera提供了PLL的重配置模块,让配置过程变得简单。

它让用户可以按照自己的需要,对需要修改的计数器单独进行修改,并且修改顺序是随机的,不用遵照扫描链的固有排列顺序进行。

在所有修改完成后,仅需启动一个时钟周期的重配置信号(图2-4中的reconfig),此PLL的重配置模块就会按照图2-4所示的时序自动地对PLL完成重配置。

PLL的可重配置模块可以通过Altera的Quartus II开发工具的MegaWizard plug-in工具生成,与PLL的生成过程类似,在此不再赘述。

2.2.3 PLL重配置模块的端口说明
我们可以通过对altpll_reconfig模块的输入端口进行适当的驱动,来完成PLL的重新配置。

下面,先就该模块的输入/输出端口做一个介绍。

表2-2 altpll_reconfig模块的输入端口
描述
端口名是否
必需
clock 是用于加载单独的参数,还在PLL重配置时,用于驱动PLL。


端口必须被连接到一个有效时钟,且最高频率为100MHz。

data_in[8:0] 否9位总线,在写参数时,其上的数据作为输入。

有的参数并没
有用到全部的9位,此时,只有从bit0开始的若干有效数据被
使用。

当该端口未连接时,其默认值为0。

counter_type[3:0] 否4位总线,用于选择哪一类的计数器将被更新。

counter_param[2:0] 否3位总线,对counter_type给定的计数器,用于选择具体哪个参
数将被更新。

read_param 否此参数有效时,由counter_type[3:0]和counter_param[2:0]所指
表2-3 altpll_reconfig模块的输出端口
通过PLL重配置模块,可以对各个用于PLL配置的计数器进行修改(用counter_type[3..0]和counter_param[2..0]来指明要具体操作的计数器,read_param和write_param信号来控制是从计数器中读出还是向计数器中写入;其中,从指定计数器中读出的值将放到data_out[8..0]总线上,要写入的数据则放到data_in[8..0]总线上)。

3 PLL的重配置的具体实现
通过对PLL重配置模块的可编程端口(章节2.2.3)进行操作来完成重配置工作。

当前的PLL选用的是增强型锁相环(Enhanced PLL),具体使用到了该PLL的C0、C1这两个时钟输出端口,并且,C0输出的时钟频率与输入频率相同,C1输出的时钟频率要求是输入频率的2倍;输入时钟的频率在85MHz和54MHz这两个频率的一定范围内波动(比如,通过晶振提供输入时钟时,由于晶振本身的误差及其受到环境影响,输入信号的频率会有一定的波动)。

在FPGA设计时,PLL会设定一个初始的输入时钟的锁定频率,以及指定带宽(bandwidth)范围(比如,PLL的起始锁定频率设为85MHz。

那么,当输入时钟变为54MHz 时,因为PLL初始参数是按照85MHz设定的,所以,可能不能很好地锁定54MHz的输入时钟,此时,就需要按照54MHz的合适参数来重新配置PLL,从而使PLL能重新稳定地锁定输入时钟。

这些参数存储在PLL重配置模块相关的计数器中,通过对计数器的修改,并最终设置一个时钟周期的重配置信号,来启动并完成PLL的重配置。

PLL重配置计数器值的确定
一般可以通过PLL对应的.mif(或.hex)等文件(如图2-3所示)来获得重配置模块的计数器值,这些文件可以在用Altera的Qusrtus II软件的MegaWizard Plug-In Manager工具生成PLL时产生。

当无法通过.mif(或.hex)等文件来获取这些计数器值时,有些计数器的值可以通过计算来确定取值范围。

本文主要介绍通过.mif文件获得重配置模块的计数器值参数的方法,下面通过一个实际的例子来进行说明。

通过MIF文件获取配置参数示例
在该例中,输入时钟在85MHz和54MHz之间切换,要求PLL能在时钟切换后,能够通过重配置来适应新的输入时钟(即重新锁定输入时钟)。

在用Quartus II工具生成PLL时,可以生成这个PLL的扫描链信息的.mif文件。

输入时钟在这85MHz和54MHz这两个频率之间切换时,要调整哪些计数器,可以通过比较这两个频率对应的扫描链位图(.mif文件)获得。

图3-1所示,是85MHz的增强型锁相环(EPLL)和54MHz的EPLL,在C0的输出/输入比率为1:1,C1的输出/输入比率为2:1,且其bandwidth选项设为20MHz时,所对应的.mif文件,这些文件给出了85MHz和54MHz时,PLL的扫描链的设置值。

图3-1 输入时钟为85MHz和54MHz时的PLL的扫描链位图图3-1给出的.mif文件是通过Quartus II软件打开的,也可以直接用文本编辑工具直接打开.mif文件,如图3-2所示。

.mif文件所给出的各位的所表示的含义由表2-1说明,当然,在用文本方式打开的mif 文件中,也有详细的说明,比如,图3-2所示的PLL的输入时钟为54MHz时的.mif文件中,“Charge Pump Current = 3”,说的就是电荷泵电流计数器的值为3。

图3-2用文本编辑工具打开的.mif文件
通过比较这两个由Altera的Quartus II工具生成的.mif文件,可以发现85MHz和54MHz 这两个PLL的扫描链中不同的计数器设置有以下这些:
表3-1 PLL在输入时钟频率在85MHz和54MHz时的不同参数
PLL输入时钟频率85MHz 54MHz
电荷泵电流计数器11 3
环路滤波器电阻计数器 1 3
M计数器(m nominal count) 10 8
C1计数器高脉冲计数 3 2
C1计数器低脉冲计数 2 2
C1计数器奇数划分位 1 0
C0计数器高脉冲计数 5 4
C0计数器低脉冲计数 5 4
PLL重配置模块的初始化
在使用PLL重配置模块前,需要对其进行初始化,这一般由硬件完成,另外,要注意:
1.首先,要注意的是,在第一次使用前,最好对PLL重配置模块进行复位,否则将无法保证状态的合法性。

如图2-2所示,PLL重配置模块提供了一个异步复位输入信号reset,用于整个模块的复位。

2.其次,要注意的是PLL重配置模块的初始化参数的设定。

在用Altera的Quartus II 开发工具的“MegaWizard Plug-In Manager工具”生成PLL重配置模块时,所指定的PLL 类型要与该模块相连接的PLL类型一致,例如,设计所用的是增强型PLL(Enhanced PLL),那么该重配置模块就要选择是用于EPLL的,如图3-3所示(选择Enhanced选项)。

图3-3 PLL重配置模块要跟与其连接的PLL类型一致
3.然后,还要特别注意PLL重配置模块的扫描链的初始化。

PLL重配置模块自身带了一个存储结构来存储扫描链的值,扫描链的值可以由用户逐个逐个的计数器来设定,也可以在用MegaWizard Plug-In Manager工具生成PLL重配置模块时,由用户指定一个用于初始化扫描链的有效文件(比如,在使用MegaWizard Plug-In Manager工具生成PLL时所生成的.mif(或.hex)文件,例如图2-3中的),如图3-4所示。

图3-4 PLL重配置模块的初始化扫描链
如果没有对PLL重配置模块的扫描链进行初始化,那么,在使用该重配置模块进行PLL的第一次重配置时,因为扫描链为空,鉴于174位的扫描链值(对于EPLL来说)都将被读入PLL来进行PLL的重配置,那些没有指定的计数器值将引起错误的配置。

比如,对于一个输入频率为54MHz的输入时钟,当其频率变成100MHz时,PLL将失去锁定,需要进行重新配置。

如果,已经将初始值设为有文件获取(如图3-4所示),那么,仅需要修改一下电荷泵电流计数器的值(由值11调整为12),然后,启动一个时钟周期的reconfig信号,就可以完成重配置,并锁定新的输入时钟频率。

否则,若为对重配置模块的扫描链进行初始化,那么此时将需要修改所有相关的计数器值(M、N计数器,post-scale计数器等等)后并启动reconfig信号完成重配置后,才能锁定新的时钟。

4.另外,要注意的是,使用PLL重配置模块时,使用read_param控制信号来读取扫描链中的对应信息时,实际读取的是从当前“PLL重配置模块”保存的扫描链的内容,而不是从PLL中读出的内容。

如果PLL重配置模块的扫描链没有进行初始化(例如,如图3-4所示选择了“No, leave it blank”选项),那么用使用read_param控制信号读出的内容将不确定,通过时序仿真来看,读出值是全零(在之前没有用write_param信号写入新的信息时)。

异步复位输入信号reset不会对PLL重配置模块中保存的扫描链信息产生影响,即使复位也不会使PLL重配置模块保存的扫描链信息回到初始设定值,而是不改变扫描链的任何信息。

即最后修改的PLL重配置模块扫描链信息(通过write_param控制信号实现的修改),会一直保持到下次使用write_param控制信号实现修改为止。

PLL重配置操作的实现过程
3.3.1 用于重配置的寄存器
为了让软件人员能够对PLL进行重配置,FPGA应该提供以下可操作的寄存器:可写寄存器:reconfig、read_param、write_param、data_in、counter_type、counter_param 和reset;
只读寄存器:busy、data_out、locked;
这些寄存器(除了locked)的含义与PLL重配置模块提供的端口是一一对应的,本文档在表2-2和表2-3已经做了说明,为了方便起见,下面再次说明一下。

表3-2 用于重配置的寄存器说明
其中,有关counter_type和counter_param具体所指定的计数器,在表3-3和表3-4中做了说明。

表3-3 counter_type[3..0]的设置
表3-4 counter_param[2..0]的设置
3.3.2 软件对PLL重配置过程的实现
下面,仍通过上面提到的输入时钟频率在85MHz与54MHz两者间切换的例子,来具体说明重配置过程是怎样实现的。

若当前的输入时钟的频率是由54MHz变为85MHz,那么当前应该是按照85MHz的扫描链信息进行PLL的重配置。

表3-5列出了可以具体配置的计数器,以及相关的PLL重配
置模块的端口:
表3-5 PLL的扫描链(计数器)的重配置数据
注:表中,用灰色标出了那些通常会需要改动的计数器值;而其他计数器值,一般在第一次配置以后,不再需要修改。

表中的数字用十进制数给出,每一行对应着一个可以修改的计数器;最左边是计数器的描述;紧跟着的是与该计数器对应的counter_type和counter_param值;之后,分别是输入时钟在85MHz和54MHz时应该写入data_in寄存器的内容。

整个重配置的操作流程如图3-5所示。

图3-5 重配置流程图
如图所示,对于重配置过程,软件人员可以通过对相关寄存器的操作完成:
1)软件要重新调整分辨率且输入时钟改变时,或者检测到时钟失去锁定时(状态位
locked的值为0)需要开始重配置工作。

2)判断是否是第一次对重配置模块进行操作,若是,则写reset寄存器(写入值1),
来完成对重配置模块的复位与初始化,并在一段时间(10ns以上即可)后将reset 寄存器清零;若不是第一次重配置,则该步骤为可选,转到步骤3)。

3)写counter_type[3:0]和counter_param[2:0]以及data_in[8:0]所对应的寄存器,其写入
顺序可为任意。

4)写write_param寄存器,将其值设为‘1’,随后,FPGA硬件会将该寄存器清零(因
为PLL重配置模块要求write_param只能保持一个时钟周期)。

5)等待busy寄存器变为‘0’(十几个时钟周期以内,一般在1微秒以内),然后重复
过程1)和2),直到上面表3-5所列的计数器值全部写入完成为止。

6)等待busy寄存器变为‘0’,然后将reconfig寄存器的值设为‘1’,随后,FPGA
硬件会将该寄存器清零(因为PLL重配置模块要求reconfig只能保持一个时钟周
期)。

然后,等到busy寄存器再次变为‘0’时,重配置模块中的所有参数已经导
入到PLL中,基本完成了重配置过程。

7)写reset寄存器这一步骤是可选的。

a)即向reset寄存器写入值1,并在一段时间(10ns以上即可)后写入值0。

此步
骤在要求保障输出时钟之间的相位关系时使用。

它会让PLL重配置模块进行复位,复位后,会使得PLL的输出时钟间的相位关系回复到初始值[1](即FPGA的配置
文件.sof或.pof所确定的最初值)。

b)跳过该步骤。

在之前已经设置write_param对有关相位的计数器做了调整的话,
则不能在此处设置reset寄存器,否则,所做的相位调整无效。

8)因为PLL进行了重新调整,输出时钟频率会有变化,需要对与PLL的输出相关的
逻辑进行复位。

以表3-5中“电荷泵电流计数器”的参数的修改为例:写入其对应的参数的过程为:
a)向counter_type寄存器中写入值2;
b)向counter_param寄存器中写入值0;
c)向data_in寄存器中写入值11;(当前输入时钟是85MHz时)
d)向write_param寄存器中写入值1;
e)读busy寄存器,等待其值变为‘0’;
f)可以对下一个计数器的参数进行修改了。

其中,表3-5中所列出来的这些计数器的写入顺序可为任意,没有先后之分。

图3-6给出了对PLL重配置模块进行写操作的时序示意图,图3-7给出的是对PLL重配置模块启动并完成重配置的时序示意图。

写入重配置参数时,由counter_type[3:0]和counter_param[2:0]指定对应的计数器,在data_in[8:0]寄存器中放上对应的计数器要设置的值,然后设置write_param寄存器,这将把data_in中的值写入扫描链中由counter_type[3:0]和counter_param[2:0]所指定的计数器。

在所有改动完成后,再设置reconfig寄存器,启动一个clock周期的reconfig信号,这将使改动后的配置自动加载到PLL中去。

随后,等到busy 信号变为‘0’,则表示重配置已完成。

若参数配置正确,则PLL应该能够重新锁定。

图3-6写PLL 重配置模块端口的时序示意图
图3-7 reconfig 的时序示意图
在通过软件第一次做重配置时,最好将上面表3-5所例的计数器都写入一遍;在做过一次重配置后,因为PLL 重配置模块已经记录了之前的配置数据,在再次进行重配置时,那些没有发生变化的计数器值可以不必再次写入,只对发生变化的计数器(一般只是表3-5中灰色部分标出来的那些计数器会发生变化,比如表3-1所示)进行修改就可以了。

只读寄存器中,busy 和locked 的值可以直接读取,而data_out 寄存器的读取过程与上

是第一次对重配置模块
进行操作吗?
向reset 寄存器写入值0x1并随后清零
写counter_type 寄存器写counter_param 寄存器向read_param 寄存器写入值0x1
读busy 寄存器
读PLL 配置参数完成
Busy-0
读data_out 寄存器否
图3-8读配置参数流程图
如图3-8所示,从重配置模块中读取已经配置好的参数的过程如下:
1) 判断是否是第一次对重配置模块进行操作,若是,则写reset 寄存器,来完成对重
配置模块的复位与初始化;若不是,则转到步骤2)。

2)写counter_type[3:0]和counter_param[2:0]所对应的寄存器,其写入顺序可为任意。

3)写read_param寄存器,将其值设为‘1’,随后,FPGA硬件会将该寄存器清零(因
为PLL重配置模块要求read_param只能保持一个时钟周期)。

4)等待busy寄存器变为‘0’,此时,data_out寄存器的值变为合法值,可直接读取。

图3-9给出了对PLL重配置模块进行读操作的时序示意图。

图3-9读PLL重配置模块端口的时序示意图
注意:
a)在第一次重配置前,最好置位一下reset信号,保证重配置模块的状态机回到初始状态。

b)write_param和read_param、reconfig信号是时钟上升沿采样,仅保持一个周期,它们
对应的寄存器在由软件人员设置为值‘1’后,随之会被硬件清零。

c)为了了解写入的值是否正确,可以通过读相应的计数器,看读出值是否与写入值一致。

d)读/写参数时,要在检测到busy信号为低的时候才能读出/写入。

3.3.3 PLL重配置计数器的调整
上文中有提到,PLL重配置模块提供的可调整的计数器是以一个称为扫描链的结构来组织的,如图3-10所示。

图3-10 PLL重配置计数器的扫描链结构
对于增强型锁相环(Enhanced PLL),这些可调整的计数器可大体分为三类:
1)M、N计数器
包括:M计数器nominal count、M计数器旁路位、M spread counter旁路位、N计数器nominal count、N计数器旁路位、N spread counter旁路位、M相位移位设置(Фm)。

其中,一般只用到了M计数器nominal count和N计数器nominal count,本文中将这两个计数器简称M、N,与PLL中的鉴相器PFD相关,主要涉及倍频。

PLL采用“M/(N×后缩放因子)”这样一个缩放因子为PLL输出端提供时钟合成输出。

每个PLL有一个预缩放因子(pre-scale counter ,N)和一个乘法因子(M)。

输入时钟(f IN)经由预缩放计数器(N)分频后,产生PFD的输入参考时钟(f REF),VCO的频率(F VCO)等于该参考时钟频率(f REF)的M倍,其关系如下所示:
f REF = f IN /N
F VCO= f REF×M=f IN×(M/N)
压控振荡器VCO的输出再经过降频,作为最终的PLL输出时钟。

2)C5-C0有关的计数器
包括:C5-C0计数器相位移位设置(ФC5-ФC0)、C5-C0计数器旁路位、C5-C0计数器高/低脉冲计数、C5-C0计数器奇数划分位。

其中,C5-C0是PLL的6个时钟输出端,每个输出有一个唯一的后缩放计数器(post-scale counter,G),用于降低高频VCO,产生最终的PLL输出时钟。

输出时钟的频率f out与VCO的频率F VCO的关系如下所示:
f out= F VCO /G = f IN× (M/(N×G))
后缩放计数器(本文中用字符G表示)的值由“高脉冲计数和低脉”和“低脉冲计数”两个计数器组成,关系如下:
后缩放计数器值= 时钟输出高脉冲计数值+时钟输出低脉冲计数值
其中,“C5-C0计数器高/低脉冲计数”要根据M、N计数器的值和输入/输出时钟的关系来确定,其连同相应的“奇数划分位”主要与占空比调整有关:“奇数划分位”的含义是将“时钟输出高脉冲计数值”的个单位补偿到“时钟输出低脉冲计数值”。

比如,对应的“后缩放计数器值”为3,要求占空比为50% 时,“时钟输出高脉冲计数值”和“时钟输出低脉冲计数值”应该依次为2和1,占空比=(2 –)/3 ×100%= 50%。

或者,可以通过下面的式子来计算占空比:占空比= 时钟输出高脉冲计数÷(时钟输出高脉冲计数值+时钟输出低脉冲计数值+后缩放计数器的奇数划分位)×100%
3)与频带宽度(width)有关的计数器
包括:电荷泵(CP)设置、环路滤波器(LF)电阻与电容设置。

这些是与频带宽度(bandwidth)相关的计数器。

一般地,频带宽度设得较大时,
PLL能较快地重新锁定时钟;频带宽度较小时,能够较好地过滤输入时钟的抖动。

与频带宽度相关的这些计数器,一般使用Quartus II软件在添加PLL时所自动设定的值,这些具体的设定值可以通过查看对应的.mif文件来获取(如图3-2所示)。

事实上,上面所举的例子中,“表3-5 PLL的扫描链(计数器)的重配置数据”已经例出了这里所提到的大多数计数器,只有“C5-C2计数器高/低脉冲计数”和“C5-C2计数器奇数划分位”这些计数器因为没有用到,而没有例出。

其实,C5-C0这六个EPLL的时钟输出端中,每个输出端所对应的计数器是一一对应的,可以类似地进行设定。

对于这些计数器,上面的表3-5中已经给出了其对应的counter_type[3:0]和couter_param[2:0]这两个寄存器的值,而表3-5没有给出的一些值(“C5-C2计数器高/低脉冲计数”和“C5-C2计数器奇数划分位”),如表3-6所示:
表3-6 其他可能需要配置的计数器及其对应的counter_type和counter_param
因为,这些计数器相关的旁路位已被设为有效(如表3-5所示,C5-C2和N的旁路位均被设为1),在实际应用这些计数器不会用到,故其值都可以设为0;当然,也可以不做设定。

3.3.3.1 M、N计数器的调整
可重配置的PLL的计数器的调整范围一方面受限于其用于计数的位数(如表2-1所示),另一方面还受到实际应用环境的影响。

实际应用中,M、N等计数器的取值范围受到PLL内的压控振荡器(VCO,参考章节结构与原理)频率的影响。

VCO的输出频率有一个范围,在调整参数时要注意参数所决定的VCO频率在这个范围之内。

Stratix II FPGA的VCO的频率可调整范围在300MHz~1040MHz之间[3]。

相关文档
最新文档