如上两条语句为建立一个外部的输入数据同步的虚拟时钟以及跟该虚拟时钟一致的FPGA的输入数据同步时钟。
set_input_delay -max 1.450 -clock [get_clocks {vir_clk}] [get_ports {in[*]}]
set_input_delay -min 0.55 -clock [get_clocks {vir_clk}] [get_ports {in[*]}]
set_input_delay -clock_fall -max 1.45 -clock [get_clocks {vir_clk}] [get_ports {in[*]}] -add_delay
set_input_delay -clock_fall -min 0.55 -clock [get_clocks {vir_clk}] [get_ports {in[*]}] -add_delay
由于该源同步方式为DDR模式,因此上述第一条和第二条语句声明的是上升沿打出,下降沿锁存的input max delay和input min delay约束,第三条语句和第四条语句声明的是下降沿打出,上升沿锁存的input max delay和input min delay约束。由于相对于同一个虚拟时钟有两个一样的input max delay和input min delay约束,因此需在后面两条语句加上-add_delay表示此两条语句不被上面两条语句所覆盖。
另外,由于时序分析工具会覆盖整个时钟周期,但是实际上本设计的时钟关系为半个周期,因此还需要告诉时序分析工具不需要对整个时钟周期进行分析,因此加入了false path语句:
set_false_path -setup -rise_from [get_clocks {vir_clk}] -rise_to [get_clocks {clk}]
set_false_path -setup -fall_from [get_clocks {vir_clk}] -fall_to [get_clocks {clk}]
set_false_path -hold -rise_from [get_clocks {vir_clk}] -fall_to [get_clocks {clk}]
set_false_path -hold -fall_from [get_clocks {vir_clk}] -rise_to [get_clocks {clk}]
此四条语句分别表示,在做setup分析的时候,不需要对两个相隔一个周期的上升沿进行分析和下降沿进行时序分析,在做hold分析的时候,不需要对两个相隔半个周期的上升沿和下降沿进行时序分析。