CPU構成要素の再確認

CPU構成要素の再確認

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

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

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

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

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

■CPU構成要素4 プログラムカウンタ(PC)
これ、インテルなどではインストラクション・ポインタと呼ぶんですね。そっちの方が随分と分かりやすいと思います。でもここではPCと呼びます(笑)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個になります。本書、他のどの理論書よりもカルノー図の作成方法が分かりやすかった!!こういう“テクニック”はかる~い解説の方が分かりやすいですね。

命令一覧は前にも紹介したこちらのブログで紹介されています。データの流れを制御する6bitの詳細は本書を参照してみてください。

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

CPUの創りかた

CPUの創りかた

posted with amazlet at 16.01.23
渡波 郁
毎日コミュニケーションズ
売り上げランキング: 10,926