PCI Expressのマルチチャネル DMA インテル® FPGA IPユーザー ガイド

ID 683821
日付 4/20/2022
Public
ドキュメント目次

9.1. キュー・コントロール (QCSR)

QCSR スペースには、キュー・コントロールおよびステータス情報が含まれます。この 1 MB のレジスタースペースは、最大 2048 の H2D および 2048 の D2H キューをサポートでき、各キューには 256 バイトのレジスタースペースが割り当てられます。各機能に割り当てられるメモリースペースは、各機能がすべての DMA チャネルを割り当てるのに十分です。ただし、実際の数は、IP 生成時に入力されたパラメーターによって異なります。

アドレス [7:0] : キューのレジスター

アドレス [18:8]: キュー番号

アドレス [6:19]: 0'D2H: H2D

次のレジスターは、H2D/D2H キュー用に定義されています。H2DとD2Hのベース アドレスは異なりますが、レジスター (H2D と D2H) のアドレス オフセットは同じです。

表 144.  キュー・コントロールのレジスター
レジスター名 アドレスオフセット アクセスタイプ 詳細
Q_CTRL 8’h00 読出/書込 コントロール・レジスター
RESERVED 8’h04   予約済み
Q_START_ADDR_L 8’h08 読出/書込 システムメモリー内のキュー・ベース・アドレスの下位 32 ビット。これは、ディスクリプターを含む 4KB ページのリンクリストの先頭です。
Q_START_ADDR_H 8’h0C 読出/書込 システムメモリー内のキュー・ベース・アドレスの上位32ビット。これは、ディスクリプターを含む 4KB ページのリンクリストの先頭です。
Q_SIZE 8’h10 読出/書込 キュー内の最大エントリ数。 2の累乗のみ。
Q_TAIL_POINTER 8’h14 読出/書込 ホストメモリー内の最後の有効なディスクリプター・キュー エントリーへの現在のポインター。
Q_HEAD_POINTER 8’h18 読み出し専用 フェッチされた最後のディスクリプターへの現在のポインター。ディスクリプター・フェッチ エンジンによって更新されます。
Q_COMPLETED_POINTER 8’h1C 読み出し専用 DMA が完了した後に最後に完了したポインター。ライトバックが無効になっている場合、ソフトウェアはこれをポーリングしてステータスを取得できます。
Q_CONSUMED_HEAD_ADDR_L 8’h20 読出/書込 リング消費ポインタが格納されているシステムアドレスの下位32ビット。このアドレスは、消費されたポインターの書き戻しに使用されます。
Q_CONSUMED_HEAD_ADDR_H 8’h24 読出/書込 リング消費ポインタが格納されるシステムアドレスの上位32ビット。このアドレスは、消費されたポインターの書き戻しに使用されます。
Q_BATCH_DELAY 8’h28 読出/書込 フェッチの効率を最大化するために、前のフェッチからの経過時間がこのレジスターの遅延値を超えるまで、ディスクリプターのフェッチを遅らせます。
RESERVED 8’h2C   予約済み
RESERVED 18’h30   予約済み
RESERVED 8’h34   予約済み
Q_DEBUG_STATUS_1 8’h38 RO 予約済み
Q_DEBUG_STATUS_2 8’h3C RO 予約済み
Q_DEBUG_STATUS_3 8’h40 RO 予約済み
Q_PYLD_CNT 8’h44 読出/書込

20 ビットのペイロード・カウント。 DMA ペイロード・サイズ (バイト単位) で、64 バイト アラインされている必要があります。最大 1 MB。20'h0 は 1 MB を示します。このレジスターに設定された値は、各チャネルのディスクリプターの PYLD_CNT フィールドに入力するためにホスト SW によって使用される値と同じでなければなりません。 D2H AVST 1 ポート・モードにのみ適用されます。他のすべてのモードでは未使用です。

Q_RESET 8’h48 読出/書込

このレジスターに 1'b1 を書き込むことでキューのリセットを要求し、リセットがハードウェアによって完了したときに 1'b0 の値をポーリングします。キューのリセットが完了すると、ハードウェアはこのビットをクリアします。 VF の FLR リセットが検出されると、同様のプロセスが発生します。

次のレジスターは、実装された H2D および D2H キューごとに定義されています。各 H2D/D2H の合計 QCSR アドレス空間は 256B で、8 ビットのアドレスが必要です。

