PCI Config Space Header

本问基于xilinx 的xdma IP核内容进行记录

header寄存器如图所示,RC port只有两个BAR可以配置。

pcie memory包格式_Code


以下按照先type0后type1的顺序描述,共同的内容不重复记录

  1. Vendor ID是PCIe设备的生产厂商,Device ID是这个厂商生产的某个具体设备
  2. statuscommond寄存器内容摘自《PCI Express体系结构导读》。
  3. pcie memory包格式_pcie memory包格式_02

  4. 初始化时,commond寄存器为0,此时只能接收配置总线事务,必须妥善配置commond寄存器,该PCIe的存储或IO空间才能被访问。
  5. pcie memory包格式_寄存器_03

  6. REV ID(Revision ID)是PCIe设备的版本号(这里是FPGA)。Class Code是PCIe设备的分类。该分类由三个部分组成,分别是base class code 、sub class code和interface。硬件逻辑根据该寄存器识别不同的设备。
    xdma ip核设置页面中选择如下图所示的选项后,第二页默认出现Vendor ID、Device ID、Revision ID、Subsystem Vendor ID、Subsystem ID(下文描述)以及class code配置。
  7. pcie memory包格式_Code_04


  8. pcie memory包格式_寄存器_05

  9. 第一页选择Root Port of PCI Express Root Complex后,第二页的参数有所变化。可以看出作为不同的端点,具有不同的Device ID。并且Class ID也不同。下拉框中选择了不同的class,箭头所指的参数也会有相应的变化,和上文链接Class Code表对应。但是箭头所指的填写框也可以自行更改,更改后下拉框并不会变动。
  10. pcie memory包格式_寄存器_06

  11. BIST:自检功能开启。
  12. header type
    该寄存器只读,bit7为1表示当前PCIe设备为多功能设备,为0时表示单功能设备。其他bit在PCIe 3.1中没有描述,可以参考《PCI Express体系结构导读》。
  13. Lat Tim(Latency Timer):不适用于PCIe设备
  14. CacheL(Cache Line Size): 不适用于PCIe设备
  15. Cardbus CIS Pointer:只读,用于表明访问CIS(card info structure)的地址空间, 通常不会涉及
  16. Subsystem Vendor IDSubsystem ID
    如果使用多个fpga,则仅使用 Vendor ID和Device ID无法区分这些FPGA,所以增加Subsystem Vendor ID和Subsystem ID。
  17. Expansion ROM BAR
    有些PCIe设备在处理器运行操作系统之前,就要完成基本的初始化设置。该寄存器保存这段初始化ROM程序的基地址。
  18. CapPtr:Capabilities Pointer基地址
  19. Max_LatMin_Gnt:不适用于PCIe设备
  20. IntrPin(Interrupt Pin):只读,只用于INIT类型的中断。01 ~ 04对应INITA ~ INITD类型的中断
  21. IntrLine(Interrupt Line):记录PCIe设备当前使用的中断向量号(绝大多数处理器系统中不使用)
  22. SecLTim(Secondary Latency Timer): 不适用于PCIe设备
  23. SubBus#(subordinate Bus Numbers):当前PCIe子树中,最大的PCIe总线号
  24. SecBus#(secondary Bus Numbers): 下一级总线号
  25. PrimBus#(Primary Bus Number): 上一级总线号
  26. Secondary Status:与starus寄存器相似,记录secondary Bus的状态
  27. I/O LimI/O Base:访问外部设备寄存器的地址区域,Limit和base一起设置了io空间的地址区域
  28. Memory LimiMemory Base:访问内存的地址空间
  29. PrefetchMemLimit、PrefetchMemBase:可预读的空间,具体机制可参考《PCI Express体系结构导读》
  30. Prefetchable Base Upper 32 BitsPrefetchable Limit Upper 32 Bits:可预读地址高位
  31. I/O Limit Upper 16I/O Base Upper 16:IO地址高位
  32. Bridge Control
  33. pcie memory包格式_Express_07

  34. BAR0~5 :基地址寄存器
    当选择XDMA为RC模式时有关BAR的界面如图所示,PCIe:BARs应该是设置fpga的BAR,而AXI:BARs应该是设置与之相连的内存分配BAR。这里PCIe只有一个BAR0,是xilinx的ip核限制。而AXI最多有6个BAR可以配置,符合type0的寄存器格式。
  35. pcie memory包格式_寄存器_08

  36. 当选择XDMA为EP模式时有关BAR的界面如图所示,因为FPGA属于type0模式,所以可以有6个BAR空间。但此时AXI还是有6个BAR空间可以配置,不太理解,有可能对AXI的bar理解有误。
  37. pcie memory包格式_Express_09

  38. 第一页设置中去掉勾选Enable AXI Slave Interface,AXI:BAR这一栏就会消失,应该可以由另外一端PCIe设备自己配置。

除了基础的header配置空间以外,还有Capabilitiy配置空间和扩展配置空间。不是所有都能用到。以后用到了再记录。