PCIe总线采用串行连接方式,并使用packet进行数据传输。一个packet在PCIe总线上的发送和接收过程中,需要通过多个层次,包括事务层(TL),数据链路层和物理层。
事务层定义了PCIe总线使用的总线事务,其中多数继承自PCI总线,如存储器读写,IO读写,配置读写总线事务,并增加了Message总线事务和原子操作等总线事务。PCIe总线事务可以通过switch等设备传送到其他PCIe设备或RC;RC也使用这些总线事务访问PCIe设备。事务层从PCIe设备core中接收数据,将其封装为TLP(Transaction Layer Packet),发到链路层,由链路层保证发送端的报文可以可靠完整的发送到接受端的数据链路层。
一个完整的TLP由一个或多个TLP prefix,TLP头,Data Payload和TLP Digest组成。在TLP头中包含了当前TLP的总线事务类型,路由信息等一系列信息;一个TLP中Data Payload的长度最小为0,最大为1024DW。 TLP prefix由PCIe 2.1总线规范中引入,分为Local TLP Prefix和EP-EP TLP Prefix两类,其中Local用于一个PCIe链路的两端传递信息,EP-EP用于发送设备和接收设备之间传递信息。 TLP头由3-4个DW组成,其中第一个DW保存通用TLP头,如下面结构所示,其他字段的意义由通用TLP头的Type字段决定。
TLP_header_common {
format : 3 : TLP为3DW或4DW,是否包括Payload
type : 5 : 事务类型:存储器读写,IO读写,配置读写,完成报文。。。
rsvr1 : 1 :
TC : 3 : TLP的传送类型,QoS参数,用于VC的选择,参考Extended Cap结构
rsvr2 : 1 :
Attr2 : 1 :
rsvr3 : 1 :
TH : 1 :
TD : 1 :
EP : 1 :
Attr : 2 : TLP Ordering模型(强,Relaxed,ID-based)及No-Snoop
addr-tran: 2 : 地址转换,只有在支持IOMMU的处理器中才使用
length : 10 : payload大小,目标设备通过len字段提前获知源设备需要发送或请求的数据长度,从而合理管理缓冲区,并根据需要进行cache一致性操作。
}
|
PCIe总线的数据报文传送方式与PCI总线数据传送有类似之处,其中存储器写TLP使用Post方式进行传送,其他总线事务使用Non-Post方式。
TLP的路由TLP的路由是指TLP通过Switch或PCIe桥片时采用哪条路径,最终到达EP或者RC的方法。PCIe一共定义了三种路由方法,基于地址的路由,基于ID的路由和Implicit路由方式。存储器和IO读写请求TLP使用基于地址的路由方式,这种方式使用TLP头中的Address字段进行路由选择,最终到达目标EP。配置读写报文,自定义Message,Cpl和CplD报文使用基于ID的路由方式,这种方式使用PCI总线号进行路由选择。Message报文,比如中断请求Msg,一般采用implicit路由方式,具体如何选择有TLP头中的message code隐式决定。因此,凡是基于地址路由的TLP,其TLP头中必含有Address字段;凡是基于ID路由的TLP必含有RequestID+TAG字段用于路由选择;凡是基于implicit路由的TLP,必有message-code,由此code决定如何对其进行路由。
阅读(5155) | 评论(0) | 转发(0) |