PREVIEW
Control Unit

Control Unit

Advanced signal_cellular_alt Advanced schedule 40 min

Interactive Circuit

制御ユニット

概要

  • 目的: 制御ユニットは、DigiSimの8ビットコンピュータアーキテクチャの統括コンポーネントです。プログラムカウンタ、メモリ(RAM)、命令レジスタ、ALU、フラグレジスタ、およびその他のコンポーネントを協調させて完全な命令セットを実行するために必要な制御信号を生成します。
  • シンボル: 制御ユニットは、各種CPUコンポーネントとインターフェースするための複数の入力および出力ピンを持つ長方形のブロックで表されます。
  • DigiSim.ioでの役割: 制御ユニットは、フェッチ-デコード-実行-ストアサイクルを通じてすべてのシステムコンポーネントを適切にシーケンシングおよび制御することにより、完全に機能する8ビットコンピュータの作成を可能にします。

Control Unit component

機能説明

ステートマシン動作

制御ユニットは、以下を循環する4状態有限ステートマシンとして動作します:

  1. FETCH: メモリから次の命令を取得
  2. DECODE: 命令をデコードし、プログラムカウンタをインクリメント
  3. EXECUTE: 命令で指定された演算を実行
  4. STORE: 結果を格納し、必要に応じてフラグを更新

入力と出力

入力(7ピン):

ピン ピン名 タイプ 説明
0 CLK 入力 同期動作用のシステムクロック
1 RST 入力 制御ユニットを初期化するリセット信号
2 OP0 入力 命令レジスタからのオペコードビット0
3 OP1 入力 命令レジスタからのオペコードビット1
4 OP2 入力 命令レジスタからのオペコードビット2
5 OP3 入力 命令レジスタからのオペコードビット3
6 Z_FLAG 入力 条件付きジャンプ用のフラグレジスタからのゼロフラグ

出力(18ピン):

ピン ピン名 タイプ 説明
0 PC_INC 出力 プログラムカウンタのインクリメント
1 PC_LD 出力 プログラムカウンタのロード(ジャンプ用)
2 PC_OE 出力 プログラムカウンタ出力イネーブル(アドレスバスへ)
3 MEM_RD 出力 メモリ読み取りイネーブル
4 MEM_WR 出力 メモリ書き込みイネーブル
5 RAM_OE 出力 RAM出力イネーブル(データバスへ)
6 IR_LD 出力 命令レジスタロード
7 IR_ADDR_OE 出力 IRアドレス出力イネーブル(アドレスバスへ)
8 ALU_OP0 出力 ALU演算コードビット0
9 ALU_OP1 出力 ALU演算コードビット1
10 ALU_OP2 出力 ALU演算コードビット2
11 ALU_OE 出力 ALU出力イネーブル(データバスへ)
12 ACC_LD 出力 アキュムレータロード
13 ACC_OE 出力 アキュムレータ出力イネーブル(データバスへ)
14 FLG_LD 出力 フラグレジスタロード
15 HALT 出力 システム停止インジケータ
16 STATE0 出力 ステートビット0(2ビットステートエンコーディングのLSB)
17 STATE1 出力 ステートビット1(2ビットステートエンコーディングのMSB)

ステートエンコーディング(STATE1:STATE0):

  • 00 → FETCH
  • 01 → DECODE
  • 10 → EXECUTE
  • 11 → STORE

命令セットアーキテクチャ

制御ユニットは、4ビットオペコードによる16命令セットをサポートします:

オペコード Hex ニーモニック 説明 演算
0000 0x0 NOP 無演算 PC ← PC + 1
0001 0x1 LDA addr アキュムレータロード ACC ← M[addr]
0010 0x2 STA addr アキュムレータストア M[addr] ← ACC
0011 0x3 ADD addr アキュムレータに加算 ACC ← ACC + M[addr]
0100 0x4 SUB addr アキュムレータから減算 ACC ← ACC - M[addr]
0101 0x5 AND addr 論理AND ACC ← ACC & M[addr]
0110 0x6 OR addr 論理OR ACC ← ACC | M[addr]
0111 0x7 XOR addr 論理XOR ACC ← ACC ^ M[addr]
1000 0x8 NOT 論理NOT ACC ← ~ACC
1001 0x9 SHL 左シフト ACC ← ACC << 1
1010 0xA SHR 右シフト ACC ← ACC >> 1
1011 0xB JMP addr 無条件ジャンプ PC ← addr
1100 0xC JZ addr ゼロ時ジャンプ if (Z=1) PC ← addr
1101 0xD JNZ addr 非ゼロ時ジャンプ if (Z=0) PC ← addr
1110 0xE LDI イミディエイトロード 将来用に予約
1111 0xF HLT 停止 実行停止

命令フォーマット

