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

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

7.5.3. ルートポートおよびエンドポイントのコンフィグレーション

Endpointにトランザクションを発行する前に、Root PortおよびEndpoint Configuration Spaceレジスターをコンフィグレーションする必要があります。

ebfm_cfg_rp_epaltpcietb_g3bfm_configure.vプロシージャーは、以下のステップを実行してコンフィグレーション・スペースを初期化します。
  1. ルートポートがPCIExpressリンクでトランザクションを送信できるようにルートポートコンフィグレーションスペースを設定します。
  2. ルートポートおよびエンドポイントPCIExpress機能デバイス制御レジスターを次のように設定します。
    1. Error Reporting ルートポートとエンドポイントの両方で無効にします。 BFMにはエラー処理機能がありません。
    2. Relaxed Ordering ルートポートとエンドポイントの両方で有効にします。
    3. エンドポイントにその機能がある場合はExtended Tagsを有効にします。
    4. Phantom FunctionsAux Power PM、 と No Snoop ルートポートとエンドポイントの両方で無効にします。
    5. ルートポートが最大ペイロードサイズをサポートするため、エンドポイントがサポートする値にMax Payload Sizeを設定します。
    1. サンプルのエンドポイントデザインは、読み取りを必要な数の完了に分割することをサポートしているため、ルートポートのMax Read Request Sizeを4KBに設定します。
    2. ルートポートは読み取り要求を複数の完了に分割することをサポートしていないため、エンドポイントの Max Read Request SizeMax Payload Size に設定します。
  1. すべてのエンドポイントBARレジスターに値を割り当てます。 BARアドレスは、以下に概説するアルゴリズムによって割り当てられます。
    1. I/O BARは、I/Oスペース内のBFM共有メモリの終了アドレスのすぐ上から始まり、必要に応じて32ビットI/Oスペース全体にわたって継続して最小から最大に割り当てられます。
    1. 32ビットのプリフェッチ不可能なメモリーBARは、最小から最大に割り当てられ、メモリ空間のBFM共有メモーリの終了アドレスのすぐ上から始まり、必要に応じて32ビットメモリ空間全体にわたって継続します。
    2. ebfm_cfg_rp_epプロシージャーへのaddr_map_4GB_limit入力の値は、32ビットのプリフェッチ可能および64ビットのプリフェッチ可能なメモリーBARSの割り当てを制御します。 addr_map_4GB_limitのデフォルト値は0です。

      ebfm_cfg_rp_epへのaddr_map_4GB_limit入力 のプロシージャーが0に設定されている場合、 ebfm_cfg_rp_ep プロシージャーは、32ビットのプリフェッチ可能なメモリBARを最大から最小に割り当て、32ビットのメモリースペースの先頭から始まり、必要に応じて最後の32ビットのプリフェッチ不可能なBARの終了アドレスまで続きます。

    1. ただし、 addr_map_4GB_limit 入力は1に設定され、アドレスマップは4GBに制限されています。ebfm_cfg_rp_ep プロシージャーは、32ビットおよび64ビットのプリフェッチ可能なメモリーBARを最大から最小に割り当てます。これは、32ビットのメモリースペースの先頭から始まり、必要に応じて最後の32ビットのプリフェッチ不可能なBARの終了アドレスまで続きます。

    2. ebfm_cfg_rp_epプロシージャーへのaddr_map_4GB_limit入力が0に設定されている場合、ebfm_cfg_rp_epプロシージャーは、64ビットプリフェッチ可能メモリーBARを、4 GBアドレスから開始して最小から最大に割り当て、メモリーを64ビットメモリースペース全体で4GB制限を超えて昇順で割り当てます。

      ebfm_cfg_rp_epプロシージャーへのaddr_map_4 GB_limit入力が1に設定されている場合、ebfm_cfg_rp_epプロシージャーは、32ビットおよび64ビットのプリフェッチ可能なメモリーBARを、4 GBアドレスから開始し、4GBアドレスより下に降順でメモリーに割り当てることで最大から最小に割り当てます。 必要に応じて、最後の32ビットのプリフェッチ不可能なBARの終了アドレスまでアドレス指定します。

    1. 上記のアルゴリズムは、非常に大きな(1 GB以上)32ビットBARがいくつかある場合、常にすべてのBARに値を割り当てるとは限りません。すべてのBARにアドレスを割り当てることは可能かもしれませんが、これらのアドレスを効果的に割り当てるには、より複雑なアルゴリズムが必要になります。ただし、このようなコンフィグレーションが実際のシステムで役立つ可能性はほとんどありません。プロシージャーがBARを割り当てることができない場合、エラーメッセージが表示され、シミュレーションが停止します。

  1. 上記のBAR割り当てに基づいて、 ebfm_cfg_rp_ep プロシージャは、有効なBARアドレス範囲を含むようにルートポートコンフィグレーションスペースアドレスウィンドウを割り当てます。
  2. ebfm_cfg_rp_epプロシージャーは、エンドポイント制御レジスターでマスター・トランザクション、メモリーアドレスのデコード、およびI/Oアドレスのデコードを有効にします。

