PCI Express* 向けRタイル Avalon® StreamingインテルFPGA IPユーザーガイド

ID 683501
日付 10/07/2022
Public
ドキュメント目次

4.3.3.3.1. MSI-X割り込みの実装

PCI Local Bus Specification のセクション6.8.2に、MSI-X機能およびテーブル構造体についての説明があります。MSI-X機能構造体は、MSI-Xテーブル構造体とMSI-X保留ビット配列 (PBA) レジスターを指し示します。BIOSにより、開始アドレスオフセットと、MSI-XテーブルおよびPBAレジスターの開始アドレスへのポインターに関連付けられたBARをセットアップします。
MSI-X割り込みコンポーネント
  1. ホスト・ソフトウェアでは、次の手順に従ってアプリケーション層でのMSI-X割り込みのセットアップを行います。
    1. ホスト・ソフトウェアでは、0x050レジスターで Message Control レジスターを読み出し、MSI-Xテーブルのサイズを決定します。テーブルエントリーの数は、<value read> + 1 です。
      最大テーブルサイズは2048エントリーです。16バイトの各エントリーは、次の図で示しているとおり、4つのフィールドに分割されます。MSI-Xテーブルは、コンフィグレーション済みの任意のBARでアクセス可能です。MSI-Xテーブルのベースアドレスは、4KBバウンダリーにアライメントされている必要があります。
    2. ホストにより、MSI-Xテーブルをセットアップします。MSI-Xアドレス、データ、および各エントリーのマスクビットのプログラムが、下図で示しているとおりに行われます。
      図 33. MSI-Xテーブルの形式
    3. ホストにより、<n th >エントリーのアドレスを計算します。それには次の式が使われます。
       
      				  nth_address = base address[BAR] + 16<n>
  2. アプリケーション層に割り込みが発生すると、アプリケーション層により、IRQソースモジュールに対する割り込みリクエストが駆動されます。
  3. IRQソースにより、MSI-X PBAテーブルに適切なビットを設定します。
    PBAでは、qwordまたはdwordアクセスを使用できます。qwordアクセスの場合、IRQソースでは、次の式を使用して<m th > ビットのアドレスを計算します。 それには、次の式を使用します。
    qword address = <PBA base addr> + 8(floor(<m>/64))
    qword bit = <m> mod 64
    図 34. MSI-X PBA Table
  4. IRQプロセッサーでは、MSI-Xテーブルのエントリーを読み出します。
    1. 割り込みが、MSI-XテーブルのVector_Controlフィールドによってマスキングされている場合、割り込みは保留状態のままになります。
    2. 割り込みがマスキングされていなければ、IRQプロセッサーでは、メモリー書き込みリクエストをTXスレーブ・インターフェイスに送信します。MSI-Xテーブルのアドレスとデータが使われます。 Message Upper Address = 0の場合、IRQプロセッサーでは、3 dwordのヘッダーを作成します。 Message Upper Address > 0の場合は、4 dwordのヘッダーを作成します。
  5. ホスト割り込みサービスルーチンにより、TLPを割り込みとして検出し、それを処理します。