AR# 12819

|

14.x 制約 - DDR フリップフロップとネガティブ エッジ クロック出力のフリップフロップに OFFSET 制約を設定する方法

説明

タイミング ツールを使用すると、DDR フリップフロップ (FF) とネガティブ エッジで動作する出力フリップフロップ (FF) に設定された OFFSET 制約に、周期の半分が加算/減算されてしまいます。

どうすればこれらの制約を付けることができますか。

ソリューション

回避策 1 (DDR にローカル クロックの反転が使用される場合)
DDR にローカル反転で制約を付けた場合 (同じクロックのポジティブ エッジとネガティブ エッジを使用する場合など)、2 組の制約を作成する必要があります。


最初はポジティブ エッジのフリップフロップのグループと制約、2 つ目は立ち下がりエッジのフリップフロップのグループと調整された制約です。

手順は次のとおりです。

  1. PERIOD 制約を元のクロックに設定して、DDR フリップフロップをグループにまとめます。
  2. I/O パッド グループを作成します。
  3. 立ち下がりエッジのフリップフロップのサブグループを作成します。
  4. DDR グループに OFFSET 制約を設定します。
  5. ネガティブ エッジのフリップフロップに調整された OFFSET 制約を設定します (*)。

(*) クロック エッジ間の差異を考慮に入れるため、調整は必要です。
PERIOD 制約で HIGH を開始エッジと指定している場合、ネガティブ エッジのフリップフロップのグループに対しては、OFFSET IN 制約からクロック周期の 1/2 を引き、OFFSET OUT 制約にクロック周期の 1/2 を足します。

次に例を示します。

# Input clock has a period of 16 ns.
# OFFSET requirement is 10 ns before on inputs and 12 ns after on outputs.

# 手順 1. PERIOD 制約を元のクロックに設定して、DDR フリップフロップをグループにまとめます。

NET "main_clk" TNM_NET = "main_clk_grp";
TIMESPEC "TS_main_clk" = PERIOD "main_clk_grp" 16 ns HIGH 50%;

# Step 2. I/O をグループにまとめます。

INST DDR_inputs* TNM = IN_DDR; # IN_DDR includes only pads
INST DDR_outputs* TNM = OUT_DDR; # OUT_DDR includes only pads

# Step 3. 立ち下がりエッジのフリップフロップのサブグループを作成します。

TIMEGRP "falling_reg" = FALLING "main_clk_grp"; # Falling _reg includes synchronous elements

# OR

INST "IN_DDR_01" TNM = "falling_reg"; # Falling_reg includes synchronous elements

# Step 4. DDR グループに OFFSET 制約を設定します。

TIMEGRP "IN_DDR" OFFSET = IN 10 ns BEFORE "main_clk";
TIMEGRP "OUT_DDR" OFFSET = OUT 12 ns AFTER "main_clk";

# Step 5. 立ち下がりエッジのフリップフロップ向けに調整した OFFSET 制約を作成します。

TIMEGRP "IN_DDR" OFFSET = IN 2 ns BEFORE "main_clk" TIMEGRP "falling_reg"; # User Manually Adjusts the Requirement
TIMEGRP "OUT_DDR" OFFSET = OUT 20 ns AFTER "main_clk" TIMEGRP "falling_reg"; # User Manually Adjusts the Requirement


HIGH PERIOD TIMESPEC で指定したデューティ サイクルが 50-50 以外の場合、立ち上がりエッジから立ち下がりエッジまでの差を立ち下がりエッジのグループに適用します。
PERIOD 制約で LOW を開始エッジに指定している場合は、立ち下がりエッジから立ち上がりエッジまでの時間をポジティブ エッジ グループに適用します。

このアンサーは、4,1i 以降のすべてのバージョンで、DDR ネガティブ レジスタではないレジスタに適用されます。

タイミング制約の詳細は、『Timing Constraints User Guide』を参照してください。 

http://japan.xilinx.com/support/documentation/sw_manuals_j/xilinx12_1/ug612.pdf

回避策 2 (DDR のクロックが DCM/PLL/MMCM の CLK0 および CLK180 で供給される場合):

DCM の CLK0 および CLK180 でクロックが供給される DDR に制約を付けるには、制約を 2 セット作成する必要があります。
1 つ目は CLK0 で動作するフリップフロップのグループと制約で、2 つ目は CLK180 で動作するフリップフロップのグループと調整された制約です。

手順は次のとおりです。
  1. PERIOD 制約を元のクロックに設定して、DDR フリップフロップをグループにまとめます。
  2. I/O パッド グループを作成します。
  3. CLK0 および CLK180 でクロックが供給されるフリップフロップのサブグループを作成します。
  4. DDR グループに OFFSET 制約を設定します。
  5. CLK180 でクロックが供給されるフリップフロップに、調整された OFFSET 制約を設定します (*)。 

