コンピューターが誤って0を1で切り替えないことをどのようにして確認できますか?


63

Shocken / Nisan's:The Elements of Computing Systemsのデジタルコンピューターの構築について少し読みました。しかし、この本は、コンピューターの特定の電気的側面については何も述べていません。たとえば、電圧が区間[0、0.9)にある場合、0と1は電圧で表されるとよく​​言われます。間隔[0.9、1.5)では、1です(電圧は異なる場合がありますが、例を示します)。

しかし、コンピューター内部の電気的変動[1]によって0が誤って1にならないように、電圧が「正常に」維持されることを読んだことはありません。おそらく、電圧が0.9に非常に近くなる可能性があります。その後、しきい値を超えないようにするにはどうすればよいですか

[1]:存在すると仮定します。


7
電流が0.9に非常に近くなることはありません。
user253751

7
物事は0.9に非常に近い電流を出力しないように設計されているためです。「私のラップトップが50ギガボルトに充電されていないという確かな経験的証拠がありますが、なぜそうではないのですか?」理由はないからです。
user253751

13
Nitpick:ほとんどのデジタルロジックは、論理状態を表すために電流ではなく電圧を使用します。
夕暮れ

11
事例証拠:2011年に、5年間正常に動作していたhddのファイルを少し交換しました。
PlasmaHH

7
これらの偶発的なスイッチは悪用可能です。 Googleの説明はこのための興味深い事例です。「ビットXを1に設定」の実際のAPIが「ビットXを1に設定し、場合によっては誤ってビットYを1に設定する」場合、間違いなくセキュリティが非常に難しくなります。これは、オーバークロックされたマシンの場合にも非常に一般的になります。ある会社が、ハードウェアがゲームを実行するのに十分な信頼性を備えているかどうかを確認するために、既知の結果を含む一連の計算(フレームごと)を実際に追加したことを思い出します。
ブライアン

回答:


100

電圧が区間[0、0.9)にある場合、0と1は電圧で表されるとよく​​言われます。電圧が区間[0.9、1.5)にある場合、それは1(電圧は変化する可能性がありますが、例を挙げているだけです)。

ある程度までは、ほとんど非現実的な例を使用してこの問題を作成しました。実際の回路では、論理的なローとハイの間に大きなギャップがあります。

たとえば、5V CMOSロジックは、ロジックLowの場合は0-0.2V、ロジックHighの場合は4.7-5Vを出力し、1.3V未満の低電圧または3.7Vを超える高電圧を一貫して受け入れます。つまり、出力には入力よりもはるかに狭いマージンがあり、論理低信号(<1.3V)に使用される可能性のある電圧と論理高(> 3.7V)に使用される可能性のある電圧の間に大きなギャップが残っています。これはすべて、ノイズを考慮し、説明しているような偶発的な切り替えを防ぐために特別に設計されています。

以下は、interfacebus.comから借用したさまざまなロジック標準のしきい値の視覚的表現です。

論理レベルのしきい値] [1]

各列は1つの論理標準を表し、縦軸は電圧です。各色の意味は次のとおりです。

  • オレンジ:この範囲の電圧は、論理ハイの出力であり、論理ハイとして受け入れられます。
  • 薄緑:この範囲の電圧は論理的な高として受け入れられます。
  • ピンク/青:この範囲の電圧は一貫して解釈されませんが、通常、ピンク色の領域の電圧は高いと解釈され、青色の領域の電圧は通常低いと解釈されます。
  • 青みがかった緑色:この範囲の電圧は論理的な低として受け入れられます。
  • 黄色:この範囲の電圧は、論理低の出力であり、論理低として解釈されます。

4
良い答えは、もっと完全なものになると思いますが、ノイズに対する耐性(またはノイズに対する保護)のみをカバーします。デジタルエラーの原因となる他の多くのメカニズムがあり、同様に多くの保護手段があります。良いことは、私の答えでノイズに対する耐性をカバーしなかったことです:)
ミスターミステア

1
@MisterMystèreそれは本当です!ただし、エラー修正は一種の大きなトピックであり、1つの回答ですべてをカバーすることはできませんでした。
夕暮れの

