当前位置:   article > 正文

VIVADO常用的时钟约束语法_vivado时钟约束

vivado时钟约束

基础时钟周期约束

基础时钟的定义只可以使用create_clock命令。

//定义端口输入时钟CLK0的时钟周期为10ns,占空比为50%,相位无偏移
create_clock -period 10.00 [get_ports CLK0]
  • 1
  • 2
//定义端口输入时钟CLK0的时钟周期为10ns,占空比为25%,相位偏移90°
create_clock -name devclk -period 10.00 -waveform {2.5 5} [get_ports CLK0]
  • 1
  • 2
//定义GT恢复的RXCLK,周期为3.33ns,50%的占空比:
create_clock -name rxclk -period 3.33 [get_pins gt0/RXOUTCLK]
  • 1
  • 2
//定义差分输入的时钟,时钟创建只可以时钟正极性的输入端口:
create_clock -name sysclk -period 3.33 [get_ports SYS_CLK_clk_p]
  • 1
  • 2

虚拟时钟约束

虚拟时钟是未物理连接到设计中任何网表元素的时钟。虚拟时钟是通过create_clock命令定义的,而没有指定源对象。 在以下情况之一中,通常使用虚拟时钟来指定输入和输出延迟约束:
a、外部设备I / O参考时钟不是设计时钟之一;
b、内部衍生的时钟,并且时钟频率无法正确计算,常见动态配置的PLL模块输出时钟;
c、不修改内部时钟特性,而指定一个与IO延迟相关的不同抖动和延迟时间的时钟;

//产生一个周期为10ns并且不连接到任何网表的虚拟时钟:
create_clock -name clk_virt -period 10
  • 1
  • 2

虚拟时钟必须在在输入和输出延时约束定义前进行定义。


生成时钟

生成的时钟在设计内部由称为时钟修改模块的特殊单元(例如MMCM)或某些用户逻辑驱动。产生的时钟必须关联到一个源时钟上,create_generated_clock命令的起点为源时钟,源时钟可以为基础时钟或其他产生的时钟。
1、简单的2分频时钟:
在这里插入图片描述

//定义输入基本时钟
create_clock -name clkin -period 10 [get_ports clkin]
//源时钟为基本时钟
create_generated_clock -name clkdiv2 -source [get_ports clkin] -divide_by 2  [get_pins REGA/Q]
 //源时钟为REGA时钟引脚
 create_generated_clock -name clkdiv2 -source [get_pins REGA/C] -divide_by 2 [get_pins REGA/Q]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2、带-edge选项的2分频,替代divide_by选项

create_generated_clock -name clkdiv2 -source [get_pins REGA/C] 
   -edges {1 3 5}  [get_pins REGA/Q]
  • 1
  • 2

3、带-edges和-edge_shift选项的占空比可变的分频时钟约束

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]
//First rising edge:   0ns + 2.5ns = 2.5ns
//Falling edge:        5ns + 0ns   = 5ns
//Second rising edge: 10ns + 2.5ns = 12.5ns
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

-edge_shift选项不可与-divide_by、-multiply_by、invert同时使用
4、同时使用-divide_by 和-multiply_by 选项,定义3/4分频时钟

create_generated_clock -name clk43 -source [get_pins mmcm0/CLKIN] 
   -multiply_by 4  -divide_by 3 [get_pins mmcm0/CLKOUT]
  • 1
  • 2

如果定义MMCM和PLL的输出时钟,需要和MMCM和PLL的配置进行匹配

5、仅通过组合弧跟随主时钟
假设主时钟驱动基于寄存器的时钟二分频和一个时钟多路复用器,后者可以从寄存器时钟分频器中选择主时钟或二分频时钟。 在这种情况下,从主时钟到生成的时钟有两条路径,分别是通过顺序弧和组合弧。 我们想要在多路复用器输出上创建一个生成的时钟,以反映从主时钟到多路复用器的组合路径的延迟。 这是通过使用-combinational命令行选项完成的:

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

6、由ODDR转发的时钟

在这里插入图片描述

create_generated_clock -name ck_vsf_clk_2 -source [get_pins ODDRE1_vsfclk2_inst/CLKDIV] 
   -divide_by 1 [get_ports vsf_clk_2]
  • 1
  • 2

重命名自动衍生的时钟

语法局限性:
1、自动派生的时钟只能在其起源的引脚上重命名,例如在时钟修改模块(PLL,MMCM,…)的输出引脚上。 例如,即使自动传播的时钟通过BUFG传播,也无法在BUFG输出上重命名;
2、主时钟或用户定义的生成时钟无法重命名。 使用此机制只能重命名自动来源的时钟;
3、source_object必须与自动派生的时钟对象相匹配;

例如:使用report_clocks得到MMCM的输出引脚生成的时钟为:
在这里插入图片描述在这里插入图片描述
使用下述命令对自动生成的时钟进行重命名:

create_generated_clock -name clk_rx [get_pins clk_gen_i0/clk_core_i0/inst/mmcm_adv_inst/CLKOUT0]
create_generated_clock -name clk_tx [get_pins clk_gen_i0/clk_core_i0/inst/mmcm_adv_inst/CLKOUT1]
create_generated_clock -name clkfbout [get_pins clk_gen_i0/clk_core_i0/inst/mmcm_adv_inst/CLKFBOUT]
  • 1
  • 2
  • 3

重命名后,report_clocks生成的MMCM报告为:
在这里插入图片描述


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/802319
推荐阅读
相关标签
  

闽ICP备14008679号