読者です 読者をやめる 読者になる 読者になる

幼女でもできる自作CPUチップ (14) CPUチップのレイアウト

前回の記事

ourfool.hatenablog.com

では、CPUチップの製造に向けて、CPUの各回路ブロックのレイアウトをおこなった。

 ここまでの作業で、CPUに搭載する回路ブロックのレイアウトを全て終えることができた。あとは各ブロックの電源・GND線や、対応する信号線を接続したのち、チップ外部と接続される線を、外周に設けられたボンディングPADと接続すれば、ついに自作CPU、LO5をワンチップ化したものが完成する。

 さて、まずは、各ブロックを適当に配置しよう——としたところで、ふと冷静になってみると、どうもおかしなことに気が付いた。今回試作を想定しているチップの面積はおよそ3mm角だが、PADや外周の電源リングを除くと内部回路に使える面積は高々2.5mm角である。一方、各ブロックの大きさは大きなもので1辺1mmを超える。なんだこのクソデカ回路。終わった。

 そんなわけで、真面目に面積をよくよく鑑みて設計する必要があるとわかり、それぞれの配置は以下のようになった。

f:id:ourfool:20170322000325j:plain

特にプログラムカウンタとALU、出力ポートなどは、事前に配線経路を検討して、最小線幅・線間隔のぎりぎりを攻めて配置した。当たり前だが、ドチャクソ大変だった。

 今回使う2umCMOSプロセスでは、メタル配線がなんと2層しかない。そのため、配線同士が干渉しないよう事前に考え考えして、慎重に配線をおこなわなければならない。LSIにおける配線のごく基本的な戦略として、縦と横で使うメタル配線を分けるというものがある。縦は2層目、4層目、6層目、といった偶数層のメタル、横は3層目、5層目、7層目といった奇数層のメタル、といった風にである。アナログ回路(専ら手配線する)にしろ、ディジタル回路(専ら自動配線するため、使用するメタル層は設定で決める)にしろこれが基本戦術である。なお、今回はそもそも2層しかメタルがないので、まあブロック間のグローバルな配線はどちらかが横でどちらかが縦でいこ、詰まったらそんとき考えよ、といった適当な感じで配線していった。

 まず、レジスタセレクタ、ALUの配線をおこなった。ここはスペース的に余裕があるので、間違いのないよう、兎角、空いた空間を等分割しそれぞれの配線を割り当てる、と意識して引いた。

f:id:ourfool:20170322001818j:plain

 下図は出力ポートとALU、プログラムカウンタの間で、ここが最も難しかった。データバスをそれぞれに接続する上、各々の選択信号を引き出す必要もある。しかしながら、上で示したブロックの配置からわかるとおり、全体の面積削減はここの空間をどれだけ小さく出来るかにかかっている。そのため、最小面積を目指して細かな調整を加えつつ配線した。

f:id:ourfool:20170322002218j:plain

 その後、各々の回路ブロックの電源・GNDを接続し、PADへと接続する配線に名前をテキストで貼り付け、と色々面倒な作業をした末、最終的なレイアウトは以下のようになった。割と感無量である。

f:id:ourfool:20170322002434j:plain

PADへの接続配線の最終的な接続は、チップ試作の都合上、大先生にお願いした。ここで深く感謝いたします。

 さて、そんなわけでなんとか一通りレイアウトを終えた————とかなんか割と順調に終わったように書いてしまったが、実際には相当に過酷、というか無謀な作業であった。予想の10倍の時間がかかったうえ、最終的には締切当日の朝に意識朦朧の中なんとか終えた、ってか終わったのか?これ終わったの?といった有様であった。

 冷静に考えると、ブロック内より遥かに配線量が多い上、・2層しかメタルがなく、・面積にも余裕がない、のだから時間がかかるのは当たり前なのだが、通常手描きしているようなアナログLSI設計では双方ともあり得ない条件だったため、全く見込み違いとなってしまった。結論、ディジタル回路は手描きするべきではない。

 とにもかくにも回路のレイアウトは終えられたが、このままではブロック間に空白が目立ち、そこで密度エラーが生じてしまう恐れがあると、最後の最後に思い至った*1。これを何とか回避するため、最後の力を振り絞って空白にダミーのパターンを挿入し、最終的なチップレイアウトを以下のように得た。

f:id:ourfool:20170322004849j:plain

 さて、そんなわけで、ついに自作CPUであるLO5(Laconic Original 5-bit processor)のチップレイアウト≒製造用マスクデータが完成した。あとは製造を待つばかりである。いよいよ、幼女でもCPUチップが自作できることが証明されるのだ。

 次回はこのチップの測定とその結果について書くことになるはずである。あるいはその前段階で、測定基板の設計や、アセンブラの開発について書くかもしれない。

*1:比較的新しいプロセスだと、製造工程での表面平坦性を確保するために、メタル層の密度をチップ全体で均一にしなければならない、という厳しい設計ルールが存在する。なお本試作は全く遅れたプロセスなので、そんな設計ルールは存在しない。