メモリアドレスレジスタ (MAR)
概要
- 目的: メモリアドレスレジスタ (MAR) は、読み書き操作のためのメモリアドレスを保持する8ビットレジスタです。CPU内部のアドレスソース(プログラムカウンタ、命令レジスタ)と外部メモリアドレスバスの間のバッファとして機能し、アドレス信号の適切なタイミングと隔離を可能にします。
- シンボル: MARは、8ビットデータ入力バス、クロック(CLK)入力、ロードイネーブル(LD)制御信号、および8ビットアドレス出力バスを持つ矩形ブロックで表されます。
- DigiSim.io での役割: アドレス生成とメモリアクセスを分離するCPU設計の必須コンポーネントとして、適切なバスタイミングを可能にし、8ビットコンピュータアーキテクチャにおける複雑なアドレッシングモードをサポートします。

機能説明
論理動作
メモリアドレスレジスタは、ロードイネーブル(LD)がHIGHの場合にCLK信号の立ち上がりエッジで8ビットのアドレス値をラッチします。この設計は、DigiSim 8ビットコンピュータアーキテクチャの他の同期レジスタと一貫しています。ラッチされると、新しいアドレスがロードされるまで、アドレスは出力ピンに継続的に駆動されます。トライステートコンポーネントとは異なり、MARは常に出力を駆動します。
機能表:
| CLK Edge | LD | 動作 | A0-A7 出力 |
|---|---|---|---|
| ↑ | 1 | 新しいアドレスをラッチ | D0-D7 入力データ |
| ↑ | 0 | 保持 | 前のアドレス |
| - | X | 保持 | 前のアドレス |
注: ↑ はCLK信号の立ち上がりエッジを表します 新しいデータをラッチするには、立ち上がりクロックエッジでLDがHIGHである必要があります 安定したアドレスバスを確保するため、出力は常に駆動されます(トライステートではありません)
入力と出力
入力(合計10):
- D0-D7[7:0]: 新しいアドレスをロードするための8ビットデータ入力(バス入力)。バス入力として構成されており、トライステートバッファを通じて複数のソースが駆動できます。
- CLK: クロック入力(立ち上がりエッジトリガー)。LDがHIGHの場合、CLKの立ち上がりエッジでデータがラッチされます。
- LD: 1ビットのロードイネーブル入力(レベル感度)。新しいデータをラッチするには、立ち上がりCLKエッジでHIGHである必要があります。
出力(合計8):
- A0-A7[7:0]: メモリコンポーネント(RAM/ROM)に接続される8ビットアドレス出力。これらの出力は常に駆動されます(トライステートではありません)。
ピン配置
入力ピン(左側):
- Pin 0-7: D0-D7(データ/アドレス入力 - バス入力)
- Pin 8: CLK(クロック - 立ち上がりエッジトリガー)
- Pin 9: LD(ロードイネーブル - レベル感度)
出力ピン(右側):
- Pin 0-7: A0-A7(メモリへのアドレス出力)
設定可能なパラメータ
- 初期値: 電源投入時のアドレス値(通常0x00)。
- エッジ感度: CLK信号の立ち上がりエッジトリガー(LDがHIGHの場合)。
- 伝搬遅延: CLKの立ち上がりエッジから安定した出力までの時間。
DigiSim.io での視覚的表現
メモリアドレスレジスタは矩形ブロック(128×192ピクセル、8×12グリッド)として表示されます:
- 左側に8つのデータ入力ピン(D0-D7)、relativeY: 0.16667〜0.75
- 1つのクロック入力ピン(CLK)、relativeY: 0.83333
- 1つのロードイネーブルピン(LD)、relativeY: 0.91667
- 右側に8つのアドレス出力ピン(A0-A7)、relativeY: 0.25〜0.83333
コンポーネントラベル「MAR」が中央に表示され、「ADDR」がアドレスレジスタとしての役割を示します。入力ピンはバス入力として示され、複数のトライステートドライバを受け入れることができるより太い接続ポイントで示されます。
教育的価値
主要概念
- アドレスバッファリング: 適切なバスタイミングのためにアドレスがソースからどのように隔離されるかを示します。
- エッジトリガーラッチ: クロック/制御信号のエッジでデータがどのようにキャプチャされるかを示します。
- バスアーキテクチャ: CPU設計におけるアドレスバスとデータバスの分離を示します。
- メモリアドレッシング: コンピュータアーキテクチャの基本概念です。
- パイプラインステージ: MARはフェッチ・デコード・実行パイプラインのステージを表します。
学習目標
- メモリ操作におけるアドレスレジスタの役割を理解する。
- アドレスバッファリングが複雑なメモリアクセスパターンをどのように可能にするかを学ぶ。
- メモリアドレスのセットアップおよびホールドのタイミング要件を理解する。
- CPUメモリインターフェースの設計にMAR概念を適用する。
- 複数のアドレスソース(PC、IR、ALU)が単一のメモリアドレスバスをどのように共有できるかを理解する。
使用例
- 命令フェッチ: ROM/RAMから命令をフェッチする前にPC値をMARにロードする。
- データロード/ストア: データメモリアクセスのためにIRからのオペランドアドレスをMARにロードする。
- 間接アドレッシング: ポインタベースのアクセスのためにALUからの計算アドレスをロードする。
- スタック操作: プッシュ/ポップ操作のためにスタックポインタ値をロードする。
- DMA操作: ダイレクトメモリアクセスのために外部アドレスソースが値をロードできる。
8ビットコンピュータでの統合
DigiSim 8ビットコンピュータアーキテクチャにおいて、MARは中央アドレスバッファとして機能します:
┌─────────────────────────────────────────────────────────────┐
│ ADDRESS SOURCES │
│ ┌────────┐ ┌─────────────────┐ ┌──────────────┐ │
│ │ PC │ │ IR │ │ ALU │ │
│ │ (8-bit)│ │ (4-bit address) │ │ (computed) │ │
│ └───┬────┘ └───────┬─────────┘ └──────┬───────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌───────────────────────────────────────────────┐ │
│ │ TRI-STATE BUFFERS │ │
│ │ (controlled by Control Unit) │ │
│ └───────────────────────┬───────────────────────┘ │
│ │ │
│ ▼ │
│ ┌───────────┐ │
│ │ MAR │◄──── LD (from CU) │
│ │ (8-bit) │ │
│ └─────┬─────┘ │
│ │ │
│ ▼ │
│ ┌──────────────┐ │
│ │ RAM / ROM │ │
│ └──────────────┘ │
└─────────────────────────────────────────────────────────────┘
制御信号
制御ユニットは特定のマイクロコードステップ中にMAR_LD信号を生成します:
- FETCHステート: 次の命令を読み取るためにPC値をロード(CLK立ち上がりエッジでMAR_LD=1)
- EXECUTEステート: メモリ操作のためにオペランドアドレスをロード(CLK立ち上がりエッジでMAR_LD=1)
CLK信号はすべての同期コンポーネントと共有されるシステムクロックです。
技術ノート
- MARは命令レジスタの4ビットアドレス出力と比較して、完全な8ビットアドレッシング(256バイト)を可能にします。
- バス入力により、明示的なマルチプレクシングなしに複数のトライステートソースを接続できます。
- 立ち上がりエッジクロックトリガーにより、グリッチのないクリーンなアドレス遷移が保証されます。
- メモリアクセス中に安定したアドレスバスを維持するため、出力は常に駆動されます。
- メモリの読み書き信号をアサートする前にMARをロードする必要があります。
- タイミングクリティカルな設計では伝搬遅延を考慮する必要があります。
- クロック入力(CLK)はMARを他のCPUコンポーネントと同期させます。
関連コンポーネント
- プログラムカウンタ (PC): 命令フェッチ中のアドレスの主要ソース。
- 命令レジスタ (IR): メモリ操作のためのオペランドアドレスを提供。
- RAM: MAR出力によってアドレッシングされるランダムアクセスメモリ。
- ROM: MAR出力によってアドレッシングされるリードオンリーメモリ。
- 制御ユニット: 適切なタイミングでLD信号を生成。
- データバス: メモリとの間でデータ転送を行う別個のバス。
- トライステートバッファ: MARの入力に異なるアドレスソースをゲートするために使用。