(*) この調整は、CLK180 のクロック エッジを考慮に入れるため必要です。 

PERIOD 制約で HIGH を開始エッジと指定している場合、CLK180 で動作するフリップフロップに対して、OFFSET IN 制約からクロック周期の 1/2 を引き、OFFSET OUT 制約にクロック周期の 1/2 を足します。

次に例を示します。

# Input clock has a period of 16 ns.
# OFFSET requirement is 10 ns before on inputs and 12 ns after on outputs.
# CLK0 and CLK180 are the name of clock signals output by DCM CLK0 and CLK180 ports.
# 手順 1. PERIOD 制約を元のクロックに設定して、DDR フリップフロップをグループにまとめます。

NET "main_clk" TNM_NET = "main_clk_grp";
TIMESPEC "TS_main_clk" = PERIOD "main_clk_grp" 16 ns HIGH 50%;

# Step 2. I/O をグループにまとめます。

INST DDR_inputs* TNM = IN_DDR; # IN_DDR includes only pads
INST DDR_outputs* TNM = OUT_DDR; # OUT_DDR includes only pads

# Step 3. CLK0 および CLK180 でクロックが供給されるフリップフロップのサブグループを作成します。

NET "CLK0" TNM_NET = "clk0_grp"; # Group FFs that are clocked by DCM CLK0 output
NET "CLK180" TNM_NET = "clk180_grp"; # Group FFs that are clocked by DCM CLK180 output

# Step 4. DDR グループに OFFSET 制約を設定します。

TIMEGRP "IN_DDR" OFFSET = IN 10 ns BEFORE "main_clk" TIMEGRP "clk0_grp";
TIMEGRP "OUT_DDR" OFFSET = OUT 12 ns AFTER "main_clk" TIMEGRP "clk0_grp";

# Step 5. CLK180 でクロックが供給されるフリップフロップに、調整された OFFSET 制約を設定します (*)。

TIMEGRP "IN_DDR" OFFSET = IN 2 ns BEFORE "main_clk" TIMEGRP "clk180_grp"; # User Manually Adjusts the Requirement
TIMEGRP "OUT_DDR" OFFSET = OUT 20 ns AFTER "main_clk" TIMEGRP "clk180_grp"; # User Manually Adjusts the Requirement


この回避策は、ソフトウェア バージョンが 4.1i より新しければ、DDR レジスタに CLK180 が付いていなくても使用できます。

タイミング制約の詳細は、『タイミング制約ユーザー ガイド』を参照してください。 http://japan.xilinx.com/support/documentation/sw_manuals_j/xilinx14_1/ug612.pdf

回避策 3 (DDR が DCM/PLL/MMCM の CLK0 を使用して動作する場合のみ)

この手順は、次のとおりです。

  1. PERIOD 制約を元のクロックに設定して、DDR フリップフロップをグループにまとめます。
  2. I/O パッド グループを作成します。
  3. RISING および FALLING キーワードを使用して DDR グループに OFFSET 制約を設定します。


次に例を示します。

# Input clock has a period of 16 ns.
# OFFSET requirement is 10 ns before on inputs and 12 ns after on outputs.
# 手順 1. PERIOD 制約を元のクロックに設定して、DDR フリップフロップをグループにまとめます。

NET "main_clk" TNM_NET = "main_clk_grp";
TIMESPEC "TS_main_clk" = PERIOD "main_clk_grp" 16 ns HIGH 50%;

# Step 2. I/O パッドをグループにまとめます。

INST DDR_inputs* TNM = IN_DDR; # IN_DDR includes only pads
INST DDR_outputs* TNM = OUT_DDR; # OUT_DDR includes only pads

# Step 3. DDR グループに OFFSET 制約を設定します。

TIMEGRP "IN_DDR" OFFSET = IN 10 ns BEFORE "main_clk" RISING";
TIMEGRP "OUT_DDR" OFFSET = OUT 12 ns AFTER "main_clk" RISING;
TIMEGRP "IN_DDR" OFFSET = IN10 ns BEFORE "main_clk" FALING;
TIMEGRP "OUT_DDR" OFFSET = OUT12 ns AFTER "main_clk"FALLING;



タイミング制約の詳細は、『タイミング制約ユーザー ガイド』を参照してください。 http://japan.xilinx.com/support/documentation/sw_manuals_j/xilinx14_1/ug612.pdf

AR# 12819
日付 11/25/2014
ステータス アクティブ
種類 一般
ツール
People Also Viewed