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

RETROF-16H 部品実装(2)

Copyright © 2014 T.GATARO All Rights Reserved.

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

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

CPUブロックの実装開始

画像は液晶モニタへの表示回路の実装を終えた所です。
次はいよいよ、CPUを含むコンピュータ本体の実装です。

ここでも、回路全体を細かいブロックに分割し、各ブロック毎に実装と試験を行う手法で作業を進めます。

本件の回路図はここで公開しています(別窓で開きます)ので、具体的な回路を知りたい方はこちらも参照願います(注)

(注)回路図は4月8日に修正した論理設計の不具合の修正前の物です。動作をお約束する物ではありません。あくまでも「御参考」です。この点を御理解の上、参照願います。最新版も近日中にUP予定ですがいつになるかは不明です。


出力ポート兼バス監視用LEDの実装(2014-3-27)

32個のLEDの実装です。この32個のLEDは上段の16個がアドレスバスに、下段の16個がデータバスに74ALS563を介して接続されています。

74ALS563は8bitのラッチです。このラッチの本来の役割は出力ポートレジスタの形成であり、CPUが「出力命令」を実行する際にのみラッチされます。つまりソフトウエアから見た場合、32個のLEDは単なる出力デバイスにすぎません。
しかし、ハードの組立中はこのラッチを強制的に「スルー(つつぬけ)状態」にしています。これによりハードの組立中は、このLED群がアドレスバスとデータバスの状態監視用LEDとして機能します。

74563にALSを用いたのはLSが入手困難だったためです。より正確に言うとLSの74563は実際には殆ど製造されていない品です。筆者自身も74LS563の現物は見たことがありません。


左の画像の右端にある赤い四角の部品が74ALS563のラッチコントロール信号を切断するためのスライドスイッチです。切断すると、74ALS563のラッチコントロール信号入力ピンは無接続状態になり、LS(ALS)ファミリーの性質上と見做されます。74ALS563はコントロール入力がHだと、入力信号を出力信号に渡すだけの単なるバッファとして機能します。


前述のスライドスイッチを切断状態にしてSWを電源を投入したところです。アドレスバス、データバスにはまだ何も接続されていないので、バスは全てHと見做されLEDは全て点灯します。

LEDは抵抗内蔵タイプを使用しています。1つあたり点等時は3.7mAを消費しています(出力-VCC間の実測値)。74ALS563の出力の吸い込み電流は最大24mA(メーカー公表値)ですので、ドライブ電流は余裕です。



入力ポート兼手動プログラミング用トグルスイッチの実装(2014-3-29)

16個のトグルスイッチの実装です。このスイッチ群は入力バッファ74ALS257を介データバスに接続されます。

74ALS257は2組の4bit入力があり、2組の一方を選択する機能をもつ3Sバッファです。この74ALS257を4つ並べ、16bitの入力ポートを2ch分確保します。
片方のチャネルは基板上の16個のトグルスイッチに直結されており、ソフトウエアはこれらのトグルスイッチを入力デバイスとして認識できます。
また、プログラム停止時はこの16個のトグルスイッチの操作で、主メモリに任意の値を書き込む事ができます。

画像左下のテープ群は、制御回路が未実装のため、まだ配線できない信号線を「仮止め」するためのものです。


トグルスイッチの状態が常時データバスに出力される様に74ALS257のコントロール信号線を仮配線し、下段のLEDを常時データバスの内容を表示する様に設定すると、トグルスイッチのON/OFFでLEDを点灯/消灯できます。画像はトグルスイッチをAAAAH(=1010_1010_1010_1010b)に設定し、同じ値がLED上に表れることを確認しているところです。


DMAコントロールについて

本機RETROF-16Hは、ROMを実装しません。このためプログラミングはソフトウエアではなく、ハードウエアで基板上のトグルスイッチと主メモリのデータ入力線を直結する事により実現します。この様にCPUを介さずに直接主メモリを制御する方法をDMA(Direct Memory Access)と言います。1970年代頃までは「DMA」と言えば、この様に「手でスイッチを操作してプログラミングをする事」の意味で使われるのが主流でした。しかし近年はDMAを利用した様々な回路が実用化され、「高速でデータ転送をする手法」という意味に誤解されている方や解説サイトも散見されます。
しかし「DMA」には「高速」という意味はありません。人間が直接手でメモリ内容を書き換える機能も立派な「DMA機能」です。

使用したトグルスイッチについて

