PCIe事务层
PCIe的事务层连接了PCIe设备核心与PCIe链路,这里主要基于PCIe事务层进行了深入讨论与分析。事务层采用TLP传输事务,完整的TLP由TLPPrefix、TLP头、Payload和TLP Digest组成。TLP头是TLP中最关键的部分,一般由三个或四个双字的长度,其格式定义如表1所示。
表1 PCIeTLP报文头格式

常用的PCIeTLP事务类型如表2所示。其中Non-Posted类型的事务请求需要 使用完成报文(CompletionPacket,Cpl)或带数据的完成报文(CompletionPacketwith Data,CplD)类型的响应包返回请求状态或数据,Posted类型的事务请求不需要使用 完成报文。 PCIe总线协议定义了基于地址的路由、基于ID的路由和隐式路由三种TLP路由 方式。其中,存储器读写和I/O读写TLP采用基于地址的路由,该类型的报文可由 西安电子科技大学硕士学位论文 RC 或EP发出,根据TLP中的Address字段进行路由选径。配置读写报文、Cpl和 CplD 完成报文使用基于ID的路由,配置读写报文只能由RC发出,而完成报文可由 任何设备发出,这些报文根据TransactionID进行路由选径,TransactionID则由PCIe 总线号、设备号、功能号和Tag字段构成。消息报文使用隐式路由,一般由RC发出 EP 响应,该类型报文的路由直接由下游端口到上游端口,或为RC向EP发出的广播。
表2 PCIeTLP事务类型

PCIe 配置空间
PCIe 设备具有和PCI设备相同的配置空间头类型,此外使用PCIe拓展配置空间 管理PCIe总线。PCI配置空间头分为Type0和Type1两种类型,Type0类型配置空间 头在PCIe总线中用于EP,Type1类型配置空间头用于Switch中的虚拟PCI桥。 Type0 类型的配置空间头结构如表3所示。其中主要的寄存器的作用如下:
(1)设备ID和供应商ID:由PCI-SIG分配,当供应商ID为16’hFFFF时表示 无效的设备;
(2)状态寄存器:保存PCIe设备的状态信息;
(3)命令寄存器:初始值为0,需要合理配置该寄存器才能访问该设备的存储 器或者I/O空间;
(4)头类型:当值为0时表示设备使用Type0的配置空间,值为1时表示设备 使用Type1的配置空间;
(5)基地址寄存器(BaseAddressRegister,BAR):保存PCIe 设备使用的地址空间的基地址;
(6)拓展功能指针:指向拓展配置空间的偏移地址。
表3 PCIeType0类型配置空间头

Type1类型的配置空间头如表4所示。其中主要寄存器的作用如下:
(1)00h~14h的寄存器作用与Type0类型的相同;
(2)下级最大总线号、下一级总线号、上一级总线号:下级最大总线号为该设 备下游的PCIe子树中最大的总线号,下一级总线号为直接连接在该设备下游端口的 总线号,上一级总线号为与该设备上游端口直接连接的总线号,三者共同确定了该设 备在PCIe树中的位置;
(3)存储地址大小、存储基地址:两者共同表示分配到该设备的存储地址域;
(4)拓展功能指针:指向拓展配置空间的偏移地址。
表4 Type1类型的配置空间头
