Avalon® 存储器映射(Avalon-MM) Intel® Stratix® 10 Hard IP+用于 PCI Express* 解决方案用户手册

ID 683527
日期 9/30/2019
Public
文档目录

C.3. Root Port和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-bit I/O空间继续全面分配。
    2. 在存储空间中从BFM共享存储器的结束地址前开始从最小到最大分配32-bit非可预取存储BAR,并按需对整个32-bit存储空间继续全面分配。
    3. ebfm_cfg_rp_ep处理程序中addr_map_4GB_limit输入的值控制32-bit可预取和64-bit可预取存储器BARS的分配。addr_map_4GB_limit的默认值为0

      如果addr_map_4GB_limit设置为0,则ebfm_cfg_rp_ep处理程序从32-bit存储空间的顶层开始,从最大值到最小值分配32‑bit可预取存储器BAR,并且按需继续向下分配到最后32-bit非可预取BAR的结束地址。当 addr_map_4GB_limit设置为0时,ebfm_cfg_rp_ep处理程序会从64-bit存储空间的4 GB地址处开始,从最小到最大分配64-bit可预取存储器BAR,直到超出4 GB限制。

      但是,如果addr_map_4GB_limit设置为1,地址映射限制到4 GB。ebfm_cfg_rp_ep处理过程在4 GB地址处从最大到最小分配32-bit和64-bit可预取存储器BAR,并按需继续向下分配到最后32-bit非可预取BAR的结束地址。

    4. 以上算法无法为一些非常大(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的指定地址的追踪。下表显示了如何使用这些偏移。

表 74.  BAR Table结构

偏移 (Bytes)

说明

+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’s”写入后的BAR0读回值(用于计算大小)

+36

“全1’s”写入后的BAR1读回值

+40

“全1’s”写入后的BAR2读回值

+44

“全1’s”写入后的BAR3读回值

+48

“全1’s”写入后的BAR4读回值

+52

“全1’s”写入后的BAR5读回值

+56

“全1’s”写入后的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,所得出的存储空间映射如下图所示。

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

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

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

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

图 36. I/O地址空间