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

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

9.4. CRAインターフェイスを使用したBAR0の読み出しおよび書き込みの例

CRAインターフェイスを使用して、TLP要求を送信することができます。TLP HeaderのFmtおよびTypeフィールドは、TLP Headerの残りの部分のサイズを決定するために必要な情報を提供し、Headerに続くデータペイロードがパケットに含まれているかどうかの情報を提供します。

図 67. TLPヘッダーの形式

CRAインターフェイスは、レジスターアドレス0x2000および0x2004を使用してTLPを送信し、レジスターアドレス0x2008および0x200Cを使用してCompletionを確認します。これらのレジスターの詳細については、「Root Port TLP Data Registers」の表を参照してください。

Type 0コンフィグレーションTLPを使用してBAR0から読み出し、それを書き込む方法の例を以下に示します。
  1. 以下の形式を持つType 0コンフィグレーションTLPを使用して初期化されていないBAR0を読み出すには、CRAインターフェイスを使用します。
    CRAインターフェイスを使用してTLPを送信するには、次の手順を実行します。
    1. CRAインターフェイス・アドレス0x2000に、0x0400_0001を書き込みます。
    2. CRAインターフェイス・アドレス0x2004に、0x0000_0001を書き込みます (パケットの開始)。
    3. CRAインターフェイス・アドレス0x2000に、0x0000_170Fを書き込みます。
    4. CRAインターフェイス・アドレス0x2004に、0x0000_0000を書き込みます (続き)。
    5. CRAインターフェイス・アドレス0x2000に、0x0100_0010 を書き込みます。
    6. CRAインターフェイス・アドレス0x2004に、0x0000_0000を書き込みます (続き)。
    7. CRAインターフェイス・アドレス0x2000に、0x0000_0000を書き込みます (アライメントを達成するためのダミーデータ)。
    8. CRAインターフェイス・アドレス0x2004に、0x0000_0002を書き込みます (パケットの終わり)。

    CRAインターフェイスを使用して、対応するCompletionを確認します。コンプリーションTLPは、4つのdwordを有します。最初の3つのdwordは以下のようになり、初期化されていないBAR0値である1つのdwordが続きます (次の図では0xFFEF0010となります)。

    CRAインターフェイスを使用してCompletionを読み出すには、次の手順を実行します。
    1. bit [0] = 0x1となる (Completionパケットが到着しており、次のステップでSOPを受け取ることが可能であることを示す) まで、CRAインターフェイス・アドレス0x200Cの読み出しを継続します。
    2. CRAインターフェイス・アドレス0x2008を読み出します。この読み出しデータ値は、0x4A00_0001です。
    3. CRAインターフェイス・アドレス0x200Cを読み出します。この例では、bits [1:0] = 0であれば、次のステップで読み出される値はパケット内にあることを意味します。
    4. CRAインターフェイス・アドレス0x2008を読み出します。この読み出しデータ値は、0x0100_0004です。
    5. CRAインターフェイス・アドレス0x200Cを読み出します。この例では、bits [1:0] = 0であれば、次のステップで読み出される値はパケット内にあることを意味します。
    6. CRAインターフェイス・アドレス0x2008を読み出します。この読み出しデータ値は、0x00001700です。
    7. CRAインターフェイス・アドレス0x200Cを読み出します。この例では、bits [1:0] = 2であれば、次のステップで読み出される値はパケットのEOPであることを意味します。
    8. CRAインターフェイス・アドレス0x2008を読み出します。この読み出しデータ値は、BAR0の初期化されていない値0xFFEF0010です。
  2. 以下の形式を持つType 0コンフィグレーションTLPを使用して0xFFFF_FFFFのBAR0を初期化するには、CRAインターフェイスを使用します。
    CRAインターフェイスを使用してTLPを送信するには、次の手順を実行します。
    1. CRAインターフェイス・アドレス0x2000に0x0400_0001を書き込みます。
    2. CRAインターフェイス・アドレス0x2004に、0x0000_0001を書き込みます (パケットの開始)。
    3. CRAインターフェイス・アドレス0x2000に、0x0000_110Fを書き込みます。
    4. CRAインターフェイス・アドレス0x2004に、0x0000_0000を書き込みます (続き)。
    5. CRAインターフェイス・アドレス0x2000に、0x0100_0010を書き込みます。
    6. CRAインターフェイス・アドレス0x2004に、0x0000_0000を書き込みます (続き)。
    7. CRAインターフェイス・アドレス0x2000に、0xFFFF_FFFFを書き込みます。
    8. CRAインターフェイス・アドレス0x2004に、0x0000_0002を書き込みます (パケットの終わり)。

    CRAインターフェイスを使用して、対応するCompletionを確認します。Completion TLP

    は、以下の3つのdwordを有します。
    CRAインターフェイスを使用してCompletionを読み出すには、次の手順を実行します。
    1. bit [0] = 0x1となる (Completionパケットが到着しており、次のステップでSOPを受け取ることが可能であることを示す) まで、CRAインターフェイス・アドレス0x200Cの読み出しを継続します。
    2. CRAインターフェイス・アドレス0x2008を読み出します。この読み出しデータ値は、0x0A00_0000です。
    3. CRAインターフェイス・アドレス0x200Cを読み出します。この例では、bits [1:0] = 0であれば、次のステップで読み出される値はパケット内にあることを意味します。
    4. CRAインターフェイス・アドレス0x2008を読み出します。この読み出しデータ値は、0x0100_0004です。
    5. CRAインターフェイス・アドレス0x200Cを読み出します。この例では、bits [1:0] = 0であれば、次のステップで読み出される値はパケット内にあることを意味します。
    6. CRAインターフェイス・アドレス0x2008を読み出します。この読み出しデータ値は、0x00001100です。
    7. CRAインターフェイス・アドレス0x200Cを読み出します。この例では、bits [1:0] = 2であれば、次のステップで読み出される値はパケットのEOPであることを意味します。
    8. CRAインターフェイス・アドレス0x2008を読み出します。この読み出しデータ値は、BAR0のサイズです。

BAR0に0xFFFF_FFFFを書き込んだ後、手順1を繰り返してBAR0を読み出し、手順2を繰り返してBAR0アドレス空間をコンフィグレーションできます。

同じ手法を使用して、BAR1、BAR2、BAR3、BAR4、およびBAR5をコンフィグレーションします。