リセット:同期vs非同期


15

私は長年fpgasを使用してきましたが、回路のすべての部分(必要な部分)で常に同期リセットを使用していました。特定のクロックサイクルで回路をグローバルにリセットするのに役立ちます。

しかし、ASIC回路では、どこでも非同期リセットを使用する傾向があると言われました。なぜか、また一部のfpga設計にも当てはまるのかと思います。専門的な意見を聞きたいです。

ありがとう

回答:


11

これについては多くの意見があるようです。
非同期表明、同期表明は良い習慣と言われています。これにより、同期アサーションでクロックが実行されない(またはリセット信号をキャプチャするのに遅すぎる)の問題、および非同期ディアサートで起こりうる準安定性の問題が回避されます。

リセットシンクロナイザー(2つのFF)を使用して、出力を残りのデザインリセットに関連付けます。

リセットする

いくつかの議論:
非同期および同期リセット同期時のレター
非同期リセット


ラッチのリセット信号のリリースとクロック間のセットアップ/ホールド時間の要件は、データ入力の要件とどのように比較されますか?システム内のラッチがリセット信号の終了を非アクティブなクロックエッジで見た場合、より快適に感じるでしょう。アクティブなクロックエッジでの非同期リセットのリリースは、それが発生するサイクルに影響しないことが保証されますか?
supercat

いいえ、リセットの非同期リリースは、必要なリセット回復時間(セットアップ/ホールドなど)のためにクリーンであることが保証されていません。これが、リセットを同期的にリリースする理由です。
オリグレイザー

私の質問は、ラッチ2が使用するのと同じクロックエッジでラッチ2に供給するリセット信号をラッチ1にリリースさせることは完全にコーシャーです。つまり、ラッチ1のクロックからその出力までの最小伝播時間がラッチ2のリセット入力のホールド要件を満たすかどうかです。ところで、上記の私の答えをどう思いますか?あなたが描いた回路は、ほぼ完全な免疫が可能になるはずであるとき、リセットライン上のラントパルスに対してほとんど免疫を提供しません。
supercat

さらに検討すると、3番目のラッチを追加し、非同期リセット信号を最初の2つに供給される信号のグリッチ抑制バージョンにすることで、ラントパルスからの保護を追加することができます。最初の2つを完全にリセットすることが保証されています。リセット入力のラントパルスにより、チップのメインリセットラインがラントパルスを取得する可能性がありますが、そのようなパルスが発生すると、同期リセットパルスが続きます。
supercat

申し訳ありませんが、私はあなたの今の意味がわかると思います。シンクロナイザーの2番目のラッチからシステムFFリセットへの出力を意味する場合、私の理解では、リセット回復時間は通常、同じFFのデータセットアップ時間より短いため、問題ありません。ラントパルスについては同意しますが、あなたのようなものが実装されていることを示唆していない人には免疫がありません。
オリグレイザー

7

いくつかの理由により、同期リセットよりも非同期リセットを優先します(順不同)。

  • 非同期セットまたはリセット機能をフリップフロップに追加すると、ロジックが単一のセルに統合されるため、おそらくデザインが小さくなります(入力にANDゲートを持つリセット不可能なフリップフロップ)
  • ゲート数が少ないため、配線/配置と配線の混雑が少なくなります
  • チップをリセットするのがより簡単で簡単なプロセスです(よりユーザー/テストに優しい)
  • リセットパスを非同期にすることで、リセット信号の静的タイミング解析分割が簡素化されます。
  • 同期リセットは、データフローのクリティカルパスに追加のロジックを追加し、セットアップおよびホールド要件を満たすのをより困難にします
  • FPGAの入力には4〜6入力の任意の論理関数がありますが、ASICのゲートへの各入力に対して「支払い」ます(より多くの入力=より大きなゲート、複雑な関数=複数のゲート)

究極的には、これらの問題のどれもがショーストッパーであるとは思いませんが、ASICの非同期リセットの強い選好に確実に貢献するでしょう。


