30
© 2009 Microchip Technology Inc. Advance Information DS39732A_JP - p. 44-1 拡張データ空間 (EDS) を備えた CPU 44 セクション 44. 拡張データ空間 (EDS) を備えた CPU ハイライト 本セクションには下記の主要項目を記載しています。 44.1 はじめに ...................................................................................................................... 44-2 44.2 プログラマモデル ....................................................................................................... 44-5 44.3 ソフトウェア スタックポインタ ................................................................................. 44-9 44.4 CPU レジスタの説明 ................................................................................................ 44-13 44.5 算術論理ユニット (ALU) ........................................................................................... 44-16 44.6 乗除算サポート ......................................................................................................... 44-17 44.7 コンパイラに適したアーキテクチャ ........................................................................ 44-20 44.8 マルチビット シフトのサポート ............................................................................... 44-20 44.9 命令フローのタイプ .................................................................................................. 44-21 44.10 ループ構造 ................................................................................................................ 44-23 44.11 アドレスレジスタ依存性 .......................................................................................... 44-25 44.12 レジスタマップ ......................................................................................................... 44-28 44.13 関連アプリケーション ノート .................................................................................. 44-29 44.14 改訂履歴 .................................................................................................................... 44-30 注意 : この日本語版文書は参考資料としてご利用ください。最新情報は必ずオリジ ナルの英語版をご参照願います。

セクション 44. 拡張データ空間 (EDS) を備えた CPU - …ww1.microchip.com/downloads/jp/DeviceDoc/39732A_JP.pdf命令プリフェッチ機構はスループットの維持を容易にし、予測可能な動作を提供します。プロ

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: セクション 44. 拡張データ空間 (EDS) を備えた CPU - …ww1.microchip.com/downloads/jp/DeviceDoc/39732A_JP.pdf命令プリフェッチ機構はスループットの維持を容易にし、予測可能な動作を提供します。プロ

注意 : この日本語版文書は参考資料としてご利用ください。最新情報は必ずオリジナルの英語版をご参照願います。

セクション 44. 拡張データ空間 (EDS) を備えた CPU

拡張データ空間

(EDS)

を備えた

CPU

44

ハイライト

本セクションには下記の主要項目を記載しています。

44.1 はじめに ...................................................................................................................... 44-244.2 プログラマモデル ....................................................................................................... 44-544.3 ソフトウェア スタックポインタ ................................................................................. 44-944.4 CPU レジスタの説明 ................................................................................................ 44-1344.5 算術論理ユニット (ALU) ........................................................................................... 44-1644.6 乗除算サポート ......................................................................................................... 44-1744.7 コンパイラに適したアーキテクチャ ........................................................................ 44-2044.8 マルチビット シフトのサポート ............................................................................... 44-2044.9 命令フローのタイプ .................................................................................................. 44-2144.10 ループ構造 ................................................................................................................ 44-2344.11 アドレスレジスタ依存性 .......................................................................................... 44-2544.12 レジスタマップ ......................................................................................................... 44-2844.13 関連アプリケーション ノート .................................................................................. 44-2944.14 改訂履歴 .................................................................................................................... 44-30

© 2009 Microchip Technology Inc. Advance Information DS39732A_JP - p. 44-1

Page 2: セクション 44. 拡張データ空間 (EDS) を備えた CPU - …ww1.microchip.com/downloads/jp/DeviceDoc/39732A_JP.pdf命令プリフェッチ機構はスループットの維持を容易にし、予測可能な動作を提供します。プロ

PIC24F ファミリ リファレンス マニュアル

44.1 はじめに

拡張データ空間 (EDS) を備えた PIC24F CPU は、拡張命令セットと共に 16 ビット ( データ )改良型ハーバード アーキテクチャを採用しています。この CPU は 24 ビット命令ワードを使用し、可変長オペコード フィールドを備えます。23 ビット幅のプログラム カウンタ (PC) は、最大 4M x 24 ビットのユーザ プログラムメモリ空間をアドレッシングします。

命令プリフェッチ機構はスループットの維持を容易にし、予測可能な動作を提供します。プログラムフローを変更する命令、2 ワード移動命令 (MOV.D)、拡張データ空間 (EDS) と PSV にアクセスする命令、テーブル命令を除く大部分の命令は、単一サイクルで実行されます。REPEAT命令により、オーバーヘッドのないプログラムループを構成できます。このループは任意の繰り返しで割り込み可能です。

44.1.1 レジスタ

EDS 付き PIC24F は、プログラマモデル内に 16 個の 16 ビットワーキング レジスタを備えます。各ワーキング レジスタはデータレジスタ、アドレスレジスタ、アドレスオフセット レジスタのいずれかとして使用できます。16 番目のワーキング レジスタ (W15) は、割り込みおよび関数コール用のソフトウェア スタックポインタ (SP) として動作します。

44.1.2 データ空間のアドレッシング

基本のデータ空間は 32K ワードまたは 64K バイトとしてアドレッシングできます。データ空間の上位 32K バイトは、32K バイトの EDS ウィンドウとして参照されます。EDS ウィンドウは内部拡張メモリと外部データメモリへのアクセスに使用します。これらのメモリには 16M バイトの データアドレスと、PSV として参照されるプログラムメモリ全体が含まれます。16M バイト のデータアドレスには内蔵拡張 RAM と、拡張パラレルマスタ ポート (EPMP) を介してアクセスする外部 RAM を含みます。EDS ウィンドウでは、EDS アドレスを形成するために読み書きページレジスタ (DSRPAG または DSWPAG) を使用します。EDS は 8M ワードまたは 16M バイトとしてアドレッシングできます。EDS ウィンドウでは、PSV アクセス用アドレスを形成するために DSRPAG レジスタを使用します。EDS および PSV アクセスの詳細は「PIC24F ファミリ リファレンス マニュアル」のセクション 45.「拡張データ空間 (EDS) を備えたデータメモリ」を参照してください。

44.1.3 アドレッシング モード

本 CPU は下記のアドレッシング モードをサポートします。

• 命令内 ( オペランドなし )• 相対

• リテラル

• メモリ直接

• レジスタ直接

• レジスタ間接

各命令は、その機能的要件に応じて、あらかじめ決められたアドレッシング モードグループに関連付けられます。各命令に対して最大 6 つのアドレッシング モードをサポートします。

大部分の命令において、EDS付きPIC24Fは下記の一連の動作を1命令サイクルで実行できます。

• データメモリの読み出し

• ワーキング レジスタ ( データ ) の読み出し

• データメモリの書き込み

従って 3 オペランド命令をサポート可能であるため、A + B = C 演算を 1 サイクルで実行できます。ただし EDS および PSV 読み書きは 2 命令サイクル以上を必要とする場合があります。詳細はセクション44.11.2.4「EDSおよびPSVアクセス中の命令ストール」を参照してください。

DS39732A_JP - p. 44-2 Advance Information © 2009 Microchip Technology Inc.

Page 3: セクション 44. 拡張データ空間 (EDS) を備えた CPU - …ww1.microchip.com/downloads/jp/DeviceDoc/39732A_JP.pdf命令プリフェッチ機構はスループットの維持を容易にし、予測可能な動作を提供します。プロ

セクション 44. 拡張データ空間 (EDS) を備えた CPU拡張データ空間

(EDS)

を備えた

CPU

44

44.1.4 算術論理ユニット

コアの算術演算能力とスループットを大幅に拡張するために、高速の 17 ビット× 17 ビット 乗算器を内蔵しています。この乗算器は符号付き、符号なし、混合モードでの 16 ビット× 16 ビットまたは8×8ビット整数乗算をサポートします。全ての乗算命令は1サイクルで実行されます。

16 ビット算術論理ユニット (ALU) は、繰り返し除算アルゴリズムをサポートする整数除算支援ハードウェアにより拡張されています。これは REPEAT命令ループ機構と各種の繰り返し除算命令を使用して動作し、32 ビット ( または 16 ビット ) 被除数と 16 ビット除数による符号付きおよび符号なし整数の除算をサポートします。全ての除算演算は 19 サイクルを要しますが、任意のサイクル境界で割り込む事ができます。

44.1.5 例外処理

EDS 付き PIC24F は、最大 8 つのノンマスカブル トラップ割り込み要因を持つベクタ方式の例外処理機構を備えます。各割り込み要因には 7 段階の優先度を設定できます。詳細は「PIC24Fファミリ リファレンス マニュアル」のセクション 8.「割り込み」を参照してください。

図 44-1 に本 CPU のブロック図を示します。

© 2009 Microchip Technology Inc. Advance Information DS39732A_JP - p. 44-3

Page 4: セクション 44. 拡張データ空間 (EDS) を備えた CPU - …ww1.microchip.com/downloads/jp/DeviceDoc/39732A_JP.pdf命令プリフェッチ機構はスループットの維持を容易にし、予測可能な動作を提供します。プロ

PIC24F ファミリ リファレンス マニュアル

図 44-1: セクション 44. 拡張データ空間 (EDS) を備えた CPU EDS 付き PIC24F CPU コアのブロック図

Power-upTimer

OscillatorStart-up Timer

POR/BORReset

WatchdogTimer

InstructionDecode and

Control

OSC1/CLKI

MCLR

TimingGeneration

16

PCL

16

Program Counter

16-Bit ALU

23

23

24

