Xilinx Spartan-6 时钟管理 (CMT/DCM/PLL)
目录
1、时钟管理器(CMT)
Spartan-6 CMT 是一个灵活、高性能的时钟管理模块。它位于芯片中央、垂直的全局时钟网络旁。如图2-17所示,它包含一个PLL和两个DCM。
图2-17 Spartan-6 FPGA CMT片内布局图
可以看到,比如是 XC6SLX9 的片子,CMT 有 2个;
1.1、DCM
数字时钟管理模块(Digital ClockManager,DCM)是基于Xilinx的其他系列器件所采用的数字延迟锁相环(DLL,Delay Locked Loop)模块。在时钟的管理与控制方面,DCM与DLL相比,功能更强大,使用更灵活。DCM的功能包括消除时钟的延时、频率的合成、时钟相位的调整等 系统方面的需求。DCM的主要优点在于:
① 实现零时钟偏移(Skew),消除时钟分配延迟,并实现时钟闭环控制;
② 时钟可以映射到PCB上用于同步外部芯 片,这样就减少了对外部芯片的要求,将芯片内外的时钟控制一体化,以利于系统设计。
对于DCM模块来说,其关键参数为输入时钟频率范围、输出时钟频率范 围、输入/输出时钟允许抖动范围等。
Spartan-6中的DCM与Spartan-3中的类似,如图2-18所示,同样由4部分组成:
图2-18 DCM 功能结构图
1.1.1、延时锁相环(DLL)。
DLL 主要由一个延时线和控制逻辑组成。延时线对时钟输入端CLKIN产生一个延时,时钟分布网线将该时钟分配到器件内的各个寄存器和时钟反馈端CLKFB;控 制逻辑在反馈时钟到达时采样输入时钟以调整二者之间的偏差,实现输入和输出的零延时,如下图所示。具体工作原理是:控制逻辑在比较输入时钟和反馈时钟的偏 差后,调整延时线参数,在输入时钟后不停地插入延时,直到输入时钟和反馈时钟的上升沿同步,锁定环路进入“锁定”状态,只要输入时钟不发生变化,输入时钟 和反馈时钟就保持同步。DLL可以被用来实现一些电路以完善和简化系统级设计,如提供零传播延迟,低时钟相位差和高级时钟区域控制等。
在Xilinx芯片中,典型的DLL标准原型如图4所示,其管脚分别说明如下:
图4 Xilinx DLL的典型模型示意图
CLKIN(源时钟输入):DLL输入时钟信号,通常来自IBUFG或BUFG。
CLKFB(反馈时钟输入):DLL时钟反馈信号,该反馈信号必须源自CLK0或CLK2X,并通过IBUFG或BUFG相连。
RST(复位):控制DLL的初始化,通常接地。
CLK0(同频信号输出):与CLKIN无相位偏移;CLK90与CLKIN 有90度相位偏移;CLK180与CLKIN 有180度相位偏移
CLK270与CL KIN有270度相位偏移。
CLKDV(分频输出):DLL输出时钟信号,是CLKIN的分频时钟信号。DLL支持的分频系数为1.5,2,2.5,3,4,5,8 和16。
CLK2X(两倍信号输出):CLKIN的2倍频时钟信号。
LOCKED(输出锁存):为了完成锁存,DLL可能要检测上千个时钟周期。当DLL完成锁存之后,LOCKED有效。
DLL 输入时钟是CLKIN 和CLKFB,输出时钟信号是CLK0、CLK90、CLK180、CLK270、CLK2X、CLK2X180 和CLKDV。
1.1.2、数字频率综合器(DFS)。
DFS 可以为系统产生丰富的频率合成时钟信号,输出信号为CLKFB和CLKFX180,可提供输入时钟频率分数倍或整数倍的时钟输出频率方案,输出频率范围为1.5~320 MHz(不同芯片的输出频率范围是不同的)。这些频率基于用户自定义的两个整数比值,一个是乘因子(CLKFX_ MULTIPLY),另外一个是除因子(CLKFX_ DIVIDE),输入频率和输出频率之间的关系为:
比如取CLKFX_MULTIPLY = 3,CLKFX_DIVIDE = 1,PCB上源时钟为100 MHz,通过DCM3倍频后,就能驱动时钟频率在300 MHz的FPGA,从而减少了板上的时钟路径,简化板子的设计,提供更好的信号完整性。
1.1.3、数字移相器(PS)。
DCM 具有移动时钟信号相位的能力,因此能够调整I/O信号的建立和保持时间,能支持对其输出时钟进行0度、90度、180度、270度的相移粗调和相移细调。 其中,相移细调对相位的控制可以达到1%输入时钟周期的精度(或者50 ps),并且具有补偿电压和温度漂移的动态相位调节能力。对DCM输出时钟的相位调整需要通过属性控制PHASE_SHIFT来设置。PS设置范围为 -255到+255,比如输入时钟为200MHz,需要将输出时钟调整+ 0.9 ns的话,PS =(0.9ns/ 5ns)?56 = 46。如果PHASE_ SHIFT值是一个负数,则表示时钟输出应该相对于CLKIN向后进行相位移动;如果PHASE_SHIFT是一个正值,则表示时钟输出应该相对于 CLKIN向前进行相位移动。
移相用法的原理图与倍频用法的原理图很类似,只用把CLK2X输出端的输出缓存移到CLK90、CLK180或者CLK270端即可。利用原时钟和移相时钟与计数器相配合也可以产生相应的倍频
1.1.4、状态逻辑。
状态逻辑反映DCM的状态,对应两个输出信号LOCKED和STATUS[0]。
1.1.5、DCM原语
如图2-19所示,主要有2个DCM的原语调用,DCM_SP和DCM_CLKGEN。
图2-19 DCM原语
DCM_SP提供DCM的传统特性:时钟DESKEW、频率综合和固定及可变相移。
DCM_SP所有的属性都是在设计时确定,上电配置的时候编程到FPGA,除了动态相移功能外,所有的属性在运行时是不可以更改的。
DCM_CLKGEN提供了如下更多的DFS性能。
低抖动的CLKFX和CLKFX180输出。提高了输入时钟CLKIN的抖动容限。支持M和D的动态编程,动态设置CLKFX_MULTIPLY和CLKFX_DIVIDE。CLKFX_MULTIPLY和CLKFX_DIVIDE属性值范围更大。当输入时钟丢失时,自激振荡器工作。具有扩频功能。
在设计中特别要注意DCM_SP和DCM_CLKGEN的特性和参数,请参考《Spartan-6 时钟资源用户手册》。
1.2、PLL
Spartan-6 器件最多包含6 个CMT,12 个PLL。PLL 的主要用途是作为频率合成器,产生更宽范围的频率输出,在与CMT 中的DCM 连接时,具有良好的滤波功能
图2-20 Spartan-6 PLL功能框图
1.2.1、组成
其中包括可编程计数器D、相位/频率检测器(Phase-Frequency Detector,PFD)、电荷泵(Charge Pump ,CP ) 、环路滤波器(Loop Filter , LF) 、压控震荡器(Voltage Controlled Oscillator,VCO)、O0~O5 为6 个可编程计数器。
1.2.2、工作原理
PFD将输入时钟与反馈时钟的相位和频率进行比较,产生的信号驱动CP 和LF,CP和LF 为VCO产生一个参考电压,这个参考电压将影响VCO的输出频率。那么VCO的频率是如何变化的呢?PFD完成2个时钟的比较后,产生CP和LF 的驱动信号,这个信号确定了VCO 应该工作在较高频率还是较低频率。当VCO工作频率过高时,PFD触发一个下降信号,致使控制电压下降,从而降低VCO的工作频率。当VCO工作频率过低时,PFD触发一个上升信号,致使电压上升。VCO 共产生8个输出相位,每个输出相位都可选作输出计数器的参考时钟,如图2-20所示。另外PLL 还提供了一个专用计数器M,用来控制PLL的反馈时钟,以实现大范围频率合成。6个“O”计数器可以独立编程,例如,O0可以编程为进行二分频操作,而O1编程为进行三分频操作。唯一的限制是VCO的工作频率对所有输出计数器来说必须相同,因为VCO驱动所有计数器。使用专用PLL 布线资源,必须将CLK_FEEDBACK设置CLKOUT0,按照图2-21所示使用BUFPLL和BUFIO2FB。
图2-21 带CLKOUT0反馈的PLL
当使用CLKOUT0的专用反馈路径时,输出计数器CLKOUT0_DIVIDE将影响VCO频率,fVCO=FIN×M×CLKOUT0_DIVIDE/D。
1.2.3、PLL的原语
图2-22所示为PLL常用的两个模块,PLL_BASE和PLL_ADV。PLL_BASE允许使用独立的PLL 的最常用功能,包括时钟去歪斜、频率合成、粗粒度相移和占空比编程等。
PLL_ADV具备所有PLL_BASE功能,它具有更多的时钟输出。
图2-22 PLL的原语
1.3、PLL作用
Spartan-6 PLL是为支持时钟网络去歪斜SKEW、频率合成和减少抖动而设计的混合信号模块。接下来将详细讨论PLL 的这3种作用。
1.3.1、PLL 对时钟网络去歪斜SKEW。
在许多情况下,设计人员在其I/O时序预算中不希望有时钟网络的延迟。其实,用PLL/DLL就可以解决这个问题,因为PLL/DLL具有补偿时钟网络的延迟的功能。当然,包括Spartan-6中的PLL。一个与参考时钟CLKIN的频率相匹配的时钟(通常是CLKFBOUT或CLKOUT0)连接到BUFG,并且反馈到PLL的CLKFB引脚。其余输出仍可用来合成更多用户所需频率。这样一来,所有的输出时钟就会与参考时钟之间有一个指定的相位关系。为了精确地降低由于时钟输入布线引起的歪斜,建议采用图2-21 所示的方法,使用BUFIO2FB缓冲器。
1.3.2、PLL 用于频率合成。
PLL还可以用于频率合成。在这种应用中,PLL不能用于时钟网络去歪斜,而是用来为其他模块提供时钟。在这种模式下,PLL反馈通路因为要将所有布线保留为局部布线而应设置成internal反馈模式,以尽量减少抖动。图2-23所示为将PLL配置成频率合成器的示例。
图2-23 仅用于频率合成的PLL
在本例中,输入为100MHz参考时钟,设置M=5,D=1,可使VCO晶振的频率为500MHz(100MHz×5),6个PLL输出中的4个编程提供以下时钟。
250MHz GTP收发器时钟TXUSRCLK和RXUSRCLK。125MHz PCI Express PHY时钟。62.5MHz PCI Express用户接口和BRAM接口时钟。50MHz逻辑时钟。
在此示例中,参考时钟和输出时钟之间没有相位关系,但是各输出时钟之间要求有相位关系。
1.3.3、PLL用作抖动滤波器。
PLL始终可以降低参考时钟上固有的抖动。PLL可以被例化以滤掉外部时钟在驱动另一个逻辑模块前(包括DCM)的抖动。作为抖动滤波器,PLL通常被简单地视为一个缓冲器,在其输出上重新生成输入频率(例如,FIN=100MHz,FOUT=100MHz)。通常,将PLL的BANDWIDTH属性设置为Low,可以实现较强的抖动滤波,但要注意,将BANDWIDTH设置为Low会导致PLL的静态偏差增大。
如何使用PLL呢?通常有如下几种方法。
ISE软件中的PLL向导可以帮助生成各种PLL参数。可以手动将PLL例化成一个组件。将PLL与IP核合并,IP核将包含并管理PLL。
1.4、应用模型
PLL有5种应用模型,下面分别介绍。
1.4.1、时钟网络去歪斜。
PLL的主要用途之一是时钟网络去歪斜。图2-24所示为这种模式下的PLL。O计数器之一的时钟输出用来驱动片内逻辑或I/O。反馈计数器用来控制输入时钟与输出时钟之间的精确相位关系(例如,当需要90°相移时)。右侧所示相关时钟的波形是输入时钟与输出时钟需要相位对齐的情况。这种PLL的配置方式最灵活,但它需要两个全局时钟网络。
图2-24 PLL使用两个BUFG的时钟去歪斜
这里,对反馈时钟有些限制,也就是PFD的2个输入时钟的频率必须完全相同。因此,必须满足下列关系式:
ƒIN/D=ƒFB=ƒVCO/M
例如,如果ƒIN是166MHz,D=1,M=3,O=1,则VCO的输出时钟频率和PLL的时钟(CLKBOUT)输出的频率都是498MHz。因为反馈通路中的M值是3,所以PFD上的两个输入时钟频率都是166MHz。
另一种更复杂的情况是输入频率为66.66MHz,D=2,M=15,O=2。在这种情况下,VCO的频率是500MHz,而O的输出频率是250MHz。所以,PFD上的反馈频率是500/15,即33.33MHz,与PFD上输入时钟频率的66.66MHz/2相符。
如果PLL用作频率合成器或抖动滤波器,并且PLL输入时钟与PLL输出时钟之间不要求有相位关系,那么PLL反馈可以是PLL的内部反馈。因为反馈时钟根本不通过内核电源供电,所以反馈时钟不受内核电源噪声干扰,因而PLL的性能会有所提升,如图2-25所示。当然,CLKIN信号和BUFG上引入的噪声依然存在。
图2-25 具有内部反馈的PLL
1.4.2、零延迟缓冲器。
如果系统中只有一个时钟,而这个时钟又需要驱动到所有的器件,为了保证时钟到达各目的器件之间的歪斜尽可能小,该如何实现这个应用呢?这时,就需要用PLL的零延迟缓冲器的应用模式。如图2-26 所示,其中,反馈信号在片外传递,经过了一段PCB板的走线。使用这种配置,可以保证在FPGA的时钟输入引脚和外部器件的时钟输入引脚时钟边沿是对齐的。很显然,在反馈路径中,PCB走线的最大延迟是有限制的。
图2-26 零延迟缓冲器
在某些情况下,由于外部器件输入电容与FPGA反馈路径上的输入电容存在差异,很难实现精准对齐。例如,如果外部器件有1pF~4pF的输入电容,而FPGA 的输入电容是8pF,这样一来,信号斜率就会存在差异,这是基本的时钟歪斜。为了确保时序,设计人员有必要了解这种问题的存在。
1.4.3、DCM 驱动PLL。
DCM提供了一种生成精确相移时钟的好方法,但是,DCM不能降低参考时钟固有的抖动。PLL可用来降低DCM输出时钟抖动。如图2-27所示,将PLL配置成不引入任何相移(通过PLL的零延迟)的模式,框图右侧所示为相关波形。当使用DCM的输出直接驱动PLL时,DCM和PLL必须同处在一个CMT模块内。这种实现方案在局部专用布线上产生的噪声量最小,因此是首选方案。不过,也可以把DCM输出CLK90连接到BUFG,再去驱动PLL的CLKIN输入
图2-27 DCM 驱动PLL 以降低抖动
1.4.4、PLL 驱动DCM。
减少时钟抖动的另一种可选方案是在输入时钟抖动传入DCM之前用PLL将其清除。这样可以改善所有DCM的输出抖动,但DCM附加的任何抖动都仍会传到时钟输出。PLL和DCM应处在同一个CMT模块中,因为PLL与DCM之间存在用来支持零延迟模式的专用资源。如果PLL和DCM不在同一个CMT中,那么唯一的连接就是通过一个能抑制歪斜可能性的BUFG。只要参考频率可以由一个PLL生成,则一个PLL即可驱动多个DCM。例如,如果将一个33MHz的参考时钟送入PLL,而设计用一个DCM在200MHz频率下工作,同时用另一个在100MHz频率下工作,那么VCO就可以在600MHz(M1=18)频率下工作。可以对VCO的频率进行三分频以生成200MHz的时钟,同时可以对另一个计数器进
行六分频以生成100MHz的时钟。对于图2-28中的示例,一个PLL可以驱动两个DCM。
图2-28 PLL驱动一个DCM
1.4.5、PLL 到PLL 的连接。
可以级联PLL,以便生成更大范围的时钟频率。公式2-1所示为最终输出频率与输入频率之间的关系。图2-29所示为两个PLL的级联,第一个PLL的输出连接到BUFG,再连接到第二个PLL的CLKIN引脚。此路径具有最小的器件抖动。
公式2-1:
图2-29 PLL驱动PLL
2、PLL Vs DCM
PLL与DCM功能上非常相似,但是他们实现的原理有所不同。
首先,需要知道,不管是DCM还是PLL,都是属于CMT(时钟管理模块),对于不同的芯片,CMT的个数也是不一样的;
每个 CMT 含 2个 DCM 和 PLL;
DCM,它的全名叫做数字时钟管理器,它是基于数字抽样方式,在输入时钟和反馈时钟之间插入延迟,使输入时钟和反馈时钟的上升沿一致来实现的。又称数字锁相环。
PLL,学名叫做模拟锁相环,其核心部件为VCO,即压控振荡器。它能在400-1080MHZ之间摆动,其输出频率由D,M,O三个参数来决定,Spartan-6最多可以有6个输出。
功能上都可以实现倍频、分频、占空比调整,但是PLL调节范围更大,比如说:XILINX使用DLL,只能够2、4倍频;ALTERA的PLL可以实现的倍频范围就更大毕竟一个是模拟的、一个是数字的。两者之间的对比:对于PLL,用的晶振存在不稳定性,而且会累加相位错误,而DLL在这点上做的好一些,抗噪声的能力强些;但PLL在时钟的综合方面做得更好些。总的来说PLL的应用多,DLL则在jitter power precision等方面优于PLL
Xilinx DCM PLL区别及PLL使用方法
来自:http://blog.chinaaet.com/crazybingo/p/35471
总结一下DCM与PLL的区别,仅以鄙人目前浅陋的见识:
(1) DCM只支持90、180、270相位,但PLL这方便更灵活宽泛
(2) DCM只支持2~16的小数分频,以及2倍频,但是PLL这方面更灵活宽泛
(3) DCM是用数字延时模块调理时钟,是纯数字的东西,用的灵活,占得面积小,噪声和jitter相对PLL大一些。
(4) PLL是模拟的,比DCM要浮躁,出来的钟也质量也高,但是比较复杂,占的面积也比DCM大
参考文档:
https://blog.****.net/mine_land/article/details/80149815
http://www.elecfans.com/emb/fpga/20170211483892.html