2017年5月4日木曜日

logisimでTD4を再現したお話(ポエム)

※この記事はポエムです.

1.概要

  先週の日曜日に『CPUの創り方』という本を購入して,イッキ読みしました.本に乗っていた4bitCPU(TD4という名前がついている)を作ってみたいなぁと思いつつもお金がない…….

  ただ手を動かさないと身につかないなと思ってlogisimという論理回路シミュレータを使ってTD4を再現してみました.

  この下に作った過程とかを適当に書いていくつもりです.ただ僕は論理回路の授業を受けたことが無い意識の低い大学生ですので内容はお察しください.でもそんな高校レベルの知識しかない人が数日でCPUが論理回路シミュレータ上で作れるようになってしまったので,なかなかすごい本でした.

  作った回路はGitHubにあげてあります→ここ

2.概観

  こんな感じになりました.下のGIFは「カウントする→16になったら点滅を繰り返す」というプログラムを実行しているGIF動画です.
  ちゃんと動いてる!!!!!!嬉しい!!!!!!実装するにあたって本を参照しながら実装したので当たり前といえば当たり前ですが.

  ちなみに左上のICがデコーダ,真ん中のでっかいのがレジスタ,真ん中の下にあるやつがROM,右のICが4bit全加算器です.これらのICは論理素子とDフリップフロップ回路で自分で作りました(エッヘン).ただ,さっきググったら74シリーズのICのデータがまとまったライブラリみたいなやつがあるらしいので後からやるときはそっちを使う予定です.

3.レジスタ部分

  こんな感じです.でかい上にあまりきれいな配線じゃないですがそのへんはDone is better than perfectと発声すると問題なくなるらしいです.どーんいずべたーざんぱーふぇくつ!!!!!!
  一応かるく説明しておきます.真ん中の4つあるやつは4bitレジスタです.AレジスタBレジスタはプログラムから読み取れます.Cレジスタは出力用,Dレジスタはカウンタになってるのでプログラムカウンタ用です.SELECT A,Bでどのレジスタのデータを取ってくるかを分岐させます.Load XXはレジスタXXの値を更新するかしないかを決めています.

4.全加算器

  論理回路をならってないので全加算器も実装したことなかったです.なので勉強がてら実装しました.下図のFAは1ビット全加算器でこれも一応お手製です.
  最下ビットに下からの繰り上がりようのCarry_inピンを作ったおかげで8bit全加算器もこれを使って簡単に作れました.

5.デコーダ

  ROMからよみとった命令を具体的な処理に置き換えるイメージです.命令からどのレジストリを使うかとかを指定させます.これは本のまんまで実装しました.
  「XXの命令が来たときはLOAD_Aを1にして……」みたいなことをやっています.カルノー図とか初めてみたので感動しました……が実際に手を動かして設計したわけじゃないので何かで練習するつもりです.

6.ROM

  正直ROMが一番難しかったです.logisimにはROMが用意されているのですが,使ったら負けみたいな気持ちがあったので自分で作りました.ただ本で紹介されたROMの回路は大量のスイッチを読み取る"""電子回路"""なので"""論理回路"""とはだいぶちがいます.そのため論理回路として作らなければいけなかったのですが大変でした.
  これがその回路です.
  汚い配線……!どーんいずべたーざんぱーふぇくつ!!どーんいずべたーざんぱーふぇくつ!!指定したアドレスのデータだけをAND回路を使って取り出して出力しています.右のでかいやつはOR回路をまとめただけなので気にしないでください.それにしても不格好……しかも書き込みが大変です…….

  ハンドアセンブルは仕方ないのですが,全部を0クリアをする際に「マウスでクリックして0を押して……」を延々と繰り返すのは大変だったので自動スクリプトを書きました.さっきのGitHubのところにあります.Python最高!

7.全体を通して感想

  CPUを作るのは楽しかったし動いたときには嬉しかった.CPUはなんか不思議な力で動いてるんだろうなぁという印象しかなかったので実装できてよかった,本当に良かった.人類が滅亡して科学技術の多くが失われたとしても,僕がいればCPUを復活させられるという自信を得ました(?).

  こういう「○○作りたい!」というのは子供のときからの夢です.ズッコケ三人組という本を昔読んでいたのですが,その中に平賀源内と会う話があります.三人組は電卓というものが未来にはあるという話を平賀源内にします.すると平賀源内はそれを作ってくれと言います.しかし電卓の仕組みなんかは一般人にはわからないなぁ……どうやって動いてるんだろう……という一節があります.そういうときにものを作れる人間になりたいなぁとずっと思ってきたのでとても良い経験でした.

  『CPUの創り方』を読むまではCPUなんて一部の本当に専門の人しか作れないと思っていたのだけど,そんなことは無いと教えてくれたし本当にいい本でした.もちろん複雑なCPUはさすがに無理だとは思いますが,とにかくいい本でした.とりあえず次はOSとかコンパイラが作れるようになることが当面の夢かもしれないですね.本当に最高の時間を得ました……GW初日は最高の1日でした…….