23

Data Bus

IR

PCH

16

16 x 16W Reg Array

RO

M L

atch

16

EA MUX

RAGUWAGU

16

16

16

16

8

InterruptController

EDS, PSV

Data AccessControl Block

StackControlLogic

LoopControlLogic

Data Latch

Data RAM

AddressLatch

Control Signalsto Various Blocks

Address LatchProgram Memory

Data Latch

I/O Ports

16

16

Address Bus

16

Lite

ral D

ata

Peripherals

Multiplierand Divide

Support

and Table

and Extended Data RAM

DS39732A_JP - p. 44-4 Advance Information © 2009 Microchip Technology Inc.

Page 5: セクション 44. 拡張データ空間 (EDS) を備えた CPU - …ww1.microchip.com/downloads/jp/DeviceDoc/39732A_JP.pdf命令プリフェッチ機構はスループットの維持を容易にし、予測可能な動作を提供します。プロ

セクション 44. 拡張データ空間 (EDS) を備えた CPU拡張データ空間

(EDS)

を備えた

CPU

44

44.2 プログラマモデル

EDS 付き PIC24F のプログラマモデルを図 44-2 に示します。プログラマモデル内の全てのレジスタはメモリに割り当てられ、命令による直接操作が可能です。表 44-1 に各レジスタの概要を記載します。

プログラマモデルに関連する全レジスタのメモリ割り当てを表 44-5 に示します。

表 44-1: プログラマモデル レジスタの概要

レジスタ名 概要

W0 ~ W15 ワーキング レジスタアレイ

PC 23 ビット プログラムカウンタ

SR ALU ステータスレジスタ

SPLIM スタックポインタのリミット値レジスタ

TBLPAG テーブルメモリのページアドレス レジスタ

DSRPAG 拡張データ空間 (EDS) ページ読み出しレジスタ

DSWPAG 拡張データ空間 (EDS) ページ書き込みレジスタ

RCOUNT REPEATループカウンタ レジスタ

CORCON CPU 制御レジスタ

DISICNT 割り込みカウント無効化レジスタ

© 2009 Microchip Technology Inc. Advance Information DS39732A_JP - p. 44-5

Page 6: セクション 44. 拡張データ空間 (EDS) を備えた CPU - …ww1.microchip.com/downloads/jp/DeviceDoc/39732A_JP.pdf命令プリフェッチ機構はスループットの維持を容易にし、予測可能な動作を提供します。プロ

PIC24F ファミリ リファレンス マニュアル

図 44-2: プログラマモデル

N OV Z C

TBLPAG

22 0

7 0

015

プログラム カウンタ

テーブルメモリ ページアドレス

ALU ステータスレジスタ (SR)

ワーキング / アドレス

レジスタ

W0 (WREG)

W1

W2

W3

W4

W5

W6

W7

W8

W9

W10

W11

W12

W13

フレームポインタ

スタックポインタ

RA

0

RCOUNT

15 0REPEATループカウンタ

SPLIM スタックポインタ リミット値

SRL

0

0

15 0

CPU 制御レジスタ (CORCON)

SRH

W14

W15

DC IPL2 1 0‚ ‚‚‚‚‚‚

PC

除算器ワーキング レジスタ

乗算器レジスタ

15 0

レジスタ

レジスタ

レジスタ

データ空間ページ読み出しレジスタ

データ空間ページ書き込みレジスタ

9 0

DSRPAG

8 0

DSWPAG

IPL3‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚‚ ‚

DS39732A_JP - p. 44-6 Advance Information © 2009 Microchip Technology Inc.

Page 7: セクション 44. 拡張データ空間 (EDS) を備えた CPU - …ww1.microchip.com/downloads/jp/DeviceDoc/39732A_JP.pdf命令プリフェッチ機構はスループットの維持を容易にし、予測可能な動作を提供します。プロ

セクション 44. 拡張データ空間 (EDS) を備えた CPU拡張データ空間

(EDS)

を備えた

CPU

44

44.2.1 ワーキング レジスタアレイ

16 個のワーキング レジスタ (W レジスタ ) はデータレジスタ、アドレスレジスタ、アドレスオフセット レジスタのいずれかとして使用できます。ワーキング レジスタの機能は、そのレジスタにアクセスする命令のアドレッシング モードによって決まります。

EDS付きPIC24Fの命令セットは、レジスタ命令とファイルレジスタ命令の2つに分類できます。

44.2.1.1 レジスタ命令

レジスタ命令は、各ワーキング レジスタをデータ値またはアドレス オフセット値として使用できます。下にサンプルコードを示します。

MOV W0,W1 ; move contents of W0 to W1MOV W0,[W1] ; move W0 to address contained in W1ADD W0,[W4],W5 ; add contents of W0 to contents pointed

; to by W4.Place result in W5

44.2.1.2 ファイルレジスタ命令

ファイルレジスタ命令は、命令オペコードに含まれるアドレスで指定されるメモリとレジスタW0 に対して動作します。ファイルレジスタ命令は W0 を特別なワーキング レジスタとして使用します。ファイルレジスタ命令では、ワーキング レジスタ W1 ~ W15 をターゲット レジスタとして指定できません。

ファイルレジスタ命令は、1 つのワーキング レジスタしか持たない従来の PIC®MCU に対して下位互換性を保ちます。アセンブラ構文では、ファイルレジスタ命令内で W0 を指定するためにラベル「WREG」を使用します。下にサンプルコードを示します。

MOV WREG,0x0100 ; move contents of W0 to address 0x0100ADD 0x0100,WREG ; add W0 to address 0x0100, store in W0

44.2.1.3 ワーキング レジスタのメモリ割り当て

ワーキング レジスタはメモリに割り当てられるため、下記のようにファイルレジスタ命令でアクセスできます。

MOV 0x0004, W10 ; equivalent to MOV W2, W10

0x0004 は W2 のメモリ内のアドレスです。

さらに、同一ワーキング レジスタをアドレスポインタと演算対象レジスタの両方として使用する命令の実行も可能です。下にサンプルコードを示します。

MOV W1,[W2++]

ここで

W1 = 0x1234W2 = 0x0004 ;[W2] addresses W2

上記のサンプルコードでは、W2 の内容は 0x0004 です。W2 はアドレスポインタとして使用され、メモリ内のアドレス 0x0004 を指します。W2 自身もメモリ内のこのアドレスに割り当てられます。これは起こりそうにない状況ですが、実行前に検出する事は不可能です。EDS 付きPIC24F はデータ書き込みを優先するため、上記コードの結果は W2 = 0x1234 です。

44.2.1.4 ワーキング レジスタとバイトモード命令

ワーキング レジスタアレイに対するバイト命令は、ターゲット レジスタの下位バイト (LSB) にのみ影響します。ワーキング レジスタはメモリに割り当てられるため、データメモリ空間へのバイト幅アクセスによってワーキング レジスタの LSB ( 下位バイト ) と MSB ( 上位バイト ) を操作できます。

Note: アドレッシング モードと命令構文の詳細は「16 ビット MCU および DSC プログラマ リファレンス マニュアル」を参照してください。

© 2009 Microchip Technology Inc. Advance Information DS39732A_JP - p. 44-7

Page 8: セクション 44. 拡張データ空間 (EDS) を備えた CPU - …ww1.microchip.com/downloads/jp/DeviceDoc/39732A_JP.pdf命令プリフェッチ機構はスループットの維持を容易にし、予測可能な動作を提供します。プロ

PIC24F ファミリ リファレンス マニュアル

44.2.2 シャドーレジスタ

プログラマモデル内のレジスタの多くは、対応するシャドーレジスタを備えます ( 図 44-2参照 )。これらのシャドーレジスタに直接アクセスする事はできません。

PUSH.SおよびPOP.S命令は、関数コールまたは割り込みサービスルーチン (ISR)発生時のコンテクストの保存 / 復元を高速に実行するために使用します。PUSH.S 命令は、下記の各レジスタ値をそれぞれに対応するシャドーレジスタに転送します。

• W0 ~ W3• SR (N、OV、Z、C、DC ビットのみ )POP.S命令は、シャドーレジスタの値をこれらのレジスタに復元します。PUSH.SおよびPOP.S命令を使用したサンプルコードを下に示します。

MyFunction:PUSH.S ; Save W registers, MCU statusMOV #0x03,W0 ; load a literal value into W0ADD RAM100 ; add W0 to contents of RAM100BTSC SR,#Z ; is the result 0?BSET Flags,#IsZero ; Yes, set a flagPOP.S ; Restore W regs, MCU status RETURN

PUSH.S 命令はシャドーレジスタの既存の内容を上書きします。シャドーレジスタは単段であるため、シャドーレジスタを複数のソフトウェア タスクで使用する際は注意が必要です。

ユーザ アプリケーションでは、シャドーレジスタを使用するタスクの実行中に、同一シャドーレジスタを使用する別の高優先度タスクが割り込まないように配慮する必要があります。高優先度タスクの割り込みによって低優先度タスクが中断すると、低優先度タスク中に書き込まれたシャドーレジスタの内容が高優先度タスクによって上書きされます。

44.2.3 未初期化ワーキング レジスタのリセット

W15 を除くワーキング レジスタアレイは、全てのリセット発生時にクリアされ、その後書き込まれるまで初期化されていないと見なされます。未初期化レジスタをアドレスポインタとして使用するとデバイスがリセットされます。