2
非同期リセットを内部ロジックに使用する場合の危険の1つは、リセット入力のラントパルスがあらゆる種類の大混乱を引き起こす可能性があることです。回路を非同期的にリセットできるようにする場合、任意のタイプの非同期リセットが内部回路に到達するのに十分なリセットパルスが発生することを保証するように入力回路を設計する必要があります。同期リセットが発生します。
supercat

4

同期ディアサートによる非同期リセットは非常にうまく機能します。上記のように、非同期リセットフロップは小さく、リセットを確保するためにクロックをアクティブにする必要がないため、電源と単一のハードワイヤードピンまたは電源で、パーツを強制的にリセット(通常、既知の低電力状態)できます。リセット時。

あなたが本当にこれを掘り下げたいのであれば、これに関するカミングの論文を読んでください、特に:

http://www.sunburst-design.com/papers/CummingsSNUG2003Boston_Resets.pdf

乾杯。


カミングス氏が彼の論文で見逃している問題の1つは、グリッチ検出器がラントパルスを抑制し、正当な長さのパルスをラントパルスに変える可能性があることです。これの効果は、適切な長さのパルスが適切なリセットを引き起こさずにシステム状態を勝手に破壊する可能性があることです。それは二重同期せずに、すべての場合において準安定性を回避することは非常に困難ですので、私は...その後、「厳しい」グリッチ検出基準を持っており、そのうちの一つ2非同期キャプチャ回路を有することをお勧め
supercat

...短いグリッチによって1サイクルまたは2サイクル後にリセットが発生する場合と発生しない場合がありますが、十分に長いパルスがあると直ちにリセットが発生するように調整します。また、フリップフロップで「非同期リセット」入力を使用すると、一部のトポロジで合成が容易になる場合がありますが、それは非同期で使用する必要があるという意味ではありません。ラッチで「非同期リセット」入力を駆動する場合でも、ほとんどの内部リセット信号をクロックに同期させると役立つ場合があります。
supercat

カミングスは、グリッチフィルターは「い」と言っています。私が取り組んだICにはこれを見たことがありません。これらの問題を回避するために、すべての入力パッドセルでシュミットトリガーを使用する傾向があり、使用するパワーオンリセットも同様にクリーンアップされます。ところで、どのような場合にリセットラインに短いパルスがありますか?いくつかのスキャンテストシナリオでこれを見てきましたが、意図的な短いパルスではなく、クロックサイクルの長さのオーダーのままです。最後のコメントで、リセットのディアサートをクロックに同期して、リセットでのs / h違反を回避し、すべてのフロップが同じエッジでリセットを終了するようにする必要があります。
mixed_signal_old

グリッチフィルターは、多くの場合、どのタイプの入力が準安定性を引き起こす可能性があるかを判断するのに役立ちますが、準安定状態を排除しません。グリッチフィルターの目標は、発生する可能性のある準安定状態が「ドントケア」状態であることを確認することです。場合によっては、あるデバイスに接続された別のデバイスをリセットできるようにする必要があります。リセットワイヤが二重に同期化されていない限り、近くのESDイベントやその他の厄介なものからのラントパルスのリスクがあります。
supercat

最後の点については、フリップフロップで「無料の」非同期リセット入力を提供するハードウェアでデザインを合成しているだけで、両方のメインクロックに信号を完全に同期できないということではありません。アサーションとリリース。外向きの信号はリセット入力に対して非同期的に反応する必要があるかもしれませんが、それはすべてのラッチを非同期的にリセットする必要があるという意味ではありません。実際、一貫性のない状態を避けるために、設計内の2つを除くすべてのラッチを同期させることが有用な場合があります。
supercat

2

