プログラムメモリアーキテクチャ


【メモリアーキテクチャの概要】

PIC18シリーズでのメモリは種類は他のミッドレンジと同じように、下記の3種類と
なっています。

 (1) プログラムメモリ
   命令つまりプログラムそのものを格納するメモリ。
 (2) データメモリ
   データ格納用のメモリですが、PICではレジスタファイルとなっています。この中
   には、特殊レジスタ(SFR)と呼ばれる指定席のレジスタと、汎用変数領域の
   レジスタとがあります。
 (3) スタックメモリ
   サブルーチンや割込みでの戻り番地を格納するための独立のメモリで、PIC18
   シリーズでは従来より大幅に拡張されました。しかもスタックポインターレジスタが
   追加され、かつPUSH、POP命令も追加されましたので、スタックメモリをプログ
   ラム命令でRead/Writeすることが出来るようになりました。


【プログラムメモリ】

 命令そのものを格納するメモリです。アドレスは、プログラムカウンタで指定されます。
このプログラムカウンタ(PC)がPIC18シリーズでは21ビット構成となりましたので、
プログラムメモリアクセス領域としては2MBという非常に大きな範囲を直接指定
できるようになりました。
 つまり従来の「Pageの概念」を使わなくとも全てのメモリ空間を直接指定できる
ということになりました。これでプログラムを組むのが大変楽になりました。

 しかし、その代わり、プログラムメモリをバイト単位(8ビット)で扱うように変更され、
従来のワード単位(16ビット)での扱いではなくなりました。
つまり、2MBの空間のプログラムメモリですが、命令は16ビットですので、2バイトで
1命令ということになります。
さらにPIC18シリーズでは一度に2バイトの命令を直接取り出すことが出来るように
なっています。そのため、プログラムカウンタの最下位ビットは常に0で命令実行毎に
+2されて行くようになっています。
従って、プログラム空間としては1Mワードということになります。


プログラムメモリについては、これ以外にベクタがいくつか設定されています。

 (1) RESET Vector = 0x000000 番地
   リセット発生時にはかならず0番地から始まります。
 (2) High Priority Interrupt Vector = 0x000008 番地
   高位の割込み発生時のとび先で固定です。
 (3) Low Priority Interrupt Vector = 0x000018 番地
   低位の割込み発生時のとび先で固定です。

これを図で表すと下図のようになります。
1Mワードの空間ですが実際に実装されているのは、これよりはるかに少ない
サイズとなっています。
この実装されていない空間をアクセスした時には全て「0」として読み出されるので
NOP命令」として実行されます。







【プログラムカウンタの構成】

 プログラムカウンターが21ビット構成になったことにより、プログラムカウンタ設定用
のレジスタが追加されました。
下図のようにプログラムカウンタへのアクセスは3つのレジスタに分解されて命令に
よりアクセスすることが出来ます。
ここで上位のPCH、PCUレジスタは直接には命令でアクセスすることはできず、それ
ぞれPCLATH、PCLATUレジスタ経由となります。
PCLATH、PCLATUレジスタはプログラムで自由に読み書きが出来ます。

PCLATH、PCLATUからPCの上位への Read/Writeのタイミングは、PCLレジスタへの
Read/Writeタイミングと同期するようになっています。
つまり、PCLに書き込む時に、あらかじめPCLATH、PCLATUに書き込まれていた内容が、
PCH、PCUレジスタに書き込まれます。
またPCLレジスタを読み込むと、同時にPCH、PCUレジスタから、PCLATH、PCLATUレジ
スタに読み込まれます。








   目次ページへ