ワーキング レジスタを初期化するには、ワード書き込みを実行する必要があります。バイト書き込みでは初期化として認識されません。

DS39732A_JP - p. 44-8 Advance Information © 2009 Microchip Technology Inc.

Page 9: セクション 44. 拡張データ空間 (EDS) を備えた CPU - …ww1.microchip.com/downloads/jp/DeviceDoc/39732A_JP.pdf命令プリフェッチ機構はスループットの維持を容易にし、予測可能な動作を提供します。プロ

セクション 44. 拡張データ空間 (EDS) を備えた CPU拡張データ空間

(EDS)

を備えた

CPU

44

44.3 ソフトウェア スタックポインタ

W15 レジスタはソフトウェア スタックポインタとしてのみ機能し、例外処理とサブルーチンのコール / リターンにより自動的に変更されます。W15 は他のワーキング レジスタと同様に、全ての命令から参照できます。これは SP の読み書きと操作 ( スタックフレームの作成等 ) を簡略化します。

W15 は全てのリセット発生時に 0x0800 に初期化されます。このアドレスでは、SP が全てのEDS 付き PIC24F デバイスの有効な RAM 空間を示す事が保証され、ユーザ ソフトウェアで SPを初期化する前に、例外トラップが発生してしまう事を避けられます。これらはユーザ ソフトウェアが SP を初期化する以前の状態です。ユーザは初期化時に SP をデータ空間内の任意位置へ変更できます。

SP は常に利用可能な先頭空きワードを指し、下位アドレスから上位アドレスに向かってソフトウェア スタックに書き込みます。図 44-3 に、SP がどのようにスタックポップ ( 読み出し )時にプリデクリメントし、スタックプッシュ ( 書き込み ) 時にポスト インクリメントするのかを示します。

プログラム カウンタ (PC) がスタックへプッシュされると、PC<15:0> が先頭の利用可能スタックワードへプッシュされ、次いで PC<22:16> が 2 番目の利用可スタック位置へプッシュされます。CALL命令実行時の PC プッシュでは、プッシュ前に PC の MSB をゼロ拡張します ( 図44-3 参照 )。例外処理では、PC の MSB が CPU ステータス レジスタ (SR) の下位 8 ビットと連結されます。これにより、例外処理中に SRL の内容が自動的に保持されます。

図 44-3: CALL命令に対するスタックの動作

Note: 不正なスタックアクセスを避けるために、W15<0> ビットはハードウェアで「0」に固定されています。

Note: SP (W15) は絶対にページングされません。従ってスタック アドレスは基本のデータ空間 (0x0000-0xFFFF) 内に限定されます。

<Free Word>

PC<15:0>PC<22:16>

015

W15 (before CALL)

W15 (after CALL)Stac

k G

row

s To

war

dH

ighe

r Add

ress

b‚000000000

CALL SUBR

© 2009 Microchip Technology Inc. Advance Information DS39732A_JP - p. 44-9

Page 10: セクション 44. 拡張データ空間 (EDS) を備えた CPU - …ww1.microchip.com/downloads/jp/DeviceDoc/39732A_JP.pdf命令プリフェッチ機構はスループットの維持を容易にし、予測可能な動作を提供します。プロ

PIC24F ファミリ リファレンス マニュアル

44.3.1 ソフトウェア スタックの例

ソフトウェア スタックの操作には PUSHおよび POP命令を使用します。PUSHおよび POP命令は、W15 をデスティネーションポインタとして使用する MOV 命令と等価です。例えば W0 の内容は下記命令によりスタックにプッシュできます。

PUSH W0

この構文は下記と等価です。

MOV W0,[W15++]

Top-Of-Stack (TOS) の内容は下記により W0 に書き戻せます。

POP W0

この構文は下記と等価です。

MOV [--W15],W0

図 44-4 ~図 44-7 にソフトウェア スタックの使用例を示します。図 44-4 は、デバイス初期化時のソフトウェア スタックを示しています。 W15 は 0x0800 に初期化済みです。この例では、W0 と W1 にそれぞれ値 0x5A5A と 0x3636 を既に書き込んだ状態を想定します。最初にスタックにプッシュすると、図 44-5 のように W0 内の値をスタックにコピーします。W15 が示すスタック位置は、自動的に次に利用可能なスタック位置 (0x0802) へ更新されます。図 44-6 では、次の W1 の内容がスタックにプッシュされています。図 44-7 では、スタックをポップした事により、Top-Of-Stack の値 ( 以前に W1 からプッシュされた値 ) が W3 に書き込まれています。

図 44-4: デバイスリセット時のスタックポインタ

図 44-5: 初回の PUSH命令後のスタックポインタ

0x0000

0xFFFE

0x0800W15

W15 = 0x0800W0 = 0x5A5AW1 = 0x3636

0x5A5A

0x0000

0xFFFE

0x0800

0x0802

PUSH W0

W15 = 0x0802W0 = 0x5A5AW1 = 0x3636

W15

DS39732A_JP - p. 44-10 Advance Information © 2009 Microchip Technology Inc.

Page 11: セクション 44. 拡張データ空間 (EDS) を備えた CPU - …ww1.microchip.com/downloads/jp/DeviceDoc/39732A_JP.pdf命令プリフェッチ機構はスループットの維持を容易にし、予測可能な動作を提供します。プロ

セクション 44. 拡張データ空間 (EDS) を備えた CPU拡張データ空間

(EDS)

を備えた

CPU

44

図 44-6: 2 回目の PUSH命令後のスタックポインタ

図 44-7: POP命令後のスタックポインタ

0x5A5A

0x3636

0x0000

0xFFFE

0x0800

W15

W15 = 0x0804W0 = 0x5A5AW1 = 0x3636

PUSH W1

0x0802

0x0804

0x5A5A

0x3636

0x0000

0xFFFE

0x0800

W15

W15 = 0x08020x3636 → W3

POP W3

0x0802

© 2009 Microchip Technology Inc. Advance Information DS39732A_JP - p. 44-11

Page 12: セクション 44. 拡張データ空間 (EDS) を備えた CPU - …ww1.microchip.com/downloads/jp/DeviceDoc/39732A_JP.pdf命令プリフェッチ機構はスループットの維持を容易にし、予測可能な動作を提供します。プロ

PIC24F ファミリ リファレンス マニュアル

44.3.2 W14 ソフトウェア スタック フレームポインタ

フレームとは、単一のサブルーチンが使用するスタック内のユーザ定義メモリセクションです。LNK (リンク)およびULNK (リンク解除)命令では、ワーキング レジスタW14をスタック フレームポインタとして使用できます。W14 をフレームポインタとして使用しない場合、W14 は通常のワーキング レジスタとして使用できます。

W14をスタック フレームポインタとして使用するソフトウェア例については、「16ビットMCUおよび DSC プログラマ リファレンス マニュアル」を参照してください。

44.3.3 スタックポインタのオーバーフロー スタックポインタ リミット (SPLIM) レジスタは、スタックバッファのサイズを指定します。SPLIM は 16 ビットレジスタですが、全てのスタックはワード単位で処理する必要があるため、SPLIM<0> は「0」に固定されます。

SPLIM レジスタにワード書き込みをするまで、スタック オーバーフロー チェックは有効になりません。このチェックが一度有効になると、デバイスリセットだけがこれを無効にできます。W15 を用いてソースまたはデスティネーション アドレスとして生成した全ての実効アドレス(EA) は、SPLIM 内の値と比較されます。スタックポインタ (W15) の内容が SPLIM レジスタの内容を 2 上回る状態でプッシュ操作を行うと、スタックエラー トラップが発生します。例えばスタックが RAM 内のアドレス 0x2000 を超えた時にスタックエラー トラップを発生させたい場合、SPLIM の値を 0x1FFE に初期化します。

スタック オーバーフロー チェックが有効な場合、W15 の実効アドレスの計算がデータ空間の終端 (0xFFFF) に達して先頭へ戻る際にも、スタックエラー トラップが発生します。

スタックエラー トラップの詳細は「PIC24F ファミリ リファレンス マニュアル」のセクション8.「割り込み」を参照してください。

44.3.4 スタックポインタのアンダーフロー

スタックはリセット時に 0x0800 に初期化されます。スタックポインタのアドレスが 0x0800 を下回るとスタックエラー トラップが発生します。

Note: W15 レジスタの内容を使用して実効アドレス (EA) を生成する全ての命令では、スタックエラー トラップが発生する可能性があります。すなわち、W15 の内容がSPLIM レジスタの内容を 2 上回る時に CALL命令を実行するか、あるいは割り込みが発生すると、スタックエラー トラップが発生します。

Note: SPLIM レジスタへの書き込みの後に W15 を用いた間接読み出しはできません。

Note: 0x0000 ~ 0x07FF のデータ空間は、一般的にコアと周辺モジュールの特殊機能レジスタ (SFR) 向けに予約済みです。

DS39732A_JP - p. 44-12 Advance Information © 2009 Microchip Technology Inc.

Page 13: セクション 44. 拡張データ空間 (EDS) を備えた CPU - …ww1.microchip.com/downloads/jp/DeviceDoc/39732A_JP.pdf命令プリフェッチ機構はスループットの維持を容易にし、予測可能な動作を提供します。プロ