使用したトグルスイッチは、1個80円の小型安価品です。製造元資料によるとON/OFFの耐用回数は40000回とあります。
つまり1000ステップ程度の機械語プログラムを100回ほど行うと「壊れてしまう」のです。
前作ではこれを避ける為に1個600円ほどの高級トグルスイッチを使用しました(耐用ON/OFF回数100万回以上)。しかし、USB接続でWindowsパソコン経由でプログラミングをする機能を設けたことにより、基板上のSWはプログラミング用というよりは、ハードウエアの試験用という位置付けになりました。
そこで、今回は使いずらさや耐用回数の問題があるのを承知の上で、あえて1個80円の小型安価品を使うことにしました。

内部クロックと実行制御回路の実装(2014-3-30)

かなり配線が複雑になってきました。TTL1個単位で実装と試験/確認を同時に行う手法(ハードウェア的アジャイル手法)で作成しているため、まだ未実装の回路に接続される配線をとりあえずHに吊ったり、Lに落としたりする「仮設配線群」が基板上に多数あります。

さて、画像の右端(青色付箋紙)にプログラムカウンタ74ALS569を挿すためのICソケットが1つありますが、ここに74ALS569を挿す前にこのソケットの各ピンに必要な電源や信号が届いているかをテスタで調べて「安全」を確認する必要があります。

しかし、この時点ではまだ74ALS569に与えるクロックを生成する回路がまだ実装されていないという点です。

そこで、プログラムカウンタの実装前に、プログラムカウンタに与えるクロックを生成する回路を先に実装します。プログラムカウンタへのクロックは画像表示回路と胸中の基本クロックである27MHzを74LS393で1/4に分周し6.75MHzを作成します。それをステージカウンタ74LS161に与え、そのQA出力(3.375MHz)をプログラムカウンタのクロックとします。プログラムカウンタのカウントイネーブル端子は、GNDにとりあえず直結します。
更に実行と停止を指定するプッシュスイッチを実装し、74LS279(RS-FF)や74LS32(OR)等を組み合わせ、実行時にのみステージカウンタがカウントを行う様にします。


左はプログラムの実行を制御するためのプッシュスイッチ群の拡大画像です。「プログラム実行」と「プログラム強制停止」、それと外部(ホストコンピュータ)に制御を渡すための「リモートプログラム」の3つのスイッチが並びます。このスイッチも前述のトグルスイッチ同様、1個120円の安価品です。半田付けだけでは『グラグラ』したので、3つのスイッチを連結するプレートを取り付けています。


ステージカウンタとは

RETROF-16Hは全ての機械語命令を11クロックで実行します。この11クロックをカウントするためのカウンタがステージカウンタです。
コンピュータの世界におけるステージという言葉には統一された意味は無い様です。むしろ「電子計算機理論」等の教科書によく現われる「フェッチフェーズ」とか「実行フェーズ」等の言葉で使われるフェーズ(あるいはサイクルステートなど)を使った方が良いかもしれません。しかし、これらとは微妙に意味合いが異なるので、RETROFシリーズではステージカウンタと呼ぶことにしています。
尚、全ての機械語命令は11クロックで処理されますが、RETROF-16Hでは2クロックを1ステージとし、計6ステージ(最終ステージのみ1クロック)で各命令を処理します。(詳細はタイミングチャート編を参照←別窓で開きます)

プラグラムカウンタの実装(2014-3-31)

画像はプログラムカウンタ(PC)を実装し、RUNスイッチを押した所です。
PCが激しくカウントしています。PCの出力はアドレスバスに接続されていますので、バスに接続されているLEDで値を確認する事ができます。しかし速すぎて目視できません(画像では中途半端に光っている様に見えます)。

本来、PCは機械語命令を1つ実行する度に1つカウントアップすべき物です。しかし、この時点ではPCのカウントイネーブルが「常にカウント」に仮配線されているため、PCの内部クロック(27/8MHz)と同じ速度でカウントアップしています。最も点滅の遅い左端のLEDでもクロックの1/65536の速度、すなわち約51Hzで点滅してます。これでは人間の目には常時点灯にしか見えません。ですからここは周波数カウンタやオシロという機械の眼を借りて、正しい速度で点滅していることを確認します。

画像はアドレスバスの最上位bitの周波数を実測した結果です。上記の計算より若干低い値が表示されています。これはRETROF-16Hは1命令を11クロックで処理しますが、最後の1クロックの期間は主メモリの書き込みを保証するための待ち時間(wait time)であり、この時間はプログラムカウンタやレジスタ群に与えるクロックを停止しているからです。この影響で周波数カウンタの値は10/11されて表示されます。
(補正した計算値は、27MHz÷8÷65536÷11×10=46.8167Hzとなり、実測値と一致します)


手動プログラミング用スイッチの実装(2014-4-03)

