TimeQuest分析器简化了利用Synopsys设计约束(SDC)命令来约束复杂时钟结构的过程,例如多路复用时钟。以下介绍三个实例电路,以及对其进行约束的SDC命令。
片外时钟多路复用
图 1 所示是一个简单的寄存器至寄存器电路,通过clk端口进行同步。
图 1. 片外时钟多路复用

clk 端口由一个片外多路复用器驱动,该复用器在两个时钟之间进行选择,一个时钟的周期是10ns ,另一个是8ns。下面的SDC命令显示了怎样对clk端口分配多路时钟,以及怎样加入一个排除指示,使FPGA中的两个时钟决不会同时有效。
# Create the two clocks on the port create_clock -name clk_100 -period 10 [get_ports clk] create_clock -name clk_125 -period 8 [get_ports clk] -add # Set the two clocks as exclusive clocks set_clock_groups -exclusive -group {clk_100} -group {clk_125}片内时钟多路复用
图2显示了FPGA中一个简单的寄存器至寄存器电路,它带有一个时钟多路复用器,含两个时钟端口:clkA和clkB 。
图2. 片内时钟多路复用

假设周期是10ns的时钟驱动clkA端口,周期是8ns的时钟驱动clkB端口。下面的SDC命令显示了怎样分配时钟。该例与前面的例子相似,但是时钟分配给不同的端口。
# Create a clock on each port create_clock -name clk_100 -period 10 [get_ports clkA] create_clock -name clk_125 -period 8 [get_ports clkB] -add # Set the two clocks as exclusive clocks set_clock_groups -exclusive -group {clk_100} -group {clk_125}交联时钟多路复用
图3中的时钟电路要复杂一些,FPGA中含有交联时钟多路复用。
图3. 交联时钟多路复用

在这个例子中,必须使用set_clock_groups命令指明,时钟A和D、A和B、C和D、B和C决不会同时有效。
create_clock -name A -period 10 [get_ports clkA] create_clock -name B -period 8 [get_ports clkB] create_clock -name C -period 8 [get_ports clkC] create_clock -name D -period 10 [get_ports clkD] # cut paths between clocks set_clock_groups -exclusive -group {A C} -group {B D}