セクション 44. 拡張データ空間 (EDS) を備えた CPU拡張データ空間

(EDS)

を備えた

CPU

44

44.4 CPU レジスタの説明

44.4.1 SR: CPU ステータス レジスタ

EDS 付き PIC24F は 16 ビットのステータス レジスタ (SR) を備えます。CPU ステータス レジスタの詳細をレジスタ 44-1 に示します。このレジスタの LSB は、ステータス レジスタ下位バイト (SRL) と呼びます。同様に MSB はステータス レジスタ上位バイト (SRH) と呼びます。

SRL は下記を格納します。

• 全ての MCU ALU 動作ステータスフラグ

• CPU 割り込み優先度ステータスビット : IPL<2:0>• REPEATループ アクティブ ステータスビット : RA (SR<4>)

例外処理中に、SRLをPCのMSBと連結して完全な1ワード値を形成し、これをスタックします。

SRH はデジット キャリービット DC (SR<8>) を格納します。

RA ビット (SR<4>) は読み出し専用ですが、その他の SR ビットは全て読み書き可能です。

44.4.2 CORCON: コア制御レジスタ

CORCON レジスタは IPL3 ステータスビットを格納します。このステータスビットは IPL<2:0>(SR<7:5>) と連結して CPU 割り込み優先度 (IPL) を形成します。

Note: 各命令がステータス レジスタビットに与える影響については「16 ビット MCU および DSC プログラマ リファレンス マニュアル」を参照してください。

© 2009 Microchip Technology Inc. Advance Information DS39732A_JP - p. 44-13

Page 14: セクション 44. 拡張データ空間 (EDS) を備えた CPU - …ww1.microchip.com/downloads/jp/DeviceDoc/39732A_JP.pdf命令プリフェッチ機構はスループットの維持を容易にし、予測可能な動作を提供します。プロ

PIC24F ファミリ リファレンス マニュアル

レジスタ 44-1: SR: CPU ステータス レジスタ

U-0 U-0 U-0 U-0 U-0 U-0 U-0 R/W-0,HSC— — — — — — — DC

bit 15 bit 8

R/W-0,HSC(1,2) R/W-0,HSC(1,2) R/W-0,HSC(1,2) R-0,HSC R/W-0,HSC R/W-0,HSC R/W-0,HSC R/W-0,HSCIPL2 IPL1 IPL0 RA N OV Z C

bit 7 bit 0

凡例 : HSC = ハードウェアによるセット / クリアが可能なビット

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 1 = ビットをセット 0 = ビットをクリア x = ビットは未知

bit 15-9 未実装 :「0」として読み出し

bit 8 DC: MCU ALU ハーフキャリー / ボロー ビット

1 = 結果に下位から 4 桁目のビット ( バイトサイズ データの場合 ) または下位から 8 桁目のビット( ワードサイズ データの場合 ) からのキャリーが発生した

0 = 結果に上記のキャリーは発生してない

bit 7-5 IPL<2:0>: CPU 割り込み優先度ステータスビット (1,2)

111 = CPU 割り込み優先度は 7 (15): ユーザ割り込みは無効 110 = CPU 割り込み優先度は 6 (14)101 = CPU 割り込み優先度は 5 (13)100 = CPU 割り込み優先度は 4 (12)011 = CPU 割り込み優先度は 3 (11)010 = CPU 割り込み優先度は 2 (10)001 = CPU 割り込み優先度は 1 (9)000 = CPU 割り込み優先度は 0 (8)

bit 4 RA: REPEATループ アクティブ ステータスビット

1 = REPEATループを実行中0 = REPEATループを実行中ではない

bit 3 N: MCU ALU 負数結果ビット

1 = 結果は負数0 = 結果は負数ではない ( ゼロまたは正数 )

bit 2 OV: MCU ALU オーバーフロー ビット

このビットは符号付き算術演算 (2 の補数 ) に使用します。このビットは符号ビットに変化を生じるオーバーフローの発生を示します。1 = 今回の符号付き算術演算でオーバーフローが発生した0 = オーバーフローは発生していない

bit 1 Z: MCU ALU ゼロビット

1 = Z ビットに影響する動作が過去に Z ビットをセットした0 = Z ビットに影響する直前の動作が Z ビットをクリアした ( すなわち非ゼロ結果 )

bit 0 C: MCU ALU キャリー / ボロービット

1 = 結果の最上位ビットからキャリーが発生した0 = 結果の最上位ビットからキャリーは発生していない

Note 1: IPL<2:0> ビットは IPL<3> (CORCON<3>) ビットと連結して CPU 割り込み優先度を形成します。カッコ内の値は IPL<3> = 1の時の値です。この場合ユーザ割り込みは無効です。

2: IPL<2:0> ステータスビットは NSTDIS = 1 (INTCON1<15>) の時にのみ読み出されます。

DS39732A_JP - p. 44-14 Advance Information © 2009 Microchip Technology Inc.

Page 15: セクション 44. 拡張データ空間 (EDS) を備えた CPU - …ww1.microchip.com/downloads/jp/DeviceDoc/39732A_JP.pdf命令プリフェッチ機構はスループットの維持を容易にし、予測可能な動作を提供します。プロ

セクション 44. 拡張データ空間 (EDS) を備えた CPU拡張データ空間

(EDS)

を備えた

CPU

44

44.4.3 EDS 付き PIC24F デバイスのその他の制御レジスタ

EDS 付き PIC24F は下記のレジスタを使用しますが、本書では詳細に説明しません。これらの詳細は PIC24F ファミリ リファレンス マニュアルの別のセクションを参照してください。

• TBLPAG: テーブルページ レジスタ

TBLPAG レジスタは、テーブル読み書き動作中にプログラムメモリ アドレスの上位 8 ビットを保持します。テーブル命令は、プログラムメモリ空間とデータメモリ空間の間のデータ転送に使用します。詳細は「PIC24F ファミリ リファレンス マニュアル」のセクション4.「プログラムメモリ」を参照してください。

• DSRPAG: 拡張データ空間ページ読み出しレジスタ

10 ビットの DSRPAG レジスタは、DS 読み出しアクセスのアドレス空間を合計 32M バイトに拡張します。0x001 ~ 0x1FF の DSRPAG ページ値は、EDS として参照される 16Mバイト アドレス空間の読み出しアクセスを提供します。0x200 ~ 0x2FF の DSRPAG ページ値はプログラムメモリ (PM) の下位ワード、0x300 ~ 0x3FF の DSRPAG ページ値は PMの上位ワードの下位バイトへの読み出しアクセスを提供します。

• DSWPAG: 拡張データ空間ページ書き込みレジスタ

9 ビットの DSWPAG レジスタは、DS 書き込みアクセス空間を 16M バイトに拡張します(EDS を使用した PM 空間への書き込みはできません )。0x001 ~ 0x1FF の DSWPAG ページ値は、EDS への書き込みアクセスを提供します。

• DISICNT: 割り込みカウント無効化レジスタ

DISI命令は、指定サイクル数で優先度1~6の割り込みを無効にするためにDISICNTレジスタを使用します。詳細は「PIC24F ファミリ リファレンス マニュアル」のセクション 8.

「割り込み」を参照してください。

レジスタ 44-2: CORCON: コア制御レジスタ

U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0— — — — — — — —

bit 15 bit 8

U-0 U-0 U-0 U-0 R/C-0, HSC r-1 U-0 U-0— — — — IPL3(1)

予約 — —

bit 7 bit 0

凡例 : C = クリア可能ビット r = 予約ビット HSC = ハードウェアによるセット / クリアが可能なビット

R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し

-n = POR 時の値 1 = ビットをセット 0 = ビットをクリア x = ビットは未知

bit 15-4 未実装 :「0」として読み出し

bit 3 IPL3: CPU 割り込み優先度ステータスビット 3(1)

1 = CPU 優先度は 8 以上0 = CPU 優先度は 7 以下

bit 2 予約 :「1」として読み出し

bit 1-0 未実装 :「0」として読み出し

Note 1: IPL3 ビットは IPL<2:0> (SR<7:5>) ビットと連結して CPU 割り込み優先度を形成します。

Note 1: DSRPAG レジスタは、ビット操作命令等の読み出し - 変更 - 書き込み実行時に使用します。

2: 通常、PSV はデバイス内のプログラムメモリであるため、 EDS 機構を使用して書き込む事はできません。ただしテーブル書き込みを使用して PSV 空間にデータを書き込む事ができます。

© 2009 Microchip Technology Inc. Advance Information DS39732A_JP - p. 44-15

Page 16: セクション 44. 拡張データ空間 (EDS) を備えた CPU - …ww1.microchip.com/downloads/jp/DeviceDoc/39732A_JP.pdf命令プリフェッチ機構はスループットの維持を容易にし、予測可能な動作を提供します。プロ

PIC24F ファミリ リファレンス マニュアル

44.5 算術論理ユニット (ALU)EDS 付き PIC24F の ALU は 16 ビット幅を持ち、加減算、1 ビットシフト、論理演算の能力を備えます。特に明記がない限り、算術演算は 2 の補数に基づきます。演算の種類に応じて、ALUは SR レジスタ内の下記ステータスビットの値を変更します。

• キャリー (C)• ゼロ (Z)• 負数 (N)• オーバーフロー (OV)• デジット キャリー (DC)

