デバイスのコンフィギュレーションが完了すると、デバイスがコンフィギュレーション ステートを完了し、通常動作に移行するためにイベントのシーケンスが実行されます。ほとんどのコンフィギュレーション シーケンスでは、最後の手順の 1 つとしてグローバル セット/リセット (GSR) がディアサートされ、その後グローバル イネーブル (GWE) 信号がディアサートされます。これでデザインが既知の初期ステートになり、動作を開始できるようになります。
このディアサートが指定のクロック ドメインに同期していないか、クロックが高速で動作しているために GWE を安全にディアサートできない場合、デザインの一部が不明なステートになる可能性があります。これが問題とならないデザインもありますが、デザインによってはこれが原因で不安定な状態になったり、初期データ セットが正しく処理されなかったりする可能性があります。
デザインを既知のステートで開始させる必要がある場合は、AMDでは次のいずれかの方法を使用してスタートアップ時の同期プロセスを制御することをお勧めします。
- ステート マシンなどのデザインのクリティカルな部分にクロック イネーブル、ローカル リセット (同期)、またはその両方を使用して、これらの部分のスタートアップを制御し、既知のものになるようにします。
-
クロック イネーブル機能を持つクロック バッファー コンポーネントをインスタンシエートします。
デザイン クロックをイネーブルにする前に、必要なクロック数だけリセットのディアサートを遅らせます。次に、UltraScale デバイスでリセットをディアサートした後の最初のデザイン クロック エッジを遅延させる方法の例を示します。シンクロナイザー レジスタに ASYNC_REG=TRUE を設定することにより、すべてのレジスタが 1 つのスライスに配置されるので、グローバル クロック リソースで駆動する必要はありません。シンクロナイザー クロックにクロック バッファーが挿入されないようにするには、入力クロック ポートに CLOCK_BUFFER_TYPE=NONE プロパティを使用します。
図 1. 安全にクロックを開始するためのリセットの同期化と遅延の例
-
MMCM を使用する場合は、Clocking Wizard で Safe Clock Startup オプションをオンにして、デザイン クロックが安定した後のにのみイネーブルになるようにします。
次の例に、UltraScale デバイスでユーザー ロジックを駆動する BUFGCE の CE ピンに接続された MMCM LOCKED 信号の同期化段を示します。2 番目の BUFGCE はファンアウトの大きい BUFGCE (ユーザー クロック) に並列に接続され、BUFGCE/CE ピンを制御するロジック専用に使用されます。このトポロジは、シンクロナイザーと BUFGCE ピンの間のクロック スキューを最小限に抑えることにより、UltraScale デバイスの BUFGCE/CE でタイミング クロージャを達成するのに有益です。
図 2. MMCM での安全なクロック開始例
ヒント: MMCM または PLL の補正モードが ZHOLD または BUF_IN に設定されている場合、CLKOUT0 からのすべてのクロックがフィードバック クロックと共にグループ化され、同じ CLOCK_ROOT が使用されます。これにより BUFGCE/CE でタイミング違反が発生する場合は、ファンアウトの大きいクロックとフィードバック クロックの間のみに CLOCK_DELAY_GROUP 制約を作成します。オプションで、ファンアウトの小さいクロック ネットに USER_CLOCK_ROOT 制約を設定し、MMCM と同じクロック領域へのロードに制約を設定することもできます。7 シリーズ デバイスでは、クロッキング アーキテクチャが異なるので、タイミング クロージャを達成するために 2 番目のクロック バッファーは通常必要ありません。