汎用ロジックTTLのみでコンピュータを作る   

RETROF-16H 部品実装(3)

Copyright © 2014 T.GATARO All Rights Reserved.

部品実装(1)はこちら  部品実装(2)はこちら


「RETROF-16三部作の比較」(別窓で開きます)はこちら

「汎用ロジックでコンピュータを作る」のトップページ(目次)はこちら   管理人のメインページはこちら

主メモリ実装準備(2014-4-13)

画像は2014年4月13日の早朝の状態です。右上に主メモリ用のICソケットが1つだけ実装されています。このソケットは28ピンありますが、全てのピンに正しい信号が来ている確認まで完了しています。

すぐにでも主メモリを実装して先に進みたいのですが、この時点で回路の設計ミスが多々見つかっており、基板の裏面には回路修正用のジャンパ線が数本発生しています。
当初作成した回路図と基板上の実際の配線も乖離してきたので、実装は一休みして回路図の方をレビジョンアップしました。
そのため、実装そのものはあまり進んでおりません。

最新の回路図はここで公開しています(別窓で開きます)


画像中の緑の丸いシールを貼ったテープは、片側未配線のワイヤーを邪魔にならないように仮止めするためのものです。粘着力の弱い塗装用のマスキングテープを使用しています。
赤い丸のシールを貼ったテープは、TTLをまだ挿していないICソケットを保護(丸ピンソケットなので、ハンダくずなどが挟まったりすると取れなくなる危険がある)するためのものです。

主メモリの実装(2014-4-15)

メモリを実装したところです。最下段にあるプッシュスイッチとトグルスイッチを操作することによって、0000~FFFF(16進)の任意の番地に0000~FFFFまでの任意の値を書込む事が出来ます。この書込みはソフトウエアではなくハードロジックで行うので、CPU周辺の配線やTTLの実装が未完でも書込み試験が可能です。

本来ならば全ての番地に対して全ての値を書き込む試験が必要なのですが、トグルスイッチの操作のみでそれを行うのは時間的に不可能ですから、AAAA番地と5555番地にAAAAと5555の両方を書き込んでみて正しく記憶されればとりあえずOKとします。

左の画像はAAAA番地に5555を書き込んだ所です。下のトグルスイッチは0000になっているので、LEDの表示は主メモリが値を記憶することにより維持されていることが判ります


ハンダボールについて

ここで言うハンダボールとはハンダ付けの際に何らかの原因で目的外の所へ飛び散るハンダの微小球を意味します。細心の注意を払いながら作業すれば、ハンダボールはまず発生しないのですが、28ピンのICソケットを4つまとめてハンダ付けするという単調な作業であったため、TVを観ながら行う等、少々慎重さに欠けてしまいました。あちこちに飛散してしまった様です。

画像中のスケールの目盛は1mm間隔です


上記の画像は2枚とも主メモリのICソケットの近傍に「着地」し、パターンを短絡させたハンダボールを捉えた所です。ハンダボールによる短絡は99%隣接するランドとラインの間で起こります。ルーペによる目視チェックに加え、テスタを発信音による導通チェックモード(短絡していれば「ピー」となるモード)にして怪しい所を確認することにより発見しました。

この時点での記録

基板重量=310g。使用した糸ハンダ=6m(0.8mmΦ有鉛)。消費電流=392mA(全LED消灯時)/489mA(全LED点等時)。

インストラクションレジスタの実装(2014-4-17)

演算関係(ALU、アキュムレータ、フラグレジスタ等)とUSB(ホストPCとの通信用)以外は全て実装を完了しました。但しICソケットのみの実装でTTL本体はまだ挿していない所もあります。

画像の中心よりやや左上に見える丸い緑色のシールを貼ってあるのが、インストラクションレジスタ(74LS377)を挿すソケットです。まずはここに正しい信号が来ているかの確認です。

ここから先は実際にコンピュータを動作させながら試験を進めます。
まずは検査対象となるICソケットにブレッドボード用のワイヤを挿し、ワイヤの反対側をオシロのプローブに繋げます。

左の画像では緑のワイヤが74LS377のクロック、赤のワイヤが74LS377のロードイネーブルに接続されています。(オレンジはGND)

回路設計のミスや、結線ミス、あるいは断線や短絡等がなければ、一定周期でロードイネーブルがLになり、そのLの期間の真ん中で一回だけクロックが立ち上がる筈です。
この「クロックが立ち上がる瞬間」がインストラクションレジスタが命令を受け取る瞬間となります。


観測波形

これが実際の観測波形です。下がロードイネーブル信号で、上がクロックです。パスコン等の実装によるノイズ対策はまだしていないので、波形がかなり「揺れ」ていますが、設計どおりの信号が出ています。
実際に74LS377を挿し、メモリの0番地に任意の命令コードを書き込みRUNすると、その命令コードがインストラクションレジスタに転写される筈です。
しかし次の瞬間には次の番地の命令コードが転写されますので、現時点では完全な確認は困難です。とりあえず、正しく動いていると仮定して次に進みます。

画像中の横軸は1目盛は100nsです。ロードイネーブル信号は第1ステージの間(296ns)Lになります。全ての命令は5.5ステージ(1.63μS)で実行されます。但しこれは試験時の実行速度であり、パスコン等の実装後は更に速い速度での動作を目指します。


 

 とんでも無い間違い

