每天进步一点点------Xilinx DCM
时钟---锁相环
1. Xilinx DCM
数字时钟管理模块(Digital Clock Manager,DCM)是基于Xilinx的其他系列器件所采用的数字延迟锁相环(DLL,Delay Locked Loop)模块。在时钟的管理与控制方面,DCM与DLL相比,功能更强大,使用更灵活。DCM的功能包括消除时钟的延时、频率的合成、时钟相位的调整等系统方面的需求。DCM的主要优点在于:①实现零时钟偏移(Skew),消除时钟分配延迟,并实现时钟闭环控制;②时钟可以映射到PCB上用于同步外部芯片,这样就减少了对外部芯片的要求,将芯片内外的时钟控制一体化,以利于系统设计。对于DCM模块来说,其关键参数为输入时钟频率范围、输出时钟频率范围、输入/输出时钟允许抖动范围等。
DCM共由四部分组成,如图2所示。其中最底层仍采用成熟的DLL模块;其次分别为数字频率合成器(DFS,Digital Frequency Synthesizer)、数字移相器(DPS,Digital Phase Shifter)和数字频谱扩展器(DSS,Digital Spread Spectrum)。不同的芯片模块的DCM输入频率范围是不同的,例如:
1)DLL模块
DLL 主要由一个延时线和控制逻辑组成。延时线对时钟输入端CLKIN产生一个延时,时钟分布网线将该时钟分配到器件内的各个寄存器和时钟反馈端CLKFB;控制逻辑在反馈时钟到达时采样输入时钟以调整二者之间的偏差,实现输入和输出的零延时,如图3所示。具体工作原理是:控制逻辑在比较输入时钟和反馈时钟的偏差后,调整延时线参数,在输入时钟后不停地插入延时,直到输入时钟和反馈时钟的上升沿同步,锁定环路进入“锁定”状态,只要输入时钟不发生变化,输入时钟和反馈时钟就保持同步。DLL可以被用来实现一些电路以完善和简化系统级设计,如提供零传播延迟,低时钟相位差和高级时钟区域控制等。
图3 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有效。
在FPGA 设计中,消除时钟的传输延迟,实现高扇出最简单的方法就是用DLL,把CLK0 与CLKFB相连即可。利用一个DLL可以实现2倍频输出,如图5所示。利用两个DLL 就可以实现4倍频输出,如图6所示。
图5 Xilinx DLL 2倍频典型模型示意图
图6 Xilinx DLL 4倍频典型模型示意图
2)数字频率合成器
DFS 可以为系统产生丰富的频率合成时钟信号,输出信号为CLKFB和CLKFX180,可提供输入时钟频率分数倍或整数倍的时钟输出频率方案,输出频率范围为 1.5~320 MHz(不同芯片的输出频率范围是不同的)。这些频率基于用户自定义的两个整数比值,一个是乘因子(CLKFX_ MULTIPLY),另外一个是除因子(CLKFX_ DIVIDE),输入频率和输出频率之间的关系为:
比如取CLKFX_MULTIPLY = 3,CLKFX_DIVIDE = 1,PCB上源时钟为100 MHz,通过DCM 3倍频后,就能驱动时钟频率在300 MHz的FPGA,从而减少了板上的时钟路径,简化板子的设计,提供更好的信号完整性。
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输出端的输出缓存移到CLK90、CLK180或者CLK270端即可。利用原时钟和移相时钟与计数器相配合也可以产生相应的倍频。
4) 数字频谱合成器
Xilinx 公司第一个提出利用创新的扩频时钟技术来减少电磁干扰(EMI)噪声辐射的可编程解决方案。最先在FPGA中实现电磁兼容的EMIControl技术,是利用数字扩频技术(DSS)通过扩展输出时钟频率的频谱来降低电磁干扰,减少用户在电磁屏蔽上的投资。数字扩频(DSS)技术通过展宽输出时钟的频谱,来减少EMI和达到FCC要求。这一特点使设计者可极大地降低系统成本,使电路板重新设计的可能性降到最小,并不再需要昂贵的屏蔽,从而缩短了设计周期。
2 Xilinx DCM使用注意事项
1) 全局时钟资源的使用方法IBUFG + DCM + BUFG的使用方法:
这种使用方法最灵活,对全局时钟的控制更加有效。通过DCM模块不仅仅能对时钟进行同步、移相、分频和倍频等变换,而且可以使全局时钟的输出达到无抖动延迟。(IBUFG即输入全局缓冲,是与专用全局时钟输入管脚相连接的首级全局缓冲。所有从全局时钟管脚输入的信号必须经过IBUF元,否则在布局布线时会报错;BUFG是全局缓冲,它的输入是IBUFG的输出,BUFG的输出到达FPGA内部的IOB、CLB、选择性块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时,如果综合后会发现其实内部是其如下结构:
输入、输出自动添加了IBUFG、BUFG。假设例化成如下:
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,就是DCM。DCM两个输出一个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的输出。否则出错。!!!
每天进步一点点------Xilinx DCM的更多相关文章
- Xilinx DCM 使用---- 输出频率问题
最近在使用Xilinx FPGA验证项目,使用DCM将50M晶振分频得到20M时钟.但是下载代码到板子上验证,发现板子完全不工作. 然后 测量时钟,发现根本就没有20M时钟.查找资料,以及跟以前项目对 ...
- 每天进步一点点------Xilinx FPGA开发工具 EDK SDK术语
XPS:Xilinx Platform Studio,平台工作室.用于嵌入式处理器硬件部分的开发. SDK:Software Development Kit,软件开发套件.基于Eclipse平台,支持 ...
- 每天进步一点点------Xilinx IP 内核
ISE 设计套件 11.1 版本中提供了众多全新的 IP 内核.数学函数:Multiply Adder v2.0 —— 执行两个操作数的乘法,并采用 XtremeDSP™ 解决方案切片将完全精确的乘积 ...
- FPGA芯片内部硬件介绍
FPGA芯片内部硬件介绍 FPGA(Filed programmable gate device):现场可编程逻辑器件 FPGA基于查找表加触发器的结构,采用SRAM工艺,也有采用flash或者反熔丝 ...
- 58.xilinx原语DCM,PLL的使用
DCM_BASE 基本数字时钟管理模块的缩写,是相伴和频率可配置的数字锁相环电路,常用于FPGA系统中复杂的时钟管理.如需要频率和相位动态配置,则可以选用DCM_ADV原语,如需要相位动态偏移,可使用 ...
- 每天进步一点点------Modelsim添加Xilinx仿真库的详细步骤
Modelsim,可以选型SE和XE两个版本.Modelsim XE可以直接被ISE调用,而Modelsim SE需要手动添加仿真库.但SE版和OEM版在功能和性能方面有较大差别,比如对于大家都关心的 ...
- Xilinx FPGA全局时钟和全局时钟资源的使用方法
对FPGA的全局时钟了解不多,遂转载一篇文档: http://xilinx.eetop.cn/?action-viewnews-itemid-42 目前,大型设计一般推荐使用同步时序电路.同步时序电路 ...
- DCM、PLL、PMCD、MMCM相关
摘自网上 : http://xilinx.eetop.cn/viewnews-1482 The DCM is a Digital Clock Manager - at its heart it is ...
- Xilinx原语学习之时钟资源相关原语
一直来,都是使用Vivado中自带的GMIItoRGMII IP核来完成GMII转RGMII的功能:尽管对GMII及RGMII协议都有一定的了解,但从没用代码实现过其功能.由于使用IP时,会涉及到MD ...
随机推荐
- win10中安装jdk1.8
一.JDK下载 两种方法,第一种是从官网下载:第二种是拿来主义,小拿直接给你网盘地址.不过,作为java新手,最好还是学会去官网下载. 官网下载的文件才是最安全的,从不靠谱第三方下载有可能安装包有缺失 ...
- jQuery中校验时间格式的正则表达式小结
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- Python论做游戏外挂,Python输过谁?
玩过电脑游戏的同学对于外挂肯定不陌生,但是你在用外挂的时候有没有想过如何做一个外挂呢? 我打开了4399小游戏网,点开了一个不知名的游戏,唔,做寿司的,有材料在一边,客人过来后说出他们的要求,你按照菜 ...
- phpstorm安装bootstrap插件
一个插件可以很好的让我们工作节约时间 Bootstrap,来自 Twitter,是目前最受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的,它简洁灵活,使得 We ...
- POJ1273【网络流】
Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 91824 Accepted ...
- 题解【洛谷P3406】海底高铁
题面 比较基础的前缀和+差分. 注意开\(\text{long long}\) 直接上代码吧. #include <bits/stdc++.h> #define itn int #defi ...
- Wannafly Camp 2020 Day 6F 图与三角形 - 图论
把黑边视为无边,那么答案之和每个点的度数有关 #include <bits/stdc++.h> using namespace std; #define int long long int ...
- Selenium3+python自动化006+自动化测试概述
自动化测试概述 1.自动化分类: (1)单元测试自动化: 单元测试(Unit):模拟各种异常场景,外部依赖较少,且可以做测试单元到最小的一种测试方法. Java单元测试框架Junit.TestNG; ...
- C++——动态内存分配2-创建对象数组
//创建对象数组 #include<iostream> using namespace std; class Point { public: Point() { ...
- Initialization of bean failed; nested exception is java.lang.NoClassDefFoundError: org/objectweb/asm/Type
问题描述 将项目挂载到 Myeclipse 的 tomcat 上,启动 tomcat ,报错“Initialization of bean failed; nested exception is ja ...