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

幼女でもできる自作CPUチップ (12) 命令デコーダ・データセレクタのLSI向けレイアウト

電子工作 自作LSI

前回の記事

ourfool.hatenablog.com

では、CPUチップ製造前のテストとして、自作ALUチップの実装と評価をおこなった。

 ここから本記事まで半年弱と、だいぶ間が空いてしまったが、「ALUチップ作ってなんか一仕事終えた感がでてきたし放置気味でいいか・・・」などと不遜なことを思っていたわけでは全くなく、次の試作へ向けて存分に力を蓄えていたのである。

 さて、今回はいよいよCPU全体を載せたチップの製造に向けて、各ブロックのレイアウトと検証を進めていく―というか、実のところ既にレイアウト+検証済みなので、それについて後追いで書いておく。

 まず、命令デコーダについて。「(4) 命令デコーダ設計」で書いたとおり、機械語命令をCPU内の各回路ブロックの選択信号へと変換するデコーダ回路を設計する必要がある。ゲートレベルの表現は既に完了しているので、あとはこれをLSI上の実レイアウトにすればよい。今回に関しても、配置配線などという高級な手段は使わず、人力でゲートを配置し手配線する。レイアウトツールには、フリーのレイアウトツールであるGladeを用いる。フリーソフトの割にかなりつよい。というかこれがフリーソフトって何がどうなっちゃってるのというレベルである。しかも質問フォーラムでの対応が非常に丁寧で、日本時間のいつ質問しても速攻で返事が返ってくる。謎。しかしこれからLSIを作る幼女の方にはとてもおススメである。

f:id:ourfool:20170226230735j:plain

 さて、そんなわけで命令デコーダのレイアウトをおこなった。全体図は以下のようになった。

f:id:ourfool:20170226231252j:plain

左端の出っ張った部分にはインバータが5個配置されており、各入力信号の反転信号を生成している。IN0~4と、IN0~4の反転信号の計10信号がそこから引き出され、ずらっと並んだ各ゲートに入力されている。「(4) 命令デコーダ設計」の記事に書いた回路図まんまである。

f:id:ourfool:20170226231606j:plain

 

 続いて、データセレクタについて書く。データセレクタの役割は、3種類のデータ (レジスタA, レジスタB, 外部入力) or 全て0 (つまりGND電位) の計4種類のデータから1種類を選んで出力することであった。

f:id:ourfool:20170226233034j:plain

というわけで単に1bitのマルチプレクサをちょいと工夫して配置してやればよい。まず、単純な2データ1選択信号のマルチプレクサは以下のようになる。

f:id:ourfool:20170226233246j:plain

NMOSとPMOSの相補スイッチを使った形である。で、これを2つ並べ、それぞれの出力をさらにもう一つのマルチプレクサへ入力してやると、4データ入力、2選択信号のマルチプレクサができる。1つ目の選択信号で4データのうち2データが勝者として選ばれ、2つ目の選択信号で優勝者が決まるトーナメント方式、と考えるとわかりやすいかもしれない。

f:id:ourfool:20170226233615j:plain

ここで、SA, SBは選択信号、INA, INB, INIが入力信号、GNDがGND電位を入力する部分である。これで1bitのセレクタができた。なお、3つのマルチプレクサの他に2つのインバータを最終段に加えている。これは、マルチプレクサの非フルスイングな出力をGNDから電源電圧までのフルスイング出力に直してやるためである。トランジスタのON抵抗とかが関係ある(適当)。

 あとはこの1bitセレクタをシンプルに並列に並べてやればよい。とても簡単。

f:id:ourfool:20170226234059j:plain

 デコーダセレクタの検証については、Gladeのノード抽出機能によりCDLファイル (cadence社のソフトに使われているSpiceもどきの回路記述形式) を吐き出したあと、それをSpice形式へ書き直した上でもって、LTSpice (ADSpice) でおこなった。使い慣れないLSI用フリーEDAツールを離れ、Spiceでの検証を始めると、実家のような安心感を覚える。

 以下がそのSpiceファイル。普段Spiceで検証するようなアナログ回路ではあんま見ないクソ長かつクソフラット(階層化されておらず全部MOS)記述である。

f:id:ourfool:20170226234509j:plain

 下はシミュレーション結果。入力電圧を0V or 5Vにして各出力を確認した。

f:id:ourfool:20170226234700j:plain

 さて、今回は命令デコーダとデータセレクタの記述を終えることができた。結果として、下図の青く塗りつぶした部分の設計が完了したことになる。

f:id:ourfool:20170227001555j:plain

チップ内部はあとレジスタとプログラムカウンタを残すのみである*1。ちなみに、諸般の都合でLO10は5bitのCPU (LO5) にまた戻ったが、まあその辺は気にしないで進んでいきたい。やはり、5bit=命令32ステップで優勝できるアプリケーションを考えてこそのエンジニア、だったのだ。そういうことにする。

 

*1:てか、これも実は既に終わってる