您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 第5章PCIe总线的事务层
1第5章PCIe总线的事务层(2011-08-0816: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在经过数据链路层时被加上SequenceNumber前缀和CRC后缀,然后发向物理层。数据链路层还可以产生DLLP(DataLinkLayerPacket)。DLLP和TLP没有直接关系,DLLP是产生于数据链路层,终止于数据链路层,并不会传递到事务层。DLLP不是TLP加上前缀和后缀形成的。数据链路层的报文DLLP通过物理层时,需要经过8/10b编码,然后再进行发送。数据的接收过程是发送过程的逆过程,但是在具体实现上,接收过程与发送过程并不完全相同。5.1TLP的格式(2011-08-0816:21:32)转载▼标签:杂谈分类:浅谈PCIe体系结构当处理器或者其他PCIe设备访问PCIe设备时,所传送的数据报文首先通过事务层被封装为一个或者多个TLP,之后才能通过PCIe总线的各个层次发送出去。TLP的基本格式如图5-1所示。2一个完整的TLP由1个或者多个TLPPrefix、TLP头、DataPayload(数据有效负载)和TLPDigest组成。TLP头是TLP最重要的标志,不同的TLP其头的定义并不相同。TLP头包含了当前TLP的总线事务类型、路由信息等一系列信息。在一个TLP中,DataPayload的长度可变,最小为0,最大为1024DW。TLPDigest是一个可选项,一个TLP是否需要TLPDigest由TLP头决定。DataPayload也是一个可选项,有些TLP并不需要DataPayload,如存储器读请求、配置和I/O写完成TLP并不需要DataPayload。TLPPrefix由PCIeV2.1总线规范引入,分为LocalTLPPrefix和EP-EPTLPPrefix两类。其中LocalTLPPrefix的主要作用是在PCIe链路的两端传递消息,而EP-EPTLPPrefix的主要作用是在发送设备和接收设备之间传递消息。设置TLPPrefix的主要目的是为了扩展TLP头,并以此支持PCIeV2.1规范的一些新的功能。TLP头由3个或者4个双字(DW)组成。其中第一个双字中保存通用TLP头,其他字段与通用TLP头的Type字段相关。一个通用TLP头由Fmt、Type、TC、Length等字段组成,如图5-2所示。如果存储器读写TLP支持64位地址模式时,TLP头的长度为4DW,否则为3DW。而完成报文的TLP头不含有地址信息,使用的TLP头长度为3DW。其中Byte4~Byte15的格式与TLP相关,下文将结合具体的TLP介绍这些字段。5.1.1通用TLP头的Fmt字段和Type字段Fmt和Type字段确认当前TLP使用的总线事务,TLP头的大小是由3个双字还是4个双字组成,当前TLP是否包含有效负载。其具体含义如表5-1所示。表5-1Fmt[1:0]字段3Fmt[2:0]TLP的格式0b000TLP大小为3个双字,不带数据。0b001TLP大小为4个双字,不带数据。0b010TLP大小为3个双字,带数据。0b011TLP大小为4个双字,带数据。0b100TLPPrefix其他PCIe总线保留其中所有读请求TLP都不带数据,而写请求TLP带数据,而其他TLP可能带数据也可能不带数据,如完成报文可能含有数据,也可能仅含有完成标志而并不携带数据。在TLP的Type字段中存放TLP的类型,即PCIe总线支持的总线事务。该字段共由5位组成,其含义如表5-2所示。表5-2Type[4:0]字段TLP类型Fmt[2:0]Type[4:0]描述MRd0b0000b0010b00000存储器读请求;TLP头大小为3个或者4个双字,不带数据。MRdLk0b0000b0010b00001带锁的存储器读请求;TLP头大小为3个或者4个双字,不带数据。MWr0b0100b0110b00000存储器写请求;TLP头大小为3个或者4个双字,带数据。IORd0b0000b00010IO读请求;TLP头大小为3个双字,不带数据。IOWr0b0100b00010IO写请求;TLP头大小为3个双字,带数据。CfgRd00b0000b00100配置0读请求;TLP头大小为3个双字,不带数据。CfgWr00b0100b00100配置0写请求;TLP头大小为3个双字,带数据。CfgRd10b0000b00101配置1读请求;不带数据。CfgWr10b0100b00101配置1写请求;带数据。TCfgRd0b0100b11011本书对这两种总线事务不做介绍。TCfgWr0b0010b11011Msg0b0010b10r2r1r0消息请求;TLP头大小为4个双字,不带数据。“rrr”字段是消息请求报文的Route字段,下文将详细介绍该字段。MsgD0b0110b10r2r1r0消息请求;TLP头大小为4个双字,带数据。Cpl0b0000b01010完成报文;TLP头大小为3个双字,不带数据。包括存储器、配置和I/O写完成。CplD0b0100b01010带数据的完成报文,TLP头大小为3个双字,包括存储器读、I/O读、配置读和原子操作读完成。4TLP类型Fmt[2:0]Type[4:0]描述CplLk0b0000b01011锁定的完成报文,TLP头大小为3个双字,不带数据。CplDLk0b0100b01011带数据的锁定完成报文,TLP头大小为3个双字,带数据。FetchAdd0b0100b0110b01100FetchandAdd原子操作。Swap0b0100b0110b01101Swap原子操作。CAS0b0100b0110b01110CAS原子操作。LPrfx0b1000b0L3L2L1L0LocalTLPPrefixEPrfx0b1000b1E3E2E1E0End-EndTLPPrefix由上表所示,存储器读和写请求,IO读和写请求,及配置读和写请求的type字段相同,如存储器读和写请求的Type字段都为0b00000。此时PCIe总线规范使用Fmt字段区分读写请求,当Fmt字段是“带数据”的报文,一定是“写报文”;当Fmt字段是“不带数据”的报文,一定是“读报文”。PCIe总线的数据报文传送方式与PCI总线数据传送有类似之处。其中存储器写TLP使用Posted方式进行传送,而其他总线事务使用Non-Posted方式。PCIe总线规定所有Non-Posted存储器请求使用Split总线方式进行数据传递。当PCIe设备进行存储器读、I/O读写或者配置读写请求时,首先向目标设备发送数据读写请求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,这两种报文的区别在于一个报文可以传递数据,一个不能传递数据。PCIeV2.1总线规范还补充了一些总线事务,如FetchAdd、Swap、CAS、LPrfx和EPrfx。其中LPrfx和EPrfx总线事务分别与LocalTLPPrefix和EP-EPTLPPrefix对应。在PCIe总线规范V2.0中,TLP头的大小为1DW,而使用LPrfx和EPrfx总线事务可以对TLP头进行扩展,本节不对这些TLPPrefix做进一步介绍。PCIe设备可以使用FetchAdd、Swap和CAS总线事务进行原子操作,本篇将在第5.3.5节详细介绍该类总线事务。55.1.2TC字段TC字段表示当前TLP的传送类型,PCIe总线规定了8种传输类型,分别为TC0~TC7,缺省值为TC0,该字段与PCIe的QoS相关。PCIe设备使用TC区分不同类型的数据传递,而多数EP中只含有一个VC,因此这些EP在发送TLP时,也仅仅使用TC0,但是有些对实时性要求较高的EP中,含有可以设置TC字段的寄存器。在Intel的高精度声卡控制器(HighDefinitionAudioController)的扩展配置空间中含有一个TCSEL寄存器。系统软件可以设置该寄存器,使声卡控制器发出的TLP使用合适的TC。声卡控制器可以使用TC7传送一些对实时性要求较强的控制信息,而使用TC0传送一般的数据信息。在具体实现中,一个EP也可以将控制TC字段的寄存器放入到设备的BAR空间中,而不必和Intel的高精度声卡控制器相同,存放在PCI配置空间中。目前许多处理器系统的RC仅支持一个VC通路,此时EP使用不同的TC进行传递数据的意义不大。x86处理器的MCH中一般支持两个VC通路,而多数PowerPC处理器仅支持一个VC通路。PLX公司的多数Switch也仅支持两个VC通路。有些RC,如MPC8572处理器,也能决定其发出TLP使用的TC。在该处理器的PCIeOutbound窗口寄存器(PEXOWARn)中,含有一个TC字段,通过设置该字段可以确定RC发出的TLP使用的TC字段。不同的TC可以使用PCIe链路中的不同VC,而不同的VC的仲裁级别并不相同。EP或者RC通过调整其发出TLP的TC字段,可以调整TLP使用的VC,从而调整TLP的优先级。5.1.3Attr字段Attr字段由3位组成,其中第2位表示该TLP是否支持PCIe总线的ID-basedOrdering;第1位表示是否支持RelaxedOrdering;而第0位表示该TLP在经过RC到达存储器时,是否需要进行Cache共享一致性处理。Attr字段如图5-3所示。一个TLP可以同时支持ID-basedOrdering和RelaxedOrdering两种位序。RelaxedOrdering最早在PCI-X总线规范中提出,用来提高PCI-X总线的数据传送效率;而ID-basedOrdering由PCIeV2.1总线规范提出。TLP支持的序如表5-3所示。表5-3TLP支持的序Attr[2]Attr[1]类型00缺省序,即强序模型01PCI-XRelaxedOrdering模型6Attr[2]Attr[1]类型10ID-B
本文标题:第5章PCIe总线的事务层
链接地址:https://www.777doc.com/doc-2195895 .html