メインページに戻る

メモリの周辺回路には3ステートを使用

全ての命令を16bitと決め、使用するメモリもアドレスバス15bit(内12bit分のみ使用)、データバス8bitと決めましたので、メモリ周りの回路は必然的に下記の概略図の様になります。

メモリ周辺の回路概略案

このような漠然とした回路図(ブロック図)でも、実際にそれを描ける段階になってくると、設計作業も加速しますし、完成後の動作イメージもおぼろげながら見えてきます。

例えば本機は命令が16bitであるのに対しデータバスは8bitですので、命令はメモリから2回に分けて命令レジスタ(IR : インストラクションレジスタ)に格納する必要があります。具体的な手順は下記の様になることがイメージできます。


(1)プログラムカウンタをクリアする(メモリのアドレスに与えられる値は0となる)
(2)メモリの内容を命令レジスタ上位8bitに格納する
(3)プログラムカウンタを1つインクリメントする
(4)メモリの内容を命令レジスタ下位8bitに格納する
(5)プログラムカウンタを1つインクリメントする
(6)命令レジスタ(上位+下位の計16bit)の値に対応する命令を実行する
(7)2から繰り返す

プログラムカウンタとアドレス指定レジスタの切替6番目の「命令を実行する」に必要な回路の詳細は未定ですが、命令実行時にはプログラムカウンタ以外にデータをロードしたりストアする番地を指定するレジスタ(図ではアドレス指定レジスタと記載)が必要です。
 この点を考慮すると、より正確なブロック図は左記の形になります。


さて、ここで問題となるのは、アドレスバスの占有権を切り替える方法です。この図ではスイッチで表現していますが、ここにも何らかのロジックが必要です。40年前なら間違いなくSN74157等のセレクタを使用したのでしょうが、その後3S(3ステート)出力の74シリーズが次々と発表されました。3S出力のTTLを使用すると、バス切替用のTTLが不要になりますから、配線が格段にすっきりします。

しかし、74シリーズの全てが3S化されたのではありませんし、3S化された74シリーズでも入手が殆ど不可能になっているものあります。3S出力の74シリーズを使用すると決める前に、入手可能か否かを十分に吟味する必要があります。

プログラムカウンタに使用するTTLを決める

まず、74シリーズの同期バイナリカウンタで、ロード機能(注1)を持ち、かつ出力が3Sステートのものをリストアップしました。

(注1)プログラムカウンタに対するロード機能は、分岐命令を実装する際に不可欠な機能となります)。

 型名 ビット数  アップダウン  ロード クリア  その他の特徴 
 74LS561  4  Uのみ  同期・非同期  同期・非同期  
 74LS569  4  U/D  同期のみ  同期・非同期  
 74LS691  4  Uのみ  同期のみ  非同期  ラップタイム保持用出力レジスタ付 
 74LS693  4  Uのみ  同期のみ  同期  ラップタイム保持用出力レジスタ付 
 74LS697  4  U/D  同期のみ  無し  ラップタイム保持用出力レジスタ付 
 74LS699  4  U/D  同期のみ  無し  ラップタイム保持用出力レジスタ付 


プログラムカウンタはダウンカウントを行うことはありませんし、クリア機能も合った方が便利ですが、ロード機能でも代用できます。従って上記の6種類のどれでも構わないのですが、何れも500番台、600番台のため、入手可能かどうかが心配です。そこで、主な通販店の在庫を先に調べました。

 型名 秋葉M店  秋葉S店  秋葉W店 東京Z店  横浜T店  川崎S店 
 74LS561  在庫無し  在庫無し  在庫無し  在庫無し  在庫無し  在庫無し
 74LS569  在庫無し  在庫無し  在庫無し  在庫無し  在庫無し    有
 74LS691  在庫無し  在庫無し   有  在庫無し  在庫無し  在庫無し
 74LS693  在庫無し  在庫無し   有  在庫無し  在庫無し  在庫無し
 74LS697  在庫無し  在庫無し   有  在庫無し  在庫無し  在庫無し
 74LS699  在庫無し  在庫無し   有  在庫無し  在庫無し  在庫無し