1
@MisterMystère:さて、「ノイズ」は、あらゆる種類の確率的エラーソースをカバーする用語です。EM干渉と宇宙放射線の例は、「ノイズ」のカテゴリに分類されます。デジタルエラーの唯一の他の原因は確定的なもので、これを「バグ」と呼びます。しかし、この質問は偶発的なエラーに関するものです。
ベンフォークト

3番目の箇条書きでは、色またはロジックを切り替えたと思います。ピンクは低く、青は高くなければなりません。
ギル

@ギル・フー?ピンク色の領域はV_Tよりも上にあるため、論理的に高いと見なされて信頼性が低くなります。
夕暮れwuff

65

できません。データにチェックを追加することで、エラーの可能性を減らしています。確認するデータのタイプに応じて、ハードウェアまたはソフトウェアを介して実行でき、シリアルストリームの単純なチェックサムビットから特定の遷移のみを許可する周期的な状態マシンまでの任意の形式を取ることができます。

しかし、それは悪循環ですよね?データのチェックを担当する回路がデータと同じ外乱の影響を受けないようにし、誤検出を与えるにはどうすればよいですか?別のものを追加しますか?最終的にはほとんど利益が得られないため、これがどのように非常に高価になるかを見ることができます。

問題は、システムの信頼性をどの程度にするかです。利用可能な最も信頼性の高いコンピューターシステムの一部を組み込んだサテライトは、たとえば、非同一システムの相互冗長性や投票に頼ることがあります:3つの異なるコンピューターが、3つの異なる方法で3人の異なる人によってコーディングされた同じアルゴリズムを実行し、コンピューターの2つは他の2つのコンピューターとは異なる結果を出し、再起動されます(また、再び発生した場合は分離されます)。ただし、2台のコンピューターに同時に障害が発生した場合、間違ったコンピューターが再起動/分離されます。通常、「コールドリダンダンシー」で十分です。プライマリおよびセカンダリ回路が実装され、プライマリが何らかの(保護されていない)監視回路によってエラーが検出され、セカンダリ回路がスワップインされるまで動作します。 RAMで、コードを再実行してデータを更新できます。どこに線を引くかを賢く決めなければなりません。100%信頼できるエラー検出回路を作ることは不可能です。

衛星(特に高高度またはヴァンアレンベルト)および原子力プラントまたはその他の放射性環境のコンピューターは、特に(キーワード:)半導体の結晶格子と衝突または吸収される高エネルギー粒子のために、シングルイベントアップセットまたはラッチアップの影響を受けます。 。これらの分野をカバーする本は間違いなくあなたの最善の策です。塗料は放射線による変位損傷によって劣化するため、半導体も同様に入射放射線によって損傷または動揺する可能性があることは完全に理解できます。


2
あなたが「悪循環」を書くつもりだったかどうかはわかりませんが、「粘性円」も同様に面白いように聞こえます。
svavil

1
実際にはそれは目に見えない円でしたが、粘性の円は私を笑わせました:)
ミスター

1
nビットの単一ビットエラーを見つけて修正できるようにするには、log nビットのみが必要です。
トールビョーンラウンアンデルセン

1
:これは、放射性化合物に暴露されたコンピュータ内のハードウェア・エラーを考慮するためのプログラムを書くことについての最近の質問のことを思い出すstackoverflow.com/questions/36827659/...
Pharap

私は、3つの異なる「グループ」(またはそれ以上)が同じことを異なる方法でコーディングしているという衛星のことを知りませんでした。かっこいい

33

単一イベントの混乱は、もはや宇宙でも飛行機でもありません。私たちは10年以上、おそらく今では2つ以上、表面上でそれらが起こるのを見てきました。

ただし、前述のように、少なくとも宇宙アプリケーションでは、トリプル投票を使用して動揺を処理します(各ビットは実際には3であり、3分の2の投票が勝つため、他の2つを変更するものがあればそれがカバーされます)。そして、ECCまたはEDACで、予測されたシングルイベント更新レートよりも高いレートでRAMを通過するスクラバーを使用して、シングルイベントアップセット(実際に3分の2が間違って投票する)をクリーンアップします。

次に、総線量があります。時間がたつにつれて、材料は放射能が強すぎて機能しなくなるため、車両の寿命を超えるのに十分な材料を使用します。通常、表面上で心配することはありません。(およびラッチアップ)3つ/複数のロジックセットを並行して使用することは、従来のrad-hard techを使用する必要がないようにするための方法であり、それがうまく機能していることがわかります。

