首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

PCIe系列第四讲、TLP的路由方式

TLP的路由方式指的是TLP经过Switch或者PCIe桥片时采用哪条路径,最终到达EP或RC的方法。

PCIe总线继承了PCI总线的地址路由和ID路由方式,并新增了“隐式路由”方式。

存储器和IO读写操作请求TLP使用基于地址的路由方式,这种方式使用TLP中的Address字段进行路由选径,最终到达目的地。

配置读写报文、“Vendor_Defined Messages”报文、cpl、cplD报文使用基于ID路由方式,这种方式使用PCI总线号(Bus Number)进行路由路径选择,在Switch或多端口RC的虚拟PCI-to-PCI桥配置空间中,包含如何使用PCI总线号进行路由路径选择的信息。

隐式路由主要用于Message报文的传递,在PCIe总线中定义了一系列消息报文,包括“INTx Interrupt Signaling(中断信号)”、“Power Management Message(电源管理信息)”、“Error Signal Message(错误信息)”等报文,在这些报文中,除了“Vendor_Defined Messages”报文,其他所有信息报文都使用隐式路由方式。

隐式路由是指从下游端口到上游端口进行数据传递的使用路由方式,或者用于RC向EP发出广播报文。

Egress端口和Ingress端口

Egress端口指发送端口,即数据离开Switch使用的端口,ingress端口指的是接收端口即数据进入switch使用的端口(E,export)。

Egress端口和Ingress端口与上下游端口没有对应关系,在switch中,上下游端口可以作为Engress端口,也可以作为Ingress端口,如图所示,RC对EP3内部的寄存器进行读写操作时,Switch的上游端口为Ingress端口,下游端口为Egress。当EP3对主存储器进行DMA写操作时,该Switch的上游端口为Egress端口,而下游端口为Ingress端口。

上游端口和下游端口

在PCIe总线中,Switch是一个特殊的设备,该设备由一个上游端口和2~n个下游端口构成,PCIe总线规定:在一个switch中可以与RC(Root Complex)直接或者间接相连的端口为上游端口,在PCIe总线中,RC的位置一般位于上方,这也是上游端口的由来。

在switch中除了上游端口外,其他所有的端口都被称为下游端口,下游端口一般与EP相连,或者链接下一级switch继续扩展PCIe链路,其中与上游端口相连的PCIe链路称为上游链路,与下游端口相连的PCIe链路称为下游链路。

基于地址的路由

在PCIe总线中,存储器读写和I/O读写TLP使用基于地址的路由方式。

当一个TLP进行数据传递时,可能会经过多级Switch,最终到达目的地。Switch将根据存储器读写或者IO读写请求TLP的目的地址将报文传递到合适的Egress端口上。一个Switch包含几个端口,就包含几个虚拟PCI-to-PCI桥。

在虚拟PCI-to-PCI桥的配置空间中,包含一个桥片能够接受的物理地址范围,PCIe总线通过这个物理地址实现基于地址的路由,这段配置寄存器如下图所示,当系统软件初始化PCI总线时,将合理的设置这些寄存器,之后当TLP通过这些Switch时将根据这些寄存器选择合适的路径。

上图中的配置寄存器的配置过程由上位机完成,该配置寄存器描述了该虚拟PCI-to-PCI桥下游PCI子树使用的三组空间范围,分别为I/O、存储器、可预取的存储器空间,分别用Base和Limit两类寄存器描述,Base表示可访问空间的基地址,Limit表示可访问的空间的大小,一定要通过查询这组寄存器后,再决定传送路径。

基于ID的路由

在PCIe总线中,基于ID的路由方式主要应用于配置读写TLP和Cpl、CplD报文,此外Vender_Defined消息报文也可以使用这种基于ID的路由方式。

基于ID的路由方式和基于地址的路由方式有较大的不同,两者的TLP头格式也存在着较大的区别:

基于ID路由的TLP使用Bus Number、Device Number和Function Number进行路由寻址。

PCIe总线规范规定,在一个PCI总线域空间中,最多只能有256条总线,因此在一个TLP中,Bus Number由8位组成;而在一条总线中最多包含32个设备,因此TLP中的Device Number由5位组成;而每个设备最多包含8个功能,所以一个TLP的Function Number由3位组成。

配置读写请求TLP是基于ID路由的一组重要报文,其主要作用是读写PCIe总线的EP、Switch、PCIe桥片的配置寄存器,已完成PCIe总线的配置,在处理器上电后对PCIe系统进行枚举,为PCIe总线分配总线号,并设置Switch、EP、PCI桥的配置,如Limit寄存器组、Base寄存器组、BAR寄存器、Primary Bus Number、Secondary Bus Number、Subordinate Bus Number等配置参数。

隐式路由

PCIe总线相对于PCI总线的一大改进便是消除了大量的边带信号,这正是通过Message的机制来实现的。

PCIe中心规定消息请求报文使用隐世路由方式,在PCIe总线中,有许多消息是直接发向RC或者来自RC的广播报文,这些报文不使用地址或ID进行路由,而是使用Msg或MsgD报文的Routing字段({Fmt,Routing})进行路由,这种路由方式称为隐式路由。所有采用隐式路由的TLP头都是4DW的,如下所示:

其中,type字段决定了隐式路由的类型,具体如下所示:

000b:路由到RC

001b:使用地址路由

010b:使用ID路由

011b:来自RC的广播报文(隐式路由)

100b:本地消息,在接收端结束(Legacy使用此种报文格式传递来自PCI总线的中断报文)

101b:用于PCIe电源管理。

110b~111b:reserved

当一个报文使用隐式路由向EP传送时,EP将对routing字段进行检查,如果这个报文是“来自RC的广播报文”或者“本地报文”,EP将接收此报文。

如果Switch接收到一个隐式路由的TLP时,Switch将根据Route字段的不同而分别处理。如果Switch上游端口接受了一条来自于RC的广播信息,则将该报文发送所有的下游端口;如果Switch接收到一条来自下游端口发向RC的报文时,Switch直接转发到上游端口,直至RC;如果Switch接收到一条使用隐式路由方式的本地消息报文,则Switch将接收并终结此报文,不再上传或下推。

如果RC接收到一个使用隐式路由的TLP时,将根据Route字段而分别处理这些TLP,如果该Route字段为3’b000 or 3’b101,RC将接收该TLP,并作相应的处理;如果为3’b100,RC将接收该报文,并结束该TLP报文的传递。

下一篇
举报
领券