存储器读写请求TLP的格式如图6-8所示。在存储器读写和I/O读写请求的第3和第4个双字中,存放TLP的32或者64位地址。存储器、I/O和原子操作读写请求使用的TLP头较为类似。此时与这个存储器读请求TLP对应的读完成TLP中不包含有效数据。......
2023-10-20
当TLP的TH位为1时,表示在当前TLP中包含Processing Hint字段,PH字段由PCIe V2.1总线规范引入。该字段的引入可以使目标设备根据源设备对数据的使用情况,合理地安排数据缓冲,从而降低PCIe设备的访问延时,并最大化地利用PCIe设备中的数据缓冲。
Processing Hint字段的产生与智能设备的大量涌现密切相关。在智能设备中,含有一个运算能力相当强的处理器。智能设备与处理器之间的数据交换,实质上等效于两个处理器系统之间的数据传递。有些智能设备,如在显卡中使用的GPU(Graphic Processing Unit)和GP-GPU(Gerneral Purpose GPU)的处理能力甚至超过多数通用处理器。智能设备与处理器系统可以采用图6-14所示的拓扑结构连接。
图6-14 智能外设与处理器系统的连接
在这种处理器系统中,内部互连网络处于核心地位,上图所示的网络是一个理想的全互连结构。在这种互连结构中,处理器、存储器和智能设备与网络节点相连。在这种结构中,在网络节点上连接的设备都含有一个处理器,包括存储器。
当智能设备与处理器进行通信时,如果能够预知数据的使用情况,无疑能够减低数据的访问延时。如智能设备1将一组数据写入智能存储器1之后,如果这个智能存储器1能够预测这组数据将很快被再次使用,则可以将这组数据放入到高速缓冲中,而不必放入低速缓冲中。当这组数据被再次使用时,智能存储器1可以很快将数据从高速缓冲中读出,从而缩短了访问延时。
PCIe总线引入了PH字段的主要目的是为了加速外部设备访问主存储器,即DMA操作,同时也兼顾SMP处理器系统对PCIe设备的访问。但是PH字段仍然没有完全包含上述模型的所有内容,因为在上述模型中,智能存储器是独立与PCIe体系结构的RC的,而且智能外设之间具有独立连接通路,在这种模型中,芯片内部的互连网络是真正的设计核心。目前在P4080处理器和Boxboro-EX处理器系统中,具有全互连网络结构。
1.PH字段
PCIe总线使用PH字段,使智能设备或者处理器提前预知数据的使用方法。PH字段仅在与存储器访问相关的TLP中出现,该字段由两位组成,在TLP中的位置如图6-8所示,其详细说明如表6-8所示。
表6-8 PH字段
当PH[1∶0]为0b01时,表示TLP中的数据经常被设备使用,包括以下四种类型。
●DWDW(Device Write after Device Write)。外部设备对一段数据进行写操作后,很快还会再次进行写操作。
●DWDR(Device Read after Device Write)。外部设备对一段数据进行写操作后,很快还会对这段数据进行读操作。
●DRDW(Device Write after Device Read)。外部设备对一段数据进行读操作后,很快还会对这段数据进行写操作。
●DRDR(Device Read after Device Read)。外部设备对一段数据进行读操作后,很快还会再次进行读操作。
当PH[1∶0]为0b10时,表示TLP中的数据经常被目标设备使用,包括以下两种类型。在进行DMA操作时,HOST处理器为目标设备,本节也以此为例说明PH字段的使用规则。
●DWHR(Host Read after Device Write)。外部设备对一段数据进行写操作后,Host处理器将很快读取这段数据。(www.chuimin.cn)
●HWDR(Device Read after Host Write)。Host处理器对一段数据进行写操作后,外部设备将很快读取这段数据。
2.Steering Tag
通过上文对PH字段的描述,可以发现PH字段提供的Processing Hint控制能力较弱,仅是一个粗颗粒的控制机制。为此PCIe总线规范提供了一个16位的ST(Steering Tag)字段,目标设备通过TLP中的Steering Tag字段可以获得较为详细的信息。
当TH位有效时,存储器写请求TLP的Tag字段被重新定义为ST[7∶0]字段,因为存储器写请求并不需要Tag字段;而对于存储器读请求TLP,TH位有效时DW BE字段被重新定义为ST[7∶0]字段,由于一些存储器读请求TLP仍然需要使用DW BE字段处理对界,因此ST字段只能应用于不需要对界的存储器读请求TLP。
当TH位有效时,这些“不需要对界”的存储器读请求TLP,将使用默认的DW BE值。如果该存储器读请求TLP的Length字段为1时,First DW BE字段的默认值为0b1111,而Last DW BE字段的默认值为0b0000;如果Le ngth字段不为1,First和Last DW BE的默认值都为0b1111。
TLP还可以支持ST[15∶8]字段,该字段是ST的扩展字段。如果一个TLP需要使用ST[15∶8]字段,必须使用TLP Prefix,因为在TLP头中已经没有足够的空间放置这些字段。该TLP Prefix也被称为TPH TLP Prefix,其格式如图6-15所示。
图6-15 TPH TLP Prefix格式
如上图所示,在TPH TLP Prefix的Byte 1中存放ST[15∶8]字段。在PCIe总线中,ST[15∶8]字段是可选的,实际上整个ST字段都是可选的。TPH Requester Capability结构使用ST Mode Sele ct字段定义了ST字段的三种使用模式。
●当该字段为0b000时,表示当前PCIe设备不支持ST字段,此时TLP的ST字段为全0。
●当该字段为0b001时,表示ST模式为“Interrupt Vector Mode”。此时TLP的ST字段由MSI/MSI-X的中断向量号确定。
●当该字段为0b010时,表示ST字段由PCIe设备决定。
PCIe设备可以根据TLP的属性,决定ST字段的值,为此在一个PCIe设备中,将使用ST表,存放这个设备使用的所有ST字段。这个ST表可以存放在TPH Requester Capability结构中,也可以存放在MSI-X表中。实际上ST表的存放位置并不重要,只要PCIe设备能够根据发出的TLP类型,选择合适的ST字段即可。
目前尚无支持ST字段的PCIe设备,这些PCIe设备发出的TLP中都不包含ST字段。而从PCIe总线规范V2.1中,可以发现MSI/MSI-X中断请求可以使用ST字段,当PCIe设备使用MSI或者MSI-X中断请求时,可以根据中断向量的不同,从ST表中MSI报文[26]选择合适的ST字段,然后再发向处理器系统。处理器系统收到这个MSI报文后,可以根据ST字段的不同,分别处理PCIe设备发出的中断请求。
综上所述,ST字段的主要目的是细分TLP的属性,处理器系统可以使用该字段优化数据缓冲,减小数据访问延时。ST字段的支持需要多个PCIe设备共同参与。如EP进行DMA写操作时,数据将发向RC,RC和EP都需要具有解释这个TLP所携带的ST字段的能力。
因此处理器系统在初始化PCIe设备时,需要合理地设置该设备的ST表。目前尚无支持TPH位和ST字段的PCIe设备,但是这种方法可以有效降低PCIe设备访问存储器,以及PCIe设备间数据访问的延时,从而提高PCIe链路的利用率。
有关PCI Express体系结构导读的文章
存储器读写请求TLP的格式如图6-8所示。在存储器读写和I/O读写请求的第3和第4个双字中,存放TLP的32或者64位地址。存储器、I/O和原子操作读写请求使用的TLP头较为类似。此时与这个存储器读请求TLP对应的读完成TLP中不包含有效数据。......
2023-10-20
在一段程序中,存在大量的分支预测指令,因而在某种程度上增加了指令Fetch的难度。但是分支预测单元并不会每次都能正确判断分支指令的执行路径,这为指令Fetch制造了不小的麻烦,在这个背景下许多分支预测策略应运而生。在PowerPC处理器中,条件转移指令“bc”表示Taken;而“bc-”表示Not Taken。BTB的功能相当于存放转移指令的Cache,其状态机转换也与Cache类似。转移指令B执行完毕后,将实际执行结果Rc更新到BHR寄存器中,并同时更新PHT中对应的Entry。......
2023-10-20
如图8-6所示,Detect状态由Detect.Quiet、Detect.Active两个子状态组成。在正常情况下,PCIe链路将从Detect状态迁移到Polling状态。而在Detect状态中,PCIe设备的发送逻辑TX将直接进入到“Electrical Idle”状态,并不会使用Idle序列通知对端设备的接收逻辑RX。当PCIe设备处于Detect.Quiet状态超过12ms之后,或者检测到PCIe链路上的任何一个Lane退出“Electrical Idle”状态时,PCIe设备将进入Detect.Active状态。......
2023-10-20
而PCI总线的突发传送仍然存在缺陷。为此PCI-X总线使用基于数据块的突发传送方式,发送端以ADB为单位,将数据发送给接收端,一次突发读写为一个以上的ADB。采用这种方式,接收端可以事先预知是否有足够的接收缓冲,接收来自发送端的数据,从而可以及时断连当前总线周期,以节约PCI-X总线的带宽。因此在PC领域和嵌入式领域很少有基于PCI-X总线的设备,PCI-X设备仅在一些高端服务器上出现。因此本节不对PCI-X总线做进一步描述。......
2023-10-20
MSI Capability结构共有四种组成方式,分别是32和64位的Message结构,32位和64位带中断Masking的结构。MSI Capability寄存器的结构如图10-1所示。图10-1 MSI Capability结构●Capability ID字段记载MSI Capability结构的ID号,其值为0x05。表10-1 MSI Cabalibities结构的Message Control字段[67] 此时PCI设备配置空间Command寄存器的“Interrupt Disable”位为1。当MSI En able位有效时,该字段存放MSI报文使用的数据。该字段需要与Mask Bits字段联合使用。......
2023-10-20
VC不同的TLP间没有序的要求,在PCIe总线中,“序”是指VC相同的TLP之间的传送顺序,其关系如表11-5所示。表11-5 PCIe总线的序各个表项的含义如下。如在第11.1.1节描述的生产/消费者模型中,生产者首先将数据写入数据缓冲,然后将Flag位置1。B2 b对应TLP的IDO位为1的情况。......
2023-10-20
Attr字段如图6-3所示。图6-3 Attr字段格式表6-3 TLP支持的序当使用标准的强序模型时,在数据的整个传送路径中,PCIe设备在处理相同类型的TLP时,如PCIe设备发送两个存储器写TLP时,后面的存储器写TLP必须等待前一个存储器写TLP完成后才能被处理,即便当前报文在传送过程中被阻塞,后一个报文也必须等待。Attr字段的第0位是“No Snoop Attribute”位。“No Snoop Attribute”位是PCIe总线针对PCI总线的不足作出的重要改动。......
2023-10-20
图12-10 PCIe总线TLP格式由上图所示,一个PCIe设备发送TLP报文时,在经过数据链路层和物理层时,需要加上若干前缀和后缀。TLP在传送过程中,需要通过PCIe总线的事务层、数据链路层和物理层,因此必须考虑这些协议所带来的开销。在这两种情况之下,事务层的开销不同。由公式12-11,可以计算出与Max_Payload_Size参数对应的Payload_Ratio,并由此推算存储器写TLP在事务层上的开销。本章以这种方式为例分析存储器读TLP在事务层中的开销。......
2023-10-20
相关推荐