ImageVerifierCode 换一换
格式:DOCX , 页数:39 ,大小:146.53KB ,
资源ID:28155281      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/28155281.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第5章 PCIe总线的事务层.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第5章 PCIe总线的事务层.docx

1、第5章 PCIe总线的事务层第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总线事务分两部分进行,首先是发送端向

2、接收端提交总线读写请求,之后接收端再向发送端发送完成(Completion)报文。PCIe总线使用Split传送方式处理所有Non-Posted总线事务,存储器读、I/O读写和配置读写这些Non-Posted总线事务都使用Split传送方式。PCIe的事务层还支持流量控制和虚通路管理等一系列特性,而PCI总线并不支持这些新的特性。在PCIe总线中,不同的总线事务采用的路由方式不相同。PCIe总线继承了PCI总线的地址路由和ID路由方式,并添加了“隐式路由”方式。PCIe总线使用的数据报文首先在事务层中形成,这个数据报文也被称之为事务层数据报文,即TLP,TLP在经过数据链路层时被加上Seque

3、nce Number前缀和CRC后缀,然后发向物理层。数据链路层还可以产生DLLP(Data Link Layer Packet)。DLLP和TLP没有直接关系,DLLP是产生于数据链路层,终止于数据链路层,并不会传递到事务层。DLLP不是TLP加上前缀和后缀形成的。数据链路层的报文DLLP通过物理层时,需要经过8/10b编码,然后再进行发送。数据的接收过程是发送过程的逆过程,但是在具体实现上,接收过程与发送过程并不完全相同。5.1TLP的格式 (2011-08-08 16:21:32)转载标签:杂谈分类:浅谈PCIe体系结构当处理器或者其他PCIe设备访问PCIe设备时,所传送的数据报文首先

4、通过事务层被封装为一个或者多个TLP,之后才能通过PCIe总线的各个层次发送出去。TLP的基本格式如图51所示。一个完整的TLP由1个或者多个TLP Prefix、TLP头、Data Payload(数据有效负载)和TLP Digest组成。TLP头是TLP最重要的标志,不同的TLP其头的定义并不相同。TLP头包含了当前TLP的总线事务类型、路由信息等一系列信息。在一个TLP中,Data Payload的长度可变,最小为0,最大为1024DW。TLP Digest是一个可选项,一个TLP是否需要TLP Digest由TLP头决定。Data Payload也是一个可选项,有些TLP并不需要Dat

5、a Payload,如存储器读请求、配置和I/O写完成TLP并不需要Data Payload。TLP 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字段相关。

6、一个通用TLP头由Fmt、Type、TC、Length等字段组成,如图52所示。如果存储器读写TLP支持64位地址模式时,TLP头的长度为4DW,否则为3DW。而完成报文的TLP头不含有地址信息,使用的TLP头长度为3DW。其中Byte 4Byte 15的格式与TLP相关,下文将结合具体的TLP介绍这些字段。5.1.1通用TLP头的Fmt字段和Type字段Fmt和Type字段确认当前TLP使用的总线事务,TLP头的大小是由3个双字还是4个双字组成,当前TLP是否包含有效负载。其具体含义如表51所示。表51Fmt1:0字段Fmt2:0TLP的格式0b000TLP大小为3个双字,不带数据。0b00

7、1TLP大小为4个双字,不带数据。0b010TLP大小为3个双字,带数据。0b011TLP大小为4个双字,带数据。0b100TLP Prefix其他PCIe总线保留其中所有读请求TLP都不带数据,而写请求TLP带数据,而其他TLP可能带数据也可能不带数据,如完成报文可能含有数据,也可能仅含有完成标志而并不携带数据。在TLP的Type字段中存放TLP的类型,即PCIe总线支持的总线事务。该字段共由5位组成,其含义如表52所示。表52Type4:0字段TLP类型Fmt2:0Type4:0描述MRd0b0000b0010b0 0000存储器读请求;TLP头大小为3个或者4个双字,不带数据。MRdLk

