TimeQuest アナライザでは、SDC (Synopsys Design Constraint) コマンドを使用して、マルチプレクスされたクロックなどの複雑なクロック構造に対するタイミング制約を指定することができます。 以下に 3 つの回路例と、該当する SDC コマンドを示します。
オフチップでマルチプレクスされたクロック
図 1 は、clk ポートでクロックされる単純なレジスタ間回路を示しています。
図 1. オフチップでマルチプレクスされたクロック

clk ポートは、10 ns 周期と 8 ns 周期の 2 つのクロックのいずれかを、オフチップで選択できるマルチプレクスされたクロックによってドライブされると仮定します。 以下の SDC コマンドは、clk ポートに複数のクロックを割り当てる方法を示しています。 また、FPGA で 2 つのクロックが同時にアクティブになることはないという制約を追加するための方法も示しています。
# ポートで 2 つのクロックを作成します
create_clock -name clk_100 -period 10 [get_ports clk]
create_clock -name clk_125 -period 8 [get_ports clk] -add
# 2 つのクロックを排他的クロックとして設定します
set_clock_groups -exclusive -group {clk_100} -group {clk_125}
オンチップでマルチプレクスされたクロック
図 2 は、FPGA 上にクロック・マルチプレクサがあり、clkA と clkB の 2 つのクロック・ポートを使用する単純なレジスタ間回路を示しています。
図 2. オンチップでマルチプレクスされたクロック

clkA ポートは 10 ns 周期のクロックによってドライブされ、clkB ポートは 8 ns 周期のクロックによってドライブされると仮定します。 以下の SDC コマンドはそれぞれのクロックを割り当てる方法を示しています。 この例は上記の例と類似していますが、クロックは別々のポートに割り当てられます。
# 各ポートのクロックを作成します
create_clock -name clk_100 -period 10 [get_ports clkA]
create_clock -name clk_125 -period 8 [get_ports clkB] -add
# 2 つのクロックを排他的クロックとして設定します
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]
# クロック間のパスを切断します
set_clock_groups -exclusive -group {A C} -group {B D}
