競合状態とはどういう意味ですか?


10

私は新しい電気技師なので、我慢してください。私が一緒に作業している他のエンジニアの何人かが、私たちのサーキットの1つに存在する競合状態について話を聞いています。

どういう意味ですか?


特定の例を確認したい場合は、「RAM書き込みのデグリッチ」と次の2つの記事で、競合状況が原因で発生したと思われるバグについて、長い議論があります。
davidcary 2015年

回答:


16

それは、非常に単純に、同時に2つのことが結果を「競争」することを意味します。

例として、リセットピンとセットピンを持つ回路があります。リセットをトリガーすると、出力は0になります。セットをトリガーすると、出力は1になります。最初にセットをトリガーし、その後非常に迅速にリセットすると、リセットされます。が表示されるため、出力は0です。

しかし、両方が同時にトリガーされた場合、どうなりますか?

回路設計者が注意を払った場合、それが機能にとって重要であれば、答えがあるはずです。その質問に対する特定の答えがない場合、回路には競合状態があり、セットからの信号とリセットが互いに「競合」して、どちらが勝って出力を決定するかを確認します。

遅延が最小のパスが通常は勝ちますが、競合状態は、最も遅延したパスがより速いパスの前に正確にトリガーされる正確なトリガーとして見ることができます。

IC内のロジックビルディングブロックを含む多くの回路には特定の競合状態がありますが、通常は意図したとおりに回路を使用したときに気付かないような状態です。そのため、エンジニアが「競合状態」を数回声に出して言うと、それは実際には通常の使用でも起こり得る問題であることを意味します。これは、競合状態では正常な動作を予測できないためです。

ソフトウェアではこの用語も使用されますが、多くの場合、タイミングの問題、つまりロックアップを示します。しかし、それは同様の原則です。多くの場合、コンピューターで2つのプロセスが独立して実行されているが、同じメモリを使用すると、一方のメモリが一方のメモリに書き込まれるのを防ぎ、もう一方のメモリが使用されます。彼らがそれを可能性のある競合状態と呼んでいない場合:1つのプロセスが更新中の値を読み取っている、または両方が同時に値を書き込んでいる可能性があり、その後が起こるわからない起こります。


2
この良い答えに加えて、ハードウェアがこれらの状況で非常にうまく動作しない可能性があることを指摘します。実際のハードウェアは、0から1に瞬時に切り替わることはありません。常に、それらの間の短期間に上昇する必要があります。ほとんどのロジックは、トランジェントが「0に非常に近い」または「1に非常に近い」のいずれかに解決された遷移から十分な時間が経過したと想定しています。タイミングが...残念なことに、0.5に近い場合があります。多くの回路は、彼らが回路全体を不安定化、遷移に時間の不確定な量を取ることができることを意味し、この状態で「準安定」になる
Cortのアモン

1
セットとリセットが同時にアクティブになるケースを処理するように回路が設計されていても、確実に同時にアクティブにすることはできないため、どちらが最初にアクティブになるかがわかりません。
user253751

非アトミック操作は、ソフトウェアの競合状態の良い例です。プログラムは、Cを使用して新しいファイルを作成fopen()し、fclose()そこにデータを書き込んでから、chmod()それを保護することができます。デフォルトのファイルモードでは、呼び出し後に拒否された方法で不要な部外者がファイルを操作できる可能性のある、競合状態の開始fopen()と終了の間の短いウィンドウが表示chmod()されchmod()ます。解決策は、open()代わりにでファイルを作成することです。これにより、ファイル作成操作の一部としてモードを設定できます。
ウォーレンヤング

6

「競合状態」という用語は、(1)2つ以上の信号が任意の順序で到着し、互いに任意に接近していることを意味します。(2)到着の可能な組み合わせの確率が本質的にゼロであることを分析的に示すことはできません。問題を提起する時代。

クロックに対してデータ入力がいつでも変化する可能性がある単一のフリップフロップの観点からは、クロックとデータ入力のほぼ同時の遷移が競合状態を引き起こす可能性があります。ただし、回路全体の動作の観点から見ると、ダウンストリーム回路がラッチの保持を気にせず、ダウンストリーム回路がラッチの保持を気にしない場合にのみ発生する場合、競合状態は発生しません。データ入力の遷移の近くにはないクロックパルスが到着するまで。

さらに、問題のある入力タイミングの可能性を完全に完全に排除することはしばしば不可能であるため、競合状態の多くの分析では、1つのレジスタの出力が同じクロックによって制御される別のレジスタに供給されると、2番目のレジスタは常にラッチすると言われます「クリーン」ハイまたは「クリーン」ロー。最初のレジスタへの入力により、スイッチングしきい値で正しい入力レベルがキャプチャされた場合でも 理論的には、最初のラッチが、次のクロックパルスが到着したときに出力レベルが正確に切り替わる正確なスイッチングしきい値のちょうど上または下のレベルをキャプチャすることが可能です。

その結果、たとえば入力を受け取り、それを3つのフリップフロップのシーケンスに渡し、2番目のフロップがハイで3番目のフロップがローのときはいつでもハイを出力する回路がある場合、完全なクロック周期に相当する短い時間の後にデータ入力が続き、その後に長い時間の完全なクロック周期が続くと、回路の出力が正確に1クロック周期だけ高くなることが本質的に保証されます。

概略図

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

この回路図では、タイミングがやや不規則な信号は、各立ち上がりエッジの後に1クロックサイクル間ハイになる出力を生成するように、3つの方法でクロックに正規化されています。信号を正規化する最初の試みは、厄介に見える出力を生成し、入力とクロックが同時に変化する場合、明らかに競合状態になります。2番目の方法ははるかに優れていますが、クロックとデータのタイミングによって最初のレジスタが中間値をキャプチャする場合、競合状態(シミュレーターがトリガーできない)があります。3番目のアプローチは一般的な慣行を表しており、最初のレジスタがクリーンハイまたはクリーンローをキャプチャできなかったとしても、一般に安全と見なされます。最初のレジスターからの出力が2番目のレジスターをきれいに取得しない原因となる正確な動作をすることはほとんどありません。データがクロックに非常に近く変化する場合、現在のサイクルで取得されるか、次のサイクルまで取得されない可能性がありますが、どちらかの状況が許容できる場合は、競合状態はありません。


あなたは言った、「...見苦しい出力だ」それは「準安定状態」の別の言い方ですか?
ソロモンスロー

@jameslarge:シミュレータは準安定状態を処理しません。最小パルス幅がないため、最初の出力は醜く、2番目の出力は準安定状態の可能性があるため危険であると説明します。
スーパーキャット2015年

2

つまり、プロセスの結果は2つの入力の到着シーケンスによって影響を受け、そのシーケンスは不確定です(保証されません)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.