左記以外にも、Webで丹念に調べると、意外な「穴場」が見つかる可能性は十分あります。

また、価格はかなり割高になりますが、製造中止品、販売中止品を専門に扱う業者もあります。


上記は2011年2月現在です。辛うじて569が入手できました。プログラムカウンタは12bitですので、必要個数は3個ですが、念のため8個購入。また実際には使用しませんが折角なので699も4個購入しておきました。

【どうしても入手不可能な場合】 3Sではない同期カウンタ(74LS161や74LS163)に別途3Sバッファを購入して付加する方法で回避できます。

2013年追記: このRETROF-8の1年後に製作を開始したRETROF-16では、3Sの同期カウンタが入手困難になった為、74LS161と74LS257を組み合わせました。、


命令レジスタとアドレス指定レジスタを兼任させる

プログラムカウンタとアドレス指定レジスタの切替(再掲)左図はメモリ周辺回路の再掲です。

図にはまだ記入していませんが、プログラムカウンタは出力のだけではなく入力線も必要です。この入力はプログラムカウンタの値を変える、すなわち分岐命令を実現する際に必要となります。

さて、このプログラムカウンタへの入力値は、どこの値を接続すれば良いのでしょうか?
「アドレス指定レジスタ」や「命令レジスタ」の出力か、それとも新たなレジスタを用意するか?
いろいろ迷いましたが、最も部品数が少なくなる方法を優先して考慮した結果、「アドレス指定レジスタ」と「命令レジスタ」を一つにし、その出力を「プログラムカウンタ」の入力値にするという結論に達しました。これを図式かしたのが下記の「メモリ周辺回路C」です。

命令レジスタ用TTLとプログラムカウンタ用のTTLの組み合わせ方単純な回路ですが、この回路を適切に制御すると下記の3機能を実現することができます。

(1)プログラムカウンタで指定された番地にあるメモリを8bitずつ2回に分けて命令レジスタに格納

(2)命令オペランド(命令の下位12bit)の値をプログラムカウンタに格納(分岐命令の実行)

(3)命令オペランドの値を、メモリのアドレス指定(ロード、ストア時)に使用


命令レジスタに使用するTTLを決める

命令レジスタに用いるTTLは3ステートの正論理D-FFになります。但し常にロードされるわけではありませんからクロックイネーブル付きが望ましいところです。例によってこの条件に合う74シリーズを洗い出し、パーツショップの在庫状況を調べることから作業を開始します。

 型名 ビット数  clock enable  clock クリア  その他の特徴 
 74LS173  4  L・L  ↑  H(非同期)  
 74LS377  8  L  ↑  無し  3Sではない。別途3Sバッファが必要
 74LS823  9  L  ↑  L(非同期)   
 74LS825  8  L  ↑  L(非同期  3Sコントロールが3入力 

(74LS377の6bit版である74LS378は明らかに不利ですので74LS377が入手可能と判った時点で候補から除外)

SN74LS173は、生産数量が多かったのでしょうかどこの店でも入手は容易でした。SN74LS377も在庫が無い店が目立つものの何とか入手可能な様です。800番台は殆ど入手不可能でした。

ですから、74LS173を4つ使うか、74LS377に別途3Sバッファ(74LS244等)をペアにしたものを2組使うかの二者択一となります。どちらも必要なTTLは4個で差はないのですが、部品数ではなく必配線数で考えると74LS173が有利です。在庫も豊富なようなので今回は74LS173を選びました。

またこの時点でカウンタは4bitのLS569と決まっておりましたので、同じ4bitで入出力ピン対向のD-FFをカウンタと縦に並べて配置することにより配線パターンが単純になるとも考えました。

結局74LS173を20個ほど購入、また使用予定はありませんがLS377も4つほど購入しました。


メインページに戻る