私は長年fpgasを使用してきましたが、回路のすべての部分(必要な部分)で常に同期リセットを使用していました。特定のクロックサイクルで回路をグローバルにリセットするのに役立ちます。
しかし、ASIC回路では、どこでも非同期リセットを使用する傾向があると言われました。なぜか、また一部のfpga設計にも当てはまるのかと思います。専門的な意見を聞きたいです。
ありがとう
私は長年fpgasを使用してきましたが、回路のすべての部分(必要な部分)で常に同期リセットを使用していました。特定のクロックサイクルで回路をグローバルにリセットするのに役立ちます。
しかし、ASIC回路では、どこでも非同期リセットを使用する傾向があると言われました。なぜか、また一部のfpga設計にも当てはまるのかと思います。専門的な意見を聞きたいです。
ありがとう
回答:
これについては多くの意見があるようです。
非同期表明、同期表明は良い習慣と言われています。これにより、同期アサーションでクロックが実行されない(またはリセット信号をキャプチャするのに遅すぎる)の問題、および非同期ディアサートで起こりうる準安定性の問題が回避されます。
リセットシンクロナイザー(2つのFF)を使用して、出力を残りのデザインリセットに関連付けます。
いくつかの議論:
非同期および同期リセット同期時のレターと
非同期リセット
いくつかの理由により、同期リセットよりも非同期リセットを優先します(順不同)。
究極的には、これらの問題のどれもがショーストッパーであるとは思いませんが、ASICの非同期リセットの強い選好に確実に貢献するでしょう。
同期ディアサートによる非同期リセットは非常にうまく機能します。上記のように、非同期リセットフロップは小さく、リセットを確保するためにクロックをアクティブにする必要がないため、電源と単一のハードワイヤードピンまたは電源で、パーツを強制的にリセット(通常、既知の低電力状態)できます。リセット時。
あなたが本当にこれを掘り下げたいのであれば、これに関するカミングの論文を読んでください、特に:
http://www.sunburst-design.com/papers/CummingsSNUG2003Boston_Resets.pdf
乾杯。
「非同期アサート/同期リリース」アプローチよりも安全と思われる別のアプローチは、非同期リセット検出器(他の場所で説明したように、非同期「アサート」および同期「リリース」)を使用することですが、出力は非同期的に何もリセットすることなく、外向きのI / Oデバイスをゲートします(検出器自体のラッチ以外)。2つの非同期リセット検出器を使用する場合、1つはI / Oライン用で、もう1つは同期リセット検出器に給電し、1つがI / Oライン用に設計されており、確実に十分な音であるリセットパルスによってのみトリップされるようにする場合メイン検出器を作動させると、CPUをリセットしない場合に出力がグリッチになることさえ回避できます。これを行うと、正当な長さのリセットパルスが出力を非同期的にリセットすることに注意してください。
考慮すべきもう1つのことは、システムがリセットの影響を受けないはずのレジスタをしばしば持っていることです。非同期リセットがこれらのレジスタに書き込む回路にヒットする可能性がある場合、間違ったタイミングで到着するリセットパルスが、クリーン(非ラント)パルスであっても、それらのレジスタを上書きする可能性があります。たとえば、コードがアドレス1111に書き込みを試みており、クロックパルスが到着すると同時にクロックパルスがアドレスラッチの1つをゼロに強制する非同期リセットが到着すると、アドレス1110への誤った書き込みを引き起こす可能性があります。組み合わせ遅延のある複数の内部リセットラインを使用して、アドレスが上書きされる前にレジスタの書き込みを無効にし、同期内部リセットロジックを使用することで問題を完全に回避できます。
ところで、ここに概念を説明する回路があります。左下隅の近くには、リセット用の2つのロジック入力があります。1つは「クリーンな」リセットパルスを生成し、もう1つは非常に厄介なリセットパルスを生成します。黄色のLEDはメインシステムのリセットを示します。シアンのLEDはI / Oイネーブルを示します。クリーンリセットを押すと、出力が即座に「リセット」されます。厄介なリセットを押すと、出力のリセットが遅延するか、影響を受けないままになります(シミュレーターでは、「影響を受けない」ケースを引き起こす方法はありません)。
経験豊富なエンジニア(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」の後の最初の信号をクロックとして、一部をリセットとして選択します。