2010年05月18日

「CPUの創りかた」を読む。感動した!面白すぎる!



2003年の本なんですよね。前から気になってはいたんですが表紙が萌え絵なのが引いてしまっていました。先日、大井町LABI の本屋さんで見つけてしまったので即ゲット。読んでみたら、いやあ面白い。今まで読まなくてホントに損したと思いました。

30日でできる! OS自作入門

と並んでいい出来です。

一度読み終わっただけでは飽きたらず、二度目も読みました。
回路で「演算」するってこういうことか!と良く分かります。

回路図がたくさん出てきます。それをいちいち目で追いかけながら確認しているので、読むスピードは遅いですが、楽しんでいます。
「転送の途中に演算回路があれば演算命令に化けるだけです。言い換えれば、演算命令は転送命令の一種、ということになります。(略)要するにCPUというのは転送命令を繰り返すだけのロジックなわけです。」(「Chapter 7」より)

なるほどー。

データの保存はフリップ・フロップ。あとは膨大なスイッチ群。

そういえば、Mark I はリレーの組み合わせでしたし、ENIAC で使われている真空管はリレーを「電子的に」置き換えただけ。その後のトランジスタも真空管とまったく一緒。

なるほどねぇ。


このCPU・TD4(りあえず、動作(うさ)するだけのbitCPU、だそうです)、ロジックの基礎がみんな入っています。そして動作するため最小限の「ワンボードマイコン」になっています。

RAMはありません。レジスタのみ。それはフリップ・フロップ回路の組み合わせ。

ROMは?ディップスイッチなんですよねー。「え、スイッチが ROM?」と最初思いましたが、「ON」か「OFF」かを「保存」するのですからディップスイッチでいいんですよね。しかも書き換えられるし。


二度目は最終ゴールが分かった上で飛ばすところは飛ばし、全体からの部分としての回路を詳しく読み直しています。

写真は汚いですが私の書き込み。
CPUの創りかた書き込み.jpg

MOV A,B

つまりBレジスタの内容をAレジスタにコピーしている瞬間の回路を追い掛けているところです。
「えっと、74HC161 は入力が負理論だから電圧 L で読み込み(LOAD)、電圧 H で保持。LOAD0だけ L で残りの LOAD1〜3 はみんな H だから、Aレジスタだけ『転送』で後のB・C・Dは『保持』。セレクタの select A が H で、select B が L だから、74HC153 でスイッチングされて2番目である 1C1 と 2C1 の2つの配線が選ばれる。74HC153 は二つあるから、合わせて4本。これは、Bレジスタの 4bit分 が選ばれたことになる。これが出力されて、さっきのAレジスタに転送されるわけだから、結局Bレジスタの内容がAレジスタに転送(コピー)され、他のレジスタは『保持』信号がきているからそのまま記憶が維持されるわけか」(n_shimizu の心の声)

なんていうことを確認しています。

後で出てきますが、これが ROM 上にある命令

0001 0000(2) つまり 10(16)

という命令(MOV A,B)を受け取ったら回路がこのように働くように、
LOAD0、LOAD1、LOAD2、LOAD3、select A、select B

が、
H、L、L、L、H、L

という信号が来るようにしなければならない。これが命令デコーダの役目になります。

これも昔むかし、私が中学生の頃に CPU のザイログ社製(Intel8080互換の)Z80 やモトローラ製 6800 などを学んで機械語プログラミングをハンドアセンブルでやったことがあるから感覚的に「面白い」んでしょうねぇ。昔取った杵柄ですね。



「命令デコーダ」の設計がまた面白い。よく次のように言います。

「CPUのやっていることは以下である。

メモリから読み込む
命令を解析する
演算する
メモリに書き出す

これだけだ」


と。チューリングマシンそのものですが。

この「解析する」がいまいちピンと来なかったんです。今まで。マシン語レベルの単純なものを何解析する必要があるんだって。

でも、この 4bit CPU のたった12種類の命令でも、回路にそれを落とし込むには真理値表がすごいことになるんですよ。条件分岐を二つと数えると13パターンに対して、どのレジスタを読み込むのか、イミディエートデータとどう演算処理をするのか、もうややこしい!

これを上手に設計して(この本は見事です)「命令」にしたがった動作をさせるか。

本を読んで震えるほど感動しました。


ただ、実際に作った猛者のブログをみると、製作時間40時間〜100時間ぐらいかけているので、ちょっとむりかなーと。VBAでエミュレータを作ってみようかなと少しばかり考えています。


最後に本を読みながら調べた参考サイトを載せます。


【本関係】
* CPUの創りかた
oo http://www.amazon.co.jp/dp/4839909865
oo MYCOM BOOKS - CPUの創りかた
oo 正誤表(ただし2007年の12刷ではほとんど直っている)
oo サポートページ(TD4エミュレータなどがダウンロードできる)
* SIESTA(作者のページ・ほとんど情報無し)
oo 自作機博物館 ・ その2( 2004年2月) (←TD4の作者オリジナルが)
* 最近のコンピュータ書籍は面白い――著者の個性を前面に打ち出す - 記者の眼:ITpro
* CPUの創りかた関連(という名のページ)
oo CPU の創りかたファンページ
* Wataru's memo(2003-10-02)(読む前の書評?)
* Wataru's memo(2003-10-04)
* Wataru's memo(2003-10-11) ←絶賛。この内容なら世界に通用する
* Wataru's memo(2003-10-16)(74HC181 注文)


【作成記】

* CPUを創りました! 第16回 CPUの創りかた報告 - toyosystem
oo 同ページの動画
* TD4 4bit CPU 製作奮戦記
* TD4製作日記
* CPUの創りかたを参考にTD4を作ってみた‐ニコニコ動画(9) (↓の方の製作記。写真のみ)
* CPUの創りかたを参考にTD4を作って動作させてみた‐ニコニコ動画(9)(本を読んでから見ると感動!)
* 4BitCPU製作
* Rogue Engineer's Diary / やさぐれ日記 [CPUの創りかた] ← ざっと見たところ一番詳しい作成日記
oo ELM - 基板の配線テクニック(参考)
* TD4 互換機の製作 - Kiの研究部屋(普通に作った後、リレー回路でも作っている。すごすぎ)


【ハードウェアエミュレータ】

* AVR製作No12_擬似CPUの創りかた


【FPGAやハードウェア言語など】

* CPUの創りかた TD4 を Spartan-3A で - 言語ゲーム (山宮隆の日記)
* MAX II マイクロキットで「CPUの創りかた」 - Sim's blog
* TD4をSFLで書いてみた。 - eggmanの日記
* 設計例 TD4互換 - CPUを作ろう 〜シミュレータと論理ICによる計算機教材〜 - 楽天ブログ(Blog)

【データシート】

* ALLDATASHEET.JP - 電子部品、半導体、IC、ダイオード、トライアックのデータシートの検索サイト
posted by n_shimizu at 21:28| Comment(0) | TrackBack(0) | 日記
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/38254552

この記事へのトラックバック