用于 PCI Express* 的 英特尔® FPGA R-tile Avalon® Streaming IP设计实例用户指南

ID 683544
日期 4/10/2023
Public
文档目录

2.4.3. Root Port和Endpoint的配置

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

altpcietb_g3bfm_configure.v中的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设计支持按需将读请求拆分成多个完成(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位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的结束地址。

      以上算法不能用于一些非常大的(1GB或以上)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的指定地址的追踪。下表显示了如何使用这些偏移。

表 7.  BAR Table结构

偏移量(字节)

描述

+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_gen5_x16.sv中的 ebfm_cfg_rp_ep处理过程,直接读和写Endpoint Configuration Space寄存器的例程也位于Verilog HDL文件中。ebfm_cfg_rp_ep处理过程运行后,PCI Express I/O和Memory Space的布局如以下三个图例所示。存储空间布局取决于addr_map_4GB_limit输入参数的值。

图 27. 存储器空间布局— 4 GB限制下图显示当addr_map_4GB_limit为1时产生的存储器空间映射。
图 28. 存储器空间布局—无限制该图显示当addr_map_4GB_limit为0时产生的存储空间映射。
图 29. I/O地址空间此图显示I/O地址空间。