• 検索結果がありません。

アラインメントされていない転送

ドキュメント内 Cyclove V、 Volume 3、第16章:DMAコントローラ (ページ 52-57)

次の項では、アラインメントされていない転送の例を示しています。

アラインメントされていないデスティネーション・アドレスへのアラインメントさ れたソース・アドレス

このプログラムでは、ソース・アドレスがAXIデータ・バス幅とアラインメントさ れていますが、デスティネーション・アドレスがアラインメントされていません。 デ スティネーション・アドレスは、デスティネーション・バースト・サイズにアライ ンメントされていないので、最初のDMAST命令は、 最初の DMALD 命令リードよりも少 ないデータを削除します。 したがって、シングル・ワードの最後のDMASTは MFIFO バッファからデータを消去する必要があります。

図 16‒26. 複数のストアとのアラインメントされた非対称プログラム

例 16‒6. アラインメントされていないデスティネーション・アドレスへのアラインメン トされたソース・アドレス

DMAMOV CCR?SB4 SS64 DB4 DS64 DMAMOV SAR?0x1000

DMAMOV DAR?0x4004 DMALP 16

DMALD ; shown as a1?... a?an in ? 16–27 DMAST ; shown as b in ? 16–27

DMALPEND

DMAMOV CCR?SB4 SS64 DB1 DS32 DMAST ; shown as c in ? 16–27 DMAEND

Data from DMALD

a a a a a a a a 0 7

Data for 4 × DMAST

DMALD

DMAST a a a a a a a a a a a a a a a a a a a a a a a a 0

4

d c b a

e d c b a

d c b a

e e

図 16–27 には、このプログラムのMFIFOバッファの使用方法を示しています。

最初のDMALD命令は、4つのダブル・ワードをロードしますが、デスティネーショ

ン・アドレスがアラインメントされていないので、DMACは4バイトでシフトしま す。したがって、MFIFOバッファ内の5つのエントリを使用しています。

各DMASTは4つのデータ・エントリのみが必要です。したがって、最後のDMASTに

よって空になるまで、余分なエントリは、プログラム期間中は使用中の状態を維持 します。

この例では、1つのMFIFOバッファ・エントリのスタティック要件および4 つの

MFIFOバッファ・エントリのダイナミック要件があります。

図 16‒27. アラインメントされたプログラムからアラインメントされていないプログラ ムへ

Data from DMALD

a1 a1 a1 a1

0 7

Data for first DMAST

DMALD

DMAST a1 a1 a1 a1 a1 a1 a1 a1

a1 a1 a1 a1 a1 a1 a1 a1

a1 a1 a1 a1 a1 a1 a1 a1

0 5

1 a1

b

a a an

b b b

c a a a a a1 a1 a1 a1

a a a a a a a a a a a a a a a a a a a a a a a a

an an an an

Data for 15 × DMAST

Data for last DMAST

.

.

.

アラインメントされたデスティネーション・アドレスへのアラインメントされてい ないソース・アドレス

このプログラムでは、ソース・アドレスがAXIデータ・バス幅でアラインメントさ れていませんが、デスティネーション・アドレスがアラインメントされています。

ソース・アドレスは、ソース・バースト・サイズにアラインメントされていないた め、最初のDMALD命令がDMAST未満のデータを読み込むようになります。 そのため、

余分なDMALDは最初のDMASTを満たすために必要とされます。

図 16–28 には、このプログラムのMFIFOバッファの使用方法を示しています。

1 DMACがすでにこのチャネルに割り当てたMFIFOバッファ・エントリに4バイトをロー ドするので、dに示されるDMALDは MFIFOバッファ使用量を増加させません。

例 16‒7. アラインメントされたデスティネーション・アドレスへのアラインメント されていないソース・アドレス

DMAMOV CCR?SB4 SS64 DB4 DS64 DMAMOV SAR?0x1004

DMAMOV DAR?0x4000

DMALD ; shown as a in ? 16–28 DMALP 15

DMALD ; shown as b1?... b?bn in ? 16–28 DMAST ; shown as c in ? 16–28

DMALPEND

DMAMOV CCR?SB1 SS32 DB4 DS64 DMALD ; shown as d in ? 16–28 DMAST ; shown as e in ? 16–28 DMAEND

図 16‒28. アラインメントされたプログラムからアラインメントされていないプログ ラムへ

0 4 a

b1

c

b bn

c c

d

e 8

Data from DMALD

a a a a a a a a 0 7

Data for first DMAST

DMALD

DMAST a a a a a a a a a a a a a a a a b1 b1 b1 b1 a a a a b1 b1 b1 b1 b1 b1 b1 b1

