Multi Channel DMA Intel® FPGA IP for PCI Express* デザイン例のユーザーガイド

ID 683517
日付 10/06/2023
Public
ドキュメント目次

2.8. External Descriptor Controller

外部記述子コントローラーのデザイン例は、データムーバー動作モードのMCDMA IPコアとともに記述子のフェッチとキュー管理をサポートします。デザイン例では次の機能をサポートします。
  • 合計16個のDMAチャネル (16個のH2Dキューと16個のD2Hキュー)
  • H2DおよびD2Hのデータムーバーに個別の記述子コマンドキューをサポート
  • 記述子完了メカニズムとしてライトバック (WB) をサポート
  • 割り込みサポートはなし
次の図は、デザイン例の概略ブロック図です。
図 22. デザイン例の概略ブロック図
次の図は、外部記述子コントローラー・ブロックの内部を表すものです。
図 23. 外部記述子コントローラー・デザイン例

Global/Queue CSR: DMA動作の制御に必要なグローバルCSRレジスターとQueue CSRレジスターを実装します。これらのレジスターへの読み出し/書き込みアクセスは、MCDMA IPのBAMインターフェイスを介して行われます。レジスターの詳細については、レジスター のセクションを参照してください。

H2D/D2H Descriptor Fetch: このブロックは、QCSRレジスターのコンテキストに基づき記述子フェッチコマンドを h2ddm_desc インターフェイスで生成します。

Descriptor Completion Processing: このブロックは、MCDMAに送信された記述子フェッチ要求に対する、h2ddm_desc_cmpl インターフェイスで受信した記述子完了パケットを処理し、受信した記述子を対応する記述子キューバッファー (H2D/D2H Descriptor Queue) に格納します。これらのフェッチされた記述子はキューに入り、対応するデータムーバー・コマンドが h2ddm_desc または d2hdm_desc インターフェイスを介してMCDMA IPに送信されます。

Descriptor Status Processing: このブロックは、h2ddm_desc_status および d2hdm_desc_status インターフェイスで受信したステータス情報を処理し、MCDMA IPに対する適切なライトバック・コマンドを d2hdm_desc インターフェイスで生成します。

記述子のフェッチ動作

次に、記述子のフェッチプロセスを説明します。

  1. ソフトウェアはQCSRのキュー・コンテキスト・レジスターを更新し、Tail Pointerレジスター (D2Hの場合はオフセット0x10、H2Dの場合はオフセット0x90) を更新します。
  2. H2D/D2H Descriptor fetch ブロックはTail Pointerレジスターの更新を検出し、記述子フェッチコマンドをMCDMAの h2ddm_desc インターフェイスで生成し、ホストメモリーから記述子を取得します。
  3. フェッチされる記述子の数は、Head Pointer (D2Hの場合はオフセット0x18、H2Dの場合はオフセット0x98) とTail Pointer (D2Hの場合はオフセット0x10、H2Dの場合はオフセット0x90) の差によって決まります。
  4. Head Pointerレジスター (D2Hの場合はオフセット0x18、H2Dの場合はオフセット0x98) は、フェッチされる記述子の数に基づき更新されます。
  5. MCDMAは、受信した記述子の完了を h2ddm_desc_cmpl インターフェイスで提供します。
  6. 受信する記述子は、それぞれのキューバッファー (H2D/D2H Descriptor Queue) に格納されます。
  7. 記述子のフェッチプロセスは、複数のキューに対してラウンドロビン調停方式で発生します。

H2Dのデータ移動動作

  1. H2D Descriptor Queue から記述子が取り出され、対応するデータムーバー・コマンドに変換されて、h2ddm_desc インターフェイスを介してMCDMAに送信されます。
  2. データ転送は、H2D Data Mover AVMM書き込みマスターを介してホストメモリーから DMA_MEM で発生します。
  3. データ転送が完了すると、MCDMAはステータスを h2ddm_desc_status インターフェイスで送信します。
  4. ステータス情報は Descriptor Status Processing ブロックで処理され、MCDMAへの適切なライトバック・コマンドが d2hdm_desc インターフェイスで生成されます。
  5. Completed Pointerレジスター (H2Dの場合はオフセット0xA8) は、処理された記述子の数に基づき更新されます。
  6. このフローは、H2D Descriptor Queue のすべての記述子に対して継続します。

D2Hのデータ移動動作

  1. D2H Descriptor Queue から記述子が取り出され、対応するデータムーバー・コマンドに変換されて、d2hdm_desc インターフェイスを介してMCDMAに送信されます。
  2. データ転送は、D2H Data Mover AVMM読み出しマスターを介して DMA_MEM からホストメモリーで発生します。
  3. データ転送が完了すると、MCDMAはステータスを d2hdm_desc_status インターフェイスで送信します。
  4. ステータス情報は Descriptor Status Processing ブロックで処理され、MCDMAへの適切なライトバック・コマンドが d2hdm_desc インターフェイスで生成されます。
  5. Completed Pointerレジスター (D2Hの場合はオフセット0x28) は、処理された記述子の数に基づき更新されます。
  6. このフローは、D2H Descriptor Queue のすべての記述子に対して継続します。
一般的なMCDMAとデザイン例の違いを次の表に示します。
表 17.  一般的なMCDMAとデザイン例の違い
機能 一般的なMCDMA 外部記述子コントローラー・デザイン例

DMAチャネル

最大2K

16に固定

SRIOV

あり

なし

MSI-X

あり

なし

(MSI-Xは、今後のリリースでサポートされる可能性があります。)

ライトバック

あり

あり

Queue CSR

あり

あり

(詳細は、レジスターの表を参照してください。)

MSI

なし

なし

記述子リンクのビット

あり

なし

(記述子は連続する位置に連続して形成され、QCSRの開始アドレスで提供されます。)

次の表では、ホスト記述子を簡潔に説明しています。
注: D2HとH2Dでは記述子の形式のみが同じです。記述子は個別のリング内にあります。
表 18.  ホストの記述子の形式
名称 詳細

SRC_ADDR[63:0]

64

割り当てられているバッファーのソースアドレス。DMAによって読み出されます。

DEST_ADDR[127:64]

64

割り当てられているバッファーの宛先アドレス。DMAによって書き込まれます。

PYLD_CNT[147:128]

20

DMAペイロードサイズ (バイト単位)。最大1MB、20'h0は1MBを示します。

RSRV[159:148]

12

予約済み

DESC_IDX [175:160]

16

各記述子の一意の識別子。同じ番号がQ_COMPLETED_POINTERに適用されます。

テールポインターとして使用される記述子カウントと同じです。

例えば、4Kページにある128個の記述子の場合、記述子のカウントは1から128までとなります。

MSIX_EN[176]

1

MSIXを有効にします。

WB_EN[177]

1

ライトバックを有効にします。

RSRVD [255:178]

78

予約済み