4ビットCPUの設計 その3
ここでは,8ビットCPUのK-COMを元に,4ビットCPU設計を行う.命令長は8ビットのままとし,
図1に示すように4ビットのデータを命令レジスタに2回に分けて読み込むことにする.
機械語の構成は8ビットK-COMと同じである.4ビット版K-COMの全体の構成を図2に示す.

図1 4ビットCPUの命令構成

図2 4ビットCPUの構成
命令の読み出し方法が変わったため,フェッチおよび実行サイクルは図3に示すように変更した.

図3 コントローラの動作
この場合,コントローラの回路も変更が必要となる.全部でS0からS5までの6サイクルあるので, 3ビットの記憶素子が必要となる.K-COMの状態遷移回路はPROMとD-FFにより作成されていたが, PROMのアドレスは5ビットしかなく,命令コード3ビットと記憶素子3ビットを入力することはできない.
そこで,命令コードの冗長性から2ビットにエンコードして状態遷移ROMの設計を行った. 具体的には,命令の種類によって実行サイクルが1サイクルと2サイクルに分岐する部分のみの検出を行えばよい. IR7が0なら演算命令で実行サイクルは2サイクル,IR7が1でIR6の否定とIR5のANDが1の時にST命令実行で2サイクル, それ以外では1サイクルとなる.以上から状態遷移ROMの真理値表を表1のように設計した.

そのほか,制御信号にも若干の変更がある.命令レジスタを2回に分けて読み込む際,2個のレジスタを 4ビットずつ用い,それぞれのCE信号を制御したが,制御信号出力用のROMのデータバスにも余りがない. そこで,K-COMの命令レジスタのCE制御信号と状態遷移回路のD-FFの出力を組み合わせて2個のレジスタを それぞれ制御するようにした.
フェッチサイクル制御用ROMの回路も変更した.フェッチにはS0からS3までの4サイクルの出力が必要なため, ROMのアドレス信号を変更し,アドレス0,1,2,3までを有効とし,8ビット版K-COMのS0,S1,S0,S1状態の 制御信号を順に出力するようにROMデータを追加した.
以上の変更を加えて作成した4ビットCPUの全回路は図4である.

図4 4ビットCPUの全回路
CircuitMaker用回路データのダウンロード
![]() ESP32 Wifi Bluetooth開発ボード |
![]() Arduino Nano Every |
![]() Raspberry Pi pico |
![]() FPGA XILINX Artix-7 |