FSMで非同期入力を同期する必要があるのはなぜですか?


8

私は新しくデジタルエレクトロニクスを学びました。ロジック機能を実行するゲートがあることは知っています。RSラッチ、Dラッチ、マスタースレーブDフリップフロップについて学びました。論理関数を実行して状態を保存できるようになったので、有限状態マシン(信号機など)を作成できます。クラスではこの特定の信号機の例について話し、スタート/ストップボタン(歩行者が青信号を待っていることを示す信号機への信号)を追加すると、どのような問題が発生するかについての議論がありました。

結論は、このボタンは非同期入力になるため、この入力を最初に同期できるように、ステートマシンの前にフリップフロップを配置する必要があるということです。

私が理解していないのは、非同期入力の問題は何ですか?なぜそれを同期する必要があるのですか?そして、なぜステートマシンの前または後ろのフリップフロップが同期に役立つのでしょうか。いくつかの記事を読んで、「メタスタビリティ」について話していますが、それでもわかりません

どうもありがとう

回答:


6

すでに理解しているように、信号機コントローラーのステートマシンは同期マシンです。つまり、すべての組み合わせロジックの変更が発生し、必要なセットアップタイムを満たすために次のクロックエッジの十分前に安定した値に落ち着くように、クロックによって駆動されます。

概略図

この回路のシミュレーションCircuitLabを使用して作成された回路

ここに画像の説明を入力してください

そのセットアップ時間内にデータが変化した場合、最終出力は予測不可能であるだけでなく、メタ安定性のために、最終値を選択する前に、しばらくの間、実際に中間値を浮動または変動する可能性があります。高周波でロジック1とロジック0の間で発振することさえあり、かなりの電流と発熱を引き起こします。

ここに画像の説明を入力してください

そのため、ステートマシンへの非同期入力は、システムが期待どおりに機能するために、ある時点で同期する必要があります。ただし、必ずしもシステムに別のラッチを追加する必要があるわけではありません。

入力が単一の「次のゲート」に進むだけで、入力の状態が他のすべての入力から独立している場合、信号がパーティに遅れて到着するかどうかは問題ではありません。基本的に、次のように質問する必要があります...「クロックサイクルの入力を見逃した場合、それは重要ですか?」

ただし、入力が異なる複数のゲートに供給される場合。次のゲートは異なるロジックレベルを認識し、誤った状態を次のラッチに伝播する可能性があります。基本的に、さまざまな問題が発生する可能性があります。

これは簡単な例で説明できます。REG1の準安定性が次のクロックの前に落ち着かない場合は、WALKとトラフィックライトの両方が同時にオンになるか、どちらもオンにならない可能性があることに注意してください。

概略図

この回路をシミュレート

さらに、非同期入力が、同時に発生すると予想される別の非同期入力と関係がある場合、2番目の入力は認識されますが、最初の入力は認識されません。

どちらの場合も、同期ラッチを入力に追加して、信号のタイミングをステートマシンのクロックに合わせる必要があります。これにより、1クロックサイクルの遅延、またはクロック信号のもう一方のエッジを使用する場合は半クロックサイクルの遅延が追加されます。

ただし、「そのラッチでも同じ問題が発生するのではないか」と質問するかもしれません。そしてもちろん、答えは「はい」です。しかし、ここでの秘訣は、上記で強調したように、回路内の重要ではないポイントで潜在的なメタスタビリティが発生するようにすることです。

そのポイントを見つけることは、依存する入力で問題になる可能性があります。通常、これらの入力を修飾するには、追加のロジックを追加する必要があります。

ただし、メタスタビリティは確率的なものであることに注意してください。製造公差の違いにより、ほとんどのラッチは非常に速くピッキングアサイドしますが、かなり長い間不安定なままである可​​能性があります。クロックパルス間のギャップが長いほど、安定する確率が高くなります。したがって、システムクロックの周波数が高い場合は、クロックを分割してプリラッチを行い、整定時間を長くすることをお勧めします。ただし、それでも保証はありません。

最後の考え。ランダムな外部入力を同期させると、メタ安定性が高電流と発熱を引き起こす可能性があると述べました。残念ながら、非同期入力回路を削除する以外に、それを修正するためにできることはほとんどありません。


