PCIe扫盲(四)

发布于:2024-09-18 ⋅ 阅读:(130) ⋅ 点赞:(0)

在这里插入图片描述

系列文章目录


PCIe扫盲(一)
PCIe扫盲(二)
PCIe扫盲(三)
PCIe扫盲(四)



TLP路由(Routing)基础

  首先来分析一个例子,如下图所示:

在这里插入图片描述

  当包(Packet)到达 Switch 的输入端口(Ingress Port)时,端口首先会检查包是否有错误,然后根据包的路由(Routing)信息,来做出以下三种处理方式之一:

  1. 接受这个包,并自己(Switch)使用它(Internal Use);

  2. 将其通过响应的输出端口(Egress Port)转发到下一级 Endpoint(或者下一级 Switch);

  3. 拒绝接受这个包。

  在前面的文章中多次介绍过,PCIe 总线中一共有三种类型的包:Ordered Sets(命令集包,只在相邻的设备的物理层之间进行传递,不会被转发到其他的设备中)、DLLPs(数据链路层包,只在相邻的设备的数据链路层之间进行传递,不会被转发到其他设备中)和 TLPs(事务层包,可以根据包中的路由信息被转发到其他的设备中)。

   注:实际上不论是 TLPs 还是 DLLPs 都会经过物理层,这里说的 TLPDLLP 指的是包的最初来源分别是事务层和数据链路层,即 DLLP 和上一层的事务层没有什么关系,其内容和作用完全是由数据链路层自己决定的。

   注:Endpoint 不仅可以发送 TLP 给其上层的设备(如 Root ),也可以发送 TLP 给其他的 Endpoint,当然这需要借助 Switch 来实现。这种传输方式叫做 Peer-to-Peer

  TLP 一共有三种路由方式,分别是 ID 路由(ID Routing,即 BDF Routing)、地址路由(Address Routing,包括 MemoryIO)以及模糊路由(Implicitly Routing)。本文将简单介绍一些关于 TLP 路由的基础知识,具体的路由方式将会在接下来的三篇文章中依次进行介绍。

  具体采用哪一种路由方式是由 TLP 的类型所决定的,如下表所示:

在这里插入图片描述

   注:AtomicOpPCIe Spec V2.1 新增的内容,有兴趣的可以自行阅读 V2.1 的相关内容。

   注:一般情况下,Message 都是使用模糊路由(Implicitly Routing)的,但是也有 PCIe 设备厂商自定义的 Message 会使用地址路由或者 ID 路由。

  可能有的人要有疑惑了,既然 Message 可以使用地址路由或者 ID 路由,为什么还要单独搞出来一个模糊路由呢?原因很简单,使用模糊路由可以广播 Message 到每一个设备,采用其他的路由方式必须明确指定是哪一个设备。

  那么 PCIe 中是如何来判断 TLP 的类型的呢?又是如何判断其为 Request 还是 Completion 的呢?实际上是通过 TLP HeaderFormatType 部分来确定的,如下图所示:

在这里插入图片描述

在这里插入图片描述

TLP路由之 ID Routing

  ID 路由(ID Routing)有的时候也被称为 BDF 路由,即采用 Bus NumberDevice NumberFunction Number 来确定目标设备的位置。这是一种兼容 PCIPCI-X 总线协议的路由方式,主要用于配置请求(Configuration Request)的路由,在 PCIe 总线中,其还可以被用于 CompletionMessage 的路由。

  前面的文章提到过,TLPHeader3DW 的和 4DW 的,其中 4DWHeader 一般只用于 Message 中。使用 ID 路由的 TLP Header 以下两张图所示,第一个为 3DW Header,第二个为 4DW Header

在这里插入图片描述
在这里插入图片描述

  对于 Endpoint 来说,其只需要检查 TLP Header 中的 BDF 是否与自己的 BDF 一致,如果一致,则认为是发送给自己的,否则便会忽略该 TLP

  注:很多初学者可能都会有这样的一个疑问:采用 ID 路由的 TLP Header 中并未包含 RequesterIDBDF),那么 Completer 怎么确定 Requester 的位置呢?实际上这个问题并不难回答,因为 ID 路由主要用于配置请求和 Completion,偶尔也用于一些厂商自定义的 Message。首先,配置请求的 Requester 只能是 Root,所以不需要确定其位置;再之,Completion 用于对其他路由方式的回应,如地址路由中包含了 RequesterBDF;最后,MessagePosted 型的,即其根本不需要 Completion,自然也就不需要 RequesterBDF 了。

  注:实际上 PCIe 是一种点对点(Point-to-Point)的通信方式,即每个链路只能连接一个设备,因此大部分情况下使用 5bit 的空间来描述 Device Number 完全是多余的。为此,PCIe Spec 提出了 ARI 格式,这里暂时不详细介绍了,有兴趣的可以自行阅读 PCIe Spec 的相关内容。

  对于 Switch 来说,则需要根据 TLP Header 中的 BDF 来判断,这个 TLP 是给自己的还是给自己下属的其他设备的。如下图所示:

在这里插入图片描述

TLP 路由之 Address Routing

  地址路由(Address Routing)的地址包括 IOMemory 。对于 Memory 请求来说,32bit 的地址使用 3DWHeader64bit 的地址使用 4DWHeader 。而 IO 请求则只能使用 32bit 的地址,即只能使用 3DWHeader

   注:再次强调,IO 请求是为了兼容早期的 PCI 设备的,在新的 PCIe 设备中禁止使用。

  3DW4DWTLP Header 分别如以下两张图所示:

在这里插入图片描述
在这里插入图片描述

  当 Endpoint 接收到采用地址路由的 TLP 时,其会根据该 TLP Header 中的地址信息和自己的配置空间中的 BAR 寄存器来判断这个 TLP 是不是自己的。如下图所示:

在这里插入图片描述

  Switch 的地址路由机制如下图所示:

在这里插入图片描述

TLP 路由之 Implicit Routing

  模糊路由(Implicit Routing,又译为隐式路由)只能用于 Message 的路由。前面的文章中多次提到过,PCIe 总线相对于 PCI 总线的一大改进便是消除了大量的边带信号,这正是通过 Message 的机制来实现的。

  PCIe 定义的 Message 主要有以下几种类型:

  • Power Management
  • INTx legacy interrupt signaling
  • Error signaling
  • Locked Transaction support
  • Hot Plug signaling
  • Vendor‐specific signaling
  • Slot Power Limit settings

  所有采用模糊路由的 TLPHeader 都是 4DW 的,具体如下图所示:

在这里插入图片描述

  其中 Type 决定了模糊路由的类型,具体如下图所示:

在这里插入图片描述

转载链接

  1. TLP路由(Routing)基础
  2. TLP路由之 ID Routing
  3. TLP 路由之 Address Routing
  4. TLP 路由之 Implicit Routing

  
 



网站公告

今日签到

点亮在社区的每一天
去签到