幼女でもできる自作CPUチップ (7) 論理ゲートのレイアウト

 前回の記事

ourfool.hatenablog.com

では、CPU内で演算機能を担うALUについて、論理ゲートレベルの接続図を示した。

 これで、以前書いたCPUチップのデータパス図のうち、命令デコーダとALUについて、ゲートレベル表現が完了したことになる。

f:id:ourfool:20160702194116j:plain

f:id:ourfool:20160702194139j:plain

こうしてみると大半はまだ未完成と見えるのだが、実のところ設計は既に8割方終了したといってもいい。レジスタ類や出力ポートはDフリップフロップを、データセレクタはマルチプレクサを並列にしたものであり、プログラムカウンタもDフリップフロップを元にしたシンプルな回路であるから、設計の面でほとんど苦労はない。

 今回は、CPUチップ製造に向けた大いなる第一歩として、テストチップ用のレイアウトデータ作成をおこなう。具体的には、前回まで設計を続けてきたALUの、シリコンチップ上における図面を、手描きで作成していく。CPUを製造する前に、ALU単体の載ったチップを作り、実際に測定をおこなって検証しておこう、という魂胆である。

 シリコンチップで集積回路を作るためには、まず、シリコン上の構造物(ポリシリコン・拡散層・金属配線など)の配置を図面データに起こす必要がある。こうしたデータを一般にレイアウトと呼ぶ。

f:id:ourfool:20160702214958g:plain

(Wikipedia "Integrated circuit design"より)

チップ設計者がおこなう作業は基本的にこのレイアウト作成までである。そののち、図面データを元に、パターン生成用の露光マスクを作り、フォトリソグラフィーによって最終的なシリコンウェハの製造をおこなっていくことになるが、これらは半導体生産工場にておこなわれる作業である。

 ディジタル回路は膨大な数のトランジスタから成っている。既に以前の記事で述べたとおり、通常の半導体設計フローでは、ツールによってこれらの膨大なレイアウトを自動的に生成する。一方、一般の幼女はそんな高級なツールを持ち合わせているはずもないので、トランジスタを形成するp型、n型の半導体層やポリシリコン、金属配線の形から何から、全て手描きしていくことになるわけである。

f:id:ourfool:20160702231921p:plain

(Wikipedia "Field-effect transistor"より) 

 現在、LSIチップに集積されているトランジスタの多くはMOSトランジスタである。MOSトランジスタは電界効果トランジスタの仲間で、正確にはMOSFETという。これは、Metal-Oxide-Semiconductor-Field-Efect-Transistorの頭文字をとったものである。上図のようにMetal(金属電極)とOxide(絶縁膜)からなるゲート端子*1、拡散層から成るドレイン端子とソース端子から成っている。

f:id:ourfool:20160702233526g:plain

(Wikipedia "Field-effect transistor"より) 

 MOSトランジスタはざっくりいうとスイッチとして使われている。ゲート端子に加える電圧によってドレイン端子とソース端子間を流れる電流を変化させることができるため、ゲート端子に加わる電圧がHIGHのときON、LOWのときOFFとなるスイッチのように使える。左図はゲート端子に加える電圧Vgを変化させた際の電流の様子を示している。右図は流れる電子の密度で、電圧Vgにしたがって、流れたり(つながったり)、流れなかったり(離れたり)していることがわかる。

 MOSトランジスタにはNMOSトランジスタとPMOSトランジスタの2種類があり、ゲート端子の電圧に対するONとOFFの特性が逆になっている。つまりゲート端子の電圧がHIGHのとき、NMOSトランジスタはON、PMOSトランジスタはOFF、となるわけである。この2種類を組み合わせて作った、よさのある回路構成がいわゆるCMOS論理回路である。NMOSとPMOSを組み合わせると常にどちらかがOFFになるから、電源からGNDに定常電流が流れない、つまり電力効率がよい、というのがそのよさについての雑な説明である。

f:id:ourfool:20160702235052j:plain

(Wikipedia "CMOS"より) 

たとえば、CMOSでNANDゲートを作ると左図のような回路図になり、それはすなわち右図のようなレイアウトになる。こうしてたくさんお絵かきしていくと、なんとCPUが出来る。

 さて、ALUをお絵かきしていくために、まずは、インバータやNANDゲート、NORゲート、マルチプレクサといった基本素子を作った。なにしろ数百個の膨大な数のトランジスタを描いていくので、いきなりALUを描いていくのは無謀というものである。であるからして、まずは基本素子を作り、それをコピペして配置していくわけである。

f:id:ourfool:20160702235727j:plain

インバータ

 

f:id:ourfool:20160702235816j:plain

NANDゲート

 

f:id:ourfool:20160702235831j:plain

マルチプレクサ

 

ここで青い線が金属配線、オレンジ色の部分がポリシリコンによるゲート端子、緑色の部分がn拡散層やピンク色の部分がp拡散層を表している。これだけ描くのもぶっちゃけ相当めんどくさいがまあなんとかなった*2

 次回は、こうした基本素子を組み合わせていよいよALUを作る。ついでに、それらのレイアウトからSpiceファイルを抽出して、回路シミュレーションによる検証をおこなう。というか実は既に検証を終えているのでそれに関して記事をかく。いよいよCPU作りっぽくなってきた(?)。

*1:歴史的には、長い間、導電体のポリシリコン電極が用いられて、数年前から金属ゲートとhigh-k材料を組み合わせたプロセスが広がってきた、で、いわゆる14nmプロセスに突入した現在はもはやどちらでもなく3次元構造の変態仕様になっている。

*2:もちろん、こんなことを著名なメーカの設計者が日常的にやっている筈はない。通常の半導体設計者が使うようなお高いソフトウェアではこれらのような基本論理ゲートはもちろん、簡単な回路のレイアウトは一通り揃っている。