时序约束优先级_VIVADO之时序约束

1 时钟约束

1.1 主时钟(primary clock)

主时钟应首先被定义,因为其他时序约束往往以主时钟为参照标准。主时钟的定义往往应定义在输入端口,而不是clock buffer的输出端口。如下图所示:

针对主时钟进入时钟专用单元,则对主时钟输入端进行约束,时钟专用单元输出时钟将以主时钟作为树根节点进行约束调整。

针对差分时钟信号输入,主时钟约束应在差分时钟正相端进行约束,而不是在正反相上均进行约束,以避免错误的CDC路径。

约束原语:

create_clock -name -period -waveform {} [get_ports ]

1.2 虚拟时钟(virtual clock)

虚拟时钟并没有连接到任何物理线网。虚拟时钟同样使用create_clock命令定义,但不定义源(get_port)。

虚拟时钟往往用于在下列情景中指定输入输出延迟约束 :

* 外部IO参考时钟并不是设计中的时钟

*I/O路径参考时钟来源于FPGA内部派生时钟,但内部派生时钟与主时钟的频率关系并不是整数倍。

*仅针对I/O指定不同的jitter和latency

虚拟时钟必须在用于约束I/O延迟之前被定义。

示例:create_clock -name clk_virt -period 10

1.3 衍生时钟(generated clock)

衍生时钟是设计中由时钟生成没款(MMCM,PLL等)或用户逻辑所产生的时钟模块。衍生时钟可衍生与主时钟或其他衍生时钟。衍生时钟衍生于其控制时钟(master clock),在进行约束时,并不是对衍生时钟的周期或波形做约束,而是描述时钟衍生单元如何对控制时钟(master clock)的转换。

控制时钟和主时钟的关系可以是:

*简单的时钟分频

*简单的时钟倍频

*分频与倍频的组合以获取一个非整数的频率变换(通常由MMCM和PLL)完成。

*移相或相位反转

*占空比转换

*上述的组合

约束原语:create_generated_clock

简单二分频示例:

create_clock -name clkin -period 10 [get_ports clkin]

#1 采用主时钟作为master clock create_generated_clock -name clkdiv2 -source [get_ports clkin] -divide_by 2\[get_pins REGA/Q]

#2 采用REGA的clock引脚作为源。 create_generted_clock -name clkdiv2 -source [get_pins REGA/C] -divide_by 2\[get_pins REGA/Q]

#3 使用-edges作为选项 create_generated_clock -name clkdiv2 -source [get_pins REGA/C] -edges {1,3,5}

对于占空比改变或相移的约束:使用-edge_shift

-edge_shift不能与如下列命令同时使用:-divide_by -multiply_by -invert。

示例:

create_clock -name clkin -period 10 [get_ports clkin]

create_generated_clock -name clkshift -source [get_pins mmcm0/CLKIN] -edges{1 2 3}\-edge_shift {2.5 0 2.5} [get_pins mmcm0/CLKOUT]

-edge_shift的值可以是正数也可以是负数。

-multiply_by和divide_by可同时使用以产生非整数倍频/分频。

create_generated_clock -name \

-source \

-multiply_by \

-divide_by \

衍生时钟路径上组合逻辑的约束:-combinational;

示例:

假定master_clock驱动一个基于寄存器的二分频时钟电路和一个二选一驱动器的时钟选择器用于选择master和二分频时钟,对于主时钟到衍生时钟有时序路径也有组合路径,对于组合逻辑路径可以进行-combinational约束

create_generated_clock -name clkout -source [get_pins mmcm0/CLKIN] -combinational [get_pins MUX/O]

1.3.1 自动衍生时钟

在定义了master_clock后,对于Clock modifying Blocks所输出产生的时钟,VIVADO可以自动进行约束。

对于7系列设备,CMB包含MMCM/PLL,BUFR,PHASER。对于UltraScale系列,CMBS包含MMCM/PLL*,BUFGGT/BUFGCE_DIV,GT*_COMMON/ GT*_CHANNEL/ IBUFDS_GET3,BITSLICE_CONTROL/RX*_BITSLICE,ISERDESE3。

衍生时钟的重命名:

create_generated_clock -name new_name [-source master_pin] [-master_clock master_clk] source_object

newname和sourceobject必须被制定。sourceobject指衍生时钟的对象(CMB output pin,GT output pin for UltraScale等)。当有多个时钟传递至source pin时应制定-source和-master_clock。

If any of the -edges/-edge_shift/-divide_by/-multiply_by/-combinational/-duty_cycle /-invert options is passed to the create_generated_clock command, the generated clock is not renamed. Instead a new generated clock is created with the specified characteristics.

自动衍生的时钟重命名只能在它的发源处重命名,不能经过任何原语器件。主时钟和用户定义的时钟不能被重命名。

The auto-derived clocks can be renamed at any time inside the XDC, even after they have been referenced by some timing constraints。

时钟重命名可以在XDC文件中任何地方重命名。

1.4 时钟组(clock group)

默认情况下,vivado分析各时钟下所有的路径(除非制定或使用clock group 或false path约束)。

时钟组约束set_clock_groups将关断

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值