XILINX DCM and ALTERA PLL

来源:互联网 发布:js微信授权获取code 编辑:程序博客网 时间:2024/05/16 15:10

转自http://www.eefocus.com/zhangjingbin/blog/10-12/199677_73b6c.html

时钟---锁相环

 

1.       Xilinx DCM

数字时钟管理模块(Digital Clock ManagerDCM)是基于Xilinx的其他系列器件所采用的数字延迟锁相环(DLLDelay Locked Loop)模块。在时钟的管理与控制方面,DCMDLL相比,功能更强大,使用更灵活。DCM的功能包括消除时钟的延时、频率的合成、时钟相位的调整等系统方面的需求。DCM的主要优点在于:实现零时钟偏移(Skew),消除时钟分配延迟,并实现时钟闭环控制;时钟可以映射到PCB上用于同步外部芯片,这样就减少了对外部芯片的要求,将芯片内外的时钟控制一体化,以利于系统设计。对于DCM模块来说,其关键参数为输入时钟频率范围、输出时钟频率范围、输入/输出时钟允许抖动范围等。 

DCM
共由四部分组成,如图2所示。其中最底层仍采用成熟的DLL模块;其次分别为数字频率合成器(DFSDigital Frequency Synthesizer)、数字移相器(DPSDigital Phase Shifter)和数字频谱扩展器(DSSDigital Spread Spectrum)。不同的芯片模块的DCM输入频率范围是不同的,例如:


1DLL模块 

DLL 
主要由一个延时线和控制逻辑组成。延时线对时钟输入端CLKIN产生一个延时,时钟分布网线将该时钟分配到器件内的各个寄存器和时钟反馈端CLKFB;控制逻辑在反馈时钟到达时采样输入时钟以调整二者之间的偏差,实现输入和输出的零延时,如图3所示。具体工作原理是:控制逻辑在比较输入时钟和反馈时钟的偏差后,调整延时线参数,在输入时钟后不停地插入延时,直到输入时钟和反馈时钟的上升沿同步,锁定环路进入锁定状态,只要输入时钟不发生变化,输入时钟和反馈时钟就保持同步。DLL可以被用来实现一些电路以完善和简化系统级设计,如提供零传播延迟,低时钟相位差和高级时钟区域控制等。



3 DLL简单模型示意图

Xilinx芯片中,典型的DLL标准原型如图4所示,其管脚分别说明如下:



4 Xilinx DLL的典型模型示意图

CLKIN(源时钟输入):DLL输入时钟信号,通常来自IBUFGBUFG 
CLKFB
(反馈时钟输入):DLL时钟反馈信号,该反馈信号必须源自CLK0CLK2X,并通过IBUFGBUFG相连。 
RST
(复位):控制DLL的初始化,通常接地。 
CLK0
(同频信号输出):与CLKIN无相位偏移;CLK90CLKIN 90度相位偏移;CLK180CLKIN180度相位偏移;CLK270CL KIN270度相位偏移。 
CLKDV
(分频输出):DLL输出时钟信号,是CLKIN的分频时钟信号。DLL支持的分频系数为1.522.534516 
CLK2X
(两倍信号输出):CLKIN2倍频时钟信号。 
LOCKED
(输出锁存):为了完成锁存,DLL可能要检测上千个时钟周期。当DLL完成锁存之后,LOCKED有效。 

FPGA 设计中,消除时钟的传输延迟,实现高扇出最简单的方法就是用DLL,把CLK0 CLKFB相连即可。利用一个DLL可以实现2倍频输出,如图5所示。利用两个DLL 就可以实现4倍频输出,如图6所示。



5 Xilinx DLL 2倍频典型模型示意图



6 Xilinx DLL 4倍频典型模型示意图

2)数字频率合成器 

DFS 
可以为系统产生丰富的频率合成时钟信号,输出信号为CLKFBCLKFX180,可提供输入时钟频率分数倍或整数倍的时钟输出频率方案,输出频率范围为 1.5320 MHz(不同芯片的输出频率范围是不同的)。这些频率基于用户自定义的两个整数比值,一个是乘因子(CLKFX_ MULTIPLY),另外一个是除因子(CLKFX_ DIVIDE),输入频率和输出频率之间的关系为:

比如取CLKFX_MULTIPLY = 3CLKFX_DIVIDE = 1PCB上源时钟为100 MHz,通过DCM 3倍频后,就能驱动时钟频率在300 MHzFPGA,从而减少了板上的时钟路径,简化板子的设计,提供更好的信号完整性。 

3
 数字移相器 

