読者です 読者をやめる 読者になる 読者になる

幼女でもできる自作CPUチップ (11) 自作LSI(4bit ALU)の実装・評価

 前回の記事

ourfool.hatenablog.com

では、自作ALUの搭載されたLSIチップ用に、プリント基板を設計し、製造をおこなった。

 今回はいよいよこの基板に自作LSIチップを搭載し、所望の機能が実現できるかArduinoを使って検証する。

 まず、QFPを基板に手半田した。64pin、0.5mmピッチということでそれなりに細かい作業にはなるが、フラックスを塗りたくって適当に半田を流しておけばなんとかなる。重要なのはとにかく半田を流し過ぎないことのように感じる。基板のフィニッシュをHASL(有鉛半田レベラー)にしておけば、元々基板側にコーティングされた半田が存在するので、外から流す半田はおまけ程度でよいように思う。

なお、QFPの半田付け時には上図のような基板を固定する器具があると非常に助かる。

 今回作る基板はQFP以外とにかくピンヘッダとピンソケットをつけまくるだけなので、QFPさえ乗り越えればあとはサクサクであった。なお、Arduinoとの接続用ピンソケットについては、ピンソケット 1x8 (8P) リード長15mm: パーツ一般 秋月電子通商 電子部品 ネット通販のような15mmリード長のものを採用した。Arduino上に乗った部品とシールドとの干渉を防ぐためには、深くまで挿入してもシールドと部品類間にある程度隙間の残る、15mmリード長の採用が一番簡便である。

 そんなこんなでついに一通り実装を終えた。実装後の基板は以下のような見た目。

 さて、実装を終えたところで今度はArduinoでの評価用プログラム作成をおこなった。具体的に流した最も簡単なプログラムは以下のようなものである。

gistd484ec560e80761b7191bdceff30e6b7

 ここでピン名のID1-4は4bitの入力データ1、IM1-4は4bitの入力データ2、IS0-2は3bitのALU選択信号、O1-4は4bitの出力データをそれぞれ表している。パソコン上のコンソールにA-Eの文字を打ち込むと、それぞれに対応する、ADD(加算)、SUB(減算)、AND、OR、NOT演算がおこなえるよう、ALU選択信号に相当するピン電圧が決定される。その後、入力4bit+4bitの全パターンをぶん回す。入力データの値と出力データの値は 毎回コンソールに表示される。このあたり、マジで幼女レベルのテストコードなので読めばわかるはずである。

 このプログラムに合うよう、QFPからの出力とArduinoピンを接続した。先ほどの小綺麗な実装から嘘みたいに汚い配線状況となった。

f:id:ourfool:20160922004946j:plain

 その配線チェックを終え、祈るような気持ちでプログラムを動かしたところ・・・・・・・・・・・何か挙動がおかしい。しかも規則性がよくわからない、ヤバい。

 この時点で割と死にそうな心持ちになり一旦きんいろモザイクを読んだ。すると数時間後、電源系のそれらしい接続ミスを発見した。やはりきんモザは神。

 5V電源を与えるべきQFPのピンが複数あると気付いたため、ソケットを増設、ジャンパワイヤでつなぎ直した後、息を呑んでプログラムを動かすと・・・

 

 めっちゃ動作した(勝利)

 

 測定系の全景は以下のとおり、ノートパソコンとArduino、今回自作したシールドさえあれば動作する。もちろん、ALUをコンソールから操作する必要がなければ、5Vの外部電源さえあればOK。流石に動いているのを見ると感無量である。

f:id:ourfool:20160922010245j:plain

 さて、そんなわけで、自作LSIチップを自作基板に実装し、幼女でもわかるプログラムでその機能を検証することができた。自作CPUの作成に向けて、大きな一歩を無事踏み出せた。次回はおそらく実際のCPUレイアウトに向かっていくことになるだろう。今回ALUについて、論理としては問題なく動くことが確認できたので、今後動作周波数や各モード毎のタイミングについて探っていき問題がないことを確認した上で、レジスタ周りやクロック分配回路の設計に入っていくことになる。

 まあ何はともあれ、本記事もひとまずこれにてひと段落ということで、次回のチップ試作へ向けて力を蓄えていきたい。その間、本記事の内容を別の媒体としてまとめることを考えているので、そちらについても興味を持って見ていていただければ幸いである。