ビット位置 7 6 5 4 3 2 1 0
フィールド OPCODE(4ビット) OPERAND(4ビット)
説明 実行する演算 メモリアドレス/値

マイクロコードアーキテクチャ

制御信号の生成

制御ユニットは、各命令を4つの状態にわたるマイクロオペレーションに分解するマイクロコードROMアプローチを使用します。オペコードと状態の各組み合わせが、特定の制御信号セットを生成します。

例: LDA(アキュムレータロード)命令

FETCHステート:

  • PC_OE = 1(PCがアドレスバスを駆動)
  • MEM_RD = 1(メモリから命令を読み取り)
  • IR_LD = 1(命令をIRにロード)

DECODEステート:

  • PC_INC = 1(PCを次の命令にインクリメント)

EXECUTEステート:

  • IR_ADDR_OE = 1(IRアドレスがアドレスバスを駆動)
  • MEM_RD = 1(メモリアドレスからデータを読み取り)

STOREステート:

  • RAM_OE = 1(RAMがデータバスを駆動)
  • ACC_LD = 1(データをアキュムレータにロード)
  • FLG_LD = 1(フラグを更新)

バス制御とトライステート管理

制御ユニットは、各バスを同時に1つのコンポーネントのみが駆動するように注意深くバスコンテンションを管理します:

  • アドレスバス: PC_OEまたはIR_ADDR_OEで制御
  • データバス: RAM_OE、ALU_OE、またはACC_OEで制御

他のコンポーネントとの統合

コンポーネント互換性

制御ユニットは、DigiSimの既存コンポーネントとシームレスに動作するように設計されています:

  • 8ビットALU: 演算コード(ALU_OP0-2)を受け取り、フラグ付きの結果を提供
  • プログラムカウンタ: PC_INC、PC_LD、PC_OE信号で制御
  • RAM(256×8): MEM_RD、MEM_WR、RAM_OE信号で管理
  • 命令レジスタ: IR_LDでロードし、オペコード/アドレスの分割を提供
  • フラグレジスタ: FLG_LDで更新し、条件付きジャンプ用に読み取り(Z_FLAG)
  • アキュムレータ: ACC_LDおよびACC_OE信号で制御

信号タイミング

制御ユニットは、すべてのコンポーネントに対して適切なセットアップ時間とホールド時間を確保します:

  1. アドレスセットアップ: メモリ操作の前にアドレス信号が安定
  2. データ有効: ロード信号がアクティブの時にデータが有効
  3. クロック同期: すべての状態変化はクロックの立ち上がりエッジで発生
  4. リセット動作: 既知の状態への即座の非同期リセット

使用例

簡単なプログラム: 2つの数値の加算

; メモリに格納された2つの数値を加算
0x0: LDA 0x8    ; アドレス0x8から最初の数値をロード
0x1: ADD 0x9    ; アドレス0x9の2番目の数値を加算
0x2: STA 0xA    ; 結果をアドレス0xAに格納
0x3: HLT        ; 実行を停止
...
0x8: 0x05       ; 最初の数値(5)
0x9: 0x03       ; 2番目の数値(3)
0xA: 0x00       ; 結果の格納場所

ループの例: 1から10までカウント

; 0から10までカウント
0x0: LDA 0x8    ; カウンタをロード
0x1: ADD 0x9    ; 1を加算
0x2: STA 0x8    ; カウンタを格納
0x3: SUB 0xA    ; 10を減算
0x4: JNZ 0x0    ; ゼロでなければ戻る
0x5: HLT        ; 完了時に停止
...
0x8: 0x00       ; カウンタ
0x9: 0x01       ; 定数1
0xA: 0x0A       ; 定数10

技術ノート

クロック要件

  • 最小周波数: 教育的な観察のために1 Hz
  • 最大周波数: コンポーネントの伝搬遅延によって制限
  • デューティサイクル: 最適なタイミングマージンのために50%推奨

リセット動作

  • 非同期リセット: 即座にステートをFETCHに設定
  • 信号クリア: すべての制御信号が非アクティブ状態にリセット
  • 停止からの回復: 実行再開にはリセットが必要

パフォーマンス

  • すべての命令: 4クロックサイクル(フェッチ-デコード-実行-ストア)
  • 1秒あたりの命令数: クロック周波数 ÷ 4
  • メモリ帯域幅: 命令サイクルあたり1回の読み取りまたは書き込み

school 学習パス

arrow_forward 次のステップ

help_outline よくある質問

制御ユニットは何をしますか?

制御ユニットは命令をデコードし、すべてのCPUコンポーネントを調整する制御信号を生成します。レジスタの有効化、ALU操作の選択、メモリアクセスの制御を行います。

マイクロコードとは何ですか?

マイクロコードは各機械語命令をマイクロ操作のシーケンスとして実装する低レベルの制御コードで、CPU内部の信号を制御します。

play_arrow 回路を実行する

他のコンポーネントを見る