ありがとうございました!それで、フリップフロップからの余分な1クロックサイクルは、準安定が安定するための時間を追加しますか?また、なぜFSMの最後にフリップフロップを配置するのでしょうか。
エレン2017年

@Erenはい、時間を追加し、論理的に、同期に落ち着くための安全な場所を提供します。通常は、すべての出力を同時に変更します。したがって、最終段は通常フリップフロップ、またはより正確には「ラッチ」出力である必要があるため、出力はすべて同期しています。
Trevor_G 2017年

1
複数のゲートに対してあなたに+1を与えましたが、あなたは最後の段落を修正すると信頼しています。同期ラッチが回路に渡される可能性があるため、同期ラッチの準安定性も重要です。準安定性の治療法はありません。ただし、最終決定の前に長く待機することで、可能性をゼロにまで減らすことができます。クロックレートの低下を避けるために、これは通常、その前に余分なDフロップをパイプライン処理することによって行われます。宇宙の時代にエラーの確率が1度に下がると、最大クロックレートで10億回路の場合、ほとんどの人々はメタスタビリティを「治癒」したと
見なします

@Neil_UKうん、私はOPをあまり混乱させることなく、そう言っていました。まだ作業中です。その日のために出て行った。ありがとう。
Trevor_G 2017年

1
メタスタビリティは、これらの種類の議論におけるボギーマンです。実際には、クロック境界を越えて複数の入力を供給する場合に説明する状況は、メタスタビリティイベントを取得するよりも頻繁に失敗します。ルーティング遅延はナノ秒のオーダーでスキューする可能性があります。これは、データの変更が受信クロックの立ち上がりエッジの前に1つのフリップフロップに到達し、立ち上がりエッジの後に別のフリップフロップに到達する可能性があることを意味します。ルーティングのスキューが常に問題であるのに対し、メタスタビリティはスラックがほとんどない場合の問題にすぎないため、私はこれを区別しています。
jalalipop 2017年

3

非同期設計の1つの問題は、人種または危険の存在です。たとえばこの回路で、最初にA = 1、B = 0およびC = 1とすると、Dは安定して1に落ち着きます。

ここに画像の説明を入力してください

ここで、Bを1に、Cを0 に同時に変更します。Dが1のままであることは明らかですが、実際の回路では、伝播遅延と配線遅延が重要です。したがって、Bの変化がANDゲートを介してORゲートに伝播するより速く、Cの変化がORゲートに到達する可能性が非常に高くなります。その結果、Dは再び安定状態1に戻る前に、一時的に0になります。これは、レースまたはハザードと呼ばれます。この瞬間的なグリッチにより、Dの後に存在する回路がトリガーされ、この不要な遷移が回路全体に伝播します。これにより、不要な電力消費が発生し、機能にエラーが発生する可能性があります。

これらの問題を回避するために、すべての入力A、B、Cの前、および出力Dの後にDフリップフロップを追加して、入力と出力を登録できます。これで、回路はクロックエッジで安定した入力のみをラッチします。式を計算し、Dをラッチして、次のクロックエッジでのみ出力します。これにより、フリップフロップへのすべての入力がセットアップおよびホールドタイムを満たしていれば、入力または出力のそのようなグリッチが回路に伝播されないことが保証されます。

これが、非同期設計が提供する速度にもかかわらず、同期設計がより好まれる主な理由です。


どうもありがとうございました!よろしければもう1つ質問があります。入力の前と出力の後にフリップフロップを追加すると、2クロックサイクルのシフトが発生します。シフトにより、ステートマシンに問題が発生しますか?人物Aが7まで数え、人物Bに正しく数えるかどうかを尋ねる場合と同様のことがありました。Bがそれを分析し、「はい」と答えます。前にフリップフロップがあり、出力後に「はい」と答えた場合、彼がすでに9歳のときにAに到達します。これがレイテンシ以外に問題を引き起こす方法はわかりません
Eren

クロックサイクルで入力をラッチした後、次のクロックサイクル自体で出力を取得します。機能は同じままです。すべてのクロックサイクルでの状態遷移。これがFSMの通常の設計方法です。
Mitu Raj 2017

フリップフロップが原因の遅延ですが、機能に影響はありません。
Mitu Raj 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.