b1 b1 b1 b1 b1 b1 b1 b1

b1 b1 b1 b1 b1 b1 b1 b1

b b b b b1 b1 b1 b1

Data for

14 × DMAST

.

. .

bn bn bn bn bn bn bn

bn

bn bn bn bn bn bn bn bn

bn bn bn bn bn bn bn bn

d d d d bn bn bn bn

Data for last DMAST

最初のDMALD命令は、DMASTを実行するDMACをイネーブルするために十分なデータ をロードしません。したがって、ループの開始する前に追加のDMALDを含みます。

最初のDMALDの後、後続のDMALDはソース・バースト・サイズに合わせます。 これ

は、p性能を最適化しますが、MFIFOバッファ・エントリの多くを必要とします。

この例では、4つのMFIFOバッファ・エントリのスタティック要件および1 つの

MFIFOバッファ・エントリのダイナミック要件があります。

超過初期ロードによるアラインメントされていないソース・アドレスからアライン メントされたデスティネーション・アドレス

このプログラムは、16–54ページの「アラインメントされたデスティネーション・ア ドレスへのアラインメントされていないソース・アドレス」で説明するための代替 手段です 。プログラムは、あまり効率的かもしれないソース・バーストの異なる シーケンスを使用しますが、少ないMFIFOバッファ・エントリを必要とします。プ ログラムは、それほど効率的でないかもしれませんが、より少数のMFIFOバッ ファー・エントリーを要求する出所爆発の異なるシーケンスを使用します。

例 16‒8. 超過初期ロードによるアラインメントされていないソース・アドレスからアラ インメントされたデスティネーション・アドレス

DMAMOV CCR?SB5 SS64 DB4 DS64 DMAMOV SAR?0x1004

DMAMOV DAR?0x4000

DMALD ; shown as a in ? 16–29 DMAST ; shown as b in ? 16–29 DMAMOV CCR?SB4 SS64 DB4 DS64 DMALP 14

DMALD ; shown as c and cn in ? 16–29 DMAST ; shown as d in ? 16–29

DMALPEND

DMAMOV CCR?SB3 SS64 DB4 DS64 DMALD ; shown as e in ? 16–29 DMAMOV CCR?SB1 SS32 DB4 DS64 DMALD ; shown as f in ? 16–29 DMAST ; shown as g in ? 16–29 DMAEND

図 16–29 には、このプログラムのMFIFOバッファの使用方法を示しています。

1 DMACがすでにこのチャネルに割り当てたMFIFOバッファ・エントリに4バイトをロー ドするので、fと示されるDMALDは MFIFOバッファ使用量を増加させません。

最初のDMALD命令は、最初のDMASTを実行するDMACをイネーブルするには、5 ビートのデータをロードします。

最初のDMALDの後、以後のDMALD はソース・バースト・サイズにアラインメントさ

れていません。例えば、最初のDMALDは、アドレス0x1028から読み出します。 ルー プの後、最後の2つのDMALDは最終のDMASTを満たすために必要なデータを読み出 します。

この例では、1つのMFIFOバッファ・エントリのスタティック要件および4つの

MFIFOバッファ・エントリのダイナミック要件があります。

図 16‒29. 超過初期ロードによるアラインメントされていなからアラインメントされた

0 5

1 a

b

c c cn

d

e

d d

f

g 4

Data from DMALD

a a a a a a a a 0 7

Data for first DMAST

DMALD

DMAST a a a a a a a a a a a a a a a a c c c a a a a c c c c c c c c c c c c c c c c c c c c c c c c

e e e e cn cn cn cn

Data for

14 × DMAST

.

. .

e e e e e e e e e e e e e e e e f f f f e e e e Data for

last DMAST

a a a a a a a a

c

アラインメントされたバースト・サイズのアラインメントされていない MFIFO バッ ファ

このプログラムでは、MFIFOバッファ幅より狭くなっているデスティネーション・

アドレスは、バースト・サイズとアラインメントされていますが、MFIFOバッファ 幅とはアラインメントされていません。

図 16–30 には、このプログラムのMFIFOバッファの使用方法を示しています。

この例では、デスティネーション・アドレスは64ビット・アラインメントではな く、それは2つの予期されたMFIFOバッファ・エントリーではなく3つを必要とし ます。

この例では、0のMFIFOバッファ・エントリのスタティック要件と3つMFIFOバッ ファ・エントリのダイナミック要件があります。

ドキュメント内 Cyclove V、 Volume 3、第16章:DMAコントローラ (ページ 52-57)

関連したドキュメント