L-tile和H-tile Avalon® 存储器映射 Intel® FPGA IP PCI Express* 用户指南

ID 683667
日期 11/11/2021
Public
文档目录

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

在向Endpoint发布事务之前,必须配置Root Port和Endpoint Configuration Space寄存器。

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

  1. 设置Root Port Configuration Space以使Root Port能够在PCI Express链路上发送事务。
  2. 设置Root Port 和Endpoint PCI Express Capability Device Control寄存器,具体如下:
    1. 禁用Root Port和Endpoint中的Error Reporting 。BFM不具备错误处理能力。
    2. 使能Root Port和Endpoint中的Relaxed Ordering
    3. 如果Endpoint具备扩展能力,对Endpoint使能Extended Tags
    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设计支持按需将读请求拆分成多个完成。
    7. 将Endpoint Max Read Request Size设置成等于Max Payload Size的值,因为Root Port不支持将读请求拆分成多个完成。
  3. 对所有的Endpoint BAR寄存器分配值。根据如下算法概述分配BAR地址。
    1. 在I/O空间中从BFM共享存储器的结束地址前从最小到最大分配I/O BAR,并按需完整32位I/O空间继续全面分配。
    2. 并在存储空间中从BFM共享存储器的结束地址前开始从最小到最大分配32位非可预取存储BAR,并按需对完整32位存储空间继续全面分配。
    3. ebfm_cfg_rp_ep处理程序的addr_map_4GB_limit输入值控制32-bit prefetchable和64-bit prefetchable存储器BARS的分配。addr_map_4GB_limit的默认值是0

      如果ebfm_cfg_rp_ep处理程序的addr_map_4GB_limit输入的值设置为0,则ebfm_cfg_rp_ep程序程序从32位存储空间的顶层开始,从最大值到最小值分配分配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_ep处理程序的 addr_map_4GB_limit的输入值设置为0,则ebfm_cfg_rp_ep处理程序会从完整64-bit存储空间的4 GB地址开始,从最小到最大分配64-bit可预取存储器BAR,直到超出4 GB限制。

      但是,如果ebfm_cfg_rp_ep处理程序的addr_map_4 GB_limit输入设置为1,则ebfm_cfg_rp_ep处理程序从4 GB地址开始,以小于4 GB 地址降序排列,从最大值到最小值分配32-bit和64-bit可预取存储器BAR,并且按需要向下分配到最后32-bit非可预取BAR的结束地址。

      以上算法不能用于一些非常大的(1 GB或以上)32-bit BAR。虽然可以对所有的BAR分配地址,但是可能需要更繁琐的算法才能有效进行地址分配。然而,该配置在实际系统中不太可能有用。如果该处理程序无法分配BAR,就会显示错误信息并停止仿真。

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

ebfm_cfg_rp_ep处理程序也在BFM共享存储器中建立一个bar_table数据结构,以罗列全部Endpoint BAR的大小和分配地址。BFM共享存储器中的该区域被写保护。因此,对此区域的任何应用逻辑写访问都会导致致命仿真错误。

针对BAR特定偏移的读和写请求生成完整 PCIe* 地址的BFM处理过程调用使用此数据结构。此过程允许访问Endpoint应用逻辑的测试台代码使用BAR中的偏移,并避免对分配给BAR的指定地址的追踪。下表显示了如何使用这些偏移。

表 75.  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功能。

除了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的布局如以下三个图例所示。存储空间布局取决于addr_map_4GB_limit输入参数的值。如果addr_map_4GB_limit为1,所得出的存储空间映射如下图所示。

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

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

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

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

图 73. I/O地址空间