「非同期アサート/同期リリース」アプローチよりも安全と思われる別のアプローチは、非同期リセット検出器(他の場所で説明したように、非同期「アサート」および同期「リリース」)を使用することですが、出力は非同期的に何もリセットすることなく、外向きのI / Oデバイスをゲートします(検出器自体のラッチ以外)。2つの非同期リセット検出器を使用する場合、1つはI / Oライン用で、もう1つは同期リセット検出器に給電し、1つがI / Oライン用に設計されており、確実に十分な音であるリセットパルスによってのみトリップされるようにする場合メイン検出器を作動させると、CPUをリセットしない場合に出力がグリッチになることさえ回避できます。これを行うと、正当な長さのリセットパルスが出力を非同期的にリセットすることに注意してください。

考慮すべきもう1つのことは、システムがリセットの影響を受けないはずのレジスタをしばしば持っていることです。非同期リセットがこれらのレジスタに書き込む回路にヒットする可能性がある場合、間違ったタイミングで到着するリセットパルスが、クリーン(非ラント)パルスであっても、それらのレジスタを上書きする可能性があります。たとえば、コードがアドレス1111に書き込みを試みており、クロックパルスが到着すると同時にクロックパルスがアドレスラッチの1つをゼロに強制する非同期リセットが到着すると、アドレス1110への誤った書き込みを引き起こす可能性があります。組み合わせ遅延のある複数の内部リセットラインを使用して、アドレスが上書きされる前にレジスタの書き込みを無効にし、同期内部リセットロジックを使用することで問題を完全に回避できます。

ところで、ここに概念を説明する回路があります。左下隅の近くには、リセット用の2つのロジック入力があります。1つは「クリーンな」リセットパルスを生成し、もう1つは非常に厄介なリセットパルスを生成します。黄色のLEDはメインシステムのリセットを示します。シアンのLEDはI / Oイネーブルを示します。クリーンリセットを押すと、出力が即座に「リセット」されます。厄介なリセットを押すと、出力のリセットが遅延するか、影響を受けないままになります(シミュレーターでは、「影響を受けない」ケースを引き起こす方法はありません)。


これはいい考えだと思う。リセットなどの一見シンプルなもので、非常に多くのグレーの色合い
オリグレイザー

0

経験豊富なエンジニア(FPGA設計および組み込みシステムで3年)として、FPGAのデータシートとユーザーガイドを確認する必要があることを伝えています。単純な答えではありません。

あなたは確認する必要がありますあなたのデザインフィットFPGAタイプあなたが選んだの。一部のFPGAには、非同期リセット用に設計されたFlipFlopsがあり、一部は同期リセット用に設計されています。

使用しているFlipFlopsのタイプについては、FPGAユーザーガイドを確認する必要があります。

コードが FPGAプリミティブタイプと一致する場合、Implementor / Mapperは、リセット用の専用ルートを選択しますコードはより高い周波数で実行でき、スペースは少なくなります)。

デザインはどのような場合でも機能しますが、FPGAインプリメンターがロジックを機能させるために道を外れることもありますが(ロジックを追加する)、最大周波数が低くなり、FPGAリソースが増えます。

例:ザイリンクスのZYNQでテスト(FPGAは同期リセット用に設計されています-プリミティブユーザーガイドを参照)。リセットをasyncからsyncに変更することで、最大安定周波数が220MHzから258MHzになり、周波数マージンを超えました。

また、Implementorはクロックとリセット信号が何であるかを知らないことを付け加えるかもしれません。名前ではなく、ORDERによってフリップフロップピンを信号に割り当てます。そのため、一部のFPGAでは、インプリメンターが設定されているFPGAに応じて、VHDLの「process()begin」の後の最初の信号をクロックとして、一部をリセットとして選択します。


「実装者はクロックとリセット信号とは何なのかわからない」というあなたの声明には同意しません。合成ツールは、クロックであり、使用方法によってリセットされるものを推測します。クロック信号はエッジ仕様で使用されますが、リセットは使用されません。さらに、任意のフリップフロップを同期リセット仕様で使用できます。これは、ご存じのとおり、クリティカルパスの高速化につながります。
ジョーハス14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.