PCI Express*向け F-タイル Avalon® ストリーミングのインテル® FPGA IPユーザーガイド

ID 683140
日付 4/27/2023
Public
ドキュメント目次

3.4.3. MSI-X

PCIe用のF-タイルIPは、コンフィグレーションインターセプトインターフェイスを提供します。ユーザーソフトロジックは、このインターフェイスを監視して、MSI-X有効化およびMSI-X機能マスク関連情報を取得できます。ユーザー・アプリケーション・ロジックは、アプリケーション層の一部としてBARが指すメモリースペースにすべてのPFおよびVFのMSI-Xテーブルを実装する必要があります。

Configuration Intercept Interfaceから取得できるMSI-X関連情報の詳細については、MSI-Xレジスター コンフィグレーション・レジスターセクションのセクションを参照してください。

MSI-Xは、ユーザー・アプリケーションが、各ベクトルの独立したメッセージデータとアドレスを使用して大量のベクトルをサポートできるようにするオプション機能です。 MSI-Xがサポートされている場合は、MSI-XテーブルとPBAのサイズと場所(BARとオフセット)を指定する必要があります。MSI-Xは、関数ごとに最大2048個のベクトルをサポートできますが、MSIの場合は関数ごとに32個のベクトルをサポートできます。 MSI-Xが有効で、関数がマスクされていない場合、関数はMSI-Xメッセージを送信できます。アプリケーションは、コンフィグレーション出力インターフェイス(アドレス0x0Cビット[5:4])またはコンフィグレーション・インターセプト・インターフェイスを使用して、この情報にアクセスします。

アプリケーションがMSI-Xを生成する必要がある場合、アプリケーションはMSI-Xテーブルの内容(アドレスとデータ)を使用し、Avalon-STインターフェイスを介してメモリー書き込みを生成します。

ユーザーがMSI-X割り込みを有効にする場合は、アプリケーション層の一部としてBARが指すメモリースペースにMSI-Xテーブル構造を実装する必要があります。 MSI-X機能構造には、MSI-XテーブルとPBA構造に関する情報が含まれています。たとえば、関数のBAR内のアドレスからのオフセットとして表される、MSI-XテーブルとPBA構造のベースへのポインターが含まれています。 MSI-X機能構造内のメッセージ制御レジスターにはMSI-Xも含まれています。

MSI-X割り込みは標準のメモリー書き込みであるため、メモリー書き込みの順序付け規則が適用されます。

表 17.  MSI-Xのコンフィグレーション例
MSI-Xベクター MSI-X上位アドレス MSI-X下位アドレス MSIデータ
0 0x00000001 0xAAAA0000 0x00000001
1 0x00000001 0xBBBB0000 0x00000002
2 0x00000001 0xCCCC0000 0x00000003
表 18.  PBAテーブルの例
PBAテーブル PBAエントリー
オフセット0 0x0

アプリケーションがMSI-X割り込み(ベクトル1)を生成する必要がある場合、アプリケーションはMSI-Xテーブル情報を読み出し、Avalon-STインターフェイスを介してMWR TLPを生成し、MSI生成に関してはファッションで同様の方法で対応するPBAビット(ビット[1])をアサートします。

生成されたTLPはアドレス0x00000001_BBBB0000に送信され、データは0x00000002です。 MSI-Xが送信されると、アプリケーションは関連するPBAビットをクリアできます。

MSI-X機能構造は、MSI-Xテーブル構造とMSI-X保留ビット配列(PBA)レジスターを指します。 BIOSは、MSI-XテーブルとPBAレジスターの開始アドレスへのポインタに関連付けられた開始アドレスオフセットとBARを設定します。

図 32. MSI-X割り込みコンポーネント
  1. ホスト・ソフトウェアは、次の手順を実行して、アプリケーション層にMSI-X割り込みを設定します。
    • ホスト・ソフトウェアは、0x050レジスターのメッセージ制御レジスターを読み取って、MSI-Xテーブルのサイズを決定します。テーブルエントリーの数は、<value read> + 1です。テーブルの最大サイズは 2048 エントリーです。次の図に示すように、各16バイトのエントリーは4つのフィールドに分割されます。多機能バリアントの場合、BAR4はMSI-Xテーブルにアクセスします。他のすべてのバリアントの場合、すべてのBARがMSI-Xテーブルにアクセスできます。 MSI-Xテーブルのベースアドレスは、4KBの境界に揃える必要があります。
    • ホストはMSI-Xテーブルを設定します。次の図に示すように、各エントリーのMSI-Xアドレス、データ、およびマスクビットをプログラムします。
      図 33. MSI-Xテーブルの形式
    • ホストは次の式を使用して<nth>エントリーのアドレスを計算します。
      nth_address = base address[BAR]+16<n>
  2. アプリケーション層が割り込みを発行する必要がある場合、IRQソースモジュールへの割り込み要求を駆動します。
  3. 3. IRQソースは、MSI-XPBAテーブルに適切なビットを設定します。 PBAはqwordまたはdwordアクセスを使用できます。 qwordアクセスの場合、IRQソースは次の式を使用して<mth>ビットのアドレスを計算します。
    qword address = <PBA base addr> + 8(floor(<m>/64))
    qword bit = <m> mod 64
    
    図 34. MSI-XPBAテーブル
  4. IRQプロセッサーは、MSI-Xテーブルのエントリーを読みff取ります。
    • 割り込みがMSI-XテーブルのVector_Controlフィールドによってマスクされている場合、割り込みは保留状態のままになります。
    • 割り込みがマスクされていない場合、IRQプロセッサはメモリー書き込み要求をTXスレーブ・インターフェイスに送信します。 MSI-Xテーブルのアドレスとデータを使用します。メッセージ上位アドレス=0の場合、IRQプロセッサーは3ワードのヘッダーを作成します。メッセージの上位アドレス>0の場合、4ワードのヘッダーが作成されます。
  5. ホスト割り込みサービスルーチンは、TLPを割り込みとして検出し、サービスを提供します。