vivado路径最大时钟约束_Vivado使用技巧(31):时钟的约束方法

时钟的基础知识

数字设计中,“时钟”表示在寄存器间可靠地传输数据所需的参考时间。Vivado的时序引擎通过时钟特征来计算时序路径需求,通过计算裕量(Slack)的方法报告设计时序空余。时钟必须有合适的定义,包含如下特性:

定义时钟树的驱动管脚或端口,通常称作根或源点。

通过周期和波形属性来描述时钟边沿。

周期(period)以ns为单位进行设定,与波形重复率相关。

波形(waveform)以列表的形式给出,表中包含上升沿和下降沿在周期中的绝对时间,以ns为单位。

如下图给出了两个时钟Clk0: period=10, waveform={0 5}、Clk1: period=8, waveform = {2 8}。

上述给出的只是时钟的理想特征。当时钟进入了FPGA器件,通过时钟树传递时,时钟边沿会有延时,通常称作时钟网络延迟;噪声或硬件表现会导致时钟随时可能发生变化,通常称作时钟不确定性,包括时钟抖动、相位错位等等。Vivado在时序分析时会考虑这些非理想因素以得到精确的时序裕量。

Xilinx FPGA器件内部有专用的硬件资源,支持大量设计时钟的使用。通常板子上有一个外部组件(如有源晶振)产生时钟信号,通过输入端口进入器件内部。外部时钟可以通过MMCM、PLL、BUFR等特殊原语生成其它时钟,也可以由LUT、寄存器等常规单元进行转换(通常称作门控时钟)。本文将讲述如何根据应用情况定义时钟。

主时钟Primary Clock

主时钟通常由两个来源:(1).板级时钟通过输入端口进入设计;(2).GT收发器的输出管脚(如恢复时钟)。主时钟必须与一个网表对象相连,该对象代表了所有时钟边沿的开始点,并且在时钟树中向下传递。也可以说,主时钟的源点定义了0时刻,Vivado靠此来计算时钟延迟和不确定性。

主时钟只能通过create_clock命令来定义,且必须放在约束的开始,这是因为其它时序约束几乎都要参考主时钟。下面给出两个主时钟的例子。第一个例子如下图所示,采用单端时钟输入:

板级时钟通过sysclk端口进入FPGA,通过一个输入缓冲器和一个时钟缓冲器后到达寄存器。使用如下命令定义:

create_clock -period 10 [get_ports sysclk] #10ns周期,50%占空比,无相移

create_clock -name devclk -period 10 -wavefor {2.5 5} [get_ports sysclk] #板级时钟名称devclk,10ns周期,25%占空比,90°相移

第二个例子如下图所示,采用差分时钟输入,这也是高速时钟的输入方式:

上图中差分时钟驱动一个PLL,定义主时钟时必须只创建差分缓冲器的正极输入。如果同时创建了正极、负极输入,将会导致错误的CDC路径。如“create_clock -name sysclk -period 3.33 [get_ports SYS_CLK_clk_p]”。

虚拟时钟Virtual Clock

这种类型的时钟对于初学者来说用的可能很少,虚拟时钟通常用于设定输入和输出的延迟约束。之所以称为“虚拟”,是因为这种时钟在物理上没有与设计中的任何网表对象相连。定义时使用create_clock命令,但无需指定源对象。在下列情况需要用到虚拟时钟:

所有设计时钟都不是外部器件I/O的参考时钟。

FPGA的I/O路径与一个内部生成的时钟相关,但是该时钟不能合适地通过对板级时钟计时来生成(如两个周期的比不是整数)。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值