一直以为dcm和dll说得都是一个东西,使用了才知道xilinx的时钟管理策略还真得蛮多的,虽说基本的原理上都有点大同小异。
图1
先说dcm,字面上理解就是数字时钟管理单元,主要完成时钟的同步、移相、分频、倍频和去抖动等。而dll是数字延迟锁相环的意思,是通过长的延时线达到对时钟偏移量的调节,而这个调节是通过比对反馈回来的时钟信号实现同步输出的。dcm实际上不止dll结构这么简单,它还包括了dfs\dps\dss等组件。官方的说法如下:
the digital clock manager (dcm) component implements a clock delay locked loop (dll), a digital frequency synthesizer (dfs), digital phase shifter (dps), and a digital spread spectrum (dss).
xilinx早期的virtex器件不提供dcm资源,只有clkdll,这个clkdll实现的时钟输出相对单一,但是基本的时钟偏斜的优化效果还是可以达到的。简单的插入语言模板进行例化就可以了。需要注意的是时钟反馈信号clkfb不能够直接和时钟输出clk0连接,必须让clk0先bufg一下。可以如下进行例化(不使用的时钟可以空着):
clkdll #(
.clkdv_divide(2.0), // divide by: 1.5,2.0,2.5,3.0,4.0,5.0,8.0 or 16.0
.duty_cycle_correction(true), // duty cycle correction, true or false
.factory_jf(16'hc080), // factory jf values
.startup_wait(false) // delay config done until dll lock, true/false
)
clkdll_inst (
.clk0(clk0), // 0 degree dll clk output
.clk180(clk180), // 180 degree dll clk output
.clk270(clk270), // 270 degree dll clk output
.clk2x(clk2x), // 2x dll clk output
.clk90(clk90), // 90 degree dll clk output
.clkdv(clkdv), // divided dll clk out (clkdv_divide)
.locked(locked), // dll lock status output
.clkfb(clk00), // dll clock feedback
.clkin(clk), // clock input (from ibufg, bufg or dll)
.rst(!rst_n) // dll asynchronous reset input
);
// bufg : in order to incorporate this function into the design,
// verilog : the following instance declaration needs to be placed
// instance : in the body of the design code. the instance name
// declaration : (bufg_inst) and/or the port declarations within the
// code : parenthesis may be changed to properly reference and
// : connect this function to the design. all inputs
// : and outputs must be connected.
//
// bufg: global clock buffer (source by an internal signal)
// all fpgas
// xilinx hdl language template, version 9.1i
bufg bufg_inst (
.o(clk00), // clock buffer output
.i(clk0) // clock buffer input
);
// end of bufg_inst instantiation
黄色:clk00 绿色:clkdv(2分频时钟)
图2黄色:clk00 绿色:clk0(bufg前)
图3
黄色:clk00 绿色:clk2x(2倍频时钟)
图4
黄色:clk00 绿色:clk90(90度相移)
图5
黄色:clk00 绿色:clk180(180度相移)
图6
图7
对于时钟偏斜的改善也是显而易见的,原先的clock path skew/delay(也即clock network latency)一般在1到2ns,现在都在-0.5ns到0ns。至于为什么这个skew值可以是负值呢?特权同学看了很多资料,都只是轻描淡写的说dll是通过外部的反馈时钟,然后调节内部的延时实现最终的skew的减小。从clock skew的定义来看,时钟从输入到各个寄存器的延时不可能是负数的,惟一的可能是经过dll后的时钟被整个的延时了大约1个时钟周期,从而达到下一个时钟沿和上一个时钟沿对齐的效果,那么这个clock skew为负值就不难解释了。
特权同学也特意从上电开始捕获了dll输出时钟(引到了输出pad上,这个延时也不小),和时钟的输入(fpga的输入pad)做了对比。发现确确实实有那么一个相位的调整过程。而且这个相位的调整是在dll输出开始时,输出时钟滞后输入时钟将近270度,如图9所示;图10捕获到了更为明显的相位调整,即从中线左侧到右侧的变化。正常稳定后的输出如图11和图12所示,相位依然滞后而不是负值那是因为我所捕获的这个输出时钟是拉到了pad上的缘故,延时大了一些也在所难免。
绿色为输入时钟,黄色为dll输出时钟引到pad上。
图8 上电的整体信号捕获
图9 产生dll输出时钟
图10 明显的相位调整
图11 稳定的输出时钟
图12
肖特基二极管特性和应用
国外开发出一款利用电磁波驱蚊的智能手环 能降低近50%的被叮咬概率
特斯拉在中国大陆的超级充电站突破700站
继互联网医疗之后AI医疗将成为时代趋势
浅谈工业物联网应用的数据存取技术
CLKDLL使用带来的思考
城云科技在数字城市领域和数字经济赛道影响力获得认可
主要电阻器的特点和特性
小米路由器3G什么时候开售?小米路由器3G最新消息:249元开启预售!
传华为计划在法国建设5G设备工厂
GRE Tunnel接口协议Down分析流程
便携设备中的汉字库设计
国内晶圆制造再获突破!联芯顺利导入28纳米制程
重庆总投资185亿元,包括奥松半导体8英寸MEMS特色芯片IDM产业基地等10大项目在渝开工
Fluke Ti401 PRO热像仪的产品概述以及主要特性
AMD扩展第四代EPYC CPU产品带来突破性的性能
智能魔镜大显身手,助力我们打造智能家居空间
东软睿驰入围《中国领先汽车科技企业50》榜单
产业互联网化将成为推动传统企业数字化转型的全新机遇
MDK-ARM工程下如何创建多个Target(目标) ?