静的ハザード / 非公式訳

pp.576-578

9.6.1 静的ハザード

図9.62aに、静的ハザードの発生する回路を示します。今この回路がx1=x2=x3=1であるとします。このときf=1です。さてこの状態からx1が1から0に変化したとします。それでもやはり論理だけを考えればこの回路はf=1を保ってしかるべきです。しかし、各ゲートを通過する伝播遅延まで考慮すると、どうなるでしょうか。x1の変化は、ポイントqで観測されるよりも先にポイントpで観測されるでしょう。なぜならx1からqへ到達する経路にNOTゲートがあるからです。そのためqの値が1になる前にpの値が0になります。短時間だけp、qが両方とも0になるため、fは1に戻る前に0に落ち込みます。その結果、図9.61aの左側に示した変化が生じます。

fに生じるこのグリッチを解消する方法を説明します。元の回路は下の論理式を実装したものです。

   f = x1・x2 + (!x1)・x3

これをカルノー図で表現したのが図9.62bです。2つの積項が、黒い線で囲った主項を表しています。上述のハザードが発生するのは、主項x1・x2の変化するタイミングよりも主項(!x1)・x3の変化するタイミングが遅いときです。このハザードは、赤い線で囲った3つ目の主項を採り入れれば解消できます(セクション2.5の法則17aで定義した共通則のことです)。これは下のように論理式で表現されます。

   f= x1・x2 + (!x1)・x3 + x2・x3

こうすればx1が1から0へ変化しても出力fには作用しません。なぜなら積項x2・x3はx2=x3=1であればx1の値とは無関係に1であるからです。こうして実現した、ハザードの発生しない回路を図9.62cに示します。

カルノー図のなかで隣接する2つの1が両方とも同じ1個の積項に含まれていない場合は常に、ハザードの生じるおそれがあります。したがってハザードを解消するための方法とは、隣接する2つの1を両方とも同じ1個の積項に含める方法を見つけることにほかなりません。それができれば、どれか入力変数が変化した結果、隣接する2つの1に状態の違いが生じたとしても、両方の1が同じ1個の積項に含まれているため、グリッチは生じません。

非同期順序回路にハザードが生じると、本来そうなるべきではない間違った安定状態に回路が陥るおそれがあります。これについては例9.6に示します。