jinyux’s diary

IT業界初心者です。勉強したことをまとめています。

同期式順序回路

組み合わせ回路とは現在の入力の値のみで出力が決まる回路であり、順序回路とは組み合わせ回路以外の回路のことをいう。具体的には出力は現在の入力値と現在の回路の状態に依存する。
順序回路はさらに同期回路と非同期回路に分けられる。いくつかの回路を見ていくことでその違いを考える。

非安定状態

上掲の図でどんな事が起こるか考えてみる。X=1のとき、Y=0でZ=1となりX=0となるが、最初のX=1と矛盾する。実際には回路素子には遅延が存在するので、具体的に回路がどういう振る舞いを示すか見てみることにする。ここではそれぞれのインバーターの伝播遅延時間を1nsとする。つまり、入力が入ってから出力が出てくるまで1ns掛かるということである。Xの初期値をX=1とする。t=1nsでX=1→0と立ち下がると, t=2nsでY=0→1と立ち上がる。するとt=3nsでZ=1→0とたち下がり、t=4nsでX=0→1と再び立ち下がる。これを繰り返し、Yはt=5nsで立ち下がり、Zはt=6nsで立ち上がり、Xはt=7nsで立ち下がり、t=1nsの状況に戻り、同じ遷移を繰り返す。このときそれぞれのノードは6nsの周期で0と1を振動する。このように回路の状態が変化し続けることをアンステーブル状態、または非安定状態という。

レース状態

上掲はDラッチを改造したものであるが、この回路はどう動作するだろうか。初期状態をCLK=D=1とする。このとき、このDラッチは透過状態になりQ=1となる。ここでCLK=1→0と立ち下がるとする。この回路に遅延がないならば、上のANDゲートの出力が0になり、同時に下のANDゲートの出力が1になるはずである。しかし実際には、CLK=1→0の立ち下がったあとに\overline{CLK}が立ち上がるまでに遅延が発生する。そのため、CLKと\overline{CLK}が同時に0になる瞬間が存在することになり、Qが0になってしまうことがある。ひとたびQ=0になると\overline{CLK}が立ち上がっても下のANDゲートの出力は1にはならない。電気のパスによって信号の伝播の速度が違うことによる意図しない挙動を示すことをレース状態という。

同期式順序回路

上掲の2つの回路は出力が直接入力にフィードバックしている。こういったループを巡回パスと呼び、この巡回パスによって非安定状態やレース状態が引き起こされている。そして巡回パスにレジスタを挿入しループを断つことによってこのような問題を回避できることがわかっている。非安定状態では、巡回パスにレジスタを挿入することによって状態の移り変わりがせき止められ、安定状態に落ち着く。レース状態がある場合では、レース状態の過程が出力に直接反映されなくなる。
非安定状態の例でいうと、下掲の図のようにレジスタを挿入する。するとレジスタで信号の伝播がせき止められ、振動が止まる。クロックエッジによってレジスタがX'の信号を通すとX→Y→Z→X'と伝播するが、再びレジスタで止まることになり、非安定状態を解消できる。

この回路の状態はX=0X=1の2通りであり、非安定状態ではこの2つの状態で振動していた。レジスタを挿入することによって、この2つの状態をクロックエッジによって切り替える事ができたとも言える。このように順序回路の状態がクロックエッジによって遷移していることをクロックに同期しているという。

一般に下記の条件を満たす回路は同期式順序回路という。
レジスタか組み合わせ回路ブロックのみで構成されている
・回路ブロックの少なくとも1つはレジスタである
・すべてのレジスタには同じクロック信号が入力されている
・すべての巡回パスには少なくとも1つのレジスタが挿入されていること