パストランジスタ(pass transistor)を利用した回路には, D-FF以外にもいくつか面白いものがある。 その一つは,何らかの記憶機能を持つメモリー(memory)関係の回路である。 メモリーも過去を記憶するので,当然シークエンス回路の仲間であるから, 当然のことながら,同じような要素を持つのである。
先の章で示すように,コンピュータは, プロセッサとメモリーと周辺回路で構成される。 しかし,プロセッサ内部にも若干のメモリーが存在する。 このため,プロセッサ外のメモリーを外部メモリー(external memory), プロセッサ内のメモリーを内部メモリー(internal memory)と呼ぶ。 外部メモリーは大容量のものが多く, 応答速度よりは集積度を重視して設計される。 これに対し,内部メモリーは集積度よりは応答速度を重視する。
内部メモリーはレジスタ(register)5.2とも呼ばれ,
任意のときにデータを入れ,任意のときにそれを取り出すことができる。
基本的にはD-FFの出力を入力に直接接続しループを構成することで,
永久記憶を実現することができるが,
図 5.8の上図に示すように,
書き込みをしたいときには
のタイミングでループを開けて,
書き込み信号の方を導入する。
出力はループを構成したままでも読み出すことができる。
図 5.8の下図には上図の簡易型を示すが,
ループが全体としてNOTを構成しないため,
ラットレーシングが発生しないことが保証されているので,
パナマ運河方式はとっていない。
しかし,最初のインバータの前の電位が長時間経過すると,
正確な1や0の値から動いていってしまう危険がある。
このため,
のタイミングで毎周期ごとにループを構成し,
きちんとした電位に戻すリフレッシュ(refresh)という作業を行っている。
普通のレジスタでは,1個のデータしか記憶できないが, 複数のデータを記憶する方法として,複数のレジスタを直列に配置し, 新しいデータを入れると古いデータはより奥へ押し込まれていく形式の シフトレジスタ(shift register)というものがある。 データは押し込まれていくだけなので, データの内容は一番奥,つまり最後の出口でしか見られない。 このため,最初に入れたデータが最初に現れてくるので, こうした機能はFIFO(first-in-first-out)と呼ばれる。
シフトレジスタの回路を図 5.9に示す。 この場合には,各レジスタ間のデータがすべて異なりうることから, ちゃんと運河方式を採用したD-FFの連続したようなものでなければならない。 ただし,D-FFではクロックのくるたびに,データは右へ移動していくが, この回路では一番左に書き込みを行ったときにだけ,データ移動が起こる。 新しいデータが入ってこない場合には,それぞれループを構成して, リフレッシュを繰り返すことになる。
同じように複数のデータを記憶するが,データを入れる側でしか
データを取り出さない形式のレジスタがあり,スタックレジスタ(stack register)と呼ぶ。
この場合にはデータは左右に動かせる必要がある。
最後に入れたデータが最初に出てくることから,この機能はLIFO(last-in-first-out)と呼ばれる。
回路を図 5.10に示す。
新しいデータを入れることをプッシュ(push),
最後に入れたデータを取り出すことをポップ(pop)と言う。
この回路ではD-FF的な基本回路の間を繋ぐゲートが2種類あり,
プッシュの際は右シフト信号
がONし,
ポップの際は左シフト信号
がONする。
シフトレジスタの場合には,一番右のデータはいつでも読めるが,
スタックレジスタの場合には,ポップしたデータを再び読むことはできない。