一般的なこと

トランジスターCPU、NAND6TRの全回路図

2015年6月21日

半導体としてトランジスターのみを使ったCPUを作成中。NAND6TRと名付けている。写真は、クロック作成部まで完成したところ。
2015-06-21-IMG_0866_s.jpg

NAND6TRは、RISCアーキテクチャのCPUで、演算がNANDと左シフトだけであるのが特徴。レジスターは6ビットの物が4つ。命令は2ワード固定(12ビット)で、以下の通り。
00ddyy iiiiii: (yy)とiiiiiiiiのNAND値を(dd)に代入
01xxyy yyyyyy: (xx)を左シフトし(MLBは1)、キャリーがあればyyyyyyyy0にジャンプ
10ddyy zzzzzz: (yy)と(zzzzzz)のNAND値を(dd)に代入
11xxyy dddddd: (xx)と(yy)のNAND値を(dddddd)に代入

アドレスラインは9ビット(512 ワード)であるが、RAMとして使えるのは、最後の64ワードのみ。4つのレジスターのうち、1つ(R0)は、RISCにありがちな特殊な物。NOP命令を実行するとR0=111111となり、この値を維持しなければならない。

トランジスターとしては、MOSFET-Nの、2N7000を用い、基本的に10 kΩでプルアップしてある。現在の設計では、使用トランジスターは651個で、インテル4004と比べても3分の1以下の数。

回路図の作成には、Quartus II 9.0 SP2を使用。以下に、このCPUの全回路図を示す。PDFファイルは、こちら。

まずは、全体像(クリックで拡大表示)。クロック処理部、プログラムカウンター、命令処理部、一時レジスター及び演算部、外部アクセスアドレス作成部からなる。
2015-07-27-nand6tr.png

以下は、NMOSで作成したラッチ。
2015-07-27-latch.png

Dタイプのフリップフロップ。
2015-07-27-ff.png

カウンターを構成するための、Tタイプフリップフロップ。キャリーアウト、ロード機能付き。
2015-07-27-tff.png

クロック処理部。この記事最初の写真では、この部分の回路が完成している。
2015-07-27-clock.png

クロック処理部のシミュレーション結果は以下のようになる。実機でも、予想通りの動作であることを確認した。
2015-07-27-clocksim.png

発振器からのシグナルを12分周して、6つのステップに分けて処理している。それぞれのステップにおける動作は、次のように設計した。
step #STP0STP1STP2STP3STP4STP5
data linemnr2op(op)r1res
address linepc1111111yypc111op1111111xx1111111xx or 111op
00ddyy iiiiiifetch mnfetch r2nand to r1res to Rxx
01xxyy yyyyyyfetch mnfetch r2fetch opshifted to r1res to Rxx
10ddyy zzzzzzfetch mnfetch r2fetch opnand to r1res to Rxx
11xxyy ddddddfetch mnfetch r2fetch opnand to r1res to (op)
ただし、mn:ニーモニック、op:オペランド、r1:一時レジスター1、 r2:一時レジスター2、res:結果。

プログラムカウンター。上記のTタイプフリップフロップを8つ繋げて実装してある。なお、アドレスラインは9ビットだが、最下位ビットにはカウンターは不要で、STP0かSTP2かを判断して出力している。
2015-07-27-pc.png

外部アクセスアドレス作成部。アドレスラインは別途、プルアップされていることに注意。
2015-07-27-address.png

命令処理部。ニーモニック及びオペランドを記憶する回路。
2015-07-27-code.png

一時レジスター及び演算部。ここでの一時レジスターは、ラッチを用いて形成されている。左上、12個のNMOSにより6つのNAND回路を形成している部分が、いわゆるALUに相当する部分で、NAND6 CPUではNAND演算だけである。その少し右あたりは、データーが1ビットずつずれて処理されており、左シフトに相当する。
2015-07-27-registers.png

メモリー読み出しシグナルを作成するための簡単な回路。なお、メモリー書き込みシグナルは、クロック処理部から出力される"/L5"と、同一である。
2015-07-27-read.png

データーライン及びアドレスラインのプルアップ回路。実機では、10 kΩでプルアップしておくだけでよいのだが、Quartus IIでのシミュレーションではその様な回路が組めないので、代替のものである。
2015-07-27-pullup.png

コメント

コメントはありません

コメント送信