前回簡単に紹介した CMOS は nmos と pmos を相補的に接続した回路構成です 相補的とは pmos,nmos をペアにして入力を共有し pmos が直列接続のときは nmos は並列接続に pmos が並列接続のときは nmos は直列接続にする方法です 現在使われているディジタル回路の 8-9 割は CMOS です CMOS は 1980 年代から急速に発達し 毎年チップ内に格納する素子数が 1.5 倍 (18 ヶ月で倍 ) になるという急成長を遂げました この成長率をムーアの法則と呼びます これによって コンピュータは大発展を遂げ ディジタル回路はアナログ回路に置き換わって様々な用途に使われるようになりました 今回はこの CMOS 回路をやや深く見て行きましょう 1
歴史的には 製造のしやすい pmos のみでできた回路が最初に発達しました 世界初のマイクロプロセッサ 4004 をはじめとする初期のマイクロプロセッサは pmos でできていました しかし pmos はマイナスの電源電圧を与える必要がありました また ホールは電子に比べて易動度といって動かし易さが小さいため 性能が低くなりやるいのです このため 70 年代の中ごろには LSI の主流は全てを nmos で作る方式に移りました この方式は エンハンスメント型の nmos FET の負荷抵抗にディプリーション型の nmos FET を抵抗として使います 2
ディプリーション型はゲートとソースの電圧が 0V でもある程度電流が流れるので抵抗として使うことができます nmos のみで作るため 作りやすいという利点があり 80 年代のはじめまで使われました 中でもメモリ回路はかなり後になっても nmos が使われました しかし トランジスタを抵抗と使うために 出力が L レベルのときには常に電流が流れてしまいます また L から H への変化が遅いという問題もありました このため 序々に CMOS に置き換わりました 3
では CMOS の回路構成を見て行きましょう CMOS の特徴は ゲートが H にすると O N になる nmos,l にすると ON になる pmos という相補的 (Complementary) なトランジスタを相補的に接続することにあります まず nmos,pmos のペアを入力数分用意して ゲートを共通にしてそれぞれの入力を与えます 次に回路の下半分に nmos を 上半分に pmos を配置し nmos が直列の場合 pmos は並列に nmos が並列の場合 pmos を直列に接続します このようにすると 出力には GND と電源のどちらかがトランジスタを介してつながり 電源から GND までの通路のどこかは切れていることになります 前回 NOT NAND NOR を紹介しました 今回はより複雑な回路について紹介します 4
前回紹介した NOR と NAND の回路を見てください NOR の方は nmos が並列に繋がっているので どちらかの入力が H になると出力 Y は GND に繋がって L が出力されます 両方の入力が L のときだけ Y は電源と繋がって H が出ます 一方 NAND は nmos が直列なので 両方 H のときだけ Y が L になり pmos が並列なのでどちらかが L のときには Y が H になります この方法を利用すればもっと複雑な回路も実現可能なはずです 5
例えば 直並列を組み合わせるとこの図に示すような回路が実現できます このようなゲートを CMOS 複合ゲートと呼びます この種の回路を解析する場合は 下半分の nmos に着目する方法と 上半分の pmos に着目する方法があります ここでは下半分に着目しましょう Z が GND に落ちるためにはどのトランジスタが ON になれば良いかを考えます 6
Z が GND に繋がる条件は 以下のように求めます 並列の場合は OR と考え 直列の場合は AND と考えます この場合 B と C の OR で これに対して A が AND されることになります さらに D が OR されます この条件が満足されれば Z は GND になります すなわち論理式は ここに示すようになります 7
今度は上半分の pmos に着目します pmos は L の時 ON になるので 入力にバーが付くことになります あとは同じで 直列が AND 並列が OR です 出来上がった式はさきほどと違うように見えますが ドモルガンの法則により同じことがわかります 8
次にブール式から回路図に変換する方法を紹介しましょう 式の形が全体にバーが付いている場合は nmos から作っていきます A と B は OR なので並列に繋ぎます これに C が AND されているので 直列に nmos を繋ぎます ここで C と A,B の並列接続の上下関係は逆でもかまいません この図では C が GND に接続されていますが A と B の並列接続が GND に接続されていてもかなわないです 9
次に nmos の部分と逆の接続関係で pmos 部分を作ります A と B は並列なので pmos を直列に接続します C は直列なので A と B の直列に対して並列に繋ぎます 入力のバーに対するブール式が与えられた場合は pmos 部分をまず作って これに対応した nmos 部分を作っていきます 10
ではこの辺で演習をやってみましょう 演習 7-1 は回路からブール式に変換する問題 演習 7-2 はブール式から回路を作る問題です 11
さて 今まで紹介した CMOS 回路は必ず上半分に pmos を使い 下半分に nmos を繋ぎました このため 入力と出力の関係は必ず NOT が入ることになり 今までの複合ゲートは全体の式にバーが付いた形か 個々の入力にバーが付いた形のどちらかの論理式でなければ実現できませんでした AND OR などは実現できません これはなぜでしょう? 理由は pmos は H レベルの伝達 細かく言うと L から H への変化の伝達は得意ですが H から L の変化の伝達は苦手です 逆に nmos は L レベルつまり H から L への変化の伝達は得意で L から H への伝達が苦手という特徴があるからです 12
これは動作原理を考えると理解できます nmos の p 型サブストレートは GND レベルになっています このため S-D が L レベルになるときは電位差が生じません 一方 S-D が H レベルになる際は 電位差が生じます この時 S-D とサブストレートの間の容量 ( コンデンサ ) に電荷を充電しなければ S-D 間は H レベルになることができず このために時間が掛かってしまいます 13
pmos の場合 nmos とは逆にサブストレートは電源電位になっているので S-D 間が H レベルのときには電位差が生じません 一方で S-D 間が L レベルになる場合は 容量に充電する必要があり時間が掛かってしまいます 14
したがって このように nmos に電源電位を伝達させ pmos に GND 電位を伝達させる方法は 互いに苦手な電位を伝達することになり動作速度が遅くて使い物になりません 15
では CMOS で AND や OR はどのようにして作れば良いのでしょうか?NAND や N OR の後に NOT ゲートを付ければよいのです CMOS の NOT ゲートはトランジスタ 2 個でできますし 高速です このように CMOS は NOT ゲートを惜しげなく使って論理を合わせることで nmos で L レベルを伝達し pmos で H レベルを伝達する原則を維持します 16
さて ここまでで通常の相補的な使い方を紹介しました これと全く逆な利用法があります nmos と pmos のソースードレイン同士を接続し ゲートには片方に S を与えたとすると もう片方には S の反転信号を与えます この場合 pmos が ON のときは nmos も ON になり nmos が OFF のときは pmos も OFF になります つまり 両方が必ず同じ状態になるのです このことにより ON になった時は A と Y が接続され OF F の時は A と Y が切り離されます これをトランスミッションゲート あるいはトランスファーゲートと呼びます なぜ nmos と pmos の両方必要か? というと 先ほど解説したとおり それぞれ通すのが得意なレベルが違うからです H レベルは pmos が L レベルは nmos が主に動作することで 両方のレベルを高速に通すことができます トランスミッションゲートは 双方向である点にご注意ください この双方向性を利用して FPGA の配線用スイッチとして使うことができます 17
トランスミッションゲートを使うとマルチプレクサ ( データセレクタ ) を簡単に作ることができます 図に示すように S を H にすると上のトランスミッションゲートが ON になって A が Y に出力されます 18
一方 S を L にすると B が Y に出力されます S の反転信号を作る NOT ゲートを含めてもトランジスタ 6 個で実現できるのが特徴です 後の授業で紹介する D-FF の中身などに使います 19
ではここで テキスト 22 ページの例題をやってみましょう これは先ほどのマルチプレクサの応用です 20
A=H の時には Y に B が A=L の時には Y に B の反転信号が表れます これを真理値表にしてみると Exclusive-OR( 排他的論理和 ) ができてきることがわかります 排他的論理和は複合ゲートで作ることができず 普通のゲートの組み合わせで作ると多数のゲートが必要であることから この方法にはメリットがあります このようにトランスミッションゲートを使って論理回路を作ることをパストランジスタロジックと呼びます パストランジスタロジックは 排他的論理和の場合はコストの小さいメリットが際立っているため 使われることがありますが 伝達レベルが劣化する問題点があります 通常の CMOS は 出力には電源 GND レベルがトランジスタを通じて表れます しかし パストランジスタロジックの出力は入力がそのまま出てくるため 複数段を経過するとレベルが劣化してしまうのです 21
トランスミッションゲートの pmos, nmos が両方 OFF の状態では 出力は電気的に浮いた状態になります この状態は 出力インピーダンスが高くなることからハイインピーダンス状態とも呼びます にこれは L と H のほかの第 3 の出力ということで 3 ステート出力あるいはトライステート出力と呼びます この図のように NOT ゲートの出力にトランスミッションゲートを付けることで 3 ステートゲートを作ることができます この例では B 入力が L の場合は 出力はハイインピーダンス ( 真理値表では Hi-Z と表します Z はインピーダンスをしめすことを思い出しましょう ) になり B 入力が H の時は普通の NOT ゲートとして働きます MIL 記号法ではこのように横から 3 ステート状態にするかどうかを切り換える制御線を付けて示します 22
3 ステートゲートを利用するとバスを作ることができます 通常のディジタル回路は一つの信号線に複数の出力を繋げることはありませんが 場合によっては 複数の出力を繋いで 時分割で信号を載せることにより 信号線を共有して効率良く利用することがあります このような信号線は通常束にして一定の大きさのデータを載せることが多く バス (Bus) と呼ばれます 3 ステートゲートの出力を複数接続し どれか一つを除いて全てハイインピーダンス状態にします この場合 A のみ制御線を L にし B,C は H にします このことにより 信号線上には A からの信号のみが載ります 今度は C の制御線を L にして 他を H にすれば C の入力がバス上に載ります このようにバスは A,B,C のどの信号を載せることもできるのですが 複数同時に制御線を L にすると出力同士が衝突して トランジスタ間に過電流が流れてしまいますので注意が必要です 23
様々なスリーステートゲートの例を示します 制御線は EI(Enable Input) という名前を使っています EI をアクティブにするとゲートは働き そうでない場合は出力がハイインピーダンス状態になります 24
3 ステートゲートは NAND NOR NOT など通常のゲートを使ってつくることもできます これがその例です 25
この例では EI=L ならば NAND NOR は共に NOT の働きをするので in のレベルはそのまま out に繋がります 一方 EI=H の場合 両方のトランジスタが OFF になり 電気的に浮いた状態 すなわちハイインピーダンス状態になります この方式はトランスミッションゲートを使う方法に比べてトランジスタ数が多く必要ですが 出力レベルが電源 GND から経由するトランジスタ数が 1 なので 電気的に強いです トランスミッションゲートを使うとどうしても複数個のトランジスタを経由することになります 26
もう一つバスを作る方法を紹介します CMOS の原則を崩して pmos を取ってしまって その代わりに抵抗で電源と接続します ドレインが空くので オープンドレインと呼ばれます 複数のドレインを共通の抵抗に繋ぐことにより 複数の出力を繋いでバスを作ることができます 筐体の背面などに使うバックプレーンバスでは バス上を伝搬するディジタル波形が反射によって乱れるのを防ぐため 抵抗を付けます ( この辺の話は分布定数線路という理論があるのですが情報工学科ではやらなくてもいいだろう ) このような抵抗を終端抵抗 ( ターミナル抵抗 ) と呼びますが これを流用することができます 27
オープンドレインのバスは全トランジスタが OFF の時は抵抗から電源のレベルが伝わり H となります どれか一つのトランジスタの ON になる ( つまりゲートが H) と そこに電流が流れてレベルが L になります すなわち 他の全員がゲートを L にしておいて 一人だけゲートにレベルを与えると それがバスに反映されます 28
このバスのレベルを NOT ゲートを介して受け取る場合は バス全体が どれか一つが H の時 出力が H になる OR ゲートとして働きます そこで このようなバスをワイヤード OR( または AND タイ ) と呼びます ワイヤード OR はバスの制御線 ( ハンドシェーク線 ) や分散的な優先順位決定回路 ( アービタ ) に用いられます 29
ではバスを作る際 どちらの方法を使えばいいでしょう? 両者の利点をまとめておきます オープンコレクタの良い所は 制御を誤って出力が競合しても OR が行われるだけで 不具合が生じない点で これは何が刺さるか分からないバックプレーンバスに向いています 負荷抵抗は必要ですが 終端抵抗と兼用にできるのでバックプレーンバスに有利です 一方 3 ステートゲートは pmos を使って CMOS 構造にするため 高速で消費電力も小さく 負荷抵抗も必要ないです ただし 制御を誤って出力を衝突させ 片方が L レベル 片方が H レベルを出そうとすると過大電流が流れてしまいます このため 3 ステートゲートは 基板上のバスなど 動作が完全に制御できる場合に使われます 30
今日のポイントをインフォ丸が示します 31
ではこの演習問題をやってみましょう 32
以降はおまけです 計算機基礎で習ったはずです 忘れた人はスライドを見て思い出してください 33
34
35
36