表 145.   Q_CTRL (Offset 8’h0)
ビット[31:0]: フィールド名 読出/書込 デフォルト 説明
[31:10] rsvd     予約済み。
[9] q_intr_en 読出/書込 0 設定されている場合、完了時に MSI-X 割り込みを生成します。
[8] q_wb_ja 読出/書込 0 設定されている場合、完了時にライトバックを行います。
[7:1] rsvd     予約済み。
[0] q_en 読出/書込 0 有効。有効にすると、DMA は保留中のディスクリプターのフェッチと実行を開始します。
表 146.   Q_START_ADDR_L (Offset 8’h8)
ビット[31:0]: フィールド名 読出/書込 デフォルト 説明
[31:0] q_strt_addr_l 読出/書込 0 ソフトウェアがディスクリプター・リング・バッファーを割り当てた後、割り当てられた下位 32 ビット アドレスをこのレジスターに書き込みます。ディスクリプター・フェッチ・エンジンは、このアドレスと保留中のヘッド/テール ポインタを使用してディスクリプターをフェッチします。
表 147.   Q_START_ADDR_H (Offset 8’hC)
ビット[31:0]: フィールド名 R/W デフォルト 説明
[31:0] q_strt_addr_h 読出/書込 0 ソフトウェアがディスクリプター・リング・バッファーを割り当てた後、割り当てられた上位 32 ビットアドレスをこのレジスターに書き込みます。ディスクリプター・フェッチ エンジンは、このアドレスと保留中のヘッド/テール ポインタを使用してディスクリプターをフェッチします。
表 148.   Q_SIZE (Offset 8’h10)
ビット[31:0]: フィールド名 R/W デフォルト 説明
[31:5] rsvd     予約済み。
[4:0] q_size 読出/書込 1 ディスクリプター・リングのサイズ (2 の累乗、最大値 16)。単位はディスクリプターの数です。不正な値が書き込まれた場合、ハードウェアはデフォルトで値 1 を使用します。値 1 は、キュー サイズが 2 (2^1) であることを意味します。値は 16 (0x10) で、キュー サイズが 64K (2^16) であることを意味します。
表 149.   Q_TAIL_POINTER (Offset 8’h14)
ビット[31:0]: フィールド名 R/W デフォルト 説明
[31:16] rsvd     予約済み。
[15:0] q_tl_ptr 読出/書込 0 ソフトウェアは、ディスクリプター・バッファーに最後の有効なディスクリプターを設定した後、実行準備が整った最後の (テール) 有効なディスクリプターの位置をこのレジスターにプログラムします。 DMA ディスクリプター・エンジンは、バッファーからこの位置までのディスクリプターをフェッチします。
表 150.   Q_HEAD_POINTER (Offset 8’h18)
ビット[31:0]: フィールド名 読出/書込 デフォルト 説明
[31:16] rsvd     予約済み。
[15:0] q_hd_ptr 読出/書込 0 DMA ディスクリプター・フェッチ エンジンは、ディスクリプター・バッファーからテール ポインターまでディスクリプターをフェッチした後、最後にフェッチしたディスクリプター位置でこのレジスターを更新します。フェッチエンジンは、ヘッド ポインターとテールポインターが等しくない場合にのみディスクリプターをフェッチします。
表 151.   Q_COMPLETED_POINTER (Offset 8’h1C)
ビット[31:0]: フィールド名 R/W デフォルト 説明
[31:16] rsvd     予約済み。
[15:0] q_cml_ptr 読出/書込 0 このレジスターはハードウェアによって更新され、DMA が完了した最後のディスクリプター位置 (ポインタ) を格納します。これは、そのディスクリプターと以前のディスクリプターのすべてのデータが目的の宛先に到着したことを示します。ソフトウェアはこのレジスターをポーリングして、特定のキューの DMA のステータスを確認できます。
表 152.   Q_CONSUMED_HEAD_ADDR_L (Offset 8’h20)
ビット[31:0]: フィールド名 読出/書込 デフォルト 説明
[31:0] q_cnsm_hd_addr_l 読出/書込 0 ソフトウェアは、ライト・バック・ビットが有効なディスクリプターの DMA が完了した後にライトバックがターゲットとする下位 32 ビットアドレス位置を使用して、このレジスターをプログラムします。
表 153.   Q_CONSUMED_HEAD_ADDR_H (Offset 8’h24)
ビット[31:0]: フィールド名 読出/書込 デフォルト 説明
[31:0] q_cnsm_hd_addr_h 読出/書込 0 ソフトウェアは、一連のディスクリプターの DMA が完了した後にライトバックがターゲットとする上位 32 ビット アドレス位置を使用して、このレジスターをプログラムします。
表 154.   Q_BATCH_DELAY (Offset 8’h28)
ビット[31:0]: フィールド名 読出/書込 デフォルト 説明
[31:20] rsvd     予約済み。
[19:0] q_batch_dscr_delay 読出/書込 0 ソフトウェアは、ディスクリプターのフェッチ間の時間でこのレジスターをプログラムします。各単位は 2ns です。
表 155.   Q_PYLD_CNT register (offset 8'h44)
ビット[31:0]: フィールド名 読出/書込 デフォルト 説明
[31:20] rsvd     予約済み。
[19:0] q_pyld_cnt 読出/書込 0

20 ビットのペイロード・カウント。 DMA ペイロード・サイズ (バイト単位)。最大 1 MB。20'h0 は 1 MB を示します。この値は、ディスクリプターのペイロード・カウント フィールドに設定されている値と同じである必要があります。 D2H AVST 1 ポート・モードにのみ適用されます。他のすべてのモードでは未使用です。

表 156.   Q_RESET (Offset 8’h48)
ビット[31:0]: フィールド名 R/W デフォルト 説明
[31:1] rsvd     予約済み。
[0] q_reset 読出/書込 0 このレジスターに 1'b1 を書き込むことでキューのリセットを要求し、リセットがハードウェアによって完了したときに 1'b0 の値をポーリングします。キューのリセットが完了すると、ハードウェアはこのビットをクリアします。