首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

FPGA时钟信号总结(1)

FPGA时钟信号总结(1)

数字电路中,时钟是整个电路最重要、最特殊的信号。
第一, 系统内大部分器件的动作都是在时钟的跳变沿上进行, 这就要求时钟信号时延差要非常小, 否则就可能造成时序逻辑状态出错.
第二, 时钟信号通常是系统中频率最高的信号.
第三, 时钟信号通常是负载最重的信号, 所以要合理分配负载。出于这样的考虑在FPGA这类可编程器件内部一般都设有数量不等的专门用于系统时钟驱动的全局时钟网络。这类网络的特点是:一、负载能力特别强, 任何一个全局时钟驱动线都可以驱动芯片内部的触发器; 二是时延差特别小; 三是时钟信号波形畸变小, 工作可靠性好。




clock tree synthesis是[url=]asic[/url]设计中的一步,它的目的是使时钟尽量在同一时刻去驱动所有的触发器,这也就是所说的同步电路,这里的同一时刻是要求时钟到所有触发器的相位相同,因为有的触发器离clk源端比较远,需要好多个周期才能到。这里就出现了一个问题,如果只靠连线的话根本无法保证时钟到达触发器的相位相同,于是就可以加入buffer,buffer也就是偶数个反相器,他能够缩短延时,于是通过加入的buffer的数目和类型来调整延时使得时钟到达触发器的相位相同,从而实现同步功能,当然插入buffer还有个功能就是增大驱动能力,如果不这样仅靠时钟源是无法驱动如此之多的触发器的。再说到[url=]fpga[/url]fpga是由许多的逻辑单元构成的,逻辑单元包括门、查找表、和触发器,即它的触发器已经做好了,也就是说在出厂之前,FPGA内部元件之间的连线已经完全固定,我们的编程也只是在此基础上选择哪些相连、哪些断开罢了。FPGA并不能通过动态插入buffer的方法来实现时钟到达触发器的相位相同。也就是说[url=]时钟树[/url]结构已经被预先布好了,我们所能做的也就是在此基础上利用各种资源来对时钟进行处理,如分频、倍频、门控时钟。所以fpga谈不上时钟树,只能说是时钟管理。






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






DCM发现clkinclkfb位相差不等于PHASESHIFT的时候,却去调节clk_1xclkin之间延时,所以如果clk_1xclkfb不相关的话,那就永远也不能锁定了。呵呵。

如何使用DCM


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