しかくいさんかく

解答略のメモ

2日目: [半導体回路] トランジスタと論理ゲート

この記事はひとりでCPUとエミュレータとコンパイラを作る Advent Calendar 2017の2日目の記事です。

今日はトランジスタのスイッチング機能と、それを用いた論理ゲートの実装をまとめる。

トランジスタ

この世には半導体と呼ばれる物質があり、n型とp型に分類されている。 n型半導体は電子をたくさん含み、p型半導体にはあまり含まれていない。

半導体と金属と絶縁体を以下のように接合したデバイスは、(nMOS型)トランジスタと呼ばれている。

f:id:kaitou_ryaku:20171202002144p:plain

一番目の図1を見て欲しいのだが、これは3本の金属線の生えた半導体バイスだ。 上段と下段の金属は、桃色で描かれたn型半導体に繋がっている。 2つのn型半導体の間にはp型半導体が存在するが、こいつは電子が少ない(あるいは、電子はp型半導体中に存在できない)ため、このままでは上段下段間に電子は流れない。 また中段の金属は絶縁体に繋がっているので、上下段と電子をやりとりすることは絶対にない。

二番目の図を見て欲しい。 中段の金属に正の電圧を印加した結果、絶縁体の裏側に電子が集まっている。 掃除機の先に布を被せて吸引すると、布にたくさんのホコリがひっつくのと同じ原理だ。

電子は中段の絶縁体の裏側に「存在する権利」を得たことになる。 こうなると、電子は上段下段間を自由に移動できる。 つまり上段と下段は、右の図のように導体で繋がったと見ることができる(三番目の図)。

仕組みをまとめると、

  • 中段の電圧が零のとき: 上下は絶縁されている
  • 中段の電圧が正のとき: 上下は繋がっている

言い換えると、上下の金属の間には制御機能付きのスイッチ(中段の金属のこと)がはさまっており、その電圧に応じてスイッチが切り替わるわけだ。2

トランジスタとNOT回路

以下の説明では、電圧が零の部分をL、電圧が正の場合をHと呼ぶことにする。 電圧の高低(H or L)を論理値(0 or 1)に対応させると、電気回路を用いて論理計算ができるようになる。 こうした用途の電子回路を論理回路と呼ぶ。

トランジスタを使って論理回路を作りたい。

しかしトランジスタは制御機能付きのスイッチでしかなかった。 論理回路を作るには、スイッチ機能を電圧のH or Lに変換する必要がある。 これは以下の回路で実現できる。

f:id:kaitou_ryaku:20171201224351p:plain:w300 f:id:kaitou_ryaku:20171201224402g:plain:w300

回路図の緑の部分は電圧正(H)、灰色の部分は電圧零(L)を表している。

両図の右端に描かれた、短い縦線と長い縦線からなるユニットがnMOS型のトランジスタだ。 よく見ると線が3本(上、左、下)生えていることが分かるだろう。 トランジスタの中段はスイッチ(白いナナメの線)とつながっており、その先は左図の場合L、右図の場合Hに繋がっている。

右図では電流が流れている。トランジスタの中段に正の電圧が掛かることで、トランジスタのスイッチがONになり、上段と下段が1つの導体として繋がったのだ。

ここでトランジスタの中段を「入力」と見立てて、右端にひょろっと出た電線の電圧を「出力」と見立てる。 入力と出力に関係ある部分だけを抜き出すと

f:id:kaitou_ryaku:20171201224413p:plain:w300 f:id:kaitou_ryaku:20171201224417g:plain:w300

入力1 出力
L H
H L

という変換を行っており、いわゆるNOTゲートだとわかる。 回路図をいちいち描くのは場所の無駄なので、今後は論理記号(MIL記号)で表す。

f:id:kaitou_ryaku:20171201224433p:plain:w200