宇宙用のものを作る方法を知っていた人々は、大部分が引退したか、引っ越したので、私たちは今、宇宙ゴミを作る多くのプログラムを持っています。あるいは、宇宙を地球上の製品のように扱うことで、全員を仕事に入れて再突入と燃焼を制御しようとする代わりに、あらゆる星座から一定量の宇宙ゴミを期待しています。

表面に動揺が見られます。購入したメモリスティック(DRAM)にはFIT、Failures In Timeがあり、RAMを搭載したチップ(すべてのプロセッサ、他の多くのプロセッサ)にもFIT仕様があります(RAM(SRAM)ブロック用)。RAMはより高密度で、より小さなトランジスタを使用するため、内部で作成された、または外部で動揺しやすくなります。ほとんどの場合、データやビデオの視聴などに使用するメモリが書き込まれ、読み戻され、動揺するのに十分な長さになる前に再び使用されることはないため、気づかないか気にしません。プログラムやカーネルを保持しているメモリなど、一部のメモリはより危険です。しかし、私たちはコンピューターを再起動するか、電話をリセット/再起動するという考えに長い間慣れてきました(定期的にバッテリーを取り外す必要がある電話/ブランドもあります)。これらの混乱または悪いソフトウェアまたは組み合わせでしたか?

個々の製品のFIT数はその製品の寿命を超える場合がありますが、大規模なサーバーファームを使用すると、すべてのRAMまたはチップなどを考慮に入れ、MTBFは数年またはそれ以降の注文から数日または数時間、農場。そして、あなたはそれらのうちあなたができることをカバーするためにECCを持っています。そして、フェイルオーバーを使用して処理負荷を分散し、タスクの完了に失敗したマシンまたはソフトウェアをカバーします。

ソリッドステートストレージへの要望と、回転するメディアからの移動により、これに関連する問題が発生しました。SSD(およびその他の不揮発性ストレージ)に使用されるストレージは、より高速で安価になりますが、それがなければデータが失われるため、私たちが望むよりもはるかに揮発性が高く、EDACに依存しています。彼らはたくさんの余分なビットを投げ入れて全体をECCし、ストレージの速度、コスト、寿命のバランスを取るための計算を行います。後戻りすることはありません。人々は、どこでも小さなパッケージに収まり、製品の価格を左右しない不揮発性ストレージをもっと求めています。

通常の回路に関する限り、デジタル回路にトランジスタを使用する最初の日から現在まで、トランジスタの線形部分を通過してスイッチとして使用します。 。壁のライトスイッチのように、半分以上はめ込むと、バネが残りを支え、そこに保持します。これがデジタルを使用し、線形領域に住もうとしない理由です。彼らは早くから試してみましたが、失敗しました。彼らは較正されたままでいることはできませんでした。

したがって、トランジスタをレールに叩き込むだけで、次のクロックサイクルまでに信号の両側が安定します。多大な苦労があり、現在のツールは、チップ設計の分析を行う際に、設計によってタイミングに余裕があることを確認するために、以前よりもはるかに優れています。次に、各ウェーハ上の各ダイをテストし(パッケージング後、またはパッケージング後)、各チップが良好であることを確認します。

チップ技術は、実験に基づく統計に大きく依存しています。CPUをオーバークロックすると、そのマージンを押し上げ、公表されているクロックレート、温度などの範囲内に留まり、問題が発生する可能性が大幅に低くなります。3 GHz xyzプロセッサは、4 GHzで障害が発生したが3 GHzで合格した4 GHzチップです。部品は基本的に生産ラインからスピードグレードされます。

次に、チップまたはボード間に接続があり、それらも問題の影響を受けます。また、これらのインターフェイスのエラーを軽減するために、標準やボード設計などを作成するために多くの時間と労力が費やされます。 USB、キーボード、マウス、HDMISATAなど。ボード上のすべてのトレースと同様。ボードの内外でクロストークの問題があります。繰り返しますが、最初から問題を回避するための経験と同様にそれらを使用する場合、多くのツールが利用可能ですが、1と0が完全にエンゲージされていないかもしれない別の方法です。

