Skip to content

Latest commit

 

History

History
69 lines (45 loc) · 2.38 KB

cycle.md

File metadata and controls

69 lines (45 loc) · 2.38 KB

サイクル

  • n = 転送するワード(32bit)の数
  • m = 乗算命令のオペランドの最上位バイトに依存
命令 サイクル 備考
ALU 1S +1S+1N if R15 loaded, +1I if SHIFT(Rs)
MSR,MRS 1S --
LDR 1S+1N+1I +1S+1N if R15 loaded
STR 2N --
LDM nS+1N+1I +1S+1N if R15 loaded
STM (n-1)S+2N --
SWP 1S+2N+1I --
BL (THUMB) 3S+1N --
B,BL 2S+1N --
SWI,trap 2S+1N --
MUL 1S+ml --
MLA 1S+(m+1)I --
MULL 1S+(m+1)I --
MLAL 1S+(m+2)I --
{cond} false 1S --

N - ノンシーケンシャルサイクル

前のサイクルで使用されたアドレスと連続していないアドレスへのアクセスを要求した場合にかかる時間です。

GBAではこのアクセスのことをファーストアクセスといいます。

1Nの実行時間は

  • 通常: 1(クロックサイクル)
  • カートリッジ: 1 + WaitStateN

です。

S - シーケンシャルサイクル

前のサイクルで使用されたアドレスの直後に位置するアドレスへのアクセスを要求した場合にかかる時間です。

GBAではこのアクセスのことをセカンドアクセスといいます。

1Sの実行時間は

  • 通常: 1(クロックサイクル)
  • カートリッジ: 1 + WaitStateS

です。

I - 内部サイクル

単純にCPUのクロックサイクルのことです。

つまり、1Iの実行時間は 1(クロックサイクル)です。

WaitState - 待ち時間

メモリのアクセスには、本来WaitStateがない方が望ましいです。 つまり、1Nと1Sはそれぞれ1クロックサイクルに等しくなるべきです。

しかし、時間のかかるカートリッジへのアクセスやデータバス幅が小さいメモリ領域に対しての(32bit)アクセスは、1クロックサイクルでは完了しません。

その場合には、アクセスできるまでWaitState(待機状態)である必要があります。

ここではWaitStateという言葉を

  • アクセスできるようになるまでの時間(サイクル)
  • アクセスできるまでの待機状態

の2つの意味で用います。(経験上はほとんど前者です。)