基于FPGA的DCM时钟管理单元概述

时间:2025-07-29  作者:Diven  阅读:0

看Xilinx的Datasheet会注意到Xilinx的FPGA没有PLL,其实DCM就是时钟管理单元。

基于FPGA的DCM时钟管理单元概述

1、DCM概述

DCM内部是DLL(Delay Lock Loop结构,对时钟偏移量的调节是通过长的延时线形成的。DCM的参数里有一个PHASESHIFT(相移),可以从0变到255。所以我们可以假设内部结构里从输入引脚clkin到输出引脚clk_1x之间应该有256根延时线(实际上,由于对不同频率的时钟都可以从0变到255,延时线的真正数目应该比这个大得多)。DCM总会把输入时钟clkin和反馈时钟CLKFB相比较,如果延时差不等于所设置的PHASESHIFT,DCM就会改变在clkin和clk_1x之间的延时线数目,直到相等为止,输出和输入形成闭环,动态调整到设定值再退出。这个从不等到相等所花的时间,就是输出时钟锁定的时间,相等以后,lock_flag标识才会升高。

当DCM发现clkin和clkfb位相差不等于PHASESHIFT的时候,就去调节clk_1x和clkin之间延时,所以如果clk_1x和clkfb不相关的话,那就永远也不能锁定了。

图一、DCM和BUFG配合使用示意图

2、如何使用DCM

DCM一般和BUFG配合使用,要加上BUFG,应该是为了增强时钟的驱动能力。DCM的一般使用方法是,将其输出clk_1x接在BUFG的输入引脚上,BUFG的输出引脚反馈回来接在DCM的反馈时钟脚CLKFB上。另外,在FPGA里,只有BUFG的输出引脚接在时钟网络上,所以一般来说你可以不使用DCM,但你一定会使用BUFG。有些兄弟总喜欢直接将外部输入的时钟驱动内部的寄存器,其实这个时候虽然你没有明显地例化BUFG,但工具会自动给你加上的。

3、使用DCM可以消除时钟skew

使用DCM可以消除时钟skew。这个东西一直是我以前所没有想清楚的,时钟从DCM输出开始走线到寄存器,这段skew的时间总是存在的,为什么用DCM就可以消除呢?直到有一天忽然豁然开朗,才明白其原委。对高手来说,也许是极为easy的事情,但也许有些朋友并不一定了解,所以写出来和大家共享。

为说明方便起见,我们将BUFG的输出引脚叫做clk_o,从clk_o走全局时钟布线到寄存器时叫做clk_o_reg,从clk_o走线到DCM的反馈引脚CLKFB上时叫clkfb,如图所示。实际上clk_o, clk_o_reg, clkfb全部是用导线连在一起的。

所谓时钟skew,指的就是clk_o到clk_o_reg之间的延时。如果打开FPGA_Editor看底层的结构,就可以发现虽然DCM和BUFG离得很近,但是从clk_o到clkfb却绕了很长一段才走回来,从而导致从clk_o到clk_o_reg和clkfb的延时大致相等。

总之就是clk_o_reg和clkfb的相位应该相等。所以当DCM调节clkin和clkfb的相位相等时,实际上就调节了clkin和clk_o_reg相等。而至于clk_1x和clk_o的相位必然是超前于clkin, clkfb, clk_o_reg的,而clk_1x和clk_o之间的延时就很明显,就是经过那个BUFG的延迟时间。

4、对时钟skew的进一步讨论

说一说时钟skew的概念。时钟skew实际上指的是时钟驱动不同的寄存器时,由于寄存器之间可能会隔得比较远,所以时钟到达不同的寄存器的时间可能会不一样,这个时间差称为时钟skew。这种时钟skew可以通过时钟树来解决,也就是使时钟布线形成树状结构,使得时钟到每一个寄存器的距离是一样的。很多FPGA芯片里就布了这样的时钟树结构。也就是说,在这种芯片里,时钟skew基本上是不存在的。

说到这里,似乎有了一个矛盾,既然时钟skew的问题用时钟树就解决了,那么为什么还需要DCM+BUFG来解决这个问题?另外,既然时钟skew指的是时钟驱动不同寄存器之间的延时,那么上面所说的clk_o到clk_o_reg岂非不能称为时钟skew?

先说后一个问题。在一块FPGA内部,时钟skew问题确实已经被FPGA的时钟方案树解决,在这个前提下clk_o到clk_o_reg充其量只能叫做时钟延时,而不能称之为时钟skew。可惜的是FPGA的设计不可能永远只在内部做事情,必然和外部交换数据。例如从外部传过来一个32位的数据以及随路时钟,数据和随路时钟之间满足建立保持时间关系(Setup Hold time),你如何将这32位的数据接收进来?如果你不使用DCM,直接将clkin接在BUFG的输入引脚上,那么从你的clk_o_reg就必然和clkin之间有个延时,那么你的clk_o_reg还能保持和进来的数据之间的建立保持关系吗?显然不能。相反,如果你采用了DCM,接上反馈时钟,那么clk_o_reg和clkin同相,就可以利用去锁存进来的数据。可见,DCM+BUFG的方案就是为了解决这个问题。而这个时候clk_o到clk_o_reg的延时,我们可以看到做内部寄存器和其芯片传过来的数据之间的时钟skew。

由此,我们可以得出一个推论,从晶振出来的时钟作为FPGA的系统时钟时,我们可以不经过DCM,而直接接到BUFG上就可以,因为我们并不在意从clkin到clk_o_reg的这段延时。

猜您喜欢

SO8_150MIL是一种常见的封装类型,广泛应用于电子元器件中。它的全称是“SmallOutlinePackage8-pinwith150milwidth”,...
2025-02-24 13:17:29

20世纪60年代,以半导体类、光学类、电化学类为基础的气体传感器逐渐走入人们的视线,传统的二氧化碳(CO₂)传感器是基于电化学原理制成的,寿命较短,并且易受可燃...
2023-11-17 09:10:00

消防电源是指在发生火灾时,为建筑物内的消防设施提供电力供应的专用电源。独立于普通电源,确保在火灾等紧急情况下,消防设备能够正常运作,保障人员疏散和灭火救援的顺利...
2024-03-13 00:00:00

125在贴片电阻上代表阻值,但并非直接的欧姆值。实际上,是一种编码方式,需要进行解码才能得到实际的电阻值。125通常代表1.25kΩ,也就是1250欧姆。这种编...
2024-11-29 10:25:48


  一、 功能描述本工程包含了两个按键和4位数码管显示,共同实现一个篮球24秒倒计时、并具有暂停和重新计数复位的功能。具体功能如下:1. 数码管显示秒十位、秒个...
2018-04-19 10:24:00

风扇作为常见的电器设备,应用于多个领域,有着着重要作用。在家庭中,风扇是夏季降温的首选,帮助人们在炎热的天气中保持舒适。无论是吊扇、台扇还是落地扇,都是家庭必备...
2009-03-31 00:00:00

电子元器件中,贴片电阻是常见的元件,应用于各种电路中。由于其体积小、功耗低、适合自动化生产等优点,贴片电阻在现代电子产品中得到了应用。在更换贴片电阻时,如何准确...
2025-04-19 15:30:36

贴片电阻,作为电子电路中不可或缺的元件,其规格种类繁多,让人眼花缭乱。但对于一般应用,了解几种常见的规格就足够了。首先,最常见的区分方式是尺寸,也就是我们常说的...
2024-11-26 11:29:49

红外遥控接收头(IRM)是用于接收红外线信号的电子元件,应用于家电、遥控器、汽车和其无线通信设备中。其主要功能是将接收到的红外光信号转换为电信号,以实现对设备的...
2018-10-15 00:00:00