c-MOS インバータは消費電力 0 といったが、実際には電力消費もあるし、 動作速度も有限である。 遅延について言えば、デバイスそのものも動作遅れがあるし、さらに大きな 原因として、次段のゲートや配線の持つ静電容量である。 静電容量があるから出力電圧を上げる際には充電時間がかかるし、出力電圧を 下げる際には放電時間がかかる。 また、充放電の際、電力損失も発生する。
デバイスそのものが持つこの時定数は内因性遅延 (intrinsic delay)
と呼ばれる。
これは、n- や p-MOS FET 自身のチャネル形成時間であり、チャネル抵抗
を介してゲート容量
に電荷が入ってくる時間であるので、
となる。
しかしチャネル抵抗と言っても電流-電圧特性が飽和する現象もあるので、
簡単に一つの定数で置き換えることはできないが、線形近似できるときにどの
程度であるかを見積もっておくことは悪いことではなかろう。
FET の特性を計算するときに、チャネルの抵抗はチャネル中の
電荷がどのくらいの時間でソースドレイン間を抜けられるのかで見積もった。
ということは、この見積もられた抵抗から計算される
は、この
チャネルの走行時間で与えられることが推定できる。
したがって
![]() |
(4.1) |
走行時間遅延はデバイスの動作に起因するため、集積回路のいろいろな遅延を
議論するための比較標準のような使われ方をするために、しばしば現れるが、
実はもっと大きな遅延があるために、普通は無視できることが多い。
その他の遅延は総じて外因性遅延(extrinsic delay)と呼ばれる。
現在の集積回路、あるいはボード上に作られた回路でもっとも大きな遅延は、
配線の持つ容量の充放電時間である。
配線容量は出力線から接地側、つまり 0V 側に対して静電容量を持つ。
出力電圧を上げるときには、電源である
より p-MOS を経由して、
この静電容量に充電する必要がある。
p-MOS のチャネル抵抗(時間ともに変化するので平均的な抵抗)を
とすると、充電にはおよそ
ぐらいの時間が必要となる。
また、出力電圧を下げるときには n-MOS のチャネル抵抗によって放電を
行うが、n-MOS のチャネル抵抗は p-MOS のチャネル抵抗に近く
設計されているから、やはり同じぐらいの時間を必要とする。
次段のゲート容量の充放電時間も配線遅延ほどではないが、やはり 無視できないが、厳密な取扱はやや複雑になる。 というのは例えば p-MOS の場合、対向するチャネルの電圧が一定でなく、 接地電圧と次段の出力電圧の間の電圧を連続的に補間すること、それに加えて 出力電圧が時間とともに変化するからである。 しかし、最悪で計算しても、接地された静電容量の充放電時間であるので、 通常は接地容量で計算する。 しかも、年ごとに回路規模が大きくなってきているので、配線容量の占める 比率が高くなってきており、詳細な議論をしても意味が無くなりつつある。
いずれの時定数も
に、それぞれ該当する静電容量を掛けることにより
得られるので、種々の静電容量をゲート容量を基準にして
表すことがよくなされる。
例えば、配線容量、ゲート容量 (n-MOS と p-MOS の和に次段のゲート総数を
掛けたもの)、自身のゲート容量の総和が
| (4.2) |
と表されるとき、そのゲートでの遅延時間は
| (4.3) |
となる。
電力消費はこれらの容量の充放電の際、n- や p-MOS FET で発生する抵抗損失で
起こる。
放電の場合は、かなり簡単に考えることができる。
というのは
の静電容量に
だけ貯められていた
静電エネルギーを、すべて p-MOS で無くしてしまうからである。
つまり、放電のたびにこれだけのエネルギーが n-MOS で消費される。
充電の場合は、静電容量に 0 から
だけのエネルギーが
蓄えられるのだが、その際、電源は
の電圧で
だけの
電荷を送り込むという仕事を行っている。
したがって、
のエネルギーを使って、
だけの
エネルギーを蓄えたことになる。
この差額の
のエネルギーは、充電側の抵抗である p-MOS
で消費されたことになる。
クロック周波数が
のとき、クロックのたびごとに出力論理が
反転するものとすると、
| (4.4) |
だけの電力消費があることになる。
再び
とし、このゲートの出力の反転確率を
としよう。
すると、このゲートでの電力消費は
| (4.5) |
となる。
NAND や NOR ゲートでも議論はほとんど変わらない。 しかし、多入力 NAND や NOR で、ファンイン (fan in)、つまり入力の線の 本数、が非常に多い場合には、n-MOS 側か p-MOS 側のいずれかに、FET がたくさん直列になる回路が入ってくるため、充電あるいは放電のいずれかの 遅延時間が大幅に延びる。 最大八入力 NAND や NOR ぐらいまでは気にしなくても、それよりも 多入力になると、遅延時間が無視できなくなり、何らかの工夫が 必要になってくる。 このような場合は、いくつかの少入力 NAND を用意し、その出力を NOR に 入れることにより、多入力 AND を構成する。 さらに多入力の場合は、こうしたいくつかの NOR を NAND に入れて、多入力 NAND とする。
同様に、ファンアウト (あるいはファンナウト、fan out)、つまり一つの ゲートの出力線につながっている次段のゲート数、が非常に多い場合も、 駆動すべき負荷の静電容量が大きくなり、やはり遅延が大きくなる。 この場合は、徐々に駆動力の高いインバータを従属接続し、駆動力を 上げてから、複数の次段ゲートを駆動することが行われる。 駆動力を高くするには、横幅の大きなコンダクタンスの高い FET を用いた インバータを利用する。
ファンインが大きい場合は、段ごとに指数関数的にゲート数を減らし、
ファンアウトが大きい場合は、指数関数的に駆動力を上げていったが、
どのくらいの比率で駆動力を上げるのが良いだろうかというと、次のような
計算で決定することができる。
いずれの場合も同じ論理で計算できるので、ここではファンアウトをとる場合で
議論しよう。
全体で
のファンアウトをとる場合、
段で対処することとし、
各段で
のファンアウトをとることとしよう。
当然
| (4.6) |
が成立する。
内因性遅延や配線遅延を無視し、次段ゲート駆動の遅延だけを考えると、
各段での遅延時間は
となるから、全体の遅延時間
は
| (4.7) |
となる。
前式の条件で、この式を最小にすることを考えればよい。
前式の
をとって
を求め、この式に代入すると
![]() |
(4.8) |
となる。
で微分してみると、この式は
で最小値
をとることがわかる。
したがって、理想的には各段2、3倍ごとにインバータを
大きくしていけばよいことになる。
ただ、段数を増やすことは、集積回路でも、ボード上でも面積をとるので、
実際はもう少し大きな拡大率をとる。
で遅延は
の場合の1.6倍ぐらいとなるから、この辺が
現実的な拡大率であろう。
ファンインの場合の縮小率についても全く同様の議論が成立する。