減算では、C および DC ステータスビットはそれぞれボローおよびデジットボロー ビットとして機能します。

ALU は命令のモードに応じて 8 ビットまたは 16 ビットで演算を行います。ALU 演算に使用するデータは、命令のアドレッシング モードに応じて、ワーキング レジスタアレイまたはデータメモリから読み出す事ができます。同様に、ALU からの出力データは、ワーキング レジスタアレイまたはデータメモリ空間へ書き込む事ができます。

各命令、アドレッシング モード、8/16 ビット命令モードが SR ビットに与える影響については「16 ビット MCU および DSC プログラマ リファレンス マニュアル」を参照してください。

Note 1: バイト演算は 16 ビット ALU を使用して 8 ビットを超える結果を生成できます。ただし、他の PCI MCU との下位互換性を保つために、バイト演算から得られたALU 結果は 1 バイトとして書き戻され ( すなわち MSB は変更されない )、SR レジスタは結果の LSB の状態のみに基づいて更新されます。

2: バイトモードで実行する全てのレジスタ命令は、ワーキング レジスタの LSB にのみ影響します。全てのワーキング レジスタの MSB は、メモリへ割り当てられたワーキング レジスタの内容へアクセスするファイルレジスタ命令を用いて変更できます。

DS39732A_JP - p. 44-16 Advance Information © 2009 Microchip Technology Inc.

Page 17: セクション 44. 拡張データ空間 (EDS) を備えた CPU - …ww1.microchip.com/downloads/jp/DeviceDoc/39732A_JP.pdf命令プリフェッチ機構はスループットの維持を容易にし、予測可能な動作を提供します。プロ

セクション 44. 拡張データ空間 (EDS) を備えた CPU拡張データ空間

(EDS)

を備えた

CPU

44

44.6 乗除算サポート

44.6.1 概要

EDS 付き PIC24F は、下記の乗算モードを備えた 17 ビット× 17 ビット 乗算器を内蔵します。

• 16 ビット x 16 ビット符号付き

• 16 ビット x 16 ビット符号なし

• 16 ビット符号付き x 5 ビット ( リテラル ) 符号なし

• 16 ビット符号なし x 5 ビット ( リテラル ) 符号なし

• 16 ビット符号なし x 16 ビット符号付き

• 8 ビット符号なし x 8 ビット符号なし

除算ブロックは下記データサイズの除算モードをサポートします。

• 32 ビット符号付き /16 ビット符号付き

• 32 ビット符号なし /16 ビット符号なし

• 16 ビット符号付き /16 ビット符号付き

• 16 ビット符号なし /16 ビット符号なし

44.6.2 乗算器

図 44-8 に、乗算器のブロック図を示します。この乗算器は、乗算命令 (16 ビット整数の符号付き同士、符号なし同士、符号付きと符号なし混合の乗算 ) をサポートします。全ての乗算命令は、結果用にレジスタ直接アドレッシングのみをサポートします。32 ビットの結果 (MULWF以外の乗算結果 ) は、W15:W14 以外の任意のワーキング レジスタペア ( 連続する 2 つのワーキング レジスタ ) に書き込む事ができます。

MULWF命令では、オペランドのサイズ ( バイトまたはワード ) を指定できます。この場合、出力先は常に W3:W2 レジスタペアです。16 ビットのバイト乗算結果は W2 に書き込まれます (W3は変更されません )。32 ビットのワード乗算結果は W3:W2 レジスタペアに書き込まれます。

全ての乗算命令の乗数と被乗数は、ワーキング レジスタアレイ ( 第 1 ワード ) とデータ空間 ( 第 2 ワード ) から得られます。MULWF 命令は、 W2 ( 第 1 ワードまたはバイト ) とゼロ拡張した 13 ビット絶対アドレスを使用してデータ空間 ( 第 2 ワードまたはバイト ) から被乗数を得ます。

図 44-8 に、 これらの命令が結果をワーキング レジスタアレイに書き込み、これを経由してデータバスに書き戻す事を可能にする追加のデータパスを示します。

44.6.2.1 符号付き同士、符号なし同士、混合モードの乗算

オペランドを 17 番目ビットへゼロ拡張または符号拡張する単純なデータ処理ロジックにより、符号なし同士、符号付き同士、混合モードの乗算を符号付き値として実行できます。全ての符号なしオペランドは、常に乗算器入力値の 17 番目ビットへゼロ拡張されます。全ての符号付きオペランドは、常に乗算器入力値の 17 番目ビットへ符号拡張されます。

• 符号なし同士の 16 ビット乗算では、乗算器は 32 ビット符号なし結果を生成します。

• 符号付き同士の 16 ビット乗算では、乗算器は 30 ビットのデータと 2 ビットの符号を生成します。

• 符号付きと符号なしの混合モード 16 ビット乗算では、乗算器は 31 ビットのデータと 1ビットの符号を生成します。

Note: 乗算命令の結果出力先レジスタペアは、奇数ワーキング レジスタ : 偶数ワーキング レジスタの順番で構成する必要があります。奇数レジスタは結果の上位ワードを格納し、偶数レジスタは結果の下位ワードを格納します。例として W3:W2 レジスタペアは使用できますが、W4:W3 レジスタペアは使用できません。

© 2009 Microchip Technology Inc. Advance Information DS39732A_JP - p. 44-17

Page 18: セクション 44. 拡張データ空間 (EDS) を備えた CPU - …ww1.microchip.com/downloads/jp/DeviceDoc/39732A_JP.pdf命令プリフェッチ機構はスループットの維持を容易にし、予測可能な動作を提供します。プロ

PIC24F ファミリ リファレンス マニュアル

図 44-8: 乗算器のブロック図

2

16

17 17

Mixed ModeIR

16:31

0:15

16 16

16

Selection

Result

16 x 16W Array

17 x 17-BitMultiplier

DS39732A_JP - p. 44-18 Advance Information © 2009 Microchip Technology Inc.

Page 19: セクション 44. 拡張データ空間 (EDS) を備えた CPU - …ww1.microchip.com/downloads/jp/DeviceDoc/39732A_JP.pdf命令プリフェッチ機構はスループットの維持を容易にし、予測可能な動作を提供します。プロ

セクション 44. 拡張データ空間 (EDS) を備えた CPU拡張データ空間

(EDS)

を備えた

CPU

44

44.6.3 除算器

EDS 付き PIC24F は、32/16 ビットと 16/16 ビットの符号付きおよび符号なし整数除算演算を単一命令の繰り返し除算として実装しています。

全ての除算命令は商を W0 に格納し、余りを W1 に格納します。16 ビット符号付きおよび符号なし DIV 命令は、16 ビットの除数用に任意のワーキング レジスタ (Wn)、32 ビットの被除数用に任意のワーキング レジスタペア (W(m + 1):Wm、m は偶数 ) を指定できます。除算アルゴリズムの実行には除数 1 ビットあたり 1 cpb (cycle per bit) を要し、従って 32/16 ビット除算も16/16 ビット除算も実行に必要なサイクル数は同じです。

除算命令は REPEAT ループ内で実行する必要があります。命令フローは RCOUNT を必要とするため、これ以外の実行方法 ( 除算命令を 1 つずつ連続して実行する等 ) は正しく機能しません。除算フローは自動的に REPEAT ループをセットアップしません。従って表 44-2 に示す正しいオペランド値を使用して明示的にループを実行する必要があります(REPEATはループ内の命令を { オペランド値 + 1} 回実行します )。

各繰り返し計算後に全ての中間データが W1:W0 に格納されます。N、C、Z ステータスフラグは、次の繰り返しに制御情報を伝達します。除算命令は 19 サイクル動作ですが、通常の REPEATループと同様に繰り返しシーケンス中に割り込む事ができます。

ゼロ除算は算術エラートラップを生成します。除数は除算命令の最初のサイクルで評価されます。このため、トラップ処理は最初のサイクルの実行後に開始されます。詳細は「PIC24F ファミリ リファレンス マニュアル」のセクション 8.「割り込み」を参照してください。

表 44-2: 除算の実行回数

命令 概要 実行回数REPEAT

オペランド値除算の総実行回数(REPEATを含む )

DIV.SD 符号付き除算 :W(m + 1):Wm/Wn → W0; 余り → W1

18 17 19

DIV.SW 符号付き除算 :Wm/Wn → W0; 余り → W1

18 17 19

DIV.UD 符号なし除算 :W(m + 1):Wm/Wn → W0; 余り → W1

18 17 19

DIV.UW 符号なし除算 :Wm/Wn → W0; 余り → W1

18 17 19

© 2009 Microchip Technology Inc. Advance Information DS39732A_JP - p. 44-19

Page 20: セクション 44. 拡張データ空間 (EDS) を備えた CPU - …ww1.microchip.com/downloads/jp/DeviceDoc/39732A_JP.pdf命令プリフェッチ機構はスループットの維持を容易にし、予測可能な動作を提供します。プロ

PIC24F ファミリ リファレンス マニュアル

44.7 コンパイラに適したアーキテクチャ

本 CPU のアーキテクチャは、C コンパイラがコードサイズと実行速度の面で効率的なコードを生成できるように設計されています。

