NANDがあればなんでもできる その1
この記事はkivantium Advent Calendarの1日目です。
このAdvent Calendarについて
トランプ大統領の誕生により、核戦争で文明が崩壊するリスクが高まっています(脳内設定)。また、巷では空前の異世界転生ブームが巻き起こっているため、いつ異世界に飛ばされてもおかしくありません。
そのような事態に備えて一人で文明を再構築できる知識をつけるために我々は日々勉強に励んでいるわけですが、現代文明を作るためにはコンピュータの知識が欠かせません。 そこで、このAdvent Calendarではコンピュータの中核となるCPU作成に必要そうなハードウェアの知識についてちまちま書いていきます。 毎日更新できるとは思っていませんし、12/25で終わるとも思っていません。
スタート地点
さて、CPUを作成するにあたって、文明崩壊後ないし転生先の技術レベルを設定しないといけないわけですが、とりあえずここではトランジスタは既に発明したものとして話を進めていくことにします。 ここより低レイヤーの技術から作っていくとなると情報の勉強とはかけ離れてしまうので泣く泣く妥協します。
MOSFET
トランジスタにはいろいろな種類がありますがここでは今の集積回路でよく使われるMOSFETを取り上げます。
半導体は導体と絶縁体の中間くらいの低効率を持つ物質で、シリコンが代表的です。 シリコンにPやAsなどの5価元素を加えると結合に使われずに余った自由電子が電荷を運ぶようになります。これをN型半導体といいます。逆に、BやAlなどの3価元素を加えるとホール(自由電子が存在しない部分。相対的に正の電荷を持っているように見える)が電荷を運ぶようになります。これをP型半導体といいます。
MOSFETはゲート・ドレイン・ソースの3つの端子を持つ部品で、p型とn型の二種類があります。n型MOSFETの構造は以下のようになっています。(図はWikipediaのものを改変したもの)

ゲートはシリコン酸化膜(絶縁体)上の金属に接続されていて、ドレイン・ソースはN型半導体につながっています。
n型MOSFETのゲートに高い電圧を掛けるとP型半導体の電子が引き寄せられ、その結果ドレイン・ソース間に電流が流れるようになります。

p型MOSFETはN型とP型が逆になった構造をしていて、低い電圧を掛けると電流が流れるようになります。 現在の半導体技術でよく使われるCMOSはだいたいn型とp型のMOSFETの組み合わせでできています。

のようになっています。
以降の話には
のような働きをするということだけ覚えておけば十分です。
なおデジタル回路で「高い電圧」といったら5Vや3.3Vなどで、「低い電圧」は0Vのことを指します。高い電圧をH(ハイ)、低い電圧をL(ロー)と表記することが多いです。 Hに対応する電圧をVccやVddと言い、Lに対応する電圧をGNDやVssといいます。
NANDゲート
デジタル回路では情報を0と1のみからなる2進数で表現することがほとんどです。 通常はHを1、Lを0に対応させます。
計算を行うために使う基本的な回路をゲートと呼び、NOT・AND・ORなどがあります。 ゲートには入力と出力があり、入力が与えられると出力が一つに決定します。 入力と出力の関係を表すために使うのが真理値表で、以下のような形をしています。
A | B | Y |
---|---|---|
0 | 0 | 1 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
一番上の行は入力Aが0・入力Bが0のとき、出力Yが1になることを表していて、他の行も同様です。
この形の真理値表を持つゲートをNANDゲートといい、このゲートの組み合わせであらゆるゲートを作れることが知られています(完全性)。 NANDをCMOS回路で実現する回路は以下の通りです。(図はWikipediaより引用)
n型MOSFETは1のときに導通し、p型MOSFET(丸が付いている方)は0のときに導通することを考えると、この回路は確かにNANDの真理値表の通りの動作をします。
一例として、A=1, B=0の場合を考えると、Aにつながっているn型トランジスタはスイッチON、p型トランジスタはスイッチOFFのような状態になります。逆に、Bにつながっているn型トランジスタはOFF、p型トランジスタはONになります。したがって上の回路はイメージとして
のような状態になります。 このときOutにはVddの電圧がそのまま表示されるので出力はHになります。
AとBのどちらかが0であればVddに直結し、AとBが両方1でないとVssに直結しないことを考えると確かにこの回路でNANDを実現できていることが分かります。
トランジスタからNANDゲートを作れることが分かったので、次回はNANDゲートを使って他のゲートを作る方法を紹介します。