メモリ構成


dsPICのメモリ構成を説明します。
基本的なメモリとしては、プログラムメモリとデータメモリがあります。
dsPICの場合、特にデータメモリの構成が複雑となっていて、DSP機能が
より高速で効率よく実行できるようになっています。
またメモリでは無いのですが、レジスタ群として、16ビット×16個のレジスタ
が演算用のレジスタとして用意されています。

【プログラムメモリ】

24ビット幅の命令格納用メモリで、フラッシュメモリとなっています。
プログラムカウンタで指定されたアドレスの命令が取り出されて実行され
ます。このときプログラムカウンタは+2ずつカウントアップするようになって
います。
これはプログラムメモリを固定データの格納用に使う時にバイト単位での
アクセスを可能とするためです。

プログラムメモリは全部で4Mワード×24ビットの構成となっていますが、
そのアドレス空間は、下図のように使われています。図のように広い空間
ですが、実際に現状で使われているのは、ほんのわずかな部分だけです。






【データメモリ】

データメモリは、MCU用命令とDSP用命令でアクセス方法が異なっています。
まず、データメモリの全体64kバイトの空間は、下図のようなマップになっています。
まず最初のアドレス0番地からは、SFRの領域で、SFRは全て直接アドレッシング
でアクセスできます。
次がXデータとYデータが4kバイトずつ確保されています。

その後ろはRAMデータとしては何も実装されていませんが、0x8000番地以降は
PSV(Program Space Visiblity Operation)というコンフィギュレーション設定で
プログラムメモリの0x108000番地から0x10FFFF番地にマッピングされ、この範囲の
プログラムメモリの下位16ビットのデータが、Xデータ領域の固定定数データとして
扱えるようになります。








このデータメモリをアクセスする方法は、MCU用命令の時とDSP用命令の時では
異なっています。
このアクセスの差異を表したのが下図です。

まず通常のMCU命令の時は、左側のような空間として全体が1個のXデータ領域
として扱われます。MOV命令などで直接64kバイトの全空間をアクセスできます。

DSP用命令のときで、2オペンランド命令の時は右側のようなアクセス方法と
なります。
つまり、まずデータの読み出しの時は、Xデータ領域と、Yデータ領域に分かれ、
それぞれW8、W9レジスタと、W10、W11レジスタでアドレッシングされてアクセス
されます。 演算結果の格納のときは左側の図で扱われ、W13レジスタで指定
されたアドレスに結果データが書き込まれます。




【DSP命令の高速実行】

このX、Yの2つの空間を別々の間接アドレッシングで扱うことができる
ということを利用すると、超高速のDSP演算が可能になります。

例えばMAC命令のような積和演算の場合は下記のようになります。

    REPEAT  W3
    MAC W4*W5, A, [W8]-=2, W4, [W10]+=2, W5, W13


  この2行で下記の実行を行います
    (1) W4×W5の乗算を実行し、アキュミュレータACCAに加算する
    次の演算のためのデータを取り出す
    (2) [W8]でXデータを間接アドレッシングしてW4にロード後、W8を-2する
    (3) [W10]でYデータを間接アドレッシングしてW5にロード後、W10を+2する
    (4) ACCBの内容をバレルシフタで桁合わせ後、W13を間接アドレスとして
      Xデータに書き戻す
    (5) 以上をW3の回数だけ繰り返す

このMAC命令で(1)から(4)までの実行をわずか1サイクルで完了してしまいます。
しかもREPEAT命令でオーバーヘッド無しでW3回MAC命令を繰り返しますから、
この2行だけで、W3回の積和演算がW3+1サイクルで完了してしまいます。






   目次ページへ