技術も、スペースも完璧ではありません。十分に良いだけで、製品の十分な割合が、製品の予想寿命を十分にカバーする必要があります。スマートフォンの何パーセントかは、少なくとも2年は必要です。それだけです。古いファウンドリやテクノロジーには、より多くの実験データがあり、より信頼性の高い製品を生産できますが、速度が遅く、新しいデザインではない可能性があります。最先端はまさにそれであり、誰にとっても賭けです。

あなたの特定の質問に、信号の両端のトランジスタは、線形領域をすばやく押し出され、レールの1つに傾きます。パスの最後のクロックがラッチする前に安定することを決定するために、すべての組み合わせパスで分析が行われるため、本当に0または1になります。分析は実験に基づいています。製品ラインの最初のチップは設計の境界を越えてプッシュされ、シュムープロットが作成されて設計にマージンがあるかどうかが判断されます。プロセスのバリエーションが作成され、および/または低速および高速チップを表す個々の候補が見つかります。それは複雑なプロセスであり、いくつかはより多くの材料を持ち、いくつかはより少なく、より速く実行されますが、より多くのエネルギーを使用するか、より遅く実行されます。

それらもマージンにプッシュします。そして、基本的には、デザインが生産に入るのは大丈夫だという温かくぼんやりした感じを得る。JTAG /バウンダリスキャンを使用して、ラッチされた各状態の間でチップをランダムパターンで実行し、デザインに対して組み合わせパスがすべて安定していることを確認します。また、懸念がある場合は、いくつかの直接的な機能テストも発生する可能性があります。最初のシリコンのさらなるテストと、おそらく製品が良好であることを確認するためのランダムテスト。障害が発生した場合は、生産ラインでのより機能的なテストに戻る可能性があります。統計/パーセンテージに大きく依存しています。1/1000000の悪い人は大丈夫かもしれませんし、1/1000でも何でも構いません。それは、あなたがそのチップを何個生産するかによって異なります。

脆弱性は、ここで説明したとおりであり、他の脆弱性も同様です。まず、チップ自体、設計とプロセスの良さ、購入した製品の特定のチップの最も弱い経路がマージンにどれだけ近いかです。エッジに近すぎると、温度変化などによりタイミングの問題が発生し、ビットが1または0に落ち着かないデータをラッチします。次に、単一イベントの混乱があります。そして、ノイズがあります。再び言及したもの...


4
最初の段落では、航空宇宙環境にこれ以上問題はないように聞こえますが、SEUはこれらの環境ではもはや経験されていないことを意味すると思います。
W5VO

鉛の一部は遊離中性子放射能とはまったく異なるウラン崩壊連鎖の一部であるため、SEUはBGA上のSnPbはんだから発生する可能性があることに注意してください。
ピータースミス

@ W5VO、はい、放射線による動揺は単なるスペースの問題ではなく、表面に至るまでの問題です。宇宙ほど悪くはないが、存在している。
old_timer

1
一部のDECミニコンピューターバスには、実際には準安定性の問題があったことを思い出すようです。それはあなたが名前を付けたものからのビットエラーのための明確なメカニズムですよね?か否か?
-davidbak

2
@davidbak:メタスタビリティは厄介な問題であり、その最も一般的な効果は、いくつかのビットの値が最近のある時点で入力が低か高かを条件とする場合、入力と一貫した方法ですべてが切り替わらない場合があることです低いことも、高いことと一貫した方法でもありませんが、代わりに2つの動作の任意の混合が生じる場合があります。たとえば、ボタンが押されたときにコードが分岐することになっている場合、プログラムカウンタービットは、ボタンが押された場合または押されなかった場合の値の任意の組み合わせを保持する可能性があります。
-supercat

12

簡単な答えを求めている場合:

コンピュータの各デジタルコンポーネントは、受け入れる入力よりも、生成する出力の方が制限されています。たとえば、0V〜2Vの「入力」値は0として受け入れられますが、0の「出力」は常に0〜0.5Vの範囲になります。(実際の値については、duskwuffの回答を参照してください。)

つまり、各コンポーネントは、ラインに沿って発生した偏差またはノイズの一部を「修正」するのに役立ちます。もちろん、ノイズが十分に大きい場合、システムは補償できません。高放射線環境のコンピューターは、1が0に、またはその逆に変化することにより頻繁に影響を受ける可能性があります。