トグルスイッチの操作で主メモリの内容変更(DMAプログラミング)を行うのに必要なスイッチ群の実装画像です。先日実装した「RUN」「STOP」「REMOTE」に加え、
「ADRS-UP(現在のアドレスを+1する)」
「ADRS-DOWN(現在のアドレスを-1する)」
「ADRS-SET(トグルスイッチの値をアドレスとする)」
「WRITE(現在のアドレスにトグルスイッチの値を書き込む)」
の4つのプッシュスイッチが増えています。
主メモリは実装していないので、実際にはまだプログラミングはできませんが、理論的にはこの4つのプッシュスイッチと16個のトグルスイッチがあれば、OSはもちろん、ソフトウエアが無くてもプログラミングが可能です。

プッシュスイッチが機構的に不安定(グラグラする)のを防ぐ為に取り付けたプレートは、小さなユニバーサル基板を切って作成しました。プラスチックの板やアルミ板でも良いのですが、ユニバーサル基板を使えば、穴あけの位置を決める手間が省けます。
尚、そのままでは基板と同じ色で雰囲気が出なかったのでプラモデル用のペン型マーカー(商品名:ガンダムマーカー)で着色してみました。


アドレッシングレジスタの実装(その1)(2014-4-4)

アドレッシングレジスタの実体は、74LS173を4つ並べた16bitのD-FFです。(インデックスレジスタや非演算子レジスタも兼務しているので、本サイトでは「多目的レジスタ」と記述している所もあります)。
回路的にはデータバスの内容をアドレスバスに伝える位置に有ります。

このレジスタはDMAプログラミングを行う際には、データバス上にあるトグルスイッチの状態をアドレスバス上にあるプログラムカウンタに渡す伝達役となります。これによりプログラミング時に主メモリに対する「16bitのアドレス値の指定、同じく16bitのデータ値の指定、計32bitの指定」を、16個のトグルスイッチのみで操作可能にしています。

以下は不具合略報(2014-4-8記)

上記画像の右半分の中段に8つのTTLが見えます。この8つの内、上の4つがプログラムカウンタ(74LS569)で、下の4つがアドレッシングレジスタ(74LS173)です。しかし、よくみると74LS173は挿入されておらず、ソケットだけであることがお判りいただけると思います。
RETROFシリーズの実装は、まずICソケットのみを半田付けした状態で通電し、ICソケットの各ピンに設計通りの電圧や信号が来ていることを確認してからTTLを挿入しています。これまでもこのチェックで数回異常を発見しましたが、全て「半田付不良」か「ジャンパ線の接続ミス」でした。しかし今回初めて回路設計自体の誤りを発見しました。このため基板の銅箔パターンを一部カットしたりジャンパー線を追加するなどの小細工が必要となりました。
不具合の内容や具体的な解決策は話が長くなるのでここには記載しませんが、「どうすれば、現実的な小細工で修正ができるか?」を考えるだけで丸3日費やしてしまいました。また、修正自体も、銅箔面のパターン8箇所のカットと、基板銅箔面にショットキーバリアダイオードを3本とジャンパ線を2本設置という「大手術」となりました。これにより「4月中に1+1=2を実行する」という日程はかなり厳しくなりました。

画像左
不具合の状況を確認する為にTTLに接着剤で固定したLEDと保護抵抗。毎回テスタやロジアナで確認するのを回避する為の裏技。

画像右
回路(論理設計)修正のため銅箔面に設置したショットキーダイオード。
型番はBAT43。Vfが一般のショットキーダイオードの半分のダイオードでANDゲートを構築している。

 

アドレッシングレジスタの実装(その2)(2014-4-9)

超ポカに起因する不具合の回路修正も無事終わり、トグルスイッチと押しボタンスイッチの操作で、アドレスバスとデータバスの状態を自由に設定できる様になりました。
画像はアドレスバスの状態をAAAAhに、データバスの状態を5555hにし、その状態をLEDで確認している所です。

主メモリを実装し、この状態でWR(書き込み)信号を与えると、理論上はAAAAh番地に5555hが書き込むまれる筈ですが、理論と実践(実戦?)は別物ですから、まだどうなるかはまだ判りません。

画像左の青色LEDは電源投入確認用の仮設です(実際には点滅しています)。

この時点での未実装IC一覧

主メモリ(HM65256×4)、アキュムレーター(74LS395×4)、グラフクック回路インタフェイス(74LS245・74LS541×2)、
演算ユニット(74LS382×4)、演算種別コードデコーダ(74LS138)、外部インタフェイス(74LS382×4
インストラクションレジスタ(74LS377)、インストラクションデコーダ(74LS155×2)、
フラグレジスタ(74LS379)、フラグセレクタ(74LS151)、USBインタフェイス(FT245・74LS367)。

まだまだ続きます。

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

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