




已阅读5页,还剩48页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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公司的Stratix II系列的FPGA器件为例,介绍了其内嵌的增强型可重配置PLL在不同的输入时钟频率之间的动态适应,其目的是通过提供PLL的重配置功能,使得不需要对FPGA进行重新编程就可以通过软件手段完成PLL的重新配置,以重新锁定和正常工作。PLL原理与可重配置PLL2.1 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)。如果电荷泵收到上升信号,电流注入环路滤波器(ICP增大)。反之,如果收到下降信号,电流就会流出环路滤波器(ICP减小)。环路滤波器把这些上升和下降信号转换为电压,作为VCO的偏置电压。环路滤波器还消除了电荷泵的干扰,防止电压过冲,这样就会最小化VCO的抖动。环滤波器的电压决定了VCO操作的速度。2.2 可重配置PLLAltera公司的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 Error! Reference source not found.Stratix II可重配置的PLL让软件能实时地对PLL进行重配置,以适应不同的PLL应用环境。具体地,被设置成可写寄存器的端口有reconfig、read_param、write_param、data_in8:0、counter_type3:0、counter_param2:0和reset;设置成只读寄存器的端口有:busy和data_out8:0。 PLL的可配置信息被组织在一个称为扫描链(scan chain)的结构中,按特定顺序排列。2.2.1 PLL的扫描链(Scanchain)Stratix II系列FPGA内的增强型锁相环(EPLL,Enhanced PLLs)和快速锁相环(FPLL,Fast PLLs)提供了若干可用于锁相环实时配置的计数器,包括:n 预缩放计数器(n)(Pre-scale counter(n))n 反馈计数器(m)(Feedback counter(m))和相应的VCO相位间隙选择(VCO phase tap select(m)n 后缩放计数器(C0-C5)(Post-scale counter(C0-C5))和相应的VCO相位间隙选择(VCO phase tap select, c0-c5)n 快速地可动态调整电荷泵电流(Icp)和环路滤波器组件(包括环路滤波器电阻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配置扫描链位图 EPLL扫描链位图PLL组件长度(bits)LSB MSB0123电荷泵设置3:044567891011环路滤波器设置11:481213M相位移位设置21415C0计数器相位移位设置21617C1计数器相位移位设置21819C2计数器相位移位设置22021C3计数器相位移位设置22223C4计数器相位移位设置22425C5计数器相位移位设置22627282930313233C5计数器高脉冲计数834C5计数器旁路位13536373839404142C5计数器低脉冲计数843C5计数器奇数划分位14445464748495051C4计数器高脉冲计数852C4计数器旁路位15354555657585960C4计数器低脉冲计数861C4计数器奇数划分位16263646566676869C3计数器高脉冲计数870C3计数器旁路位17172737475767778C3计数器低脉冲计数879C3计数器奇数划分位18081828384858687C2计数器高脉冲计数888C2计数器旁路位18990919293949596C2计数器低脉冲计数897C2计数器奇数划分位19899100101102103104105C1计数器高脉冲计数8106C1计数器旁路位1107108109110111112113114C1计数器低脉冲计数8115C1计数器奇数划分位1116117118119120121122123C0计数器高脉冲计数8124C0计数器旁路位1125126127128129130131132C0计数器低脉冲计数8133C0计数器奇数划分位1134135136137138139140141142M计数器nominal count9143M计数器旁路位1144145146147148149150151152M计数器spread count9153M spread counter旁路位1154155156157158159160161162N计数器nominal count9163N计数器旁路位1164165166167168169170171172N计数器spread count9173N spread counter旁路位1扫描链长度174一开始所提到的若干可用于锁相环实时配置的计数器与扫描链中的计数器的具体对应关系如下(用于增强型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所示的pll54.mif),此文件是一个扫描链的位图文件,包含了当前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_in8:0否9位总线,在写参数时,其上的数据作为输入。有的参数并没有用到全部的9位,此时,只有从bit0开始的若干有效数据被使用。当该端口未连接时,其默认值为0。counter_type3:0否4位总线,用于选择哪一类的计数器将被更新。counter_param2:0否3位总线,对counter_type给定的计数器,用于选择具体哪个参数将被更新。read_param否此参数有效时,由counter_type3:0和counter_param2:0所指定位置的参数,将从扫描链(scanchain)中读出并放置到data_out总线上。此信号在上升沿被采样。需要注意的是,此信号应该只保持一个时钟周期,以避免参数在相邻时钟周期被重复读取。busy信号将随着read_param的有效而变为有效,只有当busy信号变为无效时,data_out总线上的值才是有效的,而且,只有当busy信号变为无效时,才可以加载下一个参数。write_param否该参数有效时,data_in总线上的数据将被写入由counter_type3:0和counter_param2: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-3 altpll_reconfig模块的输出端口端口名是否必需描述data_out8: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_type3.0和counter_param2.0来指明要具体操作的计数器,read_param和write_param信号来控制是从计数器中读出还是向计数器中写入;其中,从指定计数器中读出的值将放到data_out8.0总线上,要写入的数据则放到data_in8.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的重配置。3.1 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输入时钟频率85MHz54MHz电荷泵电流计数器113环路滤波器电阻计数器13M计数器(m nominal count)108C1计数器高脉冲计数32C1计数器低脉冲计数22C1计数器奇数划分位10C0计数器高脉冲计数54C0计数器低脉冲计数543.2 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中的pll54.mif),如图3-4所示。图3-4 PLL重配置模块的初始化扫描链如果没有对PLL重配置模块的扫描链进行初始化,那么,在使用该重配置模块进行PLL的第一次重配置时,因为扫描链为空,鉴于174位的扫描链值(对于EPLL来说)都将被读入PLL来进行PLL的重配置,那些没有指定的计数器值将引起错误的配置。比如,对于一个输入频率为54MHz的输入时钟,当其频率变成100MHz时,PLL将失去锁定,需要进行重新配置。如果,已经将初始值设为有文件pll54.mif获取(如图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控制信号实现修改为止。3.3 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 用于重配置的寄存器说明寄存器名有效位数描述reconfig1Bit被设为值1时,表明将启动PLL进行重新配置FPGA应在检测到该寄存器有效时,等到busy信号无效时启动一个时钟周期的reconfig信号,然后清零该寄存器。reconfig被检测到有效时,busy信号会紧跟着变为有效。Altera推荐将计数器和相位偏移设置好后,再启动reconfig信号,这样仅写入扫描链一次。重配置模块要求reconfig信号只能有1个时钟周期的宽度,所以需由FPGA在reconfig产生后1个时钟周期时对其清零。read_param1Bit此参数有效时,由counter_type3:0和counter_param2:0所指定位置的参数,将从扫描链(scanchain)中读出并放置到data_out总线上。FPGA应在检测到该寄存器有效时,等到busy信号无效时启动一个时钟周期的read _param信号,然后清零该寄存器。busy信号将随着read_param的有效而变为有效,只有当busy信号变为无效时,data_out总线上的值才是有效的;而且,只有当busy信号变为无效时,才可以加载下一个参数。重配置模块要求write_param信号只能有1个时钟周期的宽度,所以需由FPGA在write_param产生后1个时钟周期时对其清零。write_param1Bit该参数有效时,data_in总线上的数据将被写入由counter_type3:0和counter_param2:0 所指定的在扫描链中的位置。FPGA应在检测到该寄存器有效时,等到busy信号无效时启动一个时钟周期的write_param信号,然后清零该寄存器。busy信号将随着write _param的有效而变为有效,只有当busy信号有效时,data_in总线上的数据将被忽略。只有当busy信号变为无效时,才可以开始写入下一个参数。重配置模块要求write_param信号只能有1个时钟周期的宽度,所以需由FPGA在write_param产生后1个时钟周期时对其清零。data_in9Bit在write_param信号有效时,其上的数据作为输入。有的参数并没有用到全部的9位,此时,只有从bit0开始的若干有效数据被使用。当该端口未连接时,其默认值为0。counter_type4Bit用于选择哪一类的计数器将被更新,具体参见表3-3。counter_param3Bit对counter_type给定的计数器,用于选择具体哪个参数将被更新,具体参见表3-4。reset1Bit重配置模块的异步复位寄存器,用于初始化状态机使之处于合法状态。在第一次使用前,状态机必须被复位,否则将无法保证状态的合法性。还用于PLL的复位,用于清零PLL内的计数器和初始化锁定过程,主要跟输出时钟的相位有关,复位后,会使得PLL的输出时钟间的相位关系回复到初始值(即FPGA的配置文件.sof或.pof所确定的最初值)busy1Bit此信号有效表明状态机处于忙状态,此时,状态机可能在从扫描链中读一个参数,或向扫描链中写入一个参数,或是在重配置PLL。此信号有效时,状态机将忽略它的输入,并且直到此信号变为无效,状态机才能改变。data_out9Bit用于用户读取扫描链数据。在将read_param值设为有效,并指定counter_type和counter_param值时,参数将从扫描链中读出,当busy信号变为无效时,读出的值将被保存到该寄存器中。locked1Bit表明PLL的锁定状态,值为1时表明已锁定,否则,为丢失锁定。其中,有关counter_type和counter_param具体所指定的计数器,在表3-3和表3-4中做了说明。表3-3 counter_type3.0的设置表3-4 counter_param2.0的设置3.3.2 软件对PLL重配置过程的实现下面,仍通过上面提到的输入时钟频率在85MHz与54MHz两者间切换的例子,来具体说明重配置过程是怎样实现的。若当前的输入时钟的频率是由54MHz变为85MHz,那么当前应该是按照85MHz的扫描链信息进行PLL的重配置。表3-5列出了可以具体配置的计数器,以及相关的PLL重配置模块的端口:表3-5 PLL的扫描链(计数器)的重配置数据计数器描述counter_typecounter_paramdata_in8:0(85MHz时)data_in8:0(54MHz时)电荷泵电流20113环路滤波器电阻2113环路滤波器电容2233M计数器相位1200C5计数器相位9200C4计数器相位8200C3计数器相位7200C2计数器相位6200C1计数器相位5200C0计数器相位5200C5旁路位9411C4旁路位8411C3旁路位7411C2旁路位6411C1旁路位5400C0旁路位4400C1高脉冲计数5032C1低脉冲计数5122C1奇数划分位5510C0高脉冲计数4054C0低脉冲计数4154C0奇数划分位4500M spread counter 旁路1511N spread counter 旁路0511N计数器旁路0411M计数器值10108注:表中,用灰色标出了那些通常会需要改动的计数器值;而其他计数器值,一般在第一次配置以后,不再需要修改。表中的数字用十进制数给出,每一行对应着一个可以修改的计数器;最左边是计数器的描述;紧跟着的是与该计数器对应的counter_type和counter_param值;之后,分别是输入时钟在85MHz和54MHz时应该写入data_in寄存器的内容。整个重配置的操作流程如图3-5所示。图3-5 重配置流程图如图所示,对于重配置过程,软件人员可以通过对相关寄存器的操作完成:1) 软件要重新调整分辨率且输入时钟改变时,或者检测到时钟失去锁定时(状态位locked的值为0)需要开始重配置工作。2) 判断是否是第一次对重配置模块进行操作,若是,则写reset寄存器(写入值1),来完成对重配置模块的复位与初始化,并在一段时间(10ns以上即可)后将reset寄存器清零;若不是第一次重配置,则该步骤为可选,转到步骤3)。3) 写counter_type3:0和counter_param2:0以及data_in8: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_type3:0和counter_param2:0指定对应的计数器,在data_in8:0寄存器中放上对应的计数器要设置的值,然后设置write_param寄存器,这将把data_in中的值写入扫描链中由counter_type3:0和counter_param2: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寄存器的读取过程与上面的写寄存器过程类似,图3-8给出了从重配置模块中读取配置参数的操作流程。图3-8读配置参数流程图如图3-8所示,从重配置模块中读取已经配置好的参数的过程如下:1) 判断是否是第一次对重配置模块进行操作,若是,则写reset寄存器,来完成对重配置模块的复位与初始化;若不是,则转到步骤2)。2) 写counter_type3:0和counter_param2: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)。输入时钟(fIN)经由预缩放计数器(N)分频后,产生PFD的输入参考时钟(fREF),VCO的频率(FVCO)等于该参考时钟频率(fREF)的M倍,其关系如下所示:fREF = fIN /NFVCO= fREFMfIN(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输出时钟。输出时钟的频率fout与VCO的频率FVCO的关系如下所示:fout= FVCO /G = fIN (M/(NG)后缩放计数器(本文中用字符G表示)的值由“高脉冲计数和低脉”和“低脉冲计数”两个计数器组成,关系如下:后缩放计数器值 = 时钟输出高脉冲计数值 时钟输出低脉冲计数值其中,“C5-C0计数器高/低脉冲计数”要根据M、N计数器的值和输入/输出时钟的关系来确定,其连同相应的“奇数划分位”主要与占空比调整有关: “奇数划分位”的含义是将“时钟输出高脉冲计数值”的0.5个单位补偿到“时钟输出低脉冲计数值”。比如,对应的“后缩放计数器值”为3,要求占空比为50% 时,“时钟输出高脉冲计数值”和“时钟输出低脉冲计数值” 应该依次为2和1,占空比=(2 0.5)/3 100 = 50%。或者,可以通过下面的式子来计算占空比:占空比 = 时钟输出高脉冲计数 (时钟输出高脉冲计数值 时钟输出低脉冲计数值 后缩放计数器的奇数划分位) 1003) 与频带宽度(width)有关的计数器包括:电荷泵(CP)设置、环路滤波器(LF)电阻与电容设置。这些是与频带宽度(bandwidth)相关的计数器。一般地,频带宽度设得较大时,PLL能较快地重新锁定时钟;频带宽度较小时,能够较好地过滤输入时钟的抖动。与频带宽度相关的这些计数器,一般使用Quartus II软件在添加PLL时所自动设定的值,这些具体的设定值可以通过查看对应的.mif文件来获取(如图3-2所示)。事实上,上面所举的例子中,“表3-5 PLL的扫描链(计数器)的重配置数据”已经例出了这里所提到的大多数计数器,只有“C5-C2计数器高/低脉冲计数”和“C5-C2计数器奇数划分位”这些计数器因为没有用到,而没有例出。其实,C5-C0这六个EPLL的时钟输出端中,每个输出端所对应的计数器是一一对应的,可以类似地进行设定。对于这些计数器,上面的表3-5中已经给出了其对应的counter_type3:0和couter_param2:0这两个寄存器的值,而表3-5没有给出的一些值(“C5-C2计数器高/低脉冲计数”和“C5-C2计数器奇数划分位”),如表3-6所示:表3-6
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电缆回收避坑知识培训课件
- 湖南省娄底市涟源市2022-2023学年九年级上学期期中化学试题(含答案)
- 戏剧教学法在小学英语课堂教学中的应用
- 电煤知识培训总结报告课件
- 高空安全知识培训课件教学
- 本溪初二语文考试题目及答案
- 高热惊厥讲解课件
- Penicillin-V-b-sulfoxide-d3-生命科学试剂-MCE
- 北华大学日语考试题库及答案
- 保育理论考试考那些题及答案
- 2025年中级消防设施操作员(维保)模拟试题题库(附答案)
- 2025届广东省佛山市高三上学期一模数学试卷含答案
- 注射用尖吻蝮蛇血凝酶-药品临床应用解读
- 2025年广西宾阳县昆仑投资集团有限公司招聘笔试参考题库含答案解析
- 2025年医院财务面试试题及答案
- 网络系统维护记录日志表
- 列管式换热器课程设计
- 体育与健康《立定跳远》教学课件
- 煤炭贸易基础知识
- 中医养生秋季篇课件
- 金属冶炼中的成本管理与控制
评论
0/150
提交评论