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

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

7.2.2. DMA Descriptor Controllerレジスター

DMA Descriptor Controllerは、DMAのReadおよびWrite動作を管理します。DMA Descriptor Controllerは、エンドポイント・バリエーションで使用可能です。Descriptor Controllerは、ReadおよびWrite Data Moverごとに最大128個のディスクリプターをサポートします。ReadおよびWriteは、FPGAの観点からです。読み出しは、 PCIe* アドレス空間からFPGA Avalon-MMアドレス空間へです。書き込みは、FPGA Avalon-MM空間から PCIe* アドレス空間へです。

Descriptor Controllerの内部レジスターは、 PCIe* アドレス空間にあるディスクリプター・テーブルの位置およびサイズでプログラムします。DMA Descriptor Controllerは、テーブルを独自の内部FIFOにコピーするよう、Read Data Moverに指示します。DMA Descriptor Controllerが別のコンポーネントとしてインスタンス化されると、RdDmaRxData_i[159:0] および WrDmaRxData_i[159:0] バス上のテーブルエントリーを駆動します。DMA Descriptor ControllerがAvalon-MM DMAブリッジ内に組み込まれている場合、この情報は内部バスで駆動されます。

Read Data Moverは、PCIeアドレス空間からAvalon-MMアドレス空間にデータを転送します。PCIeリンクでメモリー読み出しTLPを発行します。返されたデータをAvalon-MMアドレス空間内の位置に書き込みます。ソースアドレスは、PCIeアドレス空間内のデータのアドレスです。送信先アドレスは、Avalon-MMアドレス空間にあります。

Write Data Moverは、Avalon-MMアドレス空間からデータを読み出し、PCIeアドレス空間に書き込みます。PCIeリンクでメモリー書き込みTLPを発行します。ソースアドレスは、Avalon-MMアドレス空間にあります。送信先アドレスは、PCIeアドレス空間にあります。

DMA Descriptor Controllerは、読み出しディスクリプターおよび書き込みディスクリプターの完了ステータスを別々のステータステーブルに記録します。各テーブルには、128個のディスクリプターに対応する128個の連続したDWORDエントリーがあります。実際のディスクリプターは、RC Read Descriptor Base および RC Write Descriptor Base レジスターにプログラムされた値からのオフセット0x200のステータスエントリーの直後に格納されます。ステータスおよびディスクリプター・テーブルは、 PCIe* 物理アドレス空間の32バイト境界に配置する必要があります。

Descriptor Controllerは、ステータスDWORDの Update ビットに1を書き込み、正常に完了したことを示します。Descriptor Controllerは、各トランザクションの最後のディスクリプターのMSI割り込みも送信します。RD_CONTROL または WR_CONTROLレジスターの Update ビットが設定されている場合は、各ディスクリプターの後に送信します。このMSIを受信した後、ホスト・ソフトウェアは Update ビットをポーリングして、ステータスを決定できます。ステータステーブルは、メモリー内のディスクリプター・テーブルの前にあります。Descriptor Controllerは、各ディスクリプターの完了時に Update ビットを書き込んだり、MSIを送信しません。RD_CONTROL または WR_CONTROL レジスターの Update ビットが設定されていない限り、Update ビットを書き込むか、IDが RD_DMA_LAST PTR または WR_DMA_LAST_PTR レジスターに格納されているディスクリプターのMSIを送信するのみです。

注: DMA Descriptor ControllerはFIFOを使用してディスクリプター・テーブルのエントリーを格納するため、ディスクリプター・テーブルで指定された転送を開始すると、DMA Descriptor Controllerを再プログラムすることはできません。