UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

AR# 9297

4.1i タイミング - 複数サイクル (FROM:TO) 制約が適用されているパスに PERIOD 制約が適用される

説明

キーワード : FROM, TO, multi-cycle, path, constraint, period, 2.1i, 3.1i, 5.1i, 複数サイクル, パス, 制約

重要度 : 重要

概要 :
次のタイムスペックは、複数サイクル パスを作成するために定義されています。 これらの制約には、フリップフロップから特定のタイミング グループ (GroupA および GroupB) へのパスをすべて含むべきですが、一部のレジスタに PERIOD 制約が適用されてしまい、ランタイムが長くなり、パスが不正になる原因となります。

次は、PERIOD 制約と FROM: TO 制約の例です。

NET clock TNM_NET = clock grp;
TIMESPEC TS_CLK = PERIOD clock_grp 20;
TIMESPEC "TS_grpA" = FROM "FFS" TO "GroupA" TS_CLK" * 2;
TIMESPEC "TS_grpB" = FROM "FFS" TO "GroupB" "TS_CLK" * 2;

詳細については、(Xilinx Answer 5939) および (Xilinx Answer 5965) も参照してください。

ソリューション

1

この問題は、特定の FROM:TO (複数サイクル) 制約が全体的な制約 (PERIOD) の一部 (部分集合) でない場合に発生します。 複数サイクル制約は PERIOD 制約の部分集合でないと、複数サイクル制約が適用されるパスから PERIOD 制約を除外することができません。 図 1 に PERIOD の正しい部分集合の例を示します。

Figure 1 - Correct Subset of FFs with respect to PERIOD
Figure 1 - Correct Subset of FFs with respect to PERIOD


この図は、PERIOD スペックが多くのパスを定義しており、TW_SLOW はそのパスの下位集合を定義していることを示します。 その結果、TW_SLOW パスは PERIOD の適用範囲から除外されます。

図 2 では、G は上位の制約 (PERIOD など)、H は下位の制約 (MAXDELAY、TIG など)、G' は G から H を除外した残りを示します。つまり、H は G の部分集合である必要があります。

 Figure 2 - Correct Subset/Super-set Relationship
Figure 2 - Correct Subset/Super-set Relationship


もう 1 つの問題は、タイム グループとタイム グループが重なる場合です。 2 つ以上の複数サイクル制約が同じパスに適用される場合や、同じソースまたはデスティネーションにタイム グループに適用される場合が、これに相当します。 このような状態では、どのタイム グループまたは複数サイクル制約を維持し、どのグループを除外すればよいのか判断できません。 交差の例を図 3 に示します。図 4 と 5 は、2 つのタイム グループと PERIOD の間の相互作用例を示します。

 Figure 3 - Intersection between TS_SLOW and the PERIOD
Figure 3 - Intersection between TS_SLOW and the PERIOD

 Figure 4 - Interaction between TS_SLOW1, TS_SLOW2, and the PERIOD
Figure 4 - Interaction between TS_SLOW1, TS_SLOW2, and the PERIOD

 Figure 5 - Interaction between TS_SLOW, TS_SLOWER, and the PERIOD
Figure 5 - Interaction between TS_SLOW, TS_SLOWER, and the PERIOD


ほとんどの場合、タイム グループを変更して不要なオーバーラップを取り除くことにより、問題を解決できます。 このアンサーに記述されているほかのソリューションも参照してください。

2

この問題は、最新版の 3.1i サービス パックで修正されています。サービス パックは次のサイトから入手できます。
http://support.xilinx.co.jp/support/techsup/sw_updates
この修正は、3.1i サービス パック 3 以降に含まれます。

交差と下位集合の問題については現在調査中です。

3

PERIOD 制約で定義したメインのタイム グループには、GroupA および GroupB タイム グループでも定義したレジスタが含まれます。 GroupA および GroupB への制約は、フリップフロップからの MAXDELAY です。 EXCEPT を使用して GroupA および GroupB のレジスタを PERIOD タイム グループから除外し、その結果に PERIOD を適用すれば、解析が正常に行われるはずです。

