altera可重配置pll使用手册.docx
- 文档编号:24758133
- 上传时间:2023-06-01
- 格式:DOCX
- 页数:92
- 大小:446.80KB
altera可重配置pll使用手册.docx
《altera可重配置pll使用手册.docx》由会员分享,可在线阅读,更多相关《altera可重配置pll使用手册.docx(92页珍藏版)》请在冰豆网上搜索。
altera可重配置pll使用手册
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公司的StratixII系列的FPGA器件为例,介绍了其内嵌的增强型可重配置PLL在不同的输入时钟频率之间的动态适应,其目的是通过提供PLL的重配置功能,使得不需要对FPGA进行重新编程就可以通过软件手段完成PLL的重新配置,以重新锁定和正常工作。
2PLL原理与可重配置PLL
PLL结构与原理
锁相环(PLL,PhaseLockLoop)主要作用就是把内部/外部时钟的相位和频率同步于输入参考时钟。
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)。
如果电荷泵收到上升信号,电流注入环路滤波器(ICP增大)。
反之,如果收到下降信号,电流就会流出环路滤波器(ICP减小)。
环路滤波器把这些上升和下降信号转换为电压,作为VCO的偏置电压。
环路滤波器还消除了电荷泵的干扰,防止电压过冲,这样就会最小化VCO的抖动。
环滤波器的电压决定了VCO操作的速度。
可重配置PLL
Altera公司的StratixII等系列的FPGA提供了可重配置的PLL,从而可以实时地对PLL进行重新配置,使其适应新的工作要求。
通过Altera的QuartusII软件可以生成一个可重配置的PLL,如图2-2右边altpll模块所示;另外,生成一个重配置模块,如图2-2左边所示的altpll_reconfig模块,来对此PLL的具体参数进行实时配置。
这两个用QuartusII工具生成的模块按照图2-2所示的方式进行连接,然后,图2-2左边所列的输入端口就可以提供给软件编程人员,由软件来实时地对进行重配置。
比如,这组端口中时钟采用PCI接口的时钟,其他端口可以让FPGA以寄存器的方式通过PCI接口提供给上层软件编程,从而可以
图2-2Error!
Referencesourcenotfound.StratixII可重配置的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的可配置信息被组织在一个称为扫描链(scanchain)的结构中,按特定顺序排列。
2.2.1PLL的扫描链(Scanchain)
StratixII系列FPGA内的增强型锁相环(EPLL,EnhancedPLLs)和快速锁相环(FPLL,FastPLLs)提供了若干可用于锁相环实时配置的计数器,包括:
⏹预缩放计数器(n)(Pre-scalecounter(n))
⏹反馈计数器(m)(Feedbackcounter(m))和相应的VCO相位间隙选择(VCOphasetapselect(Фm))
⏹后缩放计数器(C0-C5)(Post-scalecounter(C0-C5))和相应的VCO相位间隙选择(VCOphasetapselect,Фc0-c5)
⏹快速地可动态调整电荷泵电流(Icp)和环路滤波器组件(包括环路滤波器电阻R和电容C),以满足PLL频带宽度(通带宽度,bandwidth)的要求。
这些可用于配置的计数器按照特定顺序组织在PLL的扫描链中。
增强型锁相环(EPLL,EnhancedPLL)和快速锁相环(FPLL,FastPLL)的扫描链长度是不同的。
对于EPLL,其可配置的计数器总计有174位(bit0-bit173),其扫描链与具体的可配置计数器的关系如表2-1所示。
FPLL的扫描链只有75位,因为FPLL的使用与EPLL类似,本文着重针对EPLL的使用进行介绍,有关FPLL的使用请参照附录。
表2-1EPLL配置扫描链位图
EPLL扫描链位图
PLL组件
长度(bits)
LSBMSB
0
1
2
3
电荷泵设置[3:
0]
4
4
5
6
7
8
9
10
11
环路滤波器设置[11:
4]
8
12
13
M相位移位设置
2
14
15
C0计数器相位移位设置
2
16
17
C1计数器相位移位设置
2
18
19
C2计数器相位移位设置
2
20
21
C3计数器相位移位设置
2
22
23
C4计数器相位移位设置
2
24
25
C5计数器相位移位设置
2
26
27
28
29
30
31
32
33
C5计数器高脉冲计数
8
34
C5计数器旁路位
1
35
36
37
38
39
40
41
42
C5计数器低脉冲计数
8
43
C5计数器奇数划分位
1
44
45
46
47
48
49
50
51
C4计数器高脉冲计数
8
52
C4计数器旁路位
1
53
54
55
56
57
58
59
60
C4计数器低脉冲计数
8
61
C4计数器奇数划分位
1
62
63
64
65
66
67
68
69
C3计数器高脉冲计数
8
70
C3计数器旁路位
1
71
72
73
74
75
76
77
78
C3计数器低脉冲计数
8
79
C3计数器奇数划分位
1
80
81
82
83
84
85
86
87
C2计数器高脉冲计数
8
88
C2计数器旁路位
1
89
90
91
92
93
94
95
96
C2计数器低脉冲计数
8
97
C2计数器奇数划分位
1
98
99
100
101
102
103
104
105
C1计数器高脉冲计数
8
106
C1计数器旁路位
1
107
108
109
110
111
112
113
114
C1计数器低脉冲计数
8
115
C1计数器奇数划分位
1
116
117
118
119
120
121
122
123
C0计数器高脉冲计数
8
124
C0计数器旁路位
1
125
126
127
128
129
130
131
132
C0计数器低脉冲计数
8
133
C0计数器奇数划分位
1
134
135
136
137
138
139
140
141
142
M计数器nominalcount
9
143
M计数器旁路位
1
144
145
146
147
148
149
150
151
152
M计数器spreadcount
9
153
Mspreadcounter旁路位
1
154
155
156
157
158
159
160
161
162
N计数器nominalcount
9
163
N计数器旁路位
1
164
165
166
167
168
169
170
171
172
N计数器spreadcount
9
173
Nspreadcounter旁路位
1
扫描链长度
174
一开始所提到的若干可用于锁相环实时配置的计数器与扫描链中的计数器的具体对应关系如下(用于增强型PLL的):
✧预缩放计数器(n)(Pre-scalecounter(n))具体包括表2-1中提到的:
n计数器nominalcount、n计数器旁路位(ncounteroddbit)、n计数器spreadcount和nspreadcounter旁路位。
✧反馈计数器(m)(Feedbackcounter(m))包括表2-1中提到的:
m相位移位设置、m计数器nominalcount、m计数器旁路位、m计数器spreadcount和mspreadcounter旁路位。
✧后缩放计数器(C0-C5)(Post-scalecounter(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计数器nominalcount和N计数器nominalcount,或直接指整个反馈计数器(m)和预缩放计数器(n)。
.
各个计数器的具体用处,将在下文中结合具体的例子进行详细的说明。
在用QuartusII工具的Tools选项下的“MegaWizardPlug-InManager”生成可重配置的PLL时,会自动生成一个后缀为.mif文件(或.hex文件)(如图2-3所示的),此文件是一个扫描链的位图文件,包含了当前PLL配置的扫描链信息。
可以根据这些信息,调整PLL的扫描链中相应的计数器,来达到调整PLL的目的。
图2-3在用MegaWizard生成PLL时选择生成.mif文件
图2-4PLL的重配置时序波形
图2-4给出了EPLL重配置的时序波形。
由图可看出,PLL重配置的过程主要是将扫描链信息从最高位(bit173)到最低位(bit0)依次连续地读入可重配置PLL的过程。
2.2.2PLL的重配置模块
从图2-4可以看出,PLL的配置过程是按位按序连续进行的,因此,直接操作起来比较不方便。
为此,Altera提供了PLL的重配置模块,让配置过程变得简单。
它让用户可以按照自己的需要,对需要修改的计数器单独进行修改,并且修改顺序是随机的,不用遵照扫描链的固有排列顺序进行。
在所有修改完成后,仅需启动一个时钟周期的重配置信号(图2-4中的reconfig),此PLL的重配置模块就会按照图2-4所示的时序自动地对PLL完成重配置。
PLL的可重配置模块可以通过Altera的QuartusII开发工具的MegaWizardplug-in工具生成,与PLL的生成过程类似,在此不再赘述。
2.2.3PLL重配置模块的端口说明
我们可以通过对altpll_reconfig模块的输入端口进行适当的驱动,来完成PLL的重新配置。
下面,先就该模块的输入/输出端口做一个介绍。
表2-2altpll_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]所指定位置的参数,将从扫描链(scanchain)中读出并放置到data_out[]总线上。
此信号在上升沿被采样。
需要注意的是,此信号应该只保持一个时钟周期,以避免参数在相邻时钟周期被重复读取。
busy信号将随着read_param的有效而变为有效,只有当busy信号变为无效时,data_out[]总线上的值才是有效的,而且,只有当busy信号变为无效时,才可以加载下一个参数。
write_param
否
该参数有效时,data_in[]总线上的数据将被写入由counter_type[3:
0]和counter_param[2:
0]所指定的在扫描链中的位置。
与read_param相似,该信号在上升沿被采样,且只保持一个时钟周期。
busy信号将随着write_param的有效而变为有效,只有当busy信号有效时,data_in[]总线上的数据将被忽略。
只有当busy信号变为无效时,才可以开始写入下一个参数。
reconfig
是
此信号表明PLL将开始按照扫描链中的设置进行重新配置。
设备在时钟clock的上升沿采样此信号。
同样地,该信号应该只保持一个时钟周期,以避免在重配置完成后PLL被重复加载。
reconfig被检测到有效时,busy信号会紧跟着变为有效。
pll_scanwrite信号也会随着变为有效,以开始从扫描链中加载新的设置到PLL中。
在PLL的重配置期间,busy信号保持有效。
一旦busy信号无效,参数就可有被重新修改。
Altera推荐将计数器和相位偏移设置好后,再启动reconfig信号,这样仅将scandata写入扫描链一次。
reset
是
异步复位输入信号,用于初始化状态机使之处于合法状态。
在第一次使用前,状态机必须被复位,否则将无法保证状态的合法性。
pll_scandataout
否
此输入信号是由altpll示例的scandataout端口所驱动的。
scandataout信号是来自扫描链移位寄存器的直接输出。
可以使用此信号来读出扫描链中已有的内容。
pll_scandone
否
此输入信号是由altpll示例的scandone端口所驱动的。
此信号变高时,表示重配置已经完成。
表2-3altpll_reconfig模块的输出端口
端口名
是否必需
描述
data_out[8:
0]
否
9位总线,用于用户读回参数数据。
在将read_param值设为高有效,并指定counter_type[]和counter_param[]值时,参数将从扫描链中读出到此总线上,然后,当busy信号变为无效时,此总线上的数据为合法值。
busy
否
此信号有效表明状态机处于忙状态,此时,状态机可能在从扫描链中读一个参数,或向扫描链中写入一个参数,或是在重配置PLL。
此信号有效时,状态机将忽略它的输入,并且直到此信号变为无效,状态机才能改变。
pll_scanclk
是
此信号用于驱动要重配置的PLL上的scanclk端口
pll_scanread
是
此信号用于驱动要重配置的PLL上的scanread端口
pll_scanwrite
是
此信号用于驱动要重配置的PLL上的scanwrite端口
pll_scandata
是
此信号用于驱动要重配置的PLL上的scandata端口
通过PLL重配置模块,可以对各个用于PLL配置的计数器进行修改(用counter_type[3..0]和counter_param[2..0]来指明要具体操作的计数器,read_param和write_param信号来控制是从计数器中读出还是向计数器中写入;其中,从指定计数器中读出的值将放到data_out[8..0]总线上,要写入的数据则放到data_in[8..0]总线上)。
3PLL的重配置的具体实现
通过对PLL重配置模块的可编程端口(章节2.2.3)进行操作来完成重配置工作。
当前的PLL选用的是增强型锁相环(EnhancedPLL),具体使用到了该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的QusrtusII软件的MegaWizardPlug-InManager工具生成PLL时产生。
当无法通过.mif(或.hex)等文件来获取这些计数器值时,有些计数器的值可以通过计算来确定取值范围。
本文主要介绍通过.mif文件获得重配置模块的计数器值参数的方法,下面通过一个实际的例子来进行说明。
通过MIF文件获取配置参数示例
在该例中,输入时钟在85MHz和54MHz之间切换,要求PLL能在时钟切换后,能够通过重配置来适应新的输入时钟(即重新锁定输入时钟)。
在用QuartusII工具生成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文件是通过QuartusII软件打开的,也可以直接用文本编辑工具直接打开.mif文件,如图3-2所示。
.mif文件所给出的各位的所表示的含义由表2-1说明,当然,在用文本方式打开的mif文件中,也有详细的说明,比如,图3-2所示的PLL的输入时钟为54MHz时的.mif文件中,“ChargePumpCurrent=3”,说的就是电荷泵电流计数器的值为3。
图3-2用文本编辑工具打开的.mif文件
通过比较这两个由Altera的QuartusII工具生成的.mif文件,可以发现85MHz和54MHz这两个PLL的扫描链中不同的计数器设置有以下这些:
表3-1PLL在输入时钟频率在85MHz和54MHz时的不同参数
PLL输入时钟频率
85MHz
54MHz
电荷泵电流计数器
11
3
环路滤波器电阻计数器
1
3
M计数器(mnominalcount)
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的QuartusII开发工具的“MegaWizardPlug-InManager工具”生成PLL重配置模块时,所指定的PLL类型要与该模块相连接的PLL类型一致,例如,设计所用的是增强型PLL(EnhancedPLL),那么该重配置模块就要选择是用于EPLL的,如图3-3所示(选择Enhanced选项)。
图3-3PLL重配置模块要跟与其连接的PLL类型一致
3.然后,还要特别注意PLL重配置模块的扫描链的初始化。
PLL重配置模块自身带了一个存储结构来存储扫描链的值,扫描链的值可以由用户逐个逐个的计数器来设定,也可以在用MegaWizardPlug-InManager工具生成PLL重配置模块时,由用户指定一个用于初始化扫描链的有效文件(比如,在使用MegaWizardPlug-In
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- altera 配置 pll 使用手册