PCI Express* 用のインテル® Stratix® 10 HタイルおよびLタイル Avalon® メモリー・マップド・ハードIPユーザーガイド

ID 683667
日付 6/03/2020
Public
ドキュメント目次

8.3. 同時読み書きDMA用のソフトウェア・プログラム

次の手順をプログラムして、同時DMA転送を実装します。

  1. ReadおよびWrite DMAディスクリプター・テーブル用に、 PCIe* システムメモリーを割り当てます。例えば、各テーブルが最大128個の8 DWORDディスクリプターおよび128個の1 DWORDステータスエントリーをサポートする場合、合計1152 DWORDになります。ReadおよびWrite DMAディスクリプター・テーブルの合計メモリーは、2304 DWORDです。
  2. PCIe* システムメモリーを割り当て、Read Data Moverが読み出すデータで初期化します。
  3. Write Data Moverが書き込む PCIe* システムメモリーを割り当てます。
  4. 読み出しDMAディスクリプター・テーブルのすべてのディスクリプターを作成します。DMA Descriptor IDs を0から最大127まで順番に割り当てます。読み出しDMAの場合、ソースアドレスは手順2で割り当てられたメモリー空間です。送信先アドレスは、Read Data Moverモジュールが書き込むAvalon‑MMアドレスです。DMAの長さをDWORDで指定します。各ディスクリプターは連続したメモリーを転送します。Read DMAのベースアドレスが0であると想定すると、次の割り当ては読み出しディスクリプターの構築を示しています。
    1. RD_LOW_SRC_ADDR = 0x0000 (PCIeシステムメモリー内の読み出しディスクリプター・テーブルのベースアドレス。)
    2. RD_HIGH_SRC_ADDR = 0x0004
    3. RD_CTRL_LOW_DEST_ADDR 0x0008
    4. RD_CTRL_HIGH_DEST_ADDR = 0x000C
    5. RD_DMA_LAST_PTR = 0x0010
    RD_DMA_LAST_PTR レジスターに書き込むと、動作が開始します。
  5. Write DMAの場合、ソースアドレスはWrite Data Moverモジュールが読み出すAvalon‑MMアドレスです。送信先アドレスは、手順3で割り当てられた PCIe* システムメモリー空間です。DMAサイズをDWORDで指定します。Write Data Moverの0x100のベースアドレスを想定すると、次の割り当ては書き込みディスクリプターの構築を示しています。
    1. WD_LOW_SRC_ADDR = 0x0100 ( PCIe* システムメモリー内の書き込みディスクリプター・テーブルのベースアドレス。)
    2. WD_HIGH_SRC_ADDR = 0x0104
    3. WD_CTRL_LOW_DEST_ADDR 0x0108
    4. WD_CTRL_HIGH_DEST_ADDR = 0x010C
    5. WD_DMA_LAST_PTR = 0x0110
    WD_DMA_LAST_PTR レジスターに書き込むと、動作が開始します。
  6. スループットを向上させるために、Read DMAモジュールは、動作を開始する前にディスクリプター・テーブルをAvalon-MMメモリーにコピーします。Descriptor Table Base (Low) および (High) レジスターに書き込むことにより、メモリーアドレスを指定します。
  7. 完了したそれぞれの WD_DMA_LAST_PTR または RD_DMA_LAST_PTR に対して、MSI割り込みが送信されます。この完了により、Update ビットが更新されます。その後、ホスト・ソフトウェアは Update ビットを読み出して、どのDMA動作が完了したかを決定します。
注: 読み出しDMAの転送サイズが読み出し要求の最大サイズより大きい場合、Read DMAは複数の読み出し要求を作成します。例えば、読み出し要求の最大サイズが512バイトの場合、Read Data Moverは、4 KBの読み出し要求を8つの異なるタグを持つ8つの要求に分割します。Read Completionは任意の順序で戻ることができます。Read Data MoverのAvalon-MMマスターポートは、Read Completionで受信したデータを、Completionを受信したのと同じ順序でタグに基づいて、 Avalon® -MMメモリーの正しい位置に書き込みます。この順序は必ずしもアドレスの昇順ではありません。データムーバーには、内部の並び替えバッファーは含まれていません。システムが順不同の読み出し完了を許可している場合、最新のエントリーの状況は最新のものであり、他の完了よりも時系列的に早くなる可能性があります。