DCM 
具有移动时钟信号相位的能力,因此能够调整I/O信号的建立和保持时间,能支持对其输出时钟进行0度、90度、180度、270度的相移粗调和相移细调。其中,相移细调对相位的控制可以达到1%输入时钟周期的精度(或者50 ps),并且具有补偿电压和温度漂移的动态相位调节能力。对DCM输出时钟的相位调整需要通过属性控制PHASE_SHIFT来设置。PS设置范围为 -255+255,比如输入时钟为200 MHz,需要将输出时钟调整+ 0.9 ns的话,PS =0.9ns/ 5ns?56 = 46。如果PHASE_ SHIFT值是一个负数,则表示时钟输出应该相对于CLKIN向后进行相位移动;如果PHASE_SHIFT是一个正值,则表示时钟输出应该相对于 CLKIN向前进行相位移动。 

移相用法的原理图与倍频用法的原理图很类似,只用把CLK2X输出端的输出缓存移到CLK90CLK180或者CLK270端即可。利用原时钟和移相时钟与计数器相配合也可以产生相应的倍频。 

4
 数字频谱合成器 

Xilinx 
公司第一个提出利用创新的扩频时钟技术来减少电磁干扰(EMI)噪声辐射的可编程解决方案。最先在FPGA中实现电磁兼容的EMIControl技术,是利用数字扩频技术(DSS)通过扩展输出时钟频率的频谱来降低电磁干扰,减少用户在电磁屏蔽上的投资。数字扩频(DSS)技术通过展宽输出时钟的频谱,来减少EMI和达到FCC要求。这一特点使设计者可极大地降低系统成本,使电路板重新设计的可能性降到最小,并不再需要昂贵的屏蔽,从而缩短了设计周期。

2 Xilinx DCM使用注意事项

 

1)      全局时钟资源的使用方法IBUFG + DCM + BUFG的使用方法: 
这种使用方法最灵活,对全局时钟的控制更加有效。通过DCM模块不仅仅能对时钟进行同步、移相、分频和倍频等变换,而且可以使全局时钟的输出达到无抖动延迟。(IBUFG即输入全局缓冲,是与专用全局时钟输入管脚相连接的首级全局缓冲。所有从全局时钟管脚输入的信号必须经过IBUF元,否则在布局布线时会报错;BUFG是全局缓冲,它的输入是IBUFG的输出,BUFG的输出到达FPGA内部的IOBCLB、选择性块RAM的时钟延迟和抖动最小)

u       一个DCM

出现错误:ERROR:Xst:2035 - Port has illegal connections. This port is connected to an input buffer and other components.Input Buffer:

或者:ERROR:NgdBuild:924 - input pad net 'clk' is driving non-buffer primitives

 

使用DCM时,如果综合后会发现其实内部是其如下结构:

 

 

 

输入、输出自动添加了IBUFGBUFG。假设例化成如下:

dcm_ip dcm_1(.CLKIN_IN(clk),.RST_IN(!rst),.CLKFX_OUT(CLKFX_OUT_1));

 

A_control  A1(clk(CLKFX_OUT_1),.rst(rst),.end_of_frame_flag(end_of_frame_flag),.

data_valid_flag(data_valid_flag),.R(R),.G(G),.B(B));

 

fsm b1(.clk(clk),.rst(rst),.y_out(y_out),.u_out(u_out),.v_out(v_out),.

yuv_state(yuv_state),.sub_yuv_state(sub_yuv_state),.count_x(count_x),.count_y(count_y),.yuv_out(yuv_out),.yuv_addr(yuv_addr),.data_valid(data_valid),.end_of_frame(end_of_frame));

endmodule

即输入clk两个分支,一个直接连到模块fsm;一个连在了DCM的输入时钟源。由于经过DCM时会自动加一个buffer缓冲器,而到fsm会直接连在一起,这样会造成DCM这一路短路出现错误。

改正方法:clk只是连接一个load,就是DCMDCM两个输出一个CLKFX_OUT_1,另外一个用CLK0_OUT,此信号和clk无论相位还是频率是一样的。

描述语言如下:

dcm_ip(CLKIN_IN,

              RST_IN,

              CLKFX_OUT,

              CLKIN_IBUFG_OUT,

              CLK0_OUT);

u       多个DCM

如果并用的DCM的话,没有问题,一个clk两个DCM;但是如果串联的话。类似如果一个DCM分频或者倍频还是不够用的话,可以两个DCM串联用。这个时候除了注意上面说的情况外,还需要注意一点,不能例化一个DCM两次,因为这两个DCM设置是不一样 。第一个PLL CLKIN_IN设置为external 时钟源接clk;第二个CLKIN_IN设置internal 时钟源接第一个DCM的输出。否则出错。!!!

3 ALTERA PLL介绍

