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事务类型