• 大部分の命令において、コアはデータ ( またはプログラムデータ ) メモリの読み出し、ワーキング レジスタ ( データ ) の読み出し、データメモリの書き込み、プログラム ( 命令 ) メモリの読み出しを 1 命令サイクルで実行できます。従って 3 パラメータ命令をサポートするため、A + B = C 演算を 1 サイクルで実行できます。

• 命令アドレッシング モードは柔軟性に優れるため、コンパイラのニーズに良く合っています。

• 16 x 16 ビット ワーキング レジスタアレイの各ワーキング レジスタは、データレジスタ、アドレスレジスタ、オフセット レジスタとして使用できます。ワーキング レジスタ W15のみが、割り込みおよび関数コール用のソフトウェア スタックポインタとして動作します。

• 全てのデータ空間の連続的な間接アクセスがサポートされ、加えて、16 ビット直接アドレス読み書き命令により、メモリ直接アドレスレンジは 8K バイトに拡張されます。

• 新たなテーブル読み書き命令では、任意のワーキング レジスタを使用して、プログラム空間 ( ユーザおよびテスト空間 ) 内の 32K ワード (64K バイト ) ページの連続的な間接アクセスが可能です。

• PSV モードを使用する事により、プログラム空間の一部をデータ空間へ割り当てる事ができます。これにより定数データへ、あたかもそれがデータ空間内にあるかのようにアクセスできます。

44.8 マルチビット シフトのサポート

EDS 付き PIC24F は、シフタブロックを使用する事により、1 サイクルでのマルチビット算術および論理シフトをサポートします。 ALU によるシングルビット シフトもサポートします。マルチビット シフタは、最大 15 ビットの左または右算術シフトを 1 サイクルで実行します。

表 44-3 に、シフト演算を使用する命令の一覧を示します。

全てのマルチビット シフト命令は、オペランドソースと結果出力先の両方に対してレジスタ直接アドレッシング モードのみをサポートします。

表 44-3: シングルおよびマルチビット シフトを使用する命令

命令 概要

ASR シングルまたはマルチビット算術右シフト ソースレジスタ

SL シングルまたはマルチビット左シフト ソースレジスタ

LSR シングルまたはマルチビット論理右シフト ソースレジスタ

DS39732A_JP - p. 44-20 Advance Information © 2009 Microchip Technology Inc.

Page 21: セクション 44. 拡張データ空間 (EDS) を備えた CPU - …ww1.microchip.com/downloads/jp/DeviceDoc/39732A_JP.pdf命令プリフェッチ機構はスループットの維持を容易にし、予測可能な動作を提供します。プロ

セクション 44. 拡張データ空間 (EDS) を備えた CPU拡張データ空間

(EDS)

を備えた

CPU

44

44.9 命令フローのタイプ

EDS 付き PIC24F アーキテクチャの大部分の命令は、プログラムメモリの単一ワードで構成され、1 サイクルで実行できます。命令のプリフェッチ処理が単一サイクル (1 x TCY) 実行を容易にします。ただし、一部の命令の実行には 2 または 3 命令サイクルを要します。EDS 付きPIC24F マイクロコントローラ アーキテクチャには 6 種類の命令フローが存在します。以下では、これらの命令フローについて説明します。

44.9.1 1 命令ワード /1 命令サイクル このタイプの命令実行には 1 サイクルしか要しません ( 図 44-9 参照 )。大部分の命令は 1 ワード /1 サイクル命令です。

図 44-9: 命令フロー : 1 ワード /1 サイクル

44.9.2 1 命令ワード /2 命令サイクル このタイプの命令ではプリフェッチの破棄は発生しません。MOV.D命令 ( ダブルワード読み書き ) だけがこのタイプに属します (SFR の読み出し、SFR のビット操作等 )。これらの命令実行には 2 サイクルを要します ( 図 44-10 参照 )。

図 44-10: 命令フロー : 1 ワード /2 サイクル (MOV.D動作 )

44.9.3 1 命令ワード /2 または 3 命令サイクル ( プログラムフローの変更 ) このタイプの命令には相対コール、分岐命令、スキップ命令が含まれます。命令が PC を変更する ( 単純なインクリメントを除く ) 時に、プログラムメモリのプリフェッチ データを破棄する必要があります。これを実行するために、命令は 2 サイクルを要します ( 図 44-11 参照 )。

図 44-11: 命令フロー ( プログラムフローの変更 )

TCY0 TCY1 TCY2 TCY3 TCY4 TCY5 TCY6

1.MOV#0x55AA,W0 Fetch 1 Execute 1

2.MOVW0,PORTA Fetch 2 Execute 2

3.MOVW0,PORTB Fetch 3 Execute 3

TCY0 TCY1 TCY2 TCY3 TCY4 TCY5 TCY6 TCY7 TCY8

1.MOV #0x1234,W2 Fetch1 Execute 1

Fetch 2 Execute 2R/W Cycle 1

2.MOV.D [W0++],W1 Execute 2R/W Cycle 2

3.MOV #0x00AA,W1 Fetch 3 No Fetch Execute 3

4.MOV #0x00CC,W0 Fetch 4 No Fetch Execute 4

TCY0 TCY1 TCY2 TCY3 TCY4 TCY5 TCY6 TCY7 TCY8 TCY9

1.ADD.BPORTA Fetch 1 Execute 1

2.BRASUB_1 Fetch 2 Execute 2

3.ADD.BPORTB Fetch 3 Flush

4.CLRW0 Fetch 4 Flush

5.SUB_1:Instruction@ address SUB_1

Fetch 5 Execute 5

© 2009 Microchip Technology Inc. Advance Information DS39732A_JP - p. 44-21

Page 22: セクション 44. 拡張データ空間 (EDS) を備えた CPU - …ww1.microchip.com/downloads/jp/DeviceDoc/39732A_JP.pdf命令プリフェッチ機構はスループットの維持を容易にし、予測可能な動作を提供します。プロ

PIC24F ファミリ リファレンス マニュアル

44.9.4 テーブル読み書き命令

これらの命令は、プログラムメモリへの読み書きサイクルを挿入するために、フェッチを一時停止します。図 44-12 では、フェッチされた命令がテーブル動作中に 1 サイクル保存され、テーブル動作の直後に実行されます。

図 44-12: 命令フロー ( テーブル動作 )

44.9.5 2 命令ワード /2 命令サイクル – GOTOまたは CALL

このタイプの命令では、命令後のフェッチはデータを取り出します。このため、これらの命令は 2 サイクル命令となります ( 図 44-13 参照 )。CPU が 2 ワード命令の第 1 ワードを最初にフェッチせずに第 2 ワードをフェッチする場合、第 2 ワードは NOPとして実行するようにエンコードされます。これはスキップ命令を用いて 2 ワード命令をスキップする際に重要です ( 図44-13 参照 )。

図 44-13: 命令フロー (GOTOまたは CALL)

44.9.6 アドレスレジスタ依存性

このタイプの命令では、データ空間の読み書き動作間のデータアドレス依存性のために、ストールが発生する可能性があります。ストールはリソースの衝突を解消するために 1 サイクルを追加挿入します。詳細はセクション 44.11「アドレスレジスタ依存性」を参照してください。

図 44-14: 命令パイプライン フロー : 1 ワード /1 サイクル ( 命令ストールあり )

TCY0 TCY1 TCY2 TCY3 TCY4 TCY5 TCY6 TCY7 TCY8

1.MOV#0x1234,W2 Fetch 1 Execute 1

2.TBLRDL.w[W0++],W1 Fetch 2 Execute 2

Data Read

3.MOV#0x00AA,W1 Fetch 3 No Fetch Execute 3

4.MOV#0x00CC,W0 Fetch 4 No Fetch Execute 4

TCY0 TCY1 TCY2 TCY3 TCY4 TCY5 TCY6 TCY7 TCY8 TCY9

1.MOV#0x55AA,W0 Fetch 1 Execute 1

2.GOTOLABEL Fetch 2a Execute 2

Fetch 2b

3.MOV#0x1111,W2 Fetch 3 Flush

4.Inst.@ address LABEL Fetch 4 Execute 4

TCY0 TCY1 TCY2 TCY3 TCY4 TCY5 TCY6 TCY7

1.MOVW0,W1 Fetch 1 Execute 1

2.MOV[W1],W4 Fetch 2 Stall Execute 2

3.MOVW4, LATB Fetch 3 No Fetch Execute 3

DS39732A_JP - p. 44-22 Advance Information © 2009 Microchip Technology Inc.

Page 23: セクション 44. 拡張データ空間 (EDS) を備えた CPU - …ww1.microchip.com/downloads/jp/DeviceDoc/39732A_JP.pdf命令プリフェッチ機構はスループットの維持を容易にし、予測可能な動作を提供します。プロ

セクション 44. 拡張データ空間 (EDS) を備えた CPU拡張データ空間

(EDS)

を備えた

CPU

44

44.10 ループ構造

EDS 付き PIC24F は、自動的な無条件ループ制御を提供する REPEAT命令構造をサポートします。REPEAT命令は、1 つの命令だけを含むプログラムループを実行します。この命令は CPUステータス レジスタ (SR) 内の制御ビットを使用して CPU 動作フローを一時的に変更します。

44.10.1 REPEATループ構造

REPEAT命令は、後続の 1 つの命令を指定回数繰り返し実行します。REPEATカウント値の指定には、命令内のリテラル値またはいずれかのワーキング レジスタ内の値を使用します。ワーキング レジスタを使用する場合、ループカウントをソフトウェア変数として扱う事ができます。