8、0b0000b0010b0 0001带锁的存储器读请求;TLP头大小为3个或者4个双字,不带数据。MWr0b0100b0110b0 0000存储器写请求;TLP头大小为3个或者4个双字,带数据。IORd0b0000b0 0010IO读请求;TLP头大小为3个双字,不带数据。IOWr0b0100b0 0010IO写请求;TLP头大小为3个双字,带数据。CfgRd00b0000b0 0100配置0读请求;TLP头大小为3个双字,不带数据。CfgWr00b0100b0 0100配置0写请求;TLP头大小为3个双字,带数据。CfgRd10b0000b0 0101配置1读请求;不带数据。CfgWr10b

9、0100b0 0101配置1写请求;带数据。TCfgRd0b0100b1 1011本书对这两种总线事务不做介绍。TCfgWr0b0010b1 1011Msg0b0010b1 0r2r1r0消息请求;TLP头大小为4个双字,不带数据。“rrr”字段是消息请求报文的Route字段,下文将详细介绍该字段。MsgD0b0110b1 0r2r1r0消息请求;TLP头大小为4个双字,带数据。Cpl0b0000b0 1010完成报文;TLP头大小为3个双字,不带数据。包括存储器、配置和I/O写完成。CplD0b0100b0 1010带数据的完成报文,TLP头大小为3个双字,包括存储器读、I/O读、配置读和原

10、子操作读完成。CplLk0b0000b0 1011锁定的完成报文,TLP头大小为3个双字,不带数据。CplDLk0b0100b0 1011带数据的锁定完成报文,TLP头大小为3个双字,带数据。FetchAdd0b0100b0110b0 1100Fetch and Add原子操作。Swap0b0100b0110b0 1101Swap原子操作。CAS0b0100b0110b0 1110CAS原子操作。LPrfx0b1000b0 L3L2L1L0Local TLP PrefixEPrfx0b1000b1 E3E2E1E0End-End TLP Prefix由上表所示,存储器读和写请求,IO读和写请求

11、,及配置读和写请求的type字段相同,如存储器读和写请求的Type字段都为0b0 0000。此时PCIe总线规范使用Fmt字段区分读写请求,当Fmt字段是“带数据”的报文,一定是“写报文”;当Fmt字段是“不带数据”的报文,一定是“读报文”。PCIe总线的数据报文传送方式与PCI总线数据传送有类似之处。其中存储器写TLP使用Posted方式进行传送,而其他总线事务使用Non-Posted方式。PCIe总线规定所有Non-Posted存储器请求使用Split总线方式进行数据传递。当PCIe设备进行存储器读、I/O读写或者配置读写请求时,首先向目标设备发送数据读写请求TLP,当目标设备收到这些读写

12、请求TLP后,将数据和完成信息通过完成报文(Cpl或者CplD)发送给源设备。其中存储器读、I/O读和配置读需要使用CplD报文,因为目标设备需要将数据传递给源设备;而I/O写和配置写需要使用Cpl报文,因为目标设备不需要将任何数据传递给源设备,但是需要通知源设备,写操作已经完成,数据已经成功地传递给目标设备。在PCIe总线中,进行存储器或者I/O写操作时,数据与数据包头一起传递;而进行存储器或者I/O读操作时,源设备首先向目标设备发送读请求TLP,而目标设备在准备好数据后,向源设备发出完成报文。PCIe总线规范还定义了MRdLk报文,该报文的主要作用是与PCI总线的锁操作相兼容,但是PCIe

13、总线规范并不建议用户使用这种功能,因为使用这种功能将极大影响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 Pr

14、efix做进一步介绍。PCIe设备可以使用FetchAdd、Swap和CAS总线事务进行原子操作,本篇将在第5.3.5节详细介绍该类总线事务。5.1.2TC字段TC字段表示当前TLP的传送类型,PCIe总线规定了8种传输类型,分别为TC0TC7,缺省值为TC0,该字段与PCIe的QoS相关。PCIe设备使用TC区分不同类型的数据传递,而多数EP中只含有一个VC,因此这些EP在发送TLP时,也仅仅使用TC0,但是有些对实时性要求较高的EP中,含有可以设置TC字段的寄存器。在Intel的高精度声卡控制器(High Definition Audio Controller)的扩展配置空间中含有一个TC

