2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

「CPUの創りかた」のTD4を少しアレンジして作ってみた

Posted at

概要

 「CPUの創りかた」のTD4で使用されているロジックICとは一部異なるものを使用して互換CPUを製作してみました。この記事では便宜的に「TD4alt」と呼ぶことにします。

主な相違点

TD4 TD4alt
レジスタ 74HC161(4bitカウンタ) * 4個 74HC174(Dフリップフロップ) * 3個
プログラムカウンタ 74HC161の機能を利用 74HC283を使用
レジスタの出力選択 74HC153(4チャネル2回路) * 2個
SELECT AとSELECT B
74HC157(2チャネル4回路) * 3個
S0とS1
レジスタの入力選択 74HC161の/LOADピン
/LOAD0~/LOAD3(負論理)
74HC157のSELECTピン
T0~T3(正論理)
ROM 8回路DIPスイッチ * 16個 SRAM SRM2B256LMX55 * 1個など
命令デコーダ 一部で3入力NANDを使用 2入力のAND/ORとNOTを使用
プログラム入力モードに対応
ブザー あり なし

レジスタと入出力選択

 TD4altで使用する74HC174にはDフリップフロップが6回路入っているので、これを3つ用いてレジスタA・B・OUT・PC・CFを構成しました(1回路余ります)。また、74HC157を用いて入出力制御を行いました。どの様な配線になっているかを模式的に表した図を以下に載せます。

TD4alt簡易図-clipping-reg.png

ROM(というかプログラムメモリ)

 TD4altではSRM2B256LMX55という32キロバイトのSRAMをROMとして16バイトだけ使用します。まずは配線の模式図をご覧ください。

TD4alt簡易図-clipping-mem.png

 このSRAMは以下の様に動作します。

  • A3:0でアドレスを指定する
  • D7:4とD3:0でデータの入出力を行う
  • /OEがLowの間、指定アドレスのデータが出力される
  • /WEがLowになった時に指定アドレスにデータが入力される

 各スイッチの役割は以下の様になります。プログラムを入力する時以外は全てOFFにする必要があります。

  • SW2をONにするとプログラム入力モードになる
  • DIPSW-8で入力データを指定する
  • SW1で指定アドレスに指定データが入力される

プログラム実行時のROM周辺の流れ

  1. CLKがHighになる
  2. /OEがHighになりSRAMからのデータの出力が無効になる
  3. 同時にPCレジスタから次のアドレス信号が入力される
  4. CLKがLowになる
  5. /OEがLowになりSRAMから次のデータ(命令)が出力される
    (下位4bitはIm3:0からALUへ、上位4bitはOp3:0から命令デコーダへ伝わる)

プログラム入力時のROM周辺の流れ

  1. DIPSW-8で命令コードをD7:4とD3:0に指定する
  2. SW1を押して/WEをLowにして指定したデータをSRAMに書き込む
  3. 手動でCLK信号を送り、PCを次に進める

 入力時は、SW2によってWRITE信号がHighのため、74HC125(3ステートバッファ)がD7:4の命令コードを遮断し(High-Z)、Op3:0は代わりにGNDに繋がって信号は全てLowになります。WRITE信号のNOTとのAND回路でも十分かと思いますが、便利そうで買ってしまった74HC125にしました。

命令デコーダ

 TD4altでは2入力のAND/ORとNOTで代用しました。また、負論理の/LOAD0~3ではなく、正論理のT0~3で出力レジスタを指定するのと、プログラム入力モード(WRITE信号)があるため、TD4とはちょっとだけ違う回路になっています。模式図を以下に示します。

TD4alt簡易図-clipping-dec.png

 プログラム入力モードにおいては、入力した命令(特にジャンプ命令)が即座に実行されては困りますので、Op3:0を強制的にLowにしています。Op3:0が全てLowの時、もしWRITE信号がLowであればT0がHighになり「A ← A + Im」が実行されますが、WRITE信号がHighであればT0~T3が全てLowになり「A + Im」が実行されるだけでどのレジスタにも代入されません。唯一CF(キャリーフラグ)を保持するレジスタが影響を受けますが入力時の動作に問題はありません。

 また、結果論ですが、ANDが4回路、ORが4回路、NOTが5回路となり、各ロジックIC1個ずつに収められました。

さいごに

 これまで電子工作はブレッドボード上でマイコン使ってセンサーを読んで7SEGで表示くらいのことしかやったことがなく、未だにろくに回路図も書けないなかで、いきなりアレンジしたものに挑戦しましたが、なんとか無事ゴールできました。実は当初8bitCPUにいきなり挑戦するつもりでしたが、TD4altでもブレッドボードもワイヤーもジャンパーピンも色々な部品を買い足す必要があって、念のため4bitCPUにしておいて良かったです。

 CPUの仕組み自体は「CPUの創りかた」だけでなく「コンピュータの構成と設計」などでつまみ食いして分かった気になってましたが、実際に作って動かしてみると感動もさることながら、夢と配線の広がりが尋常ではないですね。

 また、勢いでDE10-Liteも買ってしまったりしましたが、今はとりあえずTD4altをユニバーサル基板で実装しようと作業を進めています。何か特筆すべき点があったら記事にしたいと思います。

ふろく

CPUの創りかた - 渡波 郁
回路図エディタBSch3V - 水魚堂
 

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?