REPEATループ内の命令は少なくとも1回実行されます。REPEATループの繰り返し数は14ビットリテラル値 + 1 またはワーキング レジスタ値 +1 です。

上記に対応する 2 つの REPEAT命令構文を以下に示します。

REPEAT #lit14 ; RCOUNT <-- lit14(Valid target Instruction)

または

REPEAT Wn ; RCOUNT <-- Wn(Valid target Instruction)

44.10.1.1 REPEAT動作

REPEAT 動作のループカウントは、メモリに割り当てられたリピートループ カウンタ(RCOUNT) レジスタが保持します。RCOUNT は REPEAT 命令によって初期化されます。RCOUNT の値がゼロではない場合、REPEAT命令はリピートループ アクティブ (RA) ステータスビット (SR<4>) を「1」にセットします。

RA は読み出し専用ビットであり、ソフトウェアから変更する事はできません。REPEATループのカウント値が「0」より大きい場合、PC はインクリメントされません。PC は RCOUNT = 0になるまでインクリメントされません。REPEATループ命令フローの例を例 44-1 に示します。

ループカウント値が「0」の場合、REPEAT命令は NOP命令と同じ効果を持ち、RA (SR<4>)ビットをセットしません。従って REPEATループは開始前に無効化されます。このためターゲット命令は、後続命令をプリフェッチしながら 1 度だけ実行されます ( すなわち通常の実行フロー )。REPEAT ループが終了すると、破棄動作による遅延のために 2 TCY のストールが発生します。

Note: REPEAT命令直後の命令 ( すなわちターゲット命令 ) は必ず 1 回以上実行され、その実行回数は14ビットリテラル値またはワーキング レジスタで指定した値より1回多くなります。

© 2009 Microchip Technology Inc. Advance Information DS39732A_JP - p. 44-23

Page 24: セクション 44. 拡張データ空間 (EDS) を備えた CPU - …ww1.microchip.com/downloads/jp/DeviceDoc/39732A_JP.pdf命令プリフェッチ機構はスループットの維持を容易にし、予測可能な動作を提供します。プロ

PIC24F ファミリ リファレンス マニュアル

例 44-1: REPEAT命令のパイプライン フロー

44.10.1.2 REPEATループへの割り込み

REPEAT命令ループにはいつでも割り込み可能です。

RA ビットの状態は例外処理中にスタックに保存されます。このためユーザ アプリケーションは、任意段数にネスティングされた割り込み内から別の REPEATループを実行できます。SRLレジスタがスタックされると、RA ステータスビットがクリアされて割り込みサービスルーチン (ISR) 内で通常の実行フローに戻ります。

RETFIE命令を使用してISRからREPEATループへ戻るには特別な操作は不要です。割り込みは、RETFIE命令の第 5 サイクル中に、繰り返し実行する命令をプリフェッチします。スタックされた RA ビットは、SRL レジスタがポップされた時に復元されます。RA ビットがセットされた状態であれば、中断していた REPEATループが再開します。

44.10.1.2.1 REPEATループの早期終了

割り込みによって中断中のREPEATループは、ソフトウェアでRCOUNTをクリアする事によって ISR 内で通常より早期に終了できます。

44.10.1.3 REPEAT命令に関する制限事項

REPEATの直後に下記の命令を実行する事はできません。

• プログラムフロー制御命令 ( 分岐、比較 / スキップ、サブルーチン コール、リターン等 )• 別の REPEAT命令

• DISI、ULNK、LNK、PWRSAV、RESET命令

• MOV.D命令

TCY0 TCY1 TCY2 TCY3 TCY4 TCY51.REPEAT #0x2 Fetch 1 Execute 12.MOV [W0++], [W1++] Fetch 2 Execute 2

No Fetch Execute 2

No Fetch Execute 23.BSET PORTA, #3 Fetch 3 Execute 3

PC (at end of instruction) PC PC + 2 PC + 2 PC + 2 PC + 4 PC + 6RCOUNT (at end of instruction) x 2 1 0 0 0

RA (at end of instruction) 0 1 1 0 0 0

Note: 繰り返し命令で重要な事は、ループ内の命令がPSV読み出しを実行する場合でも、最初と最後の繰り返しの時にだけ破棄動作による遅延に起因する 2 TCY のストールが発生する事です。それ以外の繰り返しは、1 命令 / サイクルの実効スループットで実行されます。ただしこのパイプライン フローは一部のアドレッシング モード (1または 2のポスト インクリメントまたはポスト デクリメント )に限定されます。

Note 1: REPEATループ中に割り込みが発生して ISR が処理中である場合、ユーザ アプリケーションは ISR 内で別の REPEAT 命令を実行する前にリピートカウント(RCOUNT) レジスタをスタックする必要があります。

2: REPEAT命令を ISR 内で使用する場合、ユーザ アプリケーションは RETFIE命令を実行する前に RCOUNT レジスタをスタックから戻す必要があります。

Note: 繰り返し実行する命令 ( すなわち REPEATループ内のターゲット命令 ) が PSV を使用してプログラム空間内のデータにアクセスする場合、例外処理から復帰後の初回の実行には追加で 2 命令サイクルが必要です。

Note 1: REPEAT ループ内で実行可能な命令またはアドレスモードもありますが、反復しても意味のないものがあります。

2: EDS 上の読み出し - 変更 - 書き込み動作での REPEAT命令の使用はサポートされません。

DS39732A_JP - p. 44-24 Advance Information © 2009 Microchip Technology Inc.

Page 25: セクション 44. 拡張データ空間 (EDS) を備えた CPU - …ww1.microchip.com/downloads/jp/DeviceDoc/39732A_JP.pdf命令プリフェッチ機構はスループットの維持を容易にし、予測可能な動作を提供します。プロ

セクション 44. 拡張データ空間 (EDS) を備えた CPU拡張データ空間

(EDS)

を備えた

CPU

44

44.11 アドレスレジスタ依存性

EDS 付き PIC24F アーキテクチャは、大部分の MCU クラス命令に対して、データ空間の読み出し ( ソース ) と書き込み ( デスティネーション ) をサポートします。AGU による実効アドレス (EA) の計算と、これに続くデータ空間の読み書きの実行には、それぞれ 1 命令サイクルを要します。このようなタイミングにより、各命令におけるデータ空間の読み書き動作が部分的にオーバーラップする状態が発生します ( 図 44-15 参照 )。オーバーラップが発生すると、書き込み後読み出し (RAW) データ依存性が命令間で発生する可能性があります。EDS 付き PIC24Fは実行中に RAW データ依存性を検出して対処します。

図 44-15: データ空間のアクセス タイミング

44.11.1 書き込み後読み出し (RAW) 依存性に関する規則

実行中の命令でワーキング レジスタを書き込み動作のデスティネーションとして使用し、プリフェッチした次の命令が同じワーキング レジスタを読み出す際の動作は下記の通りです。

• 実行中の命令によるデスティネーションへの書き込みがワーキング レジスタの内容を変更しない場合、ストールは発生しない

• プリフェッチした命令によるソースの読み出しがワーキング レジスタを使用して EA を計算しない場合、ストールは発生しない

EDS 付き PIC24F ハードウェアは、各命令の実行中に RAW データ依存性が発生する可能性を自動的にチェックします。上記の条件が成立しない場合、CPU はプリフェッチした命令を実行する前に、1 命令サイクルの遅延を自動的に挿入します。このような命令ストールにより、次の ( プリフェッチした ) 命令がワーキング レジスタを読み出す前に、データの書き込みに十分な時間を確保できます。表 44-4 に RAW 依存性の要約を示します。

ADD MOV

[W7]

[W10] [W9]++

Data Space Address W7 W10 W8 W9

ADD W0, [W7], [W10]

MOV [W8], [W9]++

[W8] Data Space

Instruction Register Contents

Data Space

1 Instruction Cycle (TCY)

TCY1 TCY2 TCY3TCY 0

Read AGU

Write AGU

© 2009 Microchip Technology Inc. Advance Information DS39732A_JP - p. 44-25

Page 26: セクション 44. 拡張データ空間 (EDS) を備えた CPU - …ww1.microchip.com/downloads/jp/DeviceDoc/39732A_JP.pdf命令プリフェッチ機構はスループットの維持を容易にし、予測可能な動作を提供します。プロ

PIC24F ファミリ リファレンス マニュアル

44.11.2 命令ストールサイクル

基本的に命令ストールは、命令読み出しフェイズの前に 1 命令サイクルの待ち期間を追加する事によって、次の動作の前に書き込みを完了できるようにします。割り込みレイテンシを目的とする場合、ストールサイクルは割り込みが検出された命令の次の命令に対して適用されます( すなわちストールサイクルは常に命令実行サイクルに先行します )。

EDS 付き PIC24F は、RAW データ依存性を検出すると命令ストールを開始します。命令ストール中の動作は下記の通りです。

• 直前の命令による書き込み動作を正常に完了させる

• 命令ストールが終了するまでデータ空間をアドレスしない

• 命令ストールが終了するまで PC をインクリメントしない

• 命令ストールが終了するまで以降の命令をフェッチしない

44.11.2.1 命令ストールサイクルと割り込み

命令ストールが必要な 2 つの連続した命令と割り込みイベントが同時に生じた場合の動作は下記の通りです。

