Renesas Synergy™

FAQ 1006775 : メモリの外部拡張について、基本的なことを教えてください。

いくつかのマイコンは内部の ROMや RAM以外に外部にメモリを拡張できるようになっております。
そのときの内部アドレスと外部アドレスの関係を以下の図に示します。
デバイスや設定によっては、マイコンが使用できるアドレス情報の一部しか外部に出力されない場合があります。
 

CPUメモリ・マップに示すように CPUは 16ビットのアドレス空間を扱え、内部ROMが 24Kバイトあるような場合について説明します。
この場合、6000H以降の部分が外部に拡張領域として使用できることになります。
簡単のために外部拡張領域は DFFFH までの 32Kバイトとして説明します。

(1)外部に 12ビットのアドレス出力を指定 (4Kバイト拡張) した場合
この場合には、外部に物理的に拡張できるメモリは 212 = 4Kバイトになります。
CPU から 6000Hをアクセスした時、外部には 6000Hの下位12ビット分のアドレス、つまり 000Hが出力されます。
同様に 7000Hや 8000H, 9000Hをアクセスした時にも下位の 12ビットは同じく 000Hとなります。
このように同じアドレスがアクセスされることになり、イメージが 4Kバイト毎に現れます。

↓4Kバイト拡張時メモリ・マップ
 

(2)外部に 14ビットのアドレス出力を指定 (16Kバイト拡張) した場合
この場合には、外部に物理的に拡張できるメモリは214 = 16Kバイトになります。
CPU から 6000Hをアクセスした時、その下位14ビット、つまり 2000Hが出力されます。
同様に 7000Hでは 3000Hが、8000Hでは 0000Hが 9000Hでは 1000Hが、A000Hでは 2000Hが、B000Hでは 3000Hが出力されます。

従って、6000Hから使用した場合には内部のアドレスの並びと外部のアドレスの並びが逆転してしまうことになります。
これは、外部に RAMを拡張した場合には問題はありませんが、PROMやフラッシュを接続する場合には注意する必要があります。
これを避けるには、8000H以降のアドレスだけを使用することをお奨め致します。
また、複数のアドレスで同じ外部アドレスが出力されますので、RAMを拡張したときには、 異なるアドレスからアクセスしないように管理を行っておく必要があります。

↓16Kバイト拡張時メモリ・マップ
 

(3)外部に 16ビットのアドレス出力 (64Kバイト拡張) を指定した場合
この場合には、外部に 64Kバイトの空間が使用できるようになります。
しかしながら、CPUそのものが 64Kバイトの空間しか扱えないため、 外部に拡張出来るのは 64Kバイトから CPU内蔵の分を除いた領域だけになります (デバイスによってはさらに少なくなる事があります)。
このとき、外部のアドレスと内部のアドレスと同じ値になります。
このため、内部ROMと重なった部分 (この場合には 0~5FFFH) が無駄になる可能性があります。

↓64Kバイト拡張時メモリ・マップ
 

関連FAQ:
通常のメモリ以外に変数やコードを割り付ける方法は?

適用製品

78K ファミリ
他にご質問がございましたら、リクエストを送信してください