クロック周辺の回路設計を始めるも駆動周波数は全く想像できません
設計中のTTLコンピュータの動作周波数(クロック周波数)は全く不明です。コンピュータですから速ければ速い程良いのは明白ですが、限界周波数の見当が付かないのです。
TTL単体での動作周波数の上限は数10MHz程度ですが、ANDゲートやORゲートを何段も重なる所が多々あり、あちこちで相当な信号遅延が生じるのは明らかです。回路設計も論理的に正しく動く様にするのが精一杯で実行速度の高速化の考慮は全く行っていません。 ですから直感的には「運が良くて数MHz程度、運が悪ければ数10KHzでの駆動が限界になるのでは?」と思っています。(2011年3月記)
適切なクロック周波数が不明ですので、完成後も簡単にクロックが変更できる様に水晶発振子を差替方式にしたり、クロック分周器の分周比を可変にする等の工夫が必要です。いろいろと考えていた所、秋葉原の秋月電子にて、クロック周波数の可変化に最適な水晶発振子を見つけました。(ソケット付で200円)。
F端子からは12MHzが出力されますが、D端子は、A~C端子の論理によって12MHzの1/2から1/256の周波数が得られます。(ST端子は発振のON/OFF)
A~C端子にDIPスイッチ(またはジャンパーピン)を接続するだけで、6MHz~約50KHzの可変周波数の発振器が実装できます。
写真のICは12MHz、ピン配置図は16MHzとなっていますが、周波数が異なる一連のシリーズの説明書が共通である為だと思われます。12MHzの製品の場合、発振可能な周波数は12MHzの他に6MHz、3MHz、1.5MHz、750KHz、325KHz、162.5KHz、81.25KHz、40.625KHzです。この中から正常に動作する最高周波数を選ぶ予定です。
1命令が1クロックで実行されるわけではありません。
仮にクロックが1MHzとしても、1つの命令が1クロックで実行されるわけではありません。
例えば加算命令の実行は、これまでに決定したアーキテクチャに基づくと少なくとも6回(6つのマシンサイクル)に分けて実行する必要があります。
これまでに決めたアーキテクチャ(回路概略)
疑問符の所はまだ詳細回路未定。
マシンサイクル | コンピュータ内部で行われること |
---|---|
0 | プログラムカウンタの示すメモリの内容を命令レジスタの上位8bitに格納する |
1 | プログラムカウンタを1つインクリメントする |
2 | プログラムカウンタの示すメモリの内容を命令レジスタの下位8bitに格納する |
3 | プログラムカウンタを1つインクリメントする |
4 | 命令レジスタの下位12bitが示すメモリの内容を命令レジスタの下位8bitに格納する |
5 | 命令レジスタ下位8bitとアキュムレータの内容を加算し、結果をアキュムレータに格納する |
コンピュータの実行速度は、クロック周波数×マシンサイクルで決定します。ですから、クロックを変えずに実行速度を上げたいならば、マシンサイクルを少なくする努力が必要です。例えば上記の表では3番目と4番目は同時に実行することができますので、そのようにすればマシンサイクルを1つ少なくすることが可能です。
他にもパイプラインやアウトオブオーダー(O-o-O)等、先人達が考案した高速化のテクニックは数多くあります。しかし本機の設計においては速度よりも少ない部品数で確実に動く回路を優先しました。
また、8080やZ-80の様に命令の種類によってマシンサイクルを変えることも見送りました。
いろいろ考えた結果、まだ実装する命令一覧は未定ですが、全命令を8ステージで実行することに決めました。言い換えると8ステージ(実質的には6ステージ、詳細は後述)で収まる命令のみを実装することとしました。
MC | コンピュータ内部で行うこと |
---|---|
0 | 何もしない |
1 | PCの示すメモリの内容をIRの上位8bitに格納する |
2 | PCのインクリメント |
3 | PCの示すメモリの内容をIRの下位8bitに格納する |
4 | 命令により下記のいずれかを行う(同時にPCのインクリメントを行う) ・IRの下位12ビットが示すメモリの内容をIRの下位8bitに格納する ・ACCをクリアする ・何もしない |
5 | 命令により下記のいずれかを行う ・ALUの演算結果をACCに書込む(ロード命令・演算命令の場合) ・ACCの内容をメモリに書込む(ストア命令の場合) ・IRの下位12bitをPCに書き込む(分岐命令の場合) ・ACCの内容をLEDに表示する(OUTPUT命令? 詳細未定) ・入力スイッチの状態をACCに取り込む(INPUT命令? 詳細未定) |
6 | ACCの内容をメモリに書き込む場合に備え、アドレス値とデータ値の保持 |
7 | 何もしない |
略称一覧
MC = マシンサイクル
PC = プログラムカウンタ
IR = 命令レジスタ
ACC=演算レジスタ
クロック廻り(クロック周辺回路)の原案
ここまでの考察に基づくクロック周辺の回路原案が下記のCLOCK廻り原案です。 停止/実行を切替えるスイッチ(チャタリング防止のためにRSフリップフロップを介している)が、停止の位置にあるときは、クロック(図の赤い矢印)はLレベルのままです。
スイッチを実行側に倒すと、カウンタはカウントを開始し、 クロックは方形波を出力します。同時に、現在何番目のマシンサイクルなのかがデコーダ(74LS138)の出力として現れます(図の緑色の矢印)。 但しマシンサイクル0番と7番は何もしないため接続はありません。
0番目のマシンサイクルが何もしないになっているのは、スイッチを実行側に倒した瞬間がカウントアップの瞬間とほぼ一致した場合、実質上カウンタは0からではなく1からカウントされるからです。一方、7番目のマシンサイクルが何もしないになっているのは、カウンタを7進にする回路を省略した為です。(カウンタを7進にすると実行速度は8/7=約1.14倍に向上します)
設計もこのあたりになってくると、頭の中では命令の種類や詳細回路の全体像がある程度見えてきました。しかし致命的な設計ミスを起こすのもこの時期だと思います。早く設計を終わらせて製造フェーズに移行したいという焦り(浮き足)がその背景にある為でしょう。特に趣味としての製作の場合は、失敗しても誰にも怒られませんし、誰にも迷惑をかけません。そのせいもあって十分な設計資料も作らずに製造を開始し、あとになって何を作っているのか自分でも判らなくなってしまうことも多々あります。ここは落ち着いて、命令一覧表と詳細回路図を作成し、ミスが無いか否かを十分に吟味しようと思います。(2011年3月20日)