
第5章 PCIe总线的事务层.docx
25页第5章PCIe总线的事务层(2011-08-08 16:19:57)转载▼标签: 分类: 浅谈PCIe体系结构杂谈事务层是PCIe总线层次结构的最高层,该层次将接收PCIe设备核心层的数据请求,并 将其转换为PCIe总线事务,PCIe总线使用的这些总线事务在TLP头中定义PCIe总线继 承了 PCI/PCI-X总线的大多数总线事务,如存储器读写、I/O读写、配置读写总线事务,并 增加了 Message总线事务和原子操作等总线事务本节重点介绍与数据传送密切相关的总线事务,如存储器、I/O、配置读写总线事务 在PCIe总线中,Non-Posted总线事务分两部分进行,首先是发送端向接收端提交总线读写 请求,之后接收端再向发送端发送完成(Completion)报文PCIe总线使用Split传送方式处理 所有Non-Posted总线事务,存储器读、I/O读写和配置读写这些Non-Posted总线事务都使用 Split传送方式PCIe的事务层还支持流量控制和虚通路管理等一系列特性,而PCI总线并 不支持这些新的特性在PCIe总线中,不同的总线事务采用的路由方式不相同PCIe总线继承了 PCI总线的 地址路由和ID路由方式,并添加了 “隐式路由”方式。
PCIe总线使用的数据报文首先在事务层中形成,这个数据报文也被称之为事务层数据 报文,即TLP,TLP在经过数据链路层时被加上Sequence Number前缀和CRC后缀,然后 发向物理层数据链路层还可以产生DLLP(Data Link Layer Packet)DLLP和TLP没有直接关系, DLLP是产生于数据链路层,终止于数据链路层,并不会传递到事务层oDLLP不是TLP加 上前缀和后缀形成的数据链路层的报文DLLP通过物理层时,需要经过8/10b编码,然后 再进行发送数据的接收过程是发送过程的逆过程,但是在具体实现上,接收过程与发送过 程并不完全相同5.1 TLP的格式(2011-08-08 16:21:32)转载▼标签: 分类: 浅谈PCIe体系结构 杂谈当处理器或者其他PCIe设备访问PCIe设备时,所传送的数据报文首先通过事务层被封 装为一个或者多个TLP,之后才能通过PCIe总线的各个层次发送出去TLP的基本格式如 图5-1所示TLP ftsrbi (Ojticitisl)TLPRsftK(OptiMial)TLP H tadDataTLPDigest團5-1 TLP的耦式一个完整的TLP由1个或者多个TLP Prefix、TLP头、Data Payload(数据有效负载)和 TLP Digest组成。
TLP头是TLP最重要的标志,不同的TLP其头的定义并不相同TLP头 包含了当前TLP的总线事务类型、路由信息等一系列信息在一个TLP中,Data Payload 的长度可变,最小为0最大为1024DWTLP Digest是一个可选项,一个TLP是否需要TLP Digest由TLP头决定Data Payload 也是一个可选项,有些TLP并不需要Data Payload,如存储器读请求、配置和I/O写完成 TLP 并不需要 Data PayloadTLP Prefix 由 PCIe V2.1 总线规范引入,分为Local TLP Prefix和 EP-EP TLP Prefix两类 其中Local TLP Prefix的主要作用是在PCIe链路的两端传递消息,而EP-EP TLP Prefix的主 要作用是在发送设备和接收设备之间传递消息设置TLP Prefix的主要目的是为了扩展TLP 头,并以此支持PCIe V2.1规范的一些新的功能TLP头由3个或者4个双字(DW)组成其中第一个双字中保存通用TLP头,其他字段 与通用TLP头的Type字段相关一个通用TLP头由Fmt、Type、TC、Length等字段组成, 如图5-2所示。
如果存储器读写TLP支持64位地址模式时,TLP头的长度为4DW,否则为3DW而 完成报文的TLP头不含有地址信息,使用的TLP头长度为3DW其中Byte 4〜Byte 15的格 式与TLP相关,下文将结合具体的TLP介绍这些字段5.1.1通用TLP头的Fmt字段和Type字段Fmt和Type字段确认当前TLP使用的总线事务,TLP头的大小是由3个双字还是4个 双字组成,当前TLP是否包含有效负载其具体含义如表5-1所示表 5-1 Fmt[1:0]字段Fmt[2:0]TLP的格式ObOOOTLP大小为3个双字,不带数据0b001TLP大小为4个双字,不带数据0b010TLP大小为3个双字,带数据0b011TLP大小为4个双字,带数据0b100TLP Prefix其他PCIe总线保留其中所有读请求TLP都不带数据,而写请求TLP带数据,而其他TLP可能带数据也可 能不带数据,如完成报文可能含有数据,也可能仅含有完成标志而并不携带数据在TLP 的Type字段中存放TLP的类型,即PCIe总线支持的总线事务该字段共由5位组成,其 含义如表5-2所示表 5-2 Type[4:0]字段TLP类型MRdMRdLkFmt[2:0]ObOOO0b001ObOOO0b001MWr0b0100b011IORdObOOOIOWr0b010CfgRdOObOOOCfgWrO0b010CfgRd1ObOOOCfgWr10b010TCfgRd0b010Type[4:0]ObO 0000ObO 0001ObO 0000ObO 0010ObO 0010ObO 0100ObO 0100ObO 0101ObO 01010b1 1011描述存储器读请求;TLP头大小为3个或者4个双字,不 带数据。
带锁的存储器读请求;TLP头大小为3个或者4个双 字,不带数据存储器写请求;TLP头大小为3个或者4个双字,带 数据IO读请求;TLP头大小为3个双字,不带数据IO写请求;TLP头大小为3个双字,带数据配置0读请求;TLP头大小为3个双字,不带数据配置0写请求;TLP头大小为3个双字,带数据配置1读请求;不带数据配置1写请求;带数据本书对这两种总线事务不做介绍TCfgW rMsg0b001 0b1 10110b001 0b1 0「2「]「0MsgDCpl0b011 0b1 0「2「』0ObOOO ObO 1010CplD 0b010 ObO 1010消息请求;TLP头大小为4个双字,不带数据rrr” 字段是消息请求报文的Route字段,下文将详细介绍 该字段消息请求;TLP头大小为4个双字,带数据完成报文;TLP头大小为3个双字,不带数据包括 存储器、配置和I/O写完成带数据的完成报文,TLP头大小为3个双字,包括存 储器读、I/O读、配置读和原子操作读完成TLP类型Fmt[2:0]Type[4:0]描述CpILkObOOO0b0 1011锁定的完成报文,TLP头大小为3个双字,不带数据。
CpIDLk0b0100b0 1011带数据的锁定完成报文,TLP头大小为3个双字,带 数据FetchAdd0b0100b0110b0 1100Fetch and Add原子操作Swap0b0100b0110b0 1101Swap原子操作CAS0b0100b0110b0 1110CAS原子操作LPrfx0b1000b0 L3L2L1L0Local TLP PrefixEPrfx0b1000b1 E3E2E1E0End-End TLP Prefix由上表所示,存储器读和写请求,0读和写请求,及配置读和写请求的type字段相同, 如存储器读和写请求的Type字段都为ObO 0000此时PCIe总线规范使用Fmt字段区分读 写请求,当Fmt字段是“带数据”的报文,一定是“写报文”;当Fmt字段是“不带数据” 的报文,一定是“读报文”PCIe总线的数据报文传送方式与PCI总线数据传送有类似之处其中存储器写TLP使 用Posted方式进行传送,而其他总线事务使用Non-Posted方式PCIe总线规定所有Non-Posted存储器请求使用Split总线方式进行数据传递当PCIe 设备进行存储器读、/0读写或者配置读写请求时,首先向目标设备发送数据读写请求TLP, 当目标设备收到这些读写请求TLP后,将数据和完成信息通过完成报文(Cpl或者CplD)发 送给源设备。
其中存储器读、I/O读和配置读需要使用CplD报文,因为目标设备需要将数据传递给 源设备;而I/O写和配置写需要使用Cpl报文,因为目标设备不需要将任何数据传递给源设 备,但是需要通知源设备,写操作已经完成,数据已经成功地传递给目标设备在PCIe总线中,进行存储器或者I/O写操作时,数据与数据包头一起传递;而进行存 储器或者I/O读操作时,源设备首先向目标设备发送读请求TLP,而目标设备在准备好数据 后,向源设备发出完成报文PCIe总线规范还定义了 MRdLk报文,该报文的主要作用是与PCI总线的锁操作相兼容, 但是PCIe总线规范并不建议用户使用这种功能,因为使用这种功能将极大影响PCIe总线的 数据传送效率与PCI总线并不相同,PCIe总线规范定义了 Msg报文,即消息报文分别为Msg和 MsgD,这两种报文的区别在于一个报文可以传递数据,一个不能传递数据PCIe V2.1总线规范还补充了一些总线事务,如FetchAdd、Swap、CAS、LPrfx和EPrfx 其中LPrfx和EPrfx总线事务分别与Local TLP Prefix和EP-EP TLP Prefix对应在PCIe总 线规范V2.0中,TLP头的大小为1DW,而使用LPrfx和EPrfx总线事务可以对TLP头进行 扩展,本节不对这些TLP Prefix做进一步介绍。
PCIe设备可以使用FetchAdd、Swap和CAS 总线事务进行原子操作,本篇将在第5.3.5节详细介绍该类总线事务5.1.2 TC 字段TC字段表示当前TLP的传送类型,CIe总线规定了 8种传输类型,分别为TCO〜TC7, 缺省值为TC0,该字段与PCIe的QoS相关PCIe设备使用TC区分不同类型的数据传递, 而多数EP中只含有一个VC,因此这些EP在发送TLP时,也仅仅使用TC0,但是有些对 实时性要求较高的EP中,含有可以设置TC字段的寄存器在Intel的高精度声卡控制器(High Definition Audio Controller)的扩展配置空间中含有一 个TCSEL寄存器系统软件可以设置该寄存器,使声卡控制器发出的TLP使用合适的TC 声卡控制器可以使用TC7传送一些对实时性要求较强的控制信息,而使用TC0传送一般的 数据信息在具体实现中,一个EP也可以将控制TC字段的寄存器放入到设备的BAR空间 中,而不必和Intel的高精度声卡控制器相同,存放在PCI配置空间中目前许多处理器系统的RC仅支持一个VC通路,此时EP使用不同的TC进行传递数 据的意义不大x86处理器的MCH中一般支持两个VC通路,而多数PowerPC处理器仅支 持一个VC通路。
PLX公司的多数Switch也仅支持两个VC通路有些RC,如MPC8572处理器。