インストラクションレジスタの実装時に74LS37774LS373を間違えてソケットに挿してしまうという大ポカをしてしまいました。部品の整理を乱雑にしていたのと急速に悪化した老眼が直接の原因です。

ICの挿し間違いは過去にも何度かあり、大抵はすぐに異変に気付くのですが、今回はピン配(各ピンの位置や機能)が殆ど同じであった為、全く気付きませんでした。
当然ながら正常には動きません。設計ミスか配線だと信じ込み、テスターやオシロと格闘すること数時間、気付いた時には朝になっておりました(4/16)


画像は74LS37374LS377のピン配(テキサスインスツルメント社のHPから引用)

シングルステップ実行装置と表示機能付TTL(2014-04-20)

左の画像は演算関連(ALU、アキュムレータ、フラグレジスタ)以外の実装が完了した所です。(一部はまだ、ソケットのみの実装です)。
ここから先は何かを新たに実装する都度、1クロック単位で内部状態を確認する必要があります。
しかし実行時のクロックは数MHzですから、テスタやオシロは勿論、ロジックアナライザを用いても内部状態を追うのは大変です。
そこで手動で1クロックずつ状態を進めるスイッチ(シングルステップスイッチ)が必須となります。前作(RETROF-16改)ではこのスイッチは基板上に設置していましたが、今回は基板面積が足りないため、本体とは別に作成しなければなりません。

シングルステップ実行装置の作成

シングルステップスイッチと言っても、スイッチにRSフリップフロップを取り付け、チャタリングを吸収するだけの代物です。
試験完了後は不要になる品ですので、お菓子(フリスク)のケースや、割れたユニバーサル基板などで作りました。

使用したスイッチは以下です。(リンク先は秋月電子、別窓で開きます)
押しボタンスイッチ http://akizukidenshi.com/catalog/g/gP-05453/ へのリンク
ロータリエンコーダ http://akizukidenshi.com/catalog/g/gP-05762/ へのリンク


完成したシングルステップスイッチを本体に接続し、試験している所です。1つの命令は11クロックで処理されますので、押しボタンスイッチを11回押す都度、プログラムカウンタが1つ進む事を右上のLED(プログラムカウンタの値を表示している)で確認する事ができます。
また、ロータリーエンコーダースイッチは1回転で24クロックを発生しますので、1回転で約2命令分、状態を進めることができます。前作は押しボタンスイッチだけでしたので、多数のクロックを発生させると指が疲れましたが、今回はこのロータリーエンコーダースイッチの利用により、大量のクロック供給が著しく楽になりました。

表示機能付きTTLの作成

シングルステップ実行ができても、内部状態を確認する手段がなければ状態遷移の検証はできません。ロジアナを毎回毎回接続するのは面倒ですから、要所要所にLEDを設置して状態(真理値)を観察します。
但し、デバッグ用のLEDを設置するパターンは基板には用意してませんから、TTLの背中にLEDを接着剤で貼り付け表面実装用の抵抗で配線したものを「確認装置」として使用します。

画像は前作でも用いた状態確認LED付き74LS377です。側面に保護抵抗を配しています。


 
画像は、ステージデコーダ(74LS138)のΦ0~Φ5出力にLEDを取り付けた後、基板に実装した所です。6つ並んだLEDの下に、保護抵抗(表面実装用チップ抵抗、6.8KΩ)が6つ並んでいるのが見えます。

手動式のクロックと、基板上の主要ポイントに設置したLEDにより、内部の状態が手に取るように判ります。これにより正しく操作しない命令(機械語命令)があったとしても、その原因を解明するのが著しく簡単になります。ソフトウェアで言う所のprintf()文に相当すると言えるでしょう。



HALT命令動く!(2014-4-24)

やっと、コンピュータらしい試験ができる様になりました。まずはHALT命令の確認からです。
単に停止するだけの命令ですが、この命令が無事動くという事は、プログラムカウンタ、主メモリ、インストラクションレジスタが等が正しく連動している事を意味します。コンピュータの作成における一つの山場と言っても過言ではないと思います。

HALT実行の簡単な回路解説

以下はHALTに関連する接続のみを抜粋した回路図を元にした解説です。(インストラクションレジスタのロード信号とクロックの接続は省略しています)

74LS161は、実行状態(RUN=H)にするとリセットが解除され、0,1,2,3とクロックに同期してカウントが進みます。
カウント出力は74LS138でデコードされ、値が12になると2がロードされます。(0→1→2→3→4→5→6→7→8→9→10→11→12→2→3→4...と進む。この2から12までの11クロックが1命令分に相当)

インストラクションレジスタは上記の値が2から3になる瞬間に、プログラムカウンタで示される主メモリ内容(=機械語命令)がロードされます。この値が40H(HALT命令)であった場合、カウント出力が8になった瞬間に、74LS32の出力がLになり、74LS161はカウントを停止します。これがHALT命令による停止(より正確には実行凍結)です。

HALTの機械語コードは 010X_XX0X_XXXX_XXXX です(Xは任意)。このコードの上位8bitがインストラクションレジスタに格納されます。
検証では0400HをHALT命令コードとして与えたので、インストラクションレジスタの値は回路図の上から下の順に 01000000 となります。


まだまだ続きます。

RETROF-16Hの部品実装(その4)へ進む

 
RETROF-16Hの部品実装(その1)へ戻る  RETROF-16Hの部品実装(その2)へ戻る