ebfm_cfg_rp_ep プロシージャーは、すべてのEndpoint BARのサイズおよび割り当てアドレスをリストするBFM共有メモリー内の bar_table データ構造もセットアップします。BFM共有メモリーのこの領域は、書き込み保護されています。その結果、この領域にアプリケーション・ロジックの書き込みアクセスを行うと、致命的なシミュレーション・エラーが発生します。

BARからの特定のオフセットへの読み出しおよび書き込み要求の完全な PCIe* アドレスを生成するためのBFMプロシージャー呼び出しは、このデータ構造を使用します。このプロシージャーにより、Endpointアプリケーション・ロジックにアクセスするテストベンチコードがBARからのオフセットを使用し、BARに割り当てられた特定のアドレスのトラッキングを回避できます。次の表は、これらのオフセットの使用方法を示しています。

表 108.  BARテーブルの構造

オフセット (バイト)

詳細

+0

BAR0のPCI Expressアドレス

+4

BAR1のPCI Expressアドレス

+8

BAR2のPCI Expressアドレス

+12

BAR3のPCI Expressアドレス

+16

BAR4のPCI Expressアドレス

+20

BAR5のPCI Expressアドレス

+24

Expansion ROM BARのPCI Expressアドレス

+28

予約済み

+32

BAR0は、すべて1で書き込まれた後の値を読み戻します (サイズの計算に使用されます)。

+36

すべて1で書き込まれた後、BAR1は値を読み戻します。

+40

すべて1で書き込まれた後、BAR2は値を読み戻します。

+44

すべて1で書き込まれた後、BAR3は値を読み戻します。

+48

すべて1で書き込まれた後、BAR4は値を読み戻します。

+52

すべて1で書き込まれた後、BAR5は値を読み戻します。

+56

すべて1で書き込まれた後、Expansion ROM BARは値を読み戻します。

+60

予約済み

コンフィグレーション・ルーチンは、AER機能などの高度なPCI Express機能をコンフィグレーションしません。

altpcietb_bfm_rp_gen3_x8.svebfm_cfg_rp_ep のプロシージャーの他に、Endpoint Configuration Spaceレジスターを直接読み書きするルーチンは、Verilog HDLインクルード・ファイルで使用可能です。ebfm_cfg_rp_ep プロシージャーを実行すると、PCI Express I/OおよびMemory Spaceは、次の3つの図に示すレイアウトになります。メモリースペースのレイアウトは、addr_map_4GB_limit 入力パラメーターの値によって異なります。次の図は、addr_map_4GB_limit が1の場合のメモリースペースマップを示しています。

図 69. メモリースペースレイアウト - 4 GB制限

次の図は、addr_map_4GB_limit が0の場合のメモリースペースマップを示しています。

図 70. メモリースペースレイアウト - 制限なし

次の図は、I/Oアドレス空間を示しています。

図 71. I/Oアドレス空間