最近有很多大侠在交流群里讨论PCI总线,PCI作为高速接口之一,在当下的FPGA产品设计研发中,地位举足轻重,应用广泛,今天给大侠带来PCI Express 系列连载,今天带来第十九篇,PCIe设备的扩展配置空间以及第十六篇至第十九篇小结。希望对各位大侠的学习有参考价值,话不多说,上货。
PCIe设备的扩展配置空间
本系列在前十篇讲述了PCI设备使用的基本配置空间。这个基本配置空间共由64个字节组成,其地址范围为0x00~0x3F,这64个字节是所有PCI设备必须支持的。事实上,许多PCI设备也仅支持这64个配置寄存器。
此外PCI/PCI-X和PCIe设备还扩展了0x40~0xFF这段配置空间,在这段空间主要存放一些与MSI或者MSI-X中断机制和电源管理相关的Capability结构。其中所有能够提交中断请求的PCIe设备,必须支持MSI或者MSI-X Capability结构。
PCIe设备还支持0x100~0xFFF这段扩展配置空间。PCIe设备使用的扩展配置空间最大为4KB,在PCIe总线的扩展配置空间中,存放PCIe设备所独有的一些Capability结构,而PCI设备不能使用这段空间。
在x86处理器中,使用CONFIG_ADDRESS寄存器与CONFIG_DATA寄存器访问PCIe配置空间的0x00~0xFF,而使用ECAM方式访问0x000~0xFFF这段空间;而在PowerPC处理器中,可以使用CFG_ADDR和CFG_DATA寄存器访问0x000~0xFFF,详见前十篇。
PCI-X和PCIe总线规范要求其设备必须支持Capabilities结构。在PCI总线的基本配置空间中,包含一个Capabilities Pointer寄存器,该寄存器存放Capabilities结构链表的头指针。在一个PCIe设备中,可能含有多个Capability结构,这些寄存器组成一个链表,其结构如图4-14所示。
其中每一个Capability结构都有唯一的ID号,每一个Capability寄存器都有一个指针,这个指针指向下一个Capability结构,从而组成一个单向链表结构,这个链表的最后一个Capability结构的指针为0。
一个PCIe设备可以包含多个Capability结构,包括与电源管理相关、与PCIe总线相关的结构、与中断请求相关的Capability结构、PCIe Capability结构和PCIe扩展的Capability结构。在本书的其他章节也将讲述这些Capability结构,读者在继续其他章节的学习之前,需要简单了解这些Capability结构的寄存器组成和使用方法。
其中大侠需要重点关注的是MSI/MSI-X Capability结构,本系列在后续将会详细将讨论MSI/MSI-X Capability结构。在PCIe总线规范中,定义了较多的Capability结构,这些结构适用于不同的应用场合,在一个指定的PCIe设备中,并不一定支持本篇中涉及的所有Capability结构。系统软件程序员也不需要完全掌握PCIe总线规范定义的这些Capability结构。
第十六篇至第十九篇小结
第十六篇至第十九篇简要介绍了PCIe总线的各个组成部件,包括RC、Switch和EP等,并介绍了PCIe总线的层次组成结构,和PCIe设备使用的Capability结构。这几篇是希望大侠了解PCIe体系结构的基础。本篇将在下文逐步对PCIe体系结构进行详细说明。
PCI Express 系列连载篇(十九)就到这里结束,明天继续带来第二十篇,包括PCIe总线的事务层(TLP的格式(通用TLP头的Fmt字段和Type字段、TC字段、Attr字段、通用TLP头中的其他字段))相关内容。各位大侠,明天见!
END
后续会持续更新,带来Vivado、 ISE、Quartus II 、candence等安装相关设计教程,学习资源、项目资源、好文推荐等,希望大侠持续关注。
大侠们,江湖偌大,继续闯荡,愿一切安好,有缘再见!