[TD4] CPU構成要素の再確認

移転前のサイトからの転記です。日付は当時のものを使用しています。文言などは若干修正を入れています(7年前なので表現が若くて恥ずかしい……一部修正済み)。


TD4関連記事は4bit-CPU TD4で管理しています。


いよいよ設計も第二ステージです。早く実装したいという “はやる気持ち” を抑えて今日もレイアウト設計を続けます。土日でガッツリ設計して、来週から実装したいと思っています。

さて、TD4はその名の通り4bit CPUなので演算とデータ移動は4bit単位です。4bitの値を記憶するのでレジスタも4bitです。命令のフォーマットは全ての命令が上位4bitがオペレーションコード、下位4bitがイミディエイトデータでです。対象レジスタを指定するビットは無く、命令毎に対象レジスタが固定になっています。以下、CPU構成要素の詳細です。

■CPU構成要素1 レジスタ群
4bitレジスタは4つのフリップフロップ(FF)で構成されており、クロック毎に自身のデータを保持する or 他のFFの値をロードするのいずれかを選択します。このレジスタは2chデータセレクタとFFをそれぞれ4個ずつ入れた4bitカウンタIC(74HC161)のカウンタ機能を殺して実装します。つまり74HC161を4つ実装すれば一先ず4bitレジスタ×4を手に入れることができます。便利!!汎用レジスタはA, Bの2種類なので、残り2つの4bitレジスタは他の機能で使うわけですが。

■CPU構成要素2 マルチプレクサ
4bitレジスタの出力から1bit選択してFFに戻すデータセレクタ×4、つまりマルチプレクサは4chデータセレクタ2回路入りの74HC154を2つ使用します。

■CPU構成要素3 ALUとステータスレジスタ
ALUは4bit全加算器の74HC283を使用します。このALUを転送命令のデータの流れに割り込ませるわけですが、イミディエイトデータを汎用レジスタにコピーするMOV命令時にはマルチプレクサの出力値(ALUの入力値)が加算されてしまうという問題を防ぐため、レジスタ群のレジスタ一つを切断してマルチプレクサへの入力を0000に固定します。出力部が切断されたレジスタはプログラムカウンタとして使用することになりますが、説明は後ほど。ステータスレジスタは一般的なCPUで備えている割り込みフラグなどは管理しません。TD4ではALUのキャリーのみをD-FFで管理します。

■CPU構成要素4 プログラムカウンタ(PC)
Intelなどではインストラクション・ポインタと呼ぶらしいです。そちらの方が随分と分かりやすいと思います。PCは先ほど出力部を切断したレジスタのカウント機能を復活させ、出力を4bitのアドレスバスとしてROMに接続するだけです。これによって命令フェッチが可能になります。

■CPU構成要素5 I/O部分
多くのワンチップマイコンはレジスタとI/Oの構造が同じだそうです。TD4も例に漏れずレジスタと同じ構造なので、またレジスタ群のレジスタ一つを切断します。レジスタの出力部はLEDに繋いでOutputとし、マルチプレクサの入力を4bitDIPスイッチに繋いでInputとする、以上です。

■CPU構成要素6 命令デコーダ
TD4は6bitの信号で全てのデータの流れが制御されるため、オペレーションコード4bitを実行部への指示となる6bit信号にデコードする回路です。真理値表を書いてロジックICの接続を頑張ることになりますが、オペレーションコードが工夫されているため、ORが4個とNANDが3個で可能です。結局、74HC32と74HC10が各1個になります。本書、他のどの理論書よりもカルノー図の作成方法が分かりやすかったです。こういうテクニックは専門書よりも軽い解説の方が分かりやすいです。

命令一覧は前にも紹介した「CPUの創りかた」は、パタヘネ本の次に必読の一冊で紹介されています。データの流れを制御する6bitの詳細は本書を参照してみてください。

一応、レイアウト設計と実装はこの構成要素順に作業していこうと考えています。


created by Rinker
¥3,080 (2024/05/19 00:15:56時点 楽天市場調べ-詳細)