8ビットプログラムカウンタ (PC)
概要
- 目的: 8ビットプログラムカウンタ(PC)は、CPUで次にフェッチ・実行される命令のメモリアドレスを保持する特殊レジスタです。各命令フェッチ後に自動的にインクリメントして次の命令を指すか、ジャンプやブランチ中に新しいアドレスをロードできます。
- シンボル: プログラムカウンタは、クロック、ロードデータ、インクリメント、ロードイネーブル、リセット、出力イネーブルの入力と、8ビット出力アドレスを持つ矩形ブロックで表されます。
- DigiSim.ioでの役割: CPU設計において重要なコンポーネントとして機能し、命令フェッチのアドレスを提供し、順次および非順次実行パターンを可能にすることでプログラム実行のフローを制御します。

機能説明
論理動作
プログラムカウンタは、次に実行される命令のアドレスを維持・更新します。制御信号に基づいて、順次インクリメント、ジャンプやブランチ用の新しいアドレスのロード、または現在の値の保持を行えます。
機能テーブル:
| RST | LD | INC | CLK | OE | 動作 | A0-A7出力 |
|---|---|---|---|---|---|---|
| 1 | X | X | X | X | ゼロにリセット | High-Z |
| 0 | 1 | X | ↑ | 1 | 新アドレスロード | D0-D7データ |
| 0 | 1 | X | ↑ | 0 | 新アドレスロード | High-Z |
| 0 | 0 | 1 | ↑ | 1 | インクリメント | アドレス + 1 |
| 0 | 0 | 1 | ↑ | 0 | インクリメント | High-Z |
| 0 | 0 | 0 | ↑ | 1 | 現在値保持 | 現在のアドレス |
| 0 | 0 | 0 | ↑ | 0 | 現在値保持 | High-Z |
| X | X | X | 0 | X | 変化なし | 前の状態 |
注: ↑は立ち上がりクロックエッジ、Xは「ドントケア」条件を表します RSTは非同期です - アクティブ時、他の信号に関係なく即座にカウンタをリセットします OEはトライステート出力を制御します - 非アクティブ(0)時、全出力がHigh-Z状態になります
入力と出力
入力:
- D0-D7[7:0]: ジャンプやブランチ中に新しいアドレスをロードするための8ビットデータ入力。
- CLK: カウンタ操作を同期する1ビットクロック入力。
- LD: アクティブ時にデータ入力からのロードを有効にする1ビットロードイネーブル入力。
- RST: カウンタを0x00にリセットする1ビットリセット入力。
- INC: アクティブ時にインクリメント操作をトリガーする1ビットインクリメントイネーブル入力。
- OE: トライステート出力を制御する1ビット出力イネーブル入力。
出力:
- A0-A7[7:0]: メモリアドレスバスに接続する8ビットアドレス出力(OEによるトライステート制御)。
ピン配置
入力ピン(左側):
- Pin 0-7: D0-D7(パラレルロード用データ入力)
- Pin 8: CLK(クロック - 全操作を同期)
- Pin 9: LD(ロードイネーブル - パラレルデータロードを有効化)
- Pin 10: RST(リセット - カウンタを非同期的に0x00にリセット)
- Pin 11: INC(インクリメントイネーブル - カウンタのインクリメントを有効化)
- Pin 12: OE(出力イネーブル - トライステート出力を制御)
出力ピン(右側):
- Pin 0-7: A0-A7(メモリバスへのアドレス出力)
設定可能なパラメータ
- リセット値: PCがリセットされる値(通常0x00)。
- クロックエッジ感度: PCが立ち上がりまたは立ち下がりクロックエッジで動作するかどうか。
- トライステート制御: 出力イネーブル信号が出力ドライバをどのように制御するか。
- 伝搬遅延: トリガーイベント後に出力が変化するまでの時間。
DigiSim.ioでの視覚的表現
8ビットプログラムカウンタは、左側にラベル付き入力(D0-D7、CLK、LD、RST、INC、OE)、右側に出力(A0-A7)を持つ矩形ブロックとして表示されます。クロック入力は通常、エッジ感度を示す三角形のシンボルで示されます。回路に接続すると、出力に表示されるアドレス値と接続ワイヤの色の変化を通じて現在の状態を視覚的に示します。
教育的価値
主要概念
- プログラムフロー制御: コンピュータが命令実行のシーケンスをどのように管理するかを実証します。
- アドレッシング: コンピューティングシステムにおけるメモリアドレッシングの概念を示します。
- 制御信号: デジタル信号が順序回路の動作をどのように制御するかを示します。
- フォンノイマンアーキテクチャ: ストアドプログラムコンピュータの基本コンポーネントを紹介します。
- 順序論理: レジスタとカウンタの実践的な応用を実証します。
学習目標
- CPUの命令サイクルにおけるプログラムカウンタの役割を理解する。
- 順次および非順次プログラムフロー(ジャンプ、ブランチ)がどのように実装されるかを学ぶ。
- 制御信号がプログラムカウンタの動作を他のCPUコンポーネントとどのように調整するかを認識する。
- シンプルなCPUアーキテクチャの設計にプログラムカウンタの概念を適用する。
- ビット幅に基づくアドレス空間の制限を理解する(8ビットPC = 256のアドレス可能な位置)。
使用例/シナリオ
- 基本的なCPU設計: 最小限のプロセッサアーキテクチャのコアコンポーネント。
- 命令シーケンシング: 命令実行の順序を制御。
- ジャンプの実装: プログラムフローを変更して順序外の命令を実行。
- サブルーチン呼び出し: サブルーチンへジャンプする前に現在のアドレスを保存。
- ループ実装: 命令シーケンスの繰り返し実行。
- 割り込み処理: 割り込みサービスのためにプログラムフローを一時的にリダイレクト。
技術ノート
- 8ビットPCは直接アドレス可能なメモリを256バイト(2^8ロケーション)に制限します。
- PCは通常、8ビットレジスタとインクリメンタ回路を組み合わせて実装されます。
- ほとんどのCPU設計では、PCは命令フェッチフェーズ中に自動的にインクリメントされます。
- ジャンプおよびブランチ命令は、PCに新しい値をロードすることで通常の順次フローを変更します。
- PC値は通常、命令サイクルのフェッチフェーズ中にアドレスバスに配置されます。
- より高度な実装には、パフォーマンスを向上させるための分岐予測やパイプラインなどの機能が含まれる場合があります。
- より大きなCPUアーキテクチャでは、より広いメモリ空間をアドレスするために、より広いビット幅(16、32、64)のPCが使用されます。
関連コンポーネント
- メモリ(RAM/ROM): PCがアドレスする命令を格納。
- アドレスバス: PCの出力によって駆動されるバス。
- 命令レジスタ(IR): PCが指すアドレスからフェッチされた命令を格納。
- 制御ユニット: デコードされた命令に基づいてPCのINC、LOAD、ENABLE、RESET信号を生成。
- ALU: PCにロードされるブランチターゲットアドレスを計算する場合がある。
- レジスタ: 汎用レジスタが間接ジャンプ用のアドレスを保持する場合がある。