今回作成したMMUの回路図が下です。
高速SRAM, マルチプレクサ、双方向バッファ、CPLDからなっており、CPLDが各ICの制御信号を作っています。TTL-ICを組み合わせて制御信号を作るのは面倒なのと、うまく動かなかったときに、CPLDだと回路の変更をせずにロジックを書き換えるだけで対処できます。
CPLDの定義ファイルのMMUに関連する部分の抜粋です。
IOREQ = ST0 # !ST1 # ST2 # ST3; DI = !ST3; MMUSEL = !A15 # !A14 # IOREQ; MAPSEL = MMUENA & MMUSEL; MMUBUFE = MMUSEL # DS; MAPRD = (MMUSEL # !RW # DS) & !IOREQ; MAPWR = MMUSEL # RW # DS;
1個のCPLDでメモリアクセス用の信号も作ったりしているので、I/Oをほぼ使い切ってしまっています。
アドレスマップの高速SRAMは、I/O空間でアクセスでき読み書きができます。アドレスは次のようになっています。
I/O Addr | N/S | D/I | Page No. |
C001 | S | I | 0 |
: | : | : | : |
C01F | S | I | F |
C021 | N | I | 0 |
: | : | : | : |
C03F | N | I | F |
C041 | S | D | 0 |
: | : | : | : |
C05F | S | D | F |
C061 | N | D | 0 |
: | : | : | : |
C07F | N | D | F |
S --- System, N --- Normal (User), D --- Data, I --- Instruction
システムがリセットした時には、アドレスマップを初期化したのちMO端子をアクティブにすることでMMUが機能します。それまでCPUは、RAMの先頭ページ(4kバイト)しかアクセスできません。
0 件のコメント:
コメントを投稿