TimeQuest时序分析器不支持规定最大斜移的单个约束,但是您可以规定相对于时钟端口的建立和保持时间,来约束源同步接口。下面的例子采用了图1中的简单源同步电路。
图1. 源同步接口图
约束输出总线的斜移
该实例对接口进行约束,在clk_out信号之后的2至3ns , data_out 总线的所有比特传输至片外。假设clk_in和clk_out周期为8ns。下面的等式和实例介绍了怎样建立时序要求,以满足图2中的时序关系。
图2. 源同步时序图
这些等式显示了怎样为 set_output_delay –min 命令计算数值,该命令在目的时钟设置2ns保持要求。对于源时钟和目的时钟相同的保持要求计算, <latch> - <launch> = 0 。
latch - launch = 0 ns output delay = latch - launch - 2 ns output delay = -2 ns
这些等式显示了怎样为 set_output_delay 命令计算数值,该命令在目的时钟设置3ns建立要求。对于源时钟和目的时钟相同的建立要求计算, <latch> - <launch> = clock period 。
latch - launch = 8 ns output delay = latch - launch - 3 ns output delay = 5 ns
最后,下面的约束将所有计算合并在一起,为源同步输出加上时序要求。
set period 8.000
create_clock -period $period \
-name clk_in \
[get_ports clk_in]
derive_pll_clocks
set_output_delay -add_delay \
-clock ddr_pll_1_inst|altpll_component|pll|CLK[0] \
-reference_pin [get_ports clk_out] \
-min -2.000 \
[get_ports data_out*]
set_output_delay -add_delay \
-clock ddr_pll_1_inst|altpll_component|pll|CLK[0] \
-reference_pin [get_ports clk_out] \
-max [expr $period - 3.000] \
[get_ports data_out*]
