CMOSダイナミック回路と電力消費

以前の図1.8に示したようにCMOS Static回路はPMOSとNMOSトランジスタを相補的に接続する構成であり、多入力のNANDやNORを作ろうとすると、どちらかのタイプのトランジスタを入力数だけ直列に接続する必要がある。

抵抗の直列接続と同じで、同じ大きさのトランジスタをN個直列に接続するとトランジスタの飽和ドレイン電流は1/Nになってしまう。そして、ドレイン電流が1/Nになるとスイッチ時間がN倍に長くなってしまう。直列になるそれぞれのトランジスタをN倍に大きくしてやれば良いが、今度は入力ゲート容量が大きくなってしまい前段にかかる負荷が大きくなってしまい速度が低下するし、消費電力も増える。さらに、チップ上の面積も大きくなる。ということで、通常、CMOS Static回路ではNMOSトランジスタは最大4個程度の直列、PMOSトランジスタは最大2~3個程度の直列の範囲で使用される。

しかし、プロセサの中では、多くの入力の中から1つを選択することが必要というケースはいくらでも存在する。特に、RAMやレジスタファイルでは複数のエントリの中から、アドレスで指定された1つのエントリのデータを読み出す必要があり、多入力のOR機能が必要である。

このような用途では、図1.37に示すCMOSダイナミック回路が用いられる。

図1.37 n入力ダイナミックAND-OR(マルチプレクサ)回路

この回路は、図1.38に示すように、まずS0~Sn-1をLowにした状態でPCをLowにする。そうするとNMOSトランジスタを2個直列に接続したパスは全てオフとなり、PMOSトランジスタがオンとなるので、ノードXの電位はHigh(Vdd)となる。このXノードを充電する動作をPre-Chargeと呼ぶ。そして、PCをHighとしてPMOSトランジスタをオフにしても、 充電された容量で電位が保持されHighの状態を保つ。

その後、選択する入力Diに対応するSi入力をHighにすると、DiがHighの場合は、直列の両方のトランジスタがオンとなり、Xノードの容量に溜まった電荷を放電してしまうのでXノードの電位はLowになり、それがインバータで反転されてDoutに出力される。一方、DiがLowの場合は放電パスができないので、Xノードの電位はHighを保ち、Dout出力はLowとなる。つまり、Dout出力にはDi入力と同じ論理値が出力される。このS、Dの値に応じた論理演算をする動作をEvaluation呼ぶ。

図1.38 ダイナミックAND-OR回路の動作波形

SRAMやレジスタファイルでもデータの読み出しにはこのようなダイナミックのAND-OR回路が使われており、図1.37のそれぞれの放電パスが記憶セルに対応し、ノードXはビット線になる。そして、S信号はワード線であり、D信号は各セルの記憶情報という形になる。

このように、ダイナミック回路もPre-Charge状態ではS信号が入力されたトランジスタがオフ、Evaluation状態ではPre-Chargeトランジスタがオフとなり、電源からグランドへの直流電流は流れない。Pre-ChargeやEvaluationを行うときにノードXとその他の内部ノードの寄生容量の充放電が行われ、その時に、ダイナミック回路は電力を消費する。

このようなダイナミック回路は、毎サイクルPre-ChargeとEvaluation が行われ、出力のHigh、Lowが半々であるとすると、50%のサイクルでは充電した電荷が放電され、次のサイクルでは充電が必要となる。残りの50%のサイクルでは放電されないので、次のサイクルのPre-Chargeでは充電が必要ないということになる。つまり、α=1.0で動作しているということになる。従って、CMOS Static回路がランダムな出力値を取る場合α=0.5であるのと比較すると、ダイナミック回路の内部ノードや出力信号は平均的には2倍の頻度でスイッチし、2倍の電力を消費するということになる。しかし、ダイナミック回路では入力は1個のNMOSトランジスタだけに接続されており、PとNの両方に接続されるスタティック回路より入力ゲート容量が少なく、その分、消費電力の増加は割り引かれる。