09/02
とうとう4bitcpuが完成いたしました!!長かった・・・。 作った記念にホームページに残しておきたいと思います。
7月始めごろに近藤先生から「cpuのつくりかた」という本を借りて読んだのがきっかけでした。 読んでみるとなかなか面白い。しかも、分かりやすい! それまで電子回路は苦手だったのでかなり理解が進みました。知識も相当増えました(笑)
とりあえず読んで、作るか迷ったけれど、「cpuを作る男のロマン」という言葉に惹かれて、 制作を決意しました。意味の無いものを作るロマンばんざい!というわけで、 近くに電子部品を売っている店はないので、早速通販で買いました。 あと、細いワイヤが欲しかったのでお盆の帰省の時に嘉穂パーツで買いました。
・作成②
お盆から帰って来て8月16日から早速、大学で作成開始しました。 とりあえず、基板の上にicの類を配置 (図1)。
配置は、いろんなホームページを見てその通りにしようと思ってたんだけど、 何せ基板が小さいために、仕方なく配置を変えることにしました。密集してたほうがCPUっぽいし。 ledはたくさん光らせたかったけど、それはcpuが出来てから増設すればいいと思ったので、 とりあえずは設計図通りに作ってみることにしました。
・作成③
配置を決めたので、いろんなホームページ(例: http://www.scn.tv/user/takahisa/td4/index.html)で書いてあったように リセット回路→クロック回路→CPUの部分→ROMの順番で作っていくことにしました。 リセット回路とクロック回路を作った時点で動きを確かめたくて電源を配置しました。 電源は、電池で十分だと思ったので電池4本の直列で代用しました。 電圧は6Vですが完成する頃には5.5Vまで下がりました。 別にこれといった不具合はありませんでした。
リセットとクロックは無難にできました (図2)。 これが出来るころには、ハンダ付けも結構手馴れてました。
・作成④
cpuとromはひたすら配線しました。icの足を付け終わった後に パスコンを付けるのを忘れていたことを思い出して付けたんですが、 ハンダを付けるスペースが非常に狭く、難儀しました。何はともあれ、一週間もかからずに、 配線作業は終わりました。
・検証①
全部できたので、とりあえず動かしてみることにしました。 電源の抵抗を測って1kΩであることを確かめて電池を入れて・・・
・・・・・・・・・・・
・・・・・・・・・・・
・・・・・・・・・・・
私のcpu、ピクリとも動きません。今思えば、これが長い長いcpu作りの始まりでした。 これまでのハンダ付けは作成ではなく、準備だったような気がします。いろんなホームページでは、 一発で動いていたようだったので、自分のcpuが動かないことに愕然としました。
・検証②
とりあえず、裏を見てハンダがちゃんとついているかどうか、確認。 一つ、グランドに落としていないicがあったので付けて、再び確認。
動きません。
もう一度裏をみて、今度は、テキストどおりにパスコンとicが繋がっているか、 そのicに+5vと0vが出ているか確認。大丈夫な模様・・・。 icにクロックが入っていないのか?と思い、オシロスコープで確認。 ちゃんとクロックは入ってるみたい。。。リセットも大丈夫。。。となると、 cpuかromかということで、とりあえず、romが読み出されているか、 74hc540をテスター棒で測って確認。全部は面倒なので、 適当にアドレス0とアドレス11を確認しました。大丈夫みたいだ・・・。 ここまできたら、cpuしか原因はないので、cpuをチェック。考えるのが面倒なので、 全配線をチェックしました。きつかった・・・。
・検証③
配線が取れかかってたりしてたところはあったけれど、誤配線はありませんでした。 とりあえず、チェックした後電源投入・・・。全く動きません
かなりへこみました。
ずっとへこんでるわけにはいかないので、とりあえず、 romがきちんと動いているか確かめるために、緑のダイオードを4つ、 プログラムカウンタの出力に繋ぎ変えて1kΩの抵抗をぶら下げて様子を見ることにしました。 プログラムカウンタの動きが明らかに変です。速さが一定じゃないし・・・。 cpuのボードを揺すると消えたりします。なんですかね、これ。わけがわからなかったので、 この問題は次の日に持ち越しました。
次の日・・・原因が一瞬でわかりました。74hc14がicソケットから外れかかっていました。 きっちり入れなおして電源を入れると、きちんとプログラムカウンタは動いてくれました。 ただ、そんなにcpuを使ったわけではないのに電池の電圧を見ると、結構電圧が下がってる・・・。 消費電力がそんなに大きいのか、ショートさせてるのか・・・ ショートは嫌なので電源にもledをつけることにしました。電源投入すると、 ledがきれいに光っています。現段階で5個のledが明るく光ってる・・・。 ただ、緑のプログラムカウンタのledより、電源の黄色のledが相当明るい・・・。 何でだろうって思ってたら、急に黄色のledから煙が出ました!!!抵抗の付け忘れ・・・。 変なにおいが部屋中にこもってしまったので、この日はこれで終わりました。
・検証④
とりあえず、電源に新しく黄色いledを付けて(抵抗も付けて)、光るledはこれで5個。 出力用に赤いledを新たに4つ付けました。プログラムカウンタのledは、 rom検証の時に非常に役に立ちました。どこのアドレスを読んでいるのか、すぐにわかりました。 romの全チェックはやはり面倒なので適当に4,5個確認。大丈夫だし・・・。 なんでだろうかと悩んでいたら、冷房の風にあおられてページがめくれたテキスト・・・。 ふと見ると、124ページにdipスイッチとビット配列の関係が書いてあり、 それを見てピンときました。dipスイッチの1番には、機械語のlsbから入力しなければいけなくて、 dipスイッチに入力してた数字が、左右反対でした。ということで、 命令を入れなおして電源を入れると・・・
点きました!
・検証⑤
テキスト295ページのサンプルプログラムが動きました。大感動です。 この感動を抑えつつ、297ページのプログラムを動かしてみることに・・・
真中二つ、ledが点いてから、それ以降、ずっと待っていてもプログラムが進みません! またか!と心の中で叫びました。(泣
・検証⑥
プログラムの止まっている箇所は、1001番地の jnc1000。 cフラグが1にならないのかと思いました が、その前のjnc命令は動いているので、非常にわかりずらい・・・。というわけで
再び、全配線チェック。今回は、中途半端に動いているだけに慎重に行いました。 相変わらず誤配線はありません。。そりゃそうだ。途中までちゃんと動いてるし・・・。 というわけで、cフラグの様子を見るために、74hc74のqバーに緑のledを付けました。 動きを見てみると、1001番地の命令でledが光ったまま・・・消えない・・・。 他のjnc命令では消えてたのに・・・ということで、急遽rom探索をすることにしました。
・検証⑦
いろいろ調べてたら、romのアドレス0が実行されてる時、 74hc540にはアドレス1の電圧が出ていることがわかりました。 ということで、1000番地の命令を疑ってみると、確かに電圧が全く出ていませんでした。 私のデジタルテスターでダイオードを測ってみると、全く機能していない模様・・。 ネットワークダイオードを外してもう一度、測ってみると今度は大丈夫らしい。 部品を疑った私のアホでした。おそらく接触不良だったのでしょう。 付け直したら、74hc540に電圧が出ました。電源を投入して、プログラムを実行すると、 ようやく動いてくれました。完成です。ledが寂しかったので、 クロックにもledを付けてチカチカ光らせました。感動です!! (図3)
ついでに、この写真 (図4)
もういっちょ、この写真。しかし、これは恥ずかしい・・・。 (図5)
・感想
このcpuを作るにあたって、いろんなホームページを参考にして作りました。 その中で、完成した後、急に冷めてしまうという意見が多かったですが、 私はこれだけ苦労したので逆にこのcpuに愛着がでました。苦労して作った分、 あまり冷めないみたいです。これ、家宝ですよ。ということで、 これからしばらくは意味もなく1日1回電源入れてしまいそうです。
研究室に戻る