例 :

NET clock TNM_NET = clock_grp;
TIMEGRP slow_end = clock_grp EXCEPT GroupA GroupB;
TIMESPEC TS_slow_end = PERIOD slow_end 30;
TIMESPEC "TS_grpA" = FROM "FFS" TO "GroupA" TS_slow_end" * 2;
TIMESPEC "TS_grpB" = FROM "FFS" TO "GroupB" "TS_slow_end" * 2;

ソリューション 3 で説明するように、オリジナル タイム グループは Constraints Editor で作成できます。既存のタイム グループから新しいタイム グループを作成する場合は、ユーザー制約ファイル (UCF) で手動で作成する必要があります。 EXCEPT キーワードも UCF に手動で入力します。

クロック信号が DLL を駆動している場合は、TNM_NET 制約は DLL の出力信号に指定する必要があります。 これも、UCF ファイルに手動で入力します。

4

遅い例外制約をまとめる回避策もあります。

- まず、フリップフロップとその他の遅いソース タイム グループを、1 つのソース タイム グループに統合します。
- 次に、2 つの小さいデスティネーション タイム グループを 1 つのターゲット タイム グループに統合します。
- 最後に、遅い例外 (FROM:TO) タイミング制約を新しい制約 (FROM large_sources TO large_targets) に置き換えます。 これにより問題が解決し、パスが PERIOD 制約から除外されます。

手動でこれを行った例を次に示します。

TIMEGRP large_source = small_src_group1 small_src_group2;
TIMEGRP large_target = small_dest_group1 small_dest_group2;
TIMESPEC TS01 = FROM large_source TO large_target 30;

large_source および large_target タイム グループは Constraints Editor で作成できます。 Constraints Editor を起動し、ユーザー制約ファイル (UCF) を作成するか開きます。

- [アドバンス] タブをクリックし、[作成] ボタンをクリックして [ネットごとのグループ エレメント (TNM_NET)] をクリックします。
- [タイム名] テキスト ボックスにタイム グループ名を入力し、[デザイン エレメントの種類] でデザイン エレメントの種類 ([イネーブル ネット] など) を選択します。
- その後、[使用可能なエレメント] で複数サイクル グループのネットを選択し、[追加] ボタンをクリックしてグループに含めます。
- [適用] または [OK] ボタンをクリックし、タイム グループを書き込みます。

または、[アドバンス] タブで [作成] ボタンをクリックして [インスタンス名ごとのグループ エレメント (TNM)] をクリックします。
- [タイム名] テキスト ボックスにタイム グループ名を入力し、[デザイン エレメントの種類] で種類 ([FF]、[RAM] など) を選択します。
- その後、[使用可能なエレメント] でエレメントを選択し、[追加] ボタンをクリックしてグループに含めます。
- 次に選択するエレメントの [デザイン エレメントの種類] を選択し、[使用可能なエレメント] でエレメントを選択して追加します。 すべてのエレメントを追加するまでこの操作を繰り返し、1 つの大きなタイム グループを作成します。
- [適用] または [OK] ボタンをクリックし、タイム グループを書き込みます。

次の Constraints Editor の例は、タイム グループの作成を表しています。

INST counter_reg<11> TNM = large_source;
INST counter_reg<22> TNM = large_source;
INST ram_bob<12> TNM = large_source;
INST ram_bob<53> TNM = large_source;
INST xcounter_reg<52> TNM = large_target;
INST xcounter_reg<24> TNM = large_target;
INST nail_ram<13> TNM = large_target;
INST nail_ram<26> TNM = large_target;
TIMESPEC TS01 = FROM large_source TO large_target 30;

5

その他の関連する問題は 5.1i リリースで修正されています。
AR# 9297
作成日 08/31/2007
最終更新日 01/18/2010
ステータス アーカイブ
タイプ 一般