仅对英特尔可见 — GUID: dsh1523063132025
Ixiasoft
C.3. Root Port和Endpoint的配置
发布到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。
- 将Max Payload Size设置成Endpoint支持的值,因为Root Port支持最大有效负载。
- 将Root Port Max Read Request Size设置成4 KB,因为实例Endpoint设计支持按需将读请求拆分成多个完成。
- 将Endpoint Max Read Request Size设置成等于Max Payload Size的值,因为Root Port不支持将读请求拆分成多个完成。
- 对所有Endpoint BAR寄存器赋值。根据如下算法概述分配BAR地址。
- 在I/O空间中从BFM共享存储器的结束地址前从最小到最大分配I/O BAR,并按需将整个32-bit I/O空间继续全面分配。
- 在存储空间中从BFM共享存储器的结束地址前开始从最小到最大分配32-bit非可预取存储BAR,并按需对整个32-bit存储空间继续全面分配。
- 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的结束地址。
- 以上算法无法为一些非常大(1 GB或以上)的32-bit 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处理程序也在BFM共享存储器中建立一个bar_table数据结构,以罗列全部Endpoint BAR的大小和分配地址。该区域在BFM共享存储器中被写保护。因此,对此区域的任何应用逻辑写访问都会导致致命仿真错误。
针对BAR特定偏移的读和写请求生成完整 PCIe* 地址的BFM处理过程调用使用此数据结构。此过程允许访问Endpoint应用逻辑的测试台代码使用BAR中的偏移,并避免对分配给BAR的指定地址的追踪。下表显示了如何使用这些偏移。
偏移 (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,所得出的存储空间映射如下图所示。
下图显示addr_map_4GB_limit为0时的存储空间映射。
下图显示了I/O地址空间。