本帖最后由 钻研的鱼 于 2011-6-3 15:57 编辑
数字时钟管理器 (DCM) 提供广泛而强大的时钟管理功能,主要是时钟去歪斜、相移,以此满足IO管脚时序要求。以spartan6 DCM为例,深入分析DCM的原理、结构。
首先理解fpga内部时钟走线的布局。fpga内部有全局时钟网络,这个网络是经过优化的,可以假设这个布线是非常粗的铜线,这个铜线有很多分叉,但每条支路到达触发器的D端延迟基本相等,即clock skew非常小。(目前有更小skew的时钟网络,即通过bufio的时钟网络)。如图1所示:
BUFG的前端可以接一普通IO引脚的输入,如图2所示
从bufg出来的信号到触发器的D端skew非常小,这部分网络是全局时钟网络。这两种输入的区别在于从IBUFG到BUFG的时间固定,而IBUF到BUFG的延迟不固定,如果从IO起点算延迟,不同引脚输入的延迟变化非常大。
其次理解DESKEW_ADJUST参数含义.
一个典型的DCM应用如图3所示:
在SYSTEM_SYNCHRONOUS为系统同步时,各点的相位关系如图4所示:
在查阅《Virtex-5 用户指南.pdf》资料时,dcm对时钟去歪斜有一个更深入的说明:如图5所示:
DCM 包含一个延迟锁定环 (DLL),该延迟锁定环根据输入时钟去除 DCM 的输出时钟歪斜,以完全消除时钟分布延迟。DLL 包含延迟单元(分立的小型缓冲器)和控制逻辑。输入的时钟驱动一连串延迟单元,因此,每个延迟单元的输出代表在不同点延迟的输入时钟的一个版本。
控制逻辑包含一个相位检测器和一个延迟线选择器。相位检测器将输入的时钟信号
(CLKIN) 与一个反馈输入 (CLKFB) 进行比较,然后控制延迟线选择器,这实质上是通过对 DCM 的输出加入延迟直到 CLKIN 与 CLKFB 重合。
下面自己的理解:dcm的clkin经过简单的延迟单元,输出到clk0,clk0经过bufg和feedback tap delays反馈到clkfb。DESKEW_ADJUST参数应该对应tap数目, 当初始化时DESKEW_ADJUST固定,dcm不断比较clkin和clkfb的相位差,动态调整clkin经过的延迟单元数目,达到调整clk0相位的目的。
系统同步设置:在理想情况下,DLL 的用途是将时钟延迟清零,即上图的clk source处相位和右边D触发器时钟端相位差为0。dcm中clkin和clkfb相位差为0,clk source提前clkin IBUFG时间,D触发器时钟端提前clkfb DESKEW_ADJUST个taps时间,所以clk source能和D触发器时钟端同相。
源同步设置:当 DESKEW_ADJUST 设置为源同步模式时,DCM 反馈延迟单元设置为零。通过分析,容易得知:右边D触发器时钟端落后clk source 一个IBUFG时间,同样,D触发器数据端落后Data input一个IBUF时间,IBUFG特性和IBUF相同,因此,在fpga内部,clk source和Data input 经过相同的时间延迟到达D触发器,即源同步。 |