本連載はHisa Ando氏による連載「コンピュータアーキテクチャ」の初掲載(2005年9月20日掲載)から第72回(2007年3月31日掲載)までの原稿を再掲載したものとなります。第73回以降、最新のものにつきましては、コチラにて、ご確認ください。
もう一つ、重宝な回路としてトライステートゲートがある。トライステートインバータの回路図を次に示す。
通常のゲートの出力は"0"か"1"の2状態であるが、この回路は、Enable入力を"0"にすると一番下側のN-chトランジスタがオフ、一番上のP-chトランジスタもオフとなり、出力はVddにもVssにも接続されない高インピーダンス状態(回路理論では、インピーダンスをZの記号で表すのが普通であるので、High-Z状態とも言う)となる。この第3の状態を取りうるので、トライステートと呼ばれる。次に示す図は、トライステートゲートを用いたマルチプレクサ(セレクタとも言う)の回路図である。
En1~4の信号は、一時期にはどれか一つだけが"1"になるように制御されたエネーブル信号であり、出力OutはEnが"1"となっているトライステートゲートを通して、入力に応じてVddかVssに接続される。一方、Enが"0"の回路はHigh-Z状態であり、出力をVddにもVssにも引っ張らず、出力に影響を及ぼさない。従って、この回路により、In1~4の信号の一つを選択して出力することが出来る。
右側の図は、簡易的な記述であり、In1~4の4つの入力の一つがSelect信号により選択されることを示している。この後に説明する論理設計では、図を簡単にするため、この略記法を多く用いるので覚えておいて欲しい。
状態を記憶する基本単位回路はラッチ(Latch)と呼ばれる。ラッチは戸などに付けられた掛け金の意味であり、掛け金を掛けて情報を閉じ込めて保存するということから名付けられている。
情報を閉じ込める基本回路は、次の図の3と4のゲートのループからなっている。G入力が"0"の状態ではゲート1と2の出力は"1"となり、ゲート3と4の出力はそれぞれのゲートの他方の入力の否定となる。ゲート3の入力の否定がゲート4の入力となり、その否定がゲート3の入力となるので、G=0の状態では、ゲート3の入力が"0"でも"1"でも安定した状態となる。つまり、情報を閉じ込めることが出来るわけである。
上記の回路は、ゲート1にはD、ゲート2には*D(テキスト形式では文字の上にバーは付けられないので、以降では*Qと*を前置することで否定を表わす)が入力されており、入力Gが"1"の状態では、ゲート1の出力は*D、ゲート2の出力はDとなる。
Dが"0"の場合は、ゲート4の入力が"0"であるので、他方の入力に関係なくその出力は"1"(=*D)となる。従って、ゲート3の入力は双方"1"となりその出力は"0"(=D)となる。Dが"1"の場合は、論理をたどると、この逆でゲート3の出力は"1"となる。つまり、Dが"0"であるか"1"であるかに係わらず、Q出力はDとなり、*Q出力は*Dとなる。
ここでG入力を"0"に変化させるとゲート1と2の出力はともに"1"となり、情報を保持する状態となるが、G入力が"0"となる瞬間にはゲート3の他方の入力は直前の*Dの値であり、3の出力はDとなる。一方、4の他方の入力は直前のDの値であり、出力は*Dとなる。つまり、G入力が"0"となるとDが"0"でも"1"でも直前のDの値をそのまま保持する。
注意深い読者は、G入力が"1"から"0"に変化する瞬間に、同時にDの値が変化するとどうなるのかと質問するかも知れない。これは実に鋭い質問であり、同時がどれだけ同時かにもよるが、Dの変化が早めであるほど変化後の値になる確率が高く、遅めであるほど変化前の値になる確率が高いが、同時に近くなるほどどちらの値になるか不定になり、本当にギリギリのタイミングでDが変化すると、リンギングと言ってQ、*Q出力が中間状態付近で振動して"0"か"1"かに落ち着くまで長い時間が掛かる。従って、G入力の"1"→"0"変化の直前と直後のある期間はD入力を変化させてはならないという期間があり、直前側の時間をセットアップ時間、直後側をホールド時間と呼び、論理設計を行う場合は、この期間にはD入力を変化させないようにしなければならない。