XDuser

专注于NVMe IP, NVMe包括RDMA,NVMe Host ,NVMe OF。期待与你相约。

NVMe开发基础之PCIe下

0
阅读(1091)

PCIe事务层

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

表1 PCIeTLP报文头格式

PCIeTLP报文头格式.png


  常用的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 TLP事务类型.png


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类型配置空间头

PCIeType0类型配置空间头.png


Type1类型的配置空间头如表4所示。其中主要寄存器的作用如下: 

(1)00h~14h的寄存器作用与Type0类型的相同;

 (2)下级最大总线号、下一级总线号、上一级总线号:下级最大总线号为该设 备下游的PCIe子树中最大的总线号,下一级总线号为直接连接在该设备下游端口的 总线号,上一级总线号为与该设备上游端口直接连接的总线号,三者共同确定了该设 备在PCIe树中的位置; 

(3)存储地址大小、存储基地址:两者共同表示分配到该设备的存储地址域; 

(4)拓展功能指针:指向拓展配置空间的偏移地址。

表4 Type1类型的配置空间头

PCIeType1类型配置空间头.png