FC2カウンター FPGAの部屋 AXI VDMAのお勉強3(Scatter Gather Mode)
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

AXI VDMAのお勉強3(Scatter Gather Mode)

最初の記事は、”AXI VDMAのお勉強
前の記事は、”AXI VDMAのお勉強2(Register Direct Mode)

Scatter Gather Mode (C_INCLUDE_SG = 1) (92ページ)
Scatter Gather Modeとは、AXI VDMA操作が実行されるDMA操作のリストを保持するメモリ常駐のデータ構造を必要とする。DMA命令のリストは、ディスクリプタのチェーンと呼ばれるもので構成されている。各ディスクリプタは、処理すべき次の記述子へのポインタを持っていて、最後のディスクリプタはチェーンの最初のディスクリプタへのポインタを持っている。つまりチェーンをグルっと回ってDMA転送しているわけね。

VDMAを行う前に、descriptor pointer registers と DMA control registers をセットアップする。下に最低限の手順を示す。

1.チャネルの CURDESC_PNTRレジスタに有効なポインタを書く (Offset 0x08 for MM2S and 0x38 for S2MM)。

2.チャネルの DMACRレジスタにコントロール情報を書く (Offset 0x00 for MM2S and 0x30 for S2MM) 。いろいろな設定があるが、DMACR.RS=1でDMAが開始される。DMAのステータス・レジスタのHalt解除(DMASR.Halted = 0)にはタイムラグがあるそうだ。

3.チャネルの TAILDESC_PNTRレジスタに有効なポインタを書く (Offset 0x10 for MM2S and 0x40 for S2MM)。ディスクリプタをフェッチし、そして処理してチャネルをスタートする。

4.DMA scatter gather処理は、TAILDESC_PNTRが処理されるまで続く。終了すると DMASR.Idle = 1となる。

・C_NUM_FSTORESの値だけ、ディスクリプタのチェーンがある。
・Scatter Gatherエンジンは、ディスクリプタを読んで、内部レジスタをアップデートする。
・画像のタイミング情報 (vsize, hsize, stride, and frame delay)は、最初のディスクリプタから読まれて、その後のディスクリプタの画像情報は無視される。
・スタート・アドレスは、C_NUM_FSTORESの数のスタート・アドレス・レジスタに書き込まれる。

・ディスクリプタのポインタが、TAILDESCなった次の frame sync(C_USE_FSYNC = 0だと内部同期信号で、 C_USE_FSYNC = 1,2,3だと外部同期信号)でIDLE状態になるそうです。
・次の frame syncで、DMAコントローラは、新たに更新された値で動作するように内部レジスタセットを変更する。(あまり意味がよくわからない?)
・途中、言っている意味がよくわからないので飛ばします。
・DMAコントローラは、SGエンジンは、末尾ポインタに到達して一時停止した場合でも、映像データを転送し続ける。これは、中断のないビデオ·データ転送を可能にする。

Updating Video Transfer Information(93ページ)
・ビデオ転送情報を更新するには、CPUが新しいスタート・アドレス、vsize, hsize, stride や frame delay情報をTAILDESC で示されたメモリアドレスの後に書く。
・その後で新しいTAILDESC を指定すると、自動的に Scatter Gather DMAするようです。
・チャネルに新しいパラメータで動作した時、mm2s_fsync と s2mm_fsync に同期して、mm2s_prmtr_update とs2mm_prmtr_update が出力される。

(重要) On the S2MM channel, new video line size and number of video lines need to change following the assertion of s2mm_prmtr_update or undefined results occur.
そのまま引用。S2MMチャネルでは、画像のラインサイズやライン数を変更した後に、s2mm_prmtr_update がアサートされるか、定義されていない結果が起こると言っているのだろうか?(英語に自信が無いので、すみません)

・ AXI VDMA Scatter Gatherエンジンは、MM2SとS2MMチャンネルに独立のディスクリプタキューと内部レジスタセットを持っていて、独立に動作する。

Additional Design Information(101ページ)
Scatter Gather Descriptor
ディスクリプタ・チェーンは、MM2S_FRMSTORE and S2MM_FRMSTORE ディスクリプタから構成されて、1つのディスクリプタは32ビット7個で構成されるそうです。
ディスクリプタの構成が102ページから105ページまでに書いてあります。
  1. 2013年05月19日 05:15 |
  2. IP
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/2467-806bb340
この記事にトラックバックする(FC2ブログユーザー)