故障や誤動作の検出

エラーが発生したことを検出するには、図2.1に示すように、同じユニットを2つ使いその出力が一致しているかどうかを調べれば良い。

図2.1 二重化比較によるエラー検出

この回路では、ユニット0と1の対応する出力のXORを取る。両方の出力が一致している場合にはXORの出力は"0"となり、全部の出力が一致していればORの出力のError信号も"0"となる。しかし、一致していない出力があるとXORの出力が"1"となり、ORの出力も"1"となってエラーがあることが分かる。

ここで注意が必要なのは、入力にエラーがあった場合にはユニット0、1の出力は同じになり、エラーは検出できないという点である。また、出力を比較するXORの出力やエラーを出力するORの出力が"0"固定になってしまう故障がある場合には、出力の不一致を見逃してしまう。逆にこれらの出力が"1"固定になる故障の場合は、ユニットの出力は一致していてもエラーと誤認してしまう。というように、この構成ではユニット0、1に共通の入出力の部分の故障は検出できない。

図2.2 入出力の故障も検出できる二重化比較回路

この問題については、図2.2のように0系のユニットの入力は前段の0系のユニットから受け取り、その出力は後段の0系のユニットだけに供給し、同様に1系のユニットも0系とは独立に回路を構成し、各ユニットの出力で0系ユニットと1系ユニットの比較を行う回路を2重に設けるという風にすれば、1カ所しか故障は起こらないという単一故障であれば、必ず、Error0かError1の少なくとも一方で検出することができるようになる。

ユニット0と1の両方に故障が発生し、出力が同じように誤ってしまった場合も検出できないが、このようなことが起こる確率は小さいので、通常は単一故障という前提が使われる。しかし、半導体の微細化により、図1.10に示した2次イオンの軌跡に沿って複数のSRAMビットやフリップフロップに同時にエラーが生じるということが増えてきており、このようなケースでは単一故障の前提が成り立たない場合もあるので注意が必要である。

図2.2の二重化比較はエラーの検出という点では優れているが、0系と1系の2組のユニットと各ユニットの出力に一致チェックを行う回路が必要であり、エラー検出を行わない場合と比較するとハードウェアの物量が2倍以上必要となってしまう。

ということで、もう少し安上がりにエラー検出する方法は無いかということになる。そこで考えられたのがAlgorithmic Checkと呼ばれる方法である。