基本的に、コンピューターは特定のレベルのノイズ/干渉を許容するように設計されており、ほとんどの実用的な目的には十分です。


8

熱(およびその他の)ノイズのために、信号が0と1の間で変化することは理論的には可能ですが、非常にまれです。

デジタル回路は、「ノイズマージン」と呼ばれる属性で設計されています。これは、出力が状態を反転する前に入力を変更する必要がある量です。通常、CMOS回路では、これは電源電圧の約50%です。これらの回路で避けられない熱ノイズ(0ケルビン以上の温度で動き回る電子から発生)は<< 1 mVのノイズを生成し、これらのスパイクが(たとえば)500 mVを超える可能性は非常に小さいです。

デジタル(CMOSなど)ゲートには、ゲイン特性と飽和特性があります。つまり、入力信号が範囲の中央付近にある場合、出力は急速に変化します(高ゲイン)が、範囲の極端に近づくと、ゆっくり変化します。この結果、入力信号がレールに「近い」場合、出力はさらに近くなります。これは、ノイズ増幅されないことを意味します。

上記のその他の機能(エラー修正など)は、エラーが発生しても伝搬しないことを意味します。


4

通信チャネルや磁気ストレージ(場合によってはRAM)などのエラーが発生しやすいシステムでは、チェックサム、CRC、またはECCが保存され、不良データを拒否したり小さなエラーを修正したりします。

通常、バイナリシステムはこれが不可能になるように設計されていますが、数百万回または10億回に1回、宇宙線またはノイズの切れ目が回線上で物事を微調整するため、破損を維持するためにエラー検出/修正が必要ですコンピューターに深刻な影響を与えないようにします。

*通信チャネルのエラー率ははるかに高くなる可能性があります!


4

コンピューターのハードウェアはより堅牢で信頼できるものになりました。しかし、ハードウェアは単純な答えにはあまりにも広すぎます。ただし、一般的なデスクトップコンピューターとエンタープライズサーバーコンピューターの間に信頼性の違いがあることを知ることは興味深いかもしれません。サーバーハードウェアに関するこの質問/回答スレッドを見つけました。サーバーは、同等のデスクトップの何倍もの費用がかかります。コストは、ハードウェアの改善の結果であり、予想外に「1と0を切り替える」可能性が数倍低くなる可能性があります。

しかし、ハードウェアは話の半分にすぎません。コンピューターは、ソフトウェアを使用して予期しないエラーからデータを保護することもできます。ハミングコードは、少量の追加データを追加することにより、少数のエラーを検出できるだけでなく修正することもできる例です。


MLCフラッシュを除き、信頼性は密度と引き換えになります
Jasen

3

論理ビットが誤って切り替わる確率を最小化するために一般的に使用される2つの方法があります(0から1、または1から0)。1つ目は、可能な限り 0と1に定義された電圧レベル間に大きなギャップを設けることです。言及したように、0は電圧レベル<.9vとして定義され、1は電圧レベル> 2.9vとして定義されます(.9から1.5ではありません)。これにより、2vの電圧ギャップが残ります。これは、信号電圧が「偶然」ビットの状態を切り替える前に、200%変化する必要があることを意味します(非常に低い)。2つ目「クロッキング」です

論理信号。「偶発的な」電圧/ノイズはランダムで短命であるため、特定の(および短い)間隔でのみ状態の変更を許可することにより、クロック時に「変動」がヒットする確率が最小限に抑えられます。

もちろん、必要な信頼性の程度(ECD、ECCなど)に応じて、使用される他の手段と方法があります。


2

良いエンジニアリング。

データの破損を防ぐため、または十分に防止できない場合(ECCメモリなど)に 修正するために、多くの努力が設計に費やされます

データの破損を引き起こす可能性のあるものには次のものがあります。

  • 電気的にノイズの多い環境
  • 電源関連の問題
  • タイミングの問題(例:クロックラインとデータライン間、または2つの差動ライン間)
  • 電気クロストーク

つまり、ソフトウェアエンジニアが「0」は「0」を意味し、「1」は「1」を意味するという単純な仮定を立てることができるように、多くのエンジニアリングがデジタル設計に組み込まれています。


