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
日付 01/18/2010
ステータス アーカイブ
種類 一般