15、SEL寄存器。系统软件可以设置该寄存器,使声卡控制器发出的TLP使用合适的TC。声卡控制器可以使用TC7传送一些对实时性要求较强的控制信息,而使用TC0传送一般的数据信息。在具体实现中,一个EP也可以将控制TC字段的寄存器放入到设备的BAR空间中,而不必和Intel的高精度声卡控制器相同,存放在PCI配置空间中。目前许多处理器系统的RC仅支持一个VC通路,此时EP使用不同的TC进行传递数据的意义不大。x86处理器的MCH中一般支持两个VC通路,而多数PowerPC处理器仅支持一个VC通路。PLX公司的多数Switch也仅支持两个VC通路。有些RC,如MPC8572处理器,也能决定其发出TLP使

16、用的TC。在该处理器的PCIe Outbound窗口寄存器(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-based Ordering;第1位表示是否支持Relaxed Ordering;而第0位表示该TLP在经过RC到达存储器时,是否需要进行Cache共享一致性处理。Attr字段如图

17、53所示。一个TLP可以同时支持ID-based Ordering和Relaxed Ordering两种位序。Relaxed Ordering最早在PCI-X总线规范中提出,用来提高PCI-X总线的数据传送效率;而ID-based Ordering由PCIe V2.1总线规范提出。TLP支持的序如表53所示。表53TLP支持的序Attr2Attr1类型00缺省序,即强序模型01PCI-X Relaxed Ordering模型10ID-Based Ordering(IDO)模型11同时支持Relaxed Ordering和IDO模型当使用标准的强序模型时,在数据的整个传送路径中,PCIe设备在处

18、理相同类型的TLP时,如PCIe设备发送两个存储器写TLP时,后面的存储器写TLP必须等待前一个存储器写TLP完成后才能被处理,即便当前报文在传送过程中被阻塞,后一个报文也必须等待。如果使用Relaxed Ordering模型,后一个存储器写TLP可以穿越前一个存储器写TLP,提前执行,从而提高了PCIe总线的利用率。有时一个PCIe设备发出的TLP,其目的地址并不相同,可能先进入发送队列的TLP,在某种情况下无法发送,但这并不影响后续TLP的发送,因为这两个TLP的目的地址并不相同,发送条件也并不相同。值得注意的是,在使用PCI总线强序模型时,不同种类的TLP间也可以乱序通过同一条PCIe链

19、路,比如存储器写TLP可以超越存储器读请求TLP提前进行。而PCIe总线支持Relaxed Ordering模型之后,在TLP的传递过程中出现乱序种类更多,但是这些乱序仍然是有条件限制的。在PCIe总线规范中为了避免死锁,还规定了不同报文的传送数据规则,即Ordering Rules。PCIe V2.1总线规范引入了一种新的“序”模型,即IDO(ID-Based Ordering)模型,IDO模型与数据传送的数据流相关,是PCIe V2.1规范引入的序模型。Attr字段的第0位是“No Snoop Attribute”位。当该位为0时表示当前TLP所传送的数据在通过FSB时,需要与Cache保

20、持一致,这种一致性由FSB通过总线监听自动完成而不需要软件干预;如果为1,表示FSB并不会将TLP中的数据与Cache进行一致,在这种情况下,进行数据传送时,必须使用软件保证Cache的一致性。在PCI总线中没有与这个“No Snoop Attribute”位对应的概念,因此一个PCI设备对存储器进行DMA操作时会进行Cache一致性操作1。这种“自动的”Cache一致性行为在某些特殊情况下并不能带来更高的效率。当一个PCIe设备对存储器进行DMA读操作时,如果传送的数据非常大,比如512MB,Cache的一致性操作不但不会提高DMA写的效率,反而会降低。因为这个DMA读访问的数据在绝大多数情

21、况下,并不会在Cache中命中,但是FSB依然需要使用Snoop Phase进行总线监听。而处理器在进行Cache一致性操作时仍然需要占用一定的时钟周期,即在Snoop Phase中占用的时钟周期,Snoop Phase是FSB总线事务的一个阶段,如图36所示。对于这类情况,一个较好的做法是,首先使用软件指令保证Cache与主存储器的一致性,并置“No Snoop Attribute”位为12,然后再进行DMA读操作。同理使用这种方法对一段较大的数据区域进行DMA写时,也可以提高效率。除此之外,当PCIe设备访问的存储器,不是“可Cache空间”时,也可以通过设置“No Snoop Attri

22、bute”位,避免FSB的Cache共享一致性操作,从而提高FSB的效率。“No Snoop Attribute”位是PCIe总线针对PCI总线的不足,所作出的重要改动。5.1.4通用TLP头中的其他字段除了Fmt和Type字段外,通用TLP头还含有以下字段。1TH位、TD位和EP位TH位为1表示当前TLP中含有TPH(TLP Processing Hint)信息,TPH是PCIe V2.1总线规范引入的一个重要功能。TLP的发送端可以使用TPH信息,通知接收端即将访问数据的特性,以便接收端合理地预读和管理数据,TPH的详细介绍见第5.3.6节。TD位表示TLP中的TLP Digest是否有效

23、,为1表示有效,为0表示无效。而EP位表示当前TLP中的数据是否有效,为1表示无效,为0表示有效。2AT字段AT字段与PCIe总线的地址转换相关。在一些PCIe设备中设置了ATC(Address Translation Cache)部件,这个部件的主要功能是进行地址转换。只有在支持IOMMU技术的处理器系统中,PCIe设备才能使用该字段。AT字段可以用作存储器域与PCI总线域之间的地址转换,但是设置这个字段的主要目的是为了方便多个虚拟主机共享同一个PCIe设备。对这个字段有兴趣的读者可以参考Address Translation Sevices规范,这个规范是PCI的IO Virtualiza

24、tion规范的重要组成部分。对虚拟化技术有兴趣的读者可以参考清华大学出版社的系统虚拟化原理与实现,以获得基本的关于虚拟化的入门知识。3Length字段Length字段用来描述TLP的有效负载(Data Payload)大小3。PCIe总线规范规定一个TLP的Data Payload的大小在1B4096B之间。PCIe总线设置Length字段的目的是提高总线的传送效率。当PCI设备在进行数据传送时,其目标设备并不知道实际的数据传送大小,这在一定程度上影响了PCI总线的数据传送效率。而在PCIe总线中,目标设备可以通过Length字段提前获知源设备需要发送或者请求的数据长度,从而合理地管理接收缓冲

25、,并根据实际情况进行Cache一致性操作。当PCI设备进行DMA写操作,将PCI设备中4KB大小的数据传送到主存储器时,这个PCI设备的DMA控制器将存放传送的目的地址和传送大小,然后启动DMA写操作,将数据写入到主存储器。由于PCI总线是一条共享总线,因此传送4KB大小的数据,可能会使用若干个PCI总线写事务才能完成4,而每一个PCI总线写事务都不知道DMA控制器何时才能将数据传送完毕。如果这些总线写事务还通过一系列PCI桥才能到达存储器,在这个路径上的每一个PCI桥也无法预知,何时这个DMA操作才能结束。这种“不可预知”将导致PCI总线的带宽不能被充分利用,而且极易造成PCI桥数据缓冲的浪

26、费。而PCIe总线通过TLP的Length字段,可以有效避免PCIe链路带宽的浪费。值得注意的是,Length字段以DW为单位,其最小单位为1个DW。如果PCIe主设备传送的单位小于1个DW或者传送的数据并不以DW对界时,需要使用字节使能字段,即“DW BE”字段。有关“DW BE”字段的详细说明见第5.3.1节。1PowerPC处理器通过设置Inbound寄存器,也可以避免这个Cache一致性操作。2FSB收到这类TLP后,不进行Cache一致性操作。3存储器读请求TLP没有DataPayload字段,此时该TLP使用Length字段表示需要读取多少数据。4当多个PCI设备共享一条PCI总线

27、时,一个设备不会长时间占用PCI总线,这个设备在使用这条PCI总线一定的时间后,将让出PCI总线的使用权。5.2TLP的路由 (2011-08-08 16:26:37)转载标签:杂谈分类:浅谈PCIe体系结构TLP的路由是指TLP通过Switch或者PCIe桥片时采用哪条路径,最终到达EP或者RC的方法。PCIe总线一共定义了三种路由方法,分别是基于地址(Address)的路由,基于ID的路由和隐式路由(Implicit)方式。存储器和I/O读写请求TLP使用基于地址的路由方式,这种方式使用TLP中的Address字段进行路由选径,最终到达目的地。而配置读写报文、“Vendor_Defined

28、 Messages”报文、Cpl和CplD报文使用基于ID的路由方式,这种方式使用PCI总线号1(Bus Number)进行路由选径。在Switch或者多端口RC的虚拟PCI-PCI桥配置空间中,包含如何使用PCI总线号进行路由选径的信息。而隐式路由方式主要用于Message报文的传递。在PCIe总线中定义了一系列消息报文,包括“INTx Interrupt Signaling”,“Power Management Messages”和“Error Signal Messages”等报文。在这些报文中,除了“Vendor_Defined Messages”报文,其他所有消息报文都使用隐式路由方

29、式,隐式路由方式是指从下游端口到上游端口进行数据传递的使用路由方式,或者用于RC向EP发出广播报文。5.2.1基于地址的路由在PCIe总线中,存储器读写和I/O读写TLP使用基于地址的路由方式。PCIe设备使用的地址路由方式与PCI设备使用的地址路由方式类似。只是PCIe设备使用TLP进行数据传送,而PCI设备使用总线周期进行数据传送。使用地址路由方式进行数据传递的TLP格式如第5.3.1节的图58所示,在这类TLP中包含目的设备的地址。当一个TLP进行数据传递时,可能会经过多级Switch,最终到达目的地。Switch将根据存储器读写和I/O读写请求TLP的目的地址将报文传递到合适的Egre

30、ss端口上。如图410所示,在一个Switch中包含了多个虚拟PCI-to-PCI桥。在Switch中有几个端口,就包含几个虚拟PCI-to-PCI桥。在虚拟PCI-to-PCI桥的配置寄存器空间中,包含一个桥片能够接收的物理地址范围。PCIe总线通过这个物理地址范围实现基于地址的路由。这段配置寄存器如图54所示。当系统软件初始化PCI总线时,将合理地设置这些寄存器,之后当TLP通过这些Switch时将根据这些寄存器选择合适的路径。上图中的配置寄存器描述了该虚拟PCI-to-PCI桥下游PCI子树使用的三组空间范围,分别为I/O、存储器和可预取的存储器空间,分别用Base和Limit两类寄存器

31、描述,其中Base寄存器表示可访问空间的基地址,Limit寄存器表示可访问空间的大小。TLP使用基于地址的路由时,一定要通过查询这组寄存器之后,再决定传送路径。这组寄存器的使用方法与PCI总线中的PCI桥兼容。其中TLP从“上游端口发送到下游端口”与“下游端口发送到上游端口”的路由过程略有不同,如图55所示。下文以TLP13的发送过程对地址路由过程进行说明。TLP13的描述如下。TLP1是一个存储器或者I/O请求TLP,由RC发出,并通过一个Switch发向EP1。存储器和I/O读写请求TLP使用这种地址路由方式。TLP1将从Switch的上游端口传送到下游端口。TLP2是一个存储器或者I/O请求TLP,由EP2发出,并通过一个Switch发向RC。当PCIe设备进行DMA读写操作时,将使用这种地址路由方式。TLP2将从Switch的下游端口传送到上游端口。TLP3是一个存储器或者I/O请求TLP,

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1