• 割り込みが最初の命令と同時に発生した場合、その命令を完全に実行し、その後 ISR が完了してから次の命令を実行します。この場合、例外処理によって最初の命令の書き込みフェイズを完了するための十分な時間が得られるため、ストールサイクルは挿入されません。

• 割り込みが 2 番目の命令と同時に発生した場合、ISR が完了する前にストールサイクルと2 番目の命令を実行します。この場合、ストールサイクルは通常通り 2 番目の命令の実行に対して適用されます。ただし、ストールサイクルは効率的に例外処理タイミングへ取り込まれます。例外処理は、あたかも通常の 2 サイクル命令に割り込んだかのように動作します。

表 44-4: 書き込み後読み出し (RAW) 依存性の要約

ワーキング レジスタを使

用するデスティネーション アドレッシング モード

ワーキング レジスタを

使用するソース アド

レッシング モード

ステータス例

(Wn = W2)

直接 直接 可能 ADD.w W0, W1, W2MOV.w W2, W3

直接 間接 ストール ADD.w W0, W1, W2MOV.w [W2], W3

直接 間接、変更あり ストール ADD.w W0, W1, W2MOV.w [W2++], W3

間接 直接 可能 ADD.w W0, W1, [W2]MOV.w W2, W3

間接 間接 可能 ADD.w W0, W1, [W2]MOV.w [W2], W3

間接 間接、変更あり 可能 ADD.w W0, W1, [W2]MOV.w [W2++], W3

間接、変更あり 直接 可能 ADD.w W0, W1, [W2++]MOV.w W2, W3

間接 間接 ストール ADD.w W0, W1, [W2]MOV.w [W2], W3; W2=0x0004 (mapped W2)

間接 間接、変更あり ストール ADD.w W0, W1, [W2]MOV.w [W2++], W3; W2=0x0004 (mapped W2)

間接、変更あり 間接 ストール ADD.w W0, W1, [W2++]MOV.w [W2], W3

間接、変更あり 間接、変更あり ストール ADD.w W0, W1, [W2++]MOV.w [W2++], W3

DS39732A_JP - p. 44-26 Advance Information © 2009 Microchip Technology Inc.

Page 27: セクション 44. 拡張データ空間 (EDS) を備えた CPU - …ww1.microchip.com/downloads/jp/DeviceDoc/39732A_JP.pdf命令プリフェッチ機構はスループットの維持を容易にし、予測可能な動作を提供します。プロ

セクション 44. 拡張データ空間 (EDS) を備えた CPU拡張データ空間

(EDS)

を備えた

CPU

44

44.11.2.2 命令ストールサイクルとフロー変更命令

CALLおよびRCALL命令は、ワーキング レジスタW15を使用してスタックへ書き込みます。従って、次の命令のソース読み出しが W15 を使用する場合、これらの命令は次の命令の前に命令ストールを挿入します。

RETFIEおよびRETURN命令は読み出ししか行わないため、次の命令の前に命令ストールを挿入する事はありません。ただし、RETLW 命令は最後のサイクルでワーキング レジスタに書き込むため、命令ストールを挿入する場合があります。

GOTOおよび分岐命令は書き込みを行わないため、命令ストールを挿入する事はありません。

44.11.2.3 命令ストールと REPEATループ

RAW データ依存性は、REPEATループに対して命令ストールを挿入する以外の影響を及ぼしません。

REPEAT ループ内でプリフェッチされた命令は、ループが終了するか例外が発生するまで変化しません。命令と命令の間でレジスタ依存性チェックが発生しますが、EDS 付き PIC24F はREPEATループ中に同一命令のソースとデスティネーションを効果的に比較します。

44.11.2.4 EDS および PSV アクセス中の命令ストール

EDS または PSV アドレッシングを介して物理的に実装された内部メモリ ( プログラムメモリまたはデータメモリ ) 内のデータにアクセスする場合、EDS を介さない場合よりも 1 命令サイクル多くかかります。つまり、データを確実に読み出すために、1 サイクルのストールを挿入します。

EDS または PSV アドレス空間で動作する命令は、RAW データ依存性 ( 結果として命令ストール ) を生じる可能性があります。 下記のコードセグメントについて考えます。

ADD W0,[W1],[W2++] ; W1=0x8000, DSRPAG=0x200MOV [W2],[W3]

この一連の命令の実行には 5 命令サイクルを要します。W1 を介して EDS または PSV アクセスを実行するために 2 命令サイクルが追加され、さらに、W2 によって生じる RAW データ依存性を解消するために 1 命令サイクルのストールが追加されます。EPMP モジュール等の他のバスマスタを介して EDS にアクセスする際の RAW データ依存性の対処方法については「PIC24F ファミリ リファレンス マニュアル」のセクション 42.「拡張パラレルマスタ ポート(EPMP)」 を参照してください。

Note: REPEATループで EDS/PSV 読み出しを行う場合、 最初の 2 回のアクセスにはそれぞれ 3 サイクルを要し、それ以後のアクセスには 1 サイクルだけを要します。

© 2009 Microchip Technology Inc. Advance Information DS39732A_JP - p. 44-27

Page 28: セクション 44. 拡張データ空間 (EDS) を備えた CPU - …ww1.microchip.com/downloads/jp/DeviceDoc/39732A_JP.pdf命令プリフェッチ機構はスループットの維持を容易にし、予測可能な動作を提供します。プロ

PIC24F

ファ

ミリ

リフ

ァレ

ンス

マニ

ュア

DS

39732A_JP

- p. 44-28A

dvance Information

© 2009 M

icrochip Technology Inc.

Bit 2 Bit 1 Bit 0 リセット状態

0000 0000 0000 0000

0000 0000 0000 0000

0000 0000 0000 0000

0000 0000 0000 0000

0000 0000 0000 0000

0000 0000 0000 0000

0000 0000 0000 0000

0000 0000 0000 0000

0000 0000 0000 0000

0000 0000 0000 0000

0000 0000 0000 0000

0000 0000 0000 0000

0000 0000 0000 0000

0000 0000 0000 0000

0000 0000 0000 0000

0000 0000 0000 0000

0000 0000 0000 0000

0000 0000 0000 0000

0000 0000 0000 0000

0000 0000 0000 0001

0000 0000 0000 0001

xxxx xxxx xxxx xxxx

OV Z C 0000 0000 0000 0000

r — — 0000 0000 0000 0100

0000 0000 0000 0000

0000 0000 0000 0000

44.12 レジスタマップ

表 44-5 に EDS 付き PIC24F に関連するレジスタの要約を示します。

表 44-5: EDS 付き PIC24F CPU 関連のレジスタマップ

レジスタ名 Bit 15 Bit 14 Bit 13 Bit 12 Bit 11 Bit 10 Bit 9 Bit 8 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3

W0 W0 (WREG)

W1 W1

W2 W2

W3 W3

W4 W4

W5 W5

W6 W6

W7 W7

W8 W8

W9 W9

W10 W10

W11 W11

W12 W12

W13 W13

W14 W14

W15 W15

SPLIM SPLIM

PCL PCL

PCH — — — — — — — — — PCH

DSRPAG — — — — — — DSRPAG<9:0>

DSWPAG — — — — — — — DSWPAG<8:0>

RCOUNT RCOUNT

SR — — — — — — — DC IPL2 IPL1 IPL0 RA N

CORCON — — — — — — — — — — — — IPL3

DISICNT — — DISICNT<13:0>

TBLPAG — — — — — — — — TBLPAG<7:0>

凡例 : x = 未実装、r = 予約

Note: コアレジスタ マップの詳細は各デバイスのデータシートを参照してください。

Page 29: セクション 44. 拡張データ空間 (EDS) を備えた CPU - …ww1.microchip.com/downloads/jp/DeviceDoc/39732A_JP.pdf命令プリフェッチ機構はスループットの維持を容易にし、予測可能な動作を提供します。プロ

セクション 44. 拡張データ空間 (EDS) を備えた CPU拡張データ空間

(EDS)

を備えた

CPU

44

44.13 関連アプリケーション ノート

本セクションに関連するアプリケーション ノートの一覧を下に記載します。一部のアプリケーション ノートは PIC24F デバイスファミリ向けではありません。ただし、概念は共通しており、変更が必要であったり制限事項が存在するものの利用が可能です。拡張データ空間 (EDS) 付きの CPU に関連する最新のアプリケーション ノートは以下の通りです。

タイトル アプリケーション ノート番号

現在、関連するアプリケーション ノートはありません。

Note: PIC24F ファミリ関連のアプリケーション ノートとサンプルコードは弊社ウェブサイト (www.microchip.com) でご覧頂けます。

© 2009 Microchip Technology Inc. Advance Information DS39732A_JP - p. 44-29

Page 30: セクション 44. 拡張データ空間 (EDS) を備えた CPU - …ww1.microchip.com/downloads/jp/DeviceDoc/39732A_JP.pdf命令プリフェッチ機構はスループットの維持を容易にし、予測可能な動作を提供します。プロ

PIC24F ファミリ リファレンス マニュアル

44.14 改訂履歴

リビジョン A (2009 年 12 月 )本書の初版

ISBN: 978-1-60932-680-7

DS39732A_JP - p. 44-30 Advance Information © 2009 Microchip Technology Inc.