このMIL記号だけ見ると、「NOTゲートにゼロ電圧を入れると高い電圧が出て来る。無からエネルギーがわいた!すごい!」などと勘違いしそうになる。 言うまでもないが、MIL記号は「入力と出力」だけを表示しているのだ。 「働くのに必要な電力の確保」が描かれていないだけで、無からエネルギーがわいたわけではない。 この例のように、ちゃんと閉じた回路の一部を切り取って表示した回路は今後頻出する。 そういう回路の破片を見たときはHとLを他所から仕入れて、入力がその一方を選び、出力に渡していると考えるとよいと思う。

NANDゲート

NOTゲートのトランジスタを2つに増やしてみる

f:id:kaitou_ryaku:20171201224444p:plain:w300 f:id:kaitou_ryaku:20171201224449p:plain:w300 f:id:kaitou_ryaku:20171201224454p:plain:w300 f:id:kaitou_ryaku:20171201224459g:plain:w300

トランジスタの増加に伴い、入力が2つになった。出力は1つのままだ。

入力1 入力2 出力
L L H
H L H
L H H
H H L

Lを論理値の0、Hを論理値の1とすると、これはNANDゲートだ。MIL記号は、ANDの前方に否定を表す丸印がついたマーク

f:id:kaitou_ryaku:20171201224516p:plain:w200

他の論理素子

ANDとORとXORを、NOTとNANDで構成しておこう。

AND回路

f:id:kaitou_ryaku:20171201224523p:plain:w400

OR回路

f:id:kaitou_ryaku:20171201224531p:plain:w400

XOR回路

f:id:kaitou_ryaku:20171201224539p:plain:w400

これで基本的な論理ゲートが揃った。

どうでもいい話

今日はまずトランジスタの性質を説明し、それを用いてNOTとNANDを作った。 その後NOTとNANDだけを用いてANDとORとXORを構成したが、そこにトランジスタは登場しなかった。 NOTとNANDによって存在が覆い隠されたのだ。 この隠蔽は、情報分野における抽象化の連鎖の起点だと(僕は勝手に)思っている。

ところで、物理学と情報科学の違いを考えたところ、情報は抽象化の回数がやたらと多い気がした。 ここで言う抽象化は、扱いやすい量を定義して、低層構造を隠蔽するみたいな感じ。 物理でもくりこみ群を考えたり量子論古典力学の対応を考えることで、この世界のレイヤー間の関係性を探ろうとするけど、層の数はそれほど多くないと思う。 情報はそれどころじゃないぞ。 電子回路図に始まり、MIL記号、加算器やマルチプレクサ、RTL、HDL、機械語ニーモニックカーネルC言語apachephp、webフレームワーク、プラグイン、、、といった具合に果てしなく高い塔が建設されており、今なお成長中という印象がある。

回路図を描くのに使ったのはこのサイト。 ここで遊べば回路がなんとなく分かるようになる。かも。

明日は順序回路、特にエッジトリガ型のD-Flip-Flopの動作原理を書くつもり。 残り23日、頑張ろう。


  1. 図を見れば分かると思うが、僕には絵心やデザインセンスが全くない。

  2. トランジスタに関する雑な説明だったが、本質は外してないと思う。半導体の詳細は全然知らんのだが、トランジスタの挙動を簡単な議論で(手計算で)知りたければ、周期ポテンシャル下のシュレディンガー方程式固有値スペクトル(バンド構造)から出発して、量子統計(フェルミディラック分布)と半古典的な輸送方程式(ボルツマン方程式)を用いて伝導度を求め、ドープされた半導体界面付近の空乏層で輸送係数がどうなるか計算する必要がありそう。特に電圧によるスイッチングを真面目に計算するには、電圧伝導度間の非対角応答を見たいので久保公式が必要かも?バンド構造が簡単なら積分実行できそうやけど、詳細は知らん。実際のSi半導体に関する物性を定量的に予測したければ、計算機で密度汎関数法やるしかなさそう。