用于 PCIe* 解决方案的 Intel® Stratix® 10 Avalon® -ST和Single Root I/O Virtualization (SR-IOV)接口用户指南

ID 683111
日期 12/06/2017
Public
文档目录

9.3.3. 根端口和端点的配置(Configuration of Root Port and Endpoint )

在发出传输(transaction)到Endpoint之前,必须配置Root Port和Endpoint Configuration Space寄存器。

ebfm_cfg_rp_ep执行下面步骤来初始化Configuration Space:

  1. 设置Root Port Configuration Space以使Root Port在PCI Express链路上发送传输(transaction)。
  2. 按如下设置Root Port 和Endpoint PCI Express Capability Device Control寄存器:
    1. 在Root Port以及Endpoint中禁用Error Reporting 。BFM不具备错误处理能力。
    2. 在Root Port以及Endpoint中使能Relaxed Ordering
    3. 对Endpoint使能Extended Tags,如果Endpoint具备此功能。
    4. 在Root Port以及Endpoint中禁用Phantom FunctionsAux Power PMNo Snoop
    5. Max Payload Size设置成Endpoint支持的值,因为Root Port支持最大有效负载。
    6. 将Root Port Max Read Request Size设置成4 KB,因为实例Endpoint设计支持将读取拆分成所需任意数量的completion。
    7. 将Endpoint Max Read Request Size设置成等于Max Payload Size的值,因为Root Port不支持将读请求拆分成多个completion。
  3. 对所有的Endpoint BAR寄存器分配值。下面的算法用于分配BAR地址。
    1. 从刚高于I/O空间中的BFM共享存储器的结束地址开始,从最小值到最大值分配I/O BAR,如果需要,在整个32-bit I/O空间继续分配。
    2. 从刚高于存储器空间中的BFM共享存储器的结束地址开始,从最小值到最大值分配32-bit非预可取(non-prefetchable)的存储器BAR,如果需要,在整个32-bit I/O空间继续分配。
    3. ebfm_cfg_rp_epaddr_map_4GB_limit输入的值控制32-bit和64-bit预可取的存储器BARS的分配。addr_map_4GB_limit的默认值0

      如果ebfm_cfg_rp_epaddr_map_4GB_limit输入的值设置为0,那么ebfm_cfg_rp_ep过程(procedure)从 32-bit存储空间的顶层开始,从最大值到最小值分配32-bit预可取的存储器BAR,并且按需要继续分配到最后32-bit非预可取BAR的结束地址。

      然而,如果addr_map_4GB_limit输入设置成1,那么地址映射被限制为4 GB。ebfm_cfg_rp_ep从最大值到最小值分配32-bit和64-bit预可取的存储器BAR,并且按需要继续分配到最后32-bit非预可取BAR的结束地址。

    4. 如果ebfm_cfg_rp_epaddr_map_4GB_limit输入值设置为0,那么ebfm_cfg_rp_ep过程(procedure)从整个64-bit存储空间中4 GB地址分配存储器(超越4 GB限制),从最小值到最大值分配64-bit预可取存储器BAR。

      如果ebfm_cfg_rp_epaddr_map_4 GB_limit输入值设置为1,那么ebfm_cfg_rp_ep过程(procedure)从4 GB地址分配存储器开始,从最大值到最小值分配32-bit和64-bit预可取的存储器BAR,并且根据需要将低于4 GB地址降到32-bit非预可取BAR的结束地址。

      以上算法不能用于一些非常大的(1 GB或以上)32-bit BAR。虽然可以对所有的BAR分配地址,但可能需要更复杂的算法有效地分配这些地址。然而在实际的系统中,这样的配置是无用的。如果过程(procedure)不能分配BAR,那么它会显示一条错误信息并停止仿真。

  4. 根据以上BAR分配,ebfm_cfg_rp_ep过程(procedure)分配Root Port Configuration Space地址窗口以包含有效的BAR地址范围。
  5. ebfm_cfg_rp_ep过程(procedure)使能Endpoint PCIe* 控制寄存器中的主传输,存储器地址解码和I/O地址解码。

ebfm_cfg_rp_ep过程(procedure)也在BFM共享存储器中建立bar_table数据结构,此数据结构列出所有端点BAR的大小和分配地址。BFM共享存储器中的该区域是写保护的。因此,任何对此区域的应用逻辑写访问都会导致致命的仿真错误。

BFM过程(procedure)调用生成完整的 PCIe* 地址,用于BAR的特定偏移的读取和写入请求。此过程允许访问Endpoint应用逻辑的测试台代码使用BAR中的偏移,并避免跟踪分配给BAR的特定地址。下表显示了如何使用这些偏移。

表 84.  BAR表结构

Offset (字节)

说明

+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

用全部1写入后的BAR0读回值(用于计算大小)

+36

用全部1写入后的BAR1读回值

+40

用全部1写入后的BAR2读回值

+44

用全部1写入后的BAR3读回值

+48

用全部1写入后的BAR4读回值

+52

用全部1写入后的BAR5读回值

+56

用全部1写入后的Expansion ROM BAR读回值

+60

保留

配置例行程序不配置任何高级PCI Express功能,例如AER功能。

Besides the ebfm_cfg_rp_ep procedure in altpcietb_bfm_rp_gen3_x8.sv, routines to read and write Endpoint Configuration Space registers directly are available in the Verilog HDL include file. After the ebfm_cfg_rp_ep procedure runs the PCI Express I/O and Memory Spaces have the layout shown in the following three figures. The memory space layout depends on the value of the addr_map_4GB_limit input parameter. The following figure shows the resulting memory space map when the addr_map_4GB_limit is 1.

图 73. 存储器空间布局—4 GB限制

下图显示了addr_map_4GB_limit为0时的存储器空间映射。

图 74. 存储器空间布局—无限制

下图显示了I/O地址空间。

图 75. I/O地址空间