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

幼女でもできる自作CPUチップ (1)

 世に自作パソコンという趣味がある。ATXやら何やらの規格パーツを組み込みオリジナルのパソコンをつくるとのことだ。コストや実用性、製作における満足度を鑑みると、非常によいものなのだろう。

 一方で、自作CPUと呼ばれる趣味もある。専らHDLで記述したCPUをFPGAによって実現するものをいうように思う。こちらはかなり頑張らないと実用的なものは作れない感があるが、どうなんだろう、知らない。

 さて、今回から書いていくのは、上記2つのどちらでもなく、CPUをトランジスタのレイアウトレベルから作ってみようという試みである。あるいはLSIチップをつくると言う方がわかりやすいかもしれない。

 もちろん、それでは実用的なCPUなど作れるわけがない、しかし考えてみると、
自作のロマン≒無駄さではないか?
無駄な自己満足に全力を注いでこその自作趣味ではないか?
いや、そうでもないかもしれないが、とにかく今回はCPUを作る。

 LSIチップをつくるといっても、もちろん自分でシリコンの加工をおこなうわけではない。CPUの仕様を満たすよう回路を設計し、それをチップ上のトランジスタレイアウトに落とし込み、図面データを製造工場に送ることになる。

 具体的には、以下のような設計フローにしたがって製作を進めていくことになるだろう。

f:id:ourfool:20150418225920p:plain

 なんだか自分ワードに溢れているような気がしないでもないが、たぶんこんな感じではなかろうか。

 通常、つまり、企業等でのデジタルLSI設計では、RTL設計からレイアウト設計がほぼ自動で行われる。お高め*1なソフトウェアによって、RTL記述は論理ゲートレベルでの接続に自動変換される。さらに、お高めな設計環境では各ゲートのレイアウトが既にデータベース化されており、それらの配置とゲート間の配線までもが自動的に行われる。

 しかしながら、一介の幼女がそういった環境を持っているはずもない。したがって、今回はRTLでCPU動作の検証をしたあと自力で論理レベル、回路レベルまで持って行く。しかも大変厄介なことにそれらを手作業でレイアウトする。

 そんなわけで、まことに面倒な作業にはなりそうだが、CPUの自作を開始したいと思う。次回はまず、IO、外部クロック回路等々、そして何より、なんか面白いアプリケーション、といったところを鑑みつつ、CPUの仕様を策定していく。フライング気味に言うと、おそらく5bit、数Hz動作のCPUを設計することになるのではないかと思う。

*1:統合環境だと数億円かかるとかいうナニモン感溢れる世界らしい。