Cyclone™ FPGA具有锁相环(PLL)和全局时钟网络,提供完整的时钟管理方案。Cyclone PLL具有时钟倍频和分频、相位偏移、可编程占空比和外部时钟输出,进行系统级的时钟管理和偏移控制。Altera® Quartus® II软件无需任何外部器件,就可以启用Cyclone PLL和相关功能。本文将介绍如何设计和使用Cyclone PLL功能。
PLL
常用于同步内部器件时钟和外部时钟,使内部工作的时钟频率比外部时钟更高,时钟延迟和时钟偏移最小,减小或调整时钟到输出(TCO)和建立(TSU)时间

2.Cyclone PLL功能

功能

说明

时钟倍频和分频

M/N×后scale计数器)1

相位偏移

小至156皮秒(ps)的增量幅度2),(3

可编程占空比

 

内部时钟输出数量

每个PLL两个输出

外部时钟输出数量4

每个PLL一个输出

锁定端口可以输入逻辑阵列

 

PLL时钟输出可以输入逻辑阵列

 

可编程占空比

可编程占空比功能允许你设置PLL时钟输出的占空比。占空比是时钟输出高/低时间和整个时钟周期时间的比率,表示为处于高的时间的比例。Quartus II软件使用输入频率和目的倍频/分频比率来选择后scale计数器。占空周期精度由PLL时钟输出选用的后scale计数器值决定,定义为50%除以后scale计数器值。例如,如果后scale计数器的值为3,允许的占空比为50%除以3等于16.67%。因为altpll宏功能不接受非整数值的占空比值,允许的占空比为17%33%50%67%
由于硬件的限制,你不能实现84%的占空比,因为对于给定的计数器值你不能实现最接近100%的值。然而,你可以选择17%的占空比,反转PLL时钟输出,从而实现84%的占空比。例如,如果G0计数器为10,占空比增量是5%,范围从5%90%

 

时钟反馈模式

Cyclone PLL支持三种反馈模式:标准、零延迟缓冲和无补偿。和其它Altera器件系列不同,Cyclone PLL不支持外部反馈模式。所有支持的三种时钟反馈模式允许倍频/分频、相位偏移和可编程占空比。下面是每种模式的简要说明。
● 图4到图6所示的相位关系是内定值相位偏移设置-0°。改变相位偏移设置会改变相位关系。

标准模式

在标准模式下,PLL把参考时钟和逻辑阵列或IOE的端口缓存器处的时钟信号相位对齐,补偿内部全局时钟网络延迟。在altpll MegaWizard外挂插件管理器中,你可以定义PLL的哪个内部时钟输出(c0或c1)应该补偿。
如果在该模式中使用外部时钟输出(PLL[2..1]_OUT),相对于时钟输入管脚有相位偏移。相同的,如果你用内部PLL时钟输出驱动通用I/O管脚,相对应的时钟输入管脚也有相位偏移。

图4是标准模式下PLL时钟相位关系的范例波形。
 




图4.标准模式下PLL时钟之间的相位关系
 

图4注释:
(1) 外部时钟输出可能领先或落后于PLL时钟信号

零延迟缓冲模式

PLL外部时钟输出管脚(PLL[2..1]_OUT)的时钟信号和PLL输入时钟是相位对齐的,没有延迟。如果你用c[1..0]端口驱动内部时钟管脚,那么相对于输入时钟管脚有相位偏移。图5是零延迟缓冲模式下PLL时钟相位关系的范例波形。

 



图5.零延迟缓冲模式下PLL时钟之间的相位关系

 


无补偿

在该模式下,PLL不补偿任何时钟网络。这样会有更佳的抖动性能,因为反馈到PFD的时钟不经过某些电路。相对PLL时钟输入,PLL内部和外部时钟输出都有相位偏移。图6是无补偿模式下的PLL时钟相位关系范例波形。

 



图6.无补偿模式下PLL时钟之间的相位关系

4 Altera PLL使用情况
1
1PLL情况

不像XILINX DCM,此时只要满足PLL的驱动是专用的时钟输入端口即可。即例化不会出现XILINX报错的情况。

22PLL情况

Wire out_clk1,out_clk2;

pll_1 pll_2(

       .areset(!rst),

       .inclk0(clk),

       .c0(out_clk1));

 

pll_1      pll_3(.areset(!rst),

       .inclk0(clk),

       .c0(out_clk2));

上面两个PLL例化是正确的,并联操作。

但是如下组成PLL链是错误的。

Wire out_clk1,out_clk2;

pll_1 pll_2(

       .areset(!rst),

       .inclk0(clk),

       .c0(out_clk1));

 

pll_1      pll_3(.areset(!rst),

       .inclk0(out_clk1),

       .c0(out_clk2));

报错: Error: Can't fit fan-out of node <>|altpll:altpll_component|_clk0 into a single clock region
这样违背了PLL的驱动是专用的时钟输入端口。


0 0
原创粉丝点击