インテルのみ表示可能 — GUID: nik1410565009980
Ixiasoft
インテルのみ表示可能 — GUID: nik1410565009980
Ixiasoft
10.4.3. ルートポートおよびエンドポイントのコンフィグレーション
Endpointにトランザクションを発行する前に、Root PortおよびEndpoint Configuration Spaceレジスターをコンフィグレーションする必要があります。
Ebfm_cfg_rp_ep プロシージャーは次の手順を実行して、Configuration Spaceを初期化します。
- Root Port Configuration Spaceを設定して、Root PortがPCI Expressリンクでトランザクションを送信できるようにします。
- Root PortおよびEndpoint PCI Express Capability Device Controlレジスターを次のように設定します。
- Root PortおよびEndpointの両方で、Error Reporting をディスエーブルします。BFMにはエラー処理機能がありません。
- Root PortおよびEndpointの両方で、Relaxed Ordering をイネーブルします。
- Endpointにその機能がある場合は、Endpointの Extended Tags をイネーブルします。
- Root PortおよびEndpointの両方で、Phantom Functions、 Aux Power PM、および No Snoop をディスエーブルします。
- Root Portが最大ペイロードサイズをサポートしているため、Max Payload Size に、Endpointがサポートする値を設定します。
- エンドポイント・デザイン例では、読み出しを必要なだけ多くのコンプリーション数に分割することをサポートしているため、Root Port Max Read Request Size を4 KBに設定します。
- Root Portは読み出し要求を複数のコンプリーションに分割することをサポートしていないため、Endpoint Max Read Request Size を Max Payload Size に設定します。
- すべてのEndpoint BARレジスターに値を割り当てます。BARアドレスは、以下に概説するアルゴリズムによって割り当てられます。
- I/O BARは、I/Oスペース内のBFM共有メモリーの終了アドレスのすぐ上から開始し、必要に応じて完全な32ビットI/Oスペース全体にわたって継続する、最小値から最大値までのアドレスが割り当てられます。
- 32ビットのプリフェッチ不可のメモリーBARには、メモリー空間内のBFM共有メモリーの終了アドレスのすぐ上から開始し、必要に応じて完全な32ビットメモリー空間全体にわたって継続する、最小値から最大値までのアドレスが割り当てられます。
- ebfm_cfg_rp_ep プロシージャーへの addr_map_4GB_limit 入力の値は、32ビットのプリフェッチ可能なメモリーBARおよび64ビットのプリフェッチ可能なメモリーBARの割り当てを制御します。addr_map_4GB_limit のデフォルト値は、0 です。
ebfm_cfg_rp_ep プロシージャーへの addr_map_4GB_limit 入力が0に設定されている場合、ebfm_cfg_rp_ep プロシージャーは、32ビットのプリフェッチ可能なメモリーBARを最大値から最小値に割り当てます。32ビットのメモリー空間の先頭から開始し、必要に応じて最後の32ビットのプリフェッチ不可のBARの終了アドレスまで継続します。
ただし、addr_map_4GB_limit 入力を1に設定すると、アドレスマップは4 GBに制限されます。ebfm_cfg_rp_ep プロシージャーでは、32ビットおよび64ビットのプリフェッチ可能なメモリーBARを最大値から最小値に割り当てます。32ビットのメモリー空間の先頭から開始し、必要に応じて最後の32ビットのプリフェッチ不可のBARの終了アドレスまで継続します。
- ebfm_cfg_rp_ep プロシージャーへの addr_map_4GB_limit への入力が0に設定されている場合、 ebfm_cfg_rp_ep プロシージャーは、64ビットのプリフェッチ可能なメモリーBARを、4 GBのアドレス で最小値から最大値まで割り当て、完全な64ビットのメモリー空間全体にわたって4 GBの制限より上位アドレス方向にメモリーを割り当てます。
ebfm_cfg_rp_ep プロシージャーへの addr_map_4 GB_limit 入力が1に設定されている場合、ebfm_cfg_rp_ep プロシージャーは、4 GBのアドレスから開始する32ビットおよび64ビットのプリフェッチ可能なメモリーBARを最大値から最小値まで割り当て、4 GBアドレスの下位方向に最後の32ビットのプリフェッチ不可のBARの終了アドレスまで、必要に応じてメモリーアドレスを割り当てます。
上記のアルゴリズムでは、非常に大きな (1 Gb以上) の32ビットBARがいくつかある場合、常にすべてのBARに値を割り当てることができるとは限りません。すべてのBARにアドレスを割り当てることは可能ですが、これらのアドレスを効果的に割り当てるには、より複雑なアルゴリズムが必要となります。ただし、このようなコンフィグレーションが実際のシステムで役立つ可能性はほとんどありません。プロシージャーでBARを割り当てることができない場合、エラーメッセージが表示され、シミュレーションが停止します。
- 上記のBAR割り当てに基づいて、ebfm_cfg_rp_ep プロシージャーでは、Root Port Configuration Spaceのアドレスウィンドウを割り当てて、有効なBARアドレス範囲を含めます。
- ebfm_cfg_rp_ep プロシージャーはEndpoint PCIe* 制御レジスターで、マスター・トランザクション、メモリー・アドレス・デコーディング、およびI/Oアドレス・デコーディングをイネーブルします。
ebfm_cfg_rp_ep プロシージャーは、すべてのEndpoint BARのサイズおよび割り当てアドレスをリストするBFM共有メモリー内の bar_table データ構造もセットアップします。BFM共有メモリーのこの領域は、書き込み保護されています。その結果、この領域にアプリケーション・ロジックの書き込みアクセスを行うと、致命的なシミュレーション・エラーが発生します。
BARからの特定のオフセットへの読み出しおよび書き込み要求の完全な PCIe* アドレスを生成するためのBFMプロシージャー呼び出しは、このデータ構造を使用します。このプロシージャーにより、Endpointアプリケーション・ロジックにアクセスするテストベンチコードがBARからのオフセットを使用し、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.sv の ebfm_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の場合のメモリー空間マップを示しています。
次の図は、addr_map_4GB_limit が0の場合のメモリー空間マップを示しています。
次の図は、I/Oアドレス空間を示しています。