FC2カウンター FPGAの部屋 AXI VDMAのお勉強
FC2ブログ

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

FPGAの部屋

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

AXI VDMAのお勉強

AXI VDMAはXilinx社のEDK用のIPコアだ。この使い方を勉強するので、覚書として書いておくことにした。

AXI VDMAのマニュアル。ビデオ信号を取り扱う、つまり画面表示を行うIP。
AXI VDMA リファレンス デザイン XAPP742 (v1.0) 2012 年 5 月 3 日も参考になる。

・AXI VDMAには、S_AXI_LITE, M_AXI_MM2S, M_AXI_S2MM, M_AXIS_MM2S, M_AXIS_S2MM の2つのポートがある。
・S_AXI_LITE は通常はプロセッサ (MicroBlaze, ARMなど) にメモリマップされて、AXI VDMAのレジスタをアクセスするために使用される。
・M_AXI_MM2S (Read Master), M_AXI_S2MM (Write Master) はメモリマップドのAXI4バス。
・M_AXIS_MM2S, M_AXIS_S2MMは、ストリーム転送のAXI4-Streamバス。
・M_AXI_MM2S でメモリからReadしたデータを M_AXIS_MM2S へAXI4-Streamとしてデータ転送する。
・M_AXIS_S2MM で画像のストリームデータを受け取り、M_AXI_S2MM でメモリへ書き込む。
・図1にXPS上のAXI VDMA IPとそのデータの流れを示す。
axi_vdma_1_121218.png

・HDMIから入出力するIPを付けると(Digilent社の axi_hdmi)、AXI4-Stearmで画像をやり取りするので、AXI VDMAを付けて、DDR2 SDRAMに画像をバッファする(Atlysボード)
・使い方としては、レジスタをAXI4 Liteから直接叩く方法と、Xilinx/14.3/ISE_DS/EDK/sw/XilinxProcessorIPLib/drivers/axivdma_v4_01_a/doc/html/api/index.html に書いてあるDriver を使用する方法がある。

・最初にDriver を使用する方法を勉強する。
・Driver の初期化手順
 1.XAxiVdma_LookupConfig() 、構造体を選択する。
 2.XAxiVdma_CfgInitialize() 、ドライバとデバイスを初期化する。
 3.XAxiVdma_SetFrmStore() 、フレーム・ストアの数をセットする(オプション)。
 4.割り込みが必要な場合
  1.XAxiVdma_SetFrameCounter()、フレーム・カウンタをセットする。
  2.各チャネルのためのコールバック関数をセットする。(コールバック関数には、一般とエラーの2つのタイプがある)
  3.割り込みをイネーブルする。

・DMAトランザクションの開始
ドライバAPIを使用して、DMAトランザクションを開始するためには2つの方法がある。
 1.Writeの時には、XAxiVdma_StartWriteFrame() 、Readの時には、XAxiVdma_StartReadFrame() を呼び出す
 2.次に示すように順番に関数を呼び出す。
  1.XAxiVdma_DmaConfig() を呼び出して、DMA操作のコンフィギュレーションを行う。
  2.XAxiVdma_DmaSetBufferAddr() を呼び出して、DMAバッファを設定する。
  3.XAxiVdma_DmaStart() を呼び出して、DMA操作を開始します。

・割り込み処理
各DMチャネルは2種類の割り込みをサポートしている。
 1.一般割り込み:エラー以外
 2.エラー割り込み:エラーが起こった時
割り込みが起こると、予め設定しておいたコールバック関数が呼び出される。

・リセット
下に示す状態になるとDMAチャネルがリセットされる。
 1.Interrupts are disabled
 2.Coalescing threshold is one
 3.Delay counter is 0
 4.RUN/STOP bit low
 5.Halted bit high
 6.XAXIVDMA_CDESC_OFFSET register has 0
 7.XAXIVDMA_TDESC_OFFSET register has 0

リセットが終了したのを確認するために、XAxiVdma_ResetNotDone() を使用する。

次に記事は、”AXI VDMAのお勉強2(Register Direct Mode)
  1. 2012年12月18日 13:22 |
  2. IP
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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