そしてもちろん、ECCメモリは、修復可能なビットよりも多くのビットが破損した場合に、マスク不能割り込み(NMI)をトリガーするなどの面白いこともできます。現代のECC RAMでは、これは64ビットの1ビット以上のエラーだと思います(エンコーディングはシングルビットエラーを修正でき、2ビットエラーを検出することはできますが、修正することはできません)。データを気にする状況では、修復できないものがあればすぐにシステムを停止することは、データが信頼できるかどうかわからない(または、さらに悪いことに、信頼できないことを知っている)ことをリンプするよりもはるかに望ましい場合があります。
CVn

2

実用的な電子コンピューターの2つの基本的な側面は次のとおりです。

  1. 非常に安定した電源

  2. 時間(通常はクロック周波数または遅延として定義されます)

コンピューティングシステムの電源は、非常に厳密に指定および規制されています。実際、どのコンピューティングシステムでも、電源は通常数回調整されます。電源(またはバッテリー充電器)、マザーボードへのメイン入力、ドーターカードへの入力、最後にチップ自体です。

これにより、多くのノイズ(電気的変動)が排除されます。CPUが認識するのは、ロジックの処理に使用できる非常に安定した不揮発性電圧源です。

中間値(0または1と見なされるもの間の電圧)の次の主な原因は、値が遷移するときに発生します。1が0に変化(下降時間)するか、0が1に変化(上昇時間)します。回路の出力を受け入れる前に遷移が終了するのを待つ以外、あなたは本当にそれについて多くをすることはできません。遷移が完了する前に、回路の出力はゴミと見なされます。

エンジニアリングでこの問題を解決するには、結果が正しくなるまで待つ時間を紙に書くだけです。これがCPUクロック周波数の起源です。CPUを何GHzで実行できるかは、CPUの状態変化が安定するまでにかかる時間に依存します。

実際には、揮発性の3番目の原因、つまり回路への入力があります。その問題の解決策は、上記の一般的な問題と同様です。システムに入力される信号(電圧または電流)が安定していること、および信号が安定するのに十分な時間があることを確認してください。

問題の2番目の部分は、処理の前にラッチまたはレジスタへの入力をサンプリングする理由です。信号はゴミである可能性があります。ただし、処理されると、レジスタの内部で0または1のゴミになります。問題の最初の部分は、保証の対象です。


2

しかし、コンピューター内部の電気的変動1によって0が誤って1にならないように、電圧が「正常に」維持されることを読んだことはありません。おそらく、電圧が0.9に非常に近くなる可能性があります。その後、しきい値を超えないようにするにはどうすればよいでしょうか。

フィードバックは、しきい値電圧に近づくのを防ぎ、適切に動作させるものです。

これは通常、ある種のラッチ回路の形であり、多くの場合、クロック式ラッチ回路です。

簡単な例として、フリップフロップを考えてみましょう。出力が追加の入力として論理回路にフィードバックされるように設計されています。したがって、要素内のロジックは、何を出力しているかを認識しており、他の入力がそれを反対の状態にするまで同じ値を出力し続けます。

トランジスタが完全にオンまたは完全にオフになるように回路が設計されているため、電源とグランドの限界近くで常に出力されます-0.9vレベルに近くなることはなく、遷移するとすぐに完全に移動します他の状態に。回路は、2つの状態間のアナログ領域での動作を回避するように特別に設計されています。


0

通常の動作条件では、0と1のグリッチはめったに発生しませんが、悪い動作条件(つまり、バッテリの低下またはAC電源が切断されてコンデンサの電圧が低下した後の短い時間)では、奇妙なことが起こり、0と1が台無しになりますずっと。

このため、ロックアップしたくない防御的なコード(ソフトウェアまたはHDL)を記述している場合は、常に数値に不具合生じる可能性があることを考慮する必要があります。例えば、

while(1)
{
  i++;
  do something here
  if (i == 10) break;
}

変更することがより良い==>= 念のための値がi9から11にジャンプするか、までループを終了しないように原因となる10より大きい任意の数、i0にラップアラウンド(40億回の反復の後と言います)。

while(1)
{
  i++;
  do something here
  if (i >= 10) break;
}

それは起こります、私を信じて...


i大きな負の数にジャンプするとどうなりますか?
ジェイセン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.