赞
踩
基础时钟的定义只可以使用create_clock命令。
//定义端口输入时钟CLK0的时钟周期为10ns,占空比为50%,相位无偏移
create_clock -period 10.00 [get_ports CLK0]
//定义端口输入时钟CLK0的时钟周期为10ns,占空比为25%,相位偏移90°
create_clock -name devclk -period 10.00 -waveform {2.5 5} [get_ports CLK0]
//定义GT恢复的RXCLK,周期为3.33ns,50%的占空比:
create_clock -name rxclk -period 3.33 [get_pins gt0/RXOUTCLK]
//定义差分输入的时钟,时钟创建只可以时钟正极性的输入端口:
create_clock -name sysclk -period 3.33 [get_ports SYS_CLK_clk_p]
虚拟时钟是未物理连接到设计中任何网表元素的时钟。虚拟时钟是通过create_clock命令定义的,而没有指定源对象。 在以下情况之一中,通常使用虚拟时钟来指定输入和输出延迟约束:
a、外部设备I / O参考时钟不是设计时钟之一;
b、内部衍生的时钟,并且时钟频率无法正确计算,常见动态配置的PLL模块输出时钟;
c、不修改内部时钟特性,而指定一个与IO延迟相关的不同抖动和延迟时间的时钟;
//产生一个周期为10ns并且不连接到任何网表的虚拟时钟:
create_clock -name clk_virt -period 10
虚拟时钟必须在在输入和输出延时约束定义前进行定义。
生成的时钟在设计内部由称为时钟修改模块的特殊单元(例如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]
2、带-edge选项的2分频,替代divide_by选项
create_generated_clock -name clkdiv2 -source [get_pins REGA/C]
-edges {1 3 5} [get_pins REGA/Q]
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
-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]
如果定义MMCM和PLL的输出时钟,需要和MMCM和PLL的配置进行匹配
5、仅通过组合弧跟随主时钟
假设主时钟驱动基于寄存器的时钟二分频和一个时钟多路复用器,后者可以从寄存器时钟分频器中选择主时钟或二分频时钟。 在这种情况下,从主时钟到生成的时钟有两条路径,分别是通过顺序弧和组合弧。 我们想要在多路复用器输出上创建一个生成的时钟,以反映从主时钟到多路复用器的组合路径的延迟。 这是通过使用-combinational命令行选项完成的:
create_generated_clock -name clkout -source [get_pins mmcm0/CLKIN] -combinational [get_pins MUX/O]
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、自动派生的时钟只能在其起源的引脚上重命名,例如在时钟修改模块(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]
重命名后,report_clocks生成的MMCM报告为:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。