【PCIE体系结构六】TLP路由

这篇具有很好参考价值的文章主要介绍了【PCIE体系结构六】TLP路由。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

👉个人主页:highman110

👉作者简介:一名硬件工程师,持续学习,不断记录,保持思考,输出干货内容 

参考书籍:PCI_Express体系结构导读

目录

 TLP路由

 地址路由

 ID路由

 隐式路由


 TLP路由

        在一个有switch或多端口RC的多endpoint PICE总线拓扑中,TLP在传输时必然会遇到路径选择问题,这个路径选择就叫路由。PCIE总线定义了三种TLP路由方法:基于地址(address Routing)的路由、基于ID的路由(ID Routing,即BDF Routing,Bus Number + Device Number + Function Number)和隐式路由(Implicitly Routing)。

        PCIE设备根据TLP的类型(TLP Header的Format和Type字段)来进行路由方式的选择:

TLP type

路由方式

存储器读写、IO读写(传统PCI设备用)

address Routing

配置读写、Vender_defined Messages、CPl、CPlD

ID Routing

Message报文:包括INTx Interrupt Signaling、Power Management Messages、Error Signal Messages等

Implicitly Routing

        一般情况下,Message都是使用隐式路由(Implicitly Routing)的,但是也有PCIe设备厂商自定义的Message会使用地址路由或者ID路由。可能有的人要有疑惑了,既然Message可以使用地址路由或者ID路由,为什么还要单独搞出来一个模糊路由呢?原因很简单,使用模糊路由可以广播Message到每一个设备,采用其他的路由方式必须明确指定是哪一个设备。

 地址路由

        前面我们介绍了PCIE设备的配置空间内容,这里面就包含了TLP路由的地址信息。基于地址的路由很好理解,TLP报文中包含了目的地址信息,当Endpoint或switch接收到采用地址路由的TLP时,其会根据该TLP Header中的地址信息和自己的配置空间中的BAR寄存器来判断这个TLP是自己的还是我下游设备的。

        地址信息包含在TLP头中,对于Memory read或Memory write请求来说,32bit的地址使用3DW的Header,64bit的地址使用4DW的Header。而IO请求则只能使用32bit的地址,即只能使用3DW的Header,如下图:

【PCIE体系结构六】TLP路由

        当一个Switch上游端口收到一个Memory Read或者Memory Write TLP,它首先把TLP Header中的地址跟它自己Configuration当中的所有BAR寄存器比较,如果TLP Header当中的地址落在这些BAR的地址空间,那么它就认为该TLP是发给它的,于是接收该TLP(这个过程与Endpoint的处理方式一样);如果不是,则看这个地址是否落在其下游设备的地址范围内(是否在Memory Base和Memory Limit之间,switch上游端口的这两个寄存器存放的是与其连接的下游所有设备的地址空间),如果是,说明该TLP是发给它下游设备的,因此它要完成路由转发;如果地址不落在下游设备的地方范围内,说明该TLP不是发给它下游设备的,则不接受该TLP,如下图所示:

【PCIE体系结构六】TLP路由 

        那在switch内部,上游端口接收TLP后,再如何到达下游对应的某个设备呢?其实switch的每个端口都对应一个虚拟的PCI to PCI桥,上游的PCI桥通过PCI总线连接下游的PCI桥,每个PCI桥都有其配置空间,当桥P1收到TLP后,判断了此TLP目的地址在其下游设备地址空间范围内,它就将此报文发送到PCI BUS1上,下游的PCI桥都会收到此TLP,然后每个桥都判断目的地址是否在其所连接设备的地址空间内,如果在则接收报文并发给下游设备,如果不在则忽略此TLP。如下图TLP1到达EP1的路径:

【PCIE体系结构六】TLP路由 

        前面描述的是从上游到下游的TLP转发,那从下游到上游又怎么走呢?比如上图中的EP2发起了一个访问存储器的请求,TLP2是如何走到RC的?TLP2首先到达P3桥,P3桥的base和limit肯定不包含TLP2中的目的地址,P3桥将TLP2发送到PCI BUS1。

        这里需要注意的是,“TLP从上游端口向下游端口传递”和“TLP从下游端口向上游端口传递”的桥片处理机制有所不同。从上游向下游传时,如果桥片的配置寄存器base和limit包含TLP的目的地址时,桥片将接收TLP,否则不接收;而从下游到上游传时,如果桥片的配置寄存器base和limit不包含TLP的目的地址时,桥片将接收TLP,并将其推送到桥片上游PCI总线。

        TLP2到达总线PCI BUS1时,P2桥片会检查TLP2是不是自己的(相对P2桥来说,此时的TLP2方向是上游到下游),P1桥片也会检查TLP2是不是自己的(相对P3桥来说,此时的TLP2方向是下游到上游),P1桥片发现配置寄存器base和limit不包含TLP2的目的地址,则将其转发到上游PCI BUS0总线,也就到了RC。

        另外上图中的EP2访问EP1的TLP3就不多说了,机制和上面描述的一样。

 ID路由

        在一个PCIe拓扑结构中,由ID=Bus Number+Device Number+Function Number(BDF)能唯一找到某个设备的某个功能。这种按设备ID号来寻址的方式叫作ID路由。配置读写、Vender_defined Messages、CPl、CPlD 这几种TLP按ID路由寻址。

        使用ID路由的TLP如下图,其TLP Header中含有BDF信息:

【PCIE体系结构六】TLP路由

        还是把这张图贴在这里:

【PCIE体系结构六】TLP路由 

        若RC要访问到EP1的配置空间,配置空间的请求都是使用ID路由的,所以RC需要使用type1的配置请求TLP(此TLP的bus number为2,EP1挂在PCI bus2上),报文到达P-P1虚拟桥时,它会检查此TLP的bus number是否为1,若为1则表示该TLP访问的目标设备在PCI bus1总线上,此时P-P1桥将会把type1的TLP转化为type0的TLP,然后推送到PCI bus1上,并访问其下设备(注意type0的TLP是不能穿越PCI桥的,所以它只能访问到P-P2或P-P3,那这个两个桥怎么接收type0的TLP呢?这里是虚拟的PCI桥,当要访问桥的时候,可以认为桥不是桥了,这个桥就是PCI agent设备,PCI是共享总线的传输方式,PCI总线上挂了多个PCI agent设备,每个设备都有一个独立的IDSEL#信号与P-P1地址总线相连,PCI总线根据IDSEL#与地址总线的连接关系来决定相应设备的device number)。这里扯远了点,回到RC发出的TLP的bus number为2这个前提,P-P1桥则会发现此bus number(2)在其secondary bus number(1)和subordinate bus number(3)之间,P-P1桥将直接透传此type1的TLP到PCI bus 1上,然后P-P2检查到bus number为2则知道此TLP是给自己下挂的EP的,就将此type1 TLP转化为type0 TLP(bus number和device number字段就不需要了,全部填1,因为一个switch端口只连接一个EP,保留function number和register偏移地址),再转发到EP1,由EP1处理此TLP。

 隐式路由

        只有Message TLP才支持隐式路由。在PCIe总线中,有许多消息是直接发给RC或来自RC的广播报文,因此没有必要明明白白地指定地址或者ID,这种路由方式称为隐式路由。也有使用地址路由和ID路由的Message TLP,但是多数是使用隐式路由,这些消息报文包括:中断请求、错误状态处理、锁定总线事务、热插拔信号处理、vendor defined message等。

Message TLP的Header总是4DW:

【PCIE体系结构六】TLP路由

Type字段,低3位,由rrr表示,指明该Message的路由方式,具体如下图所示:

【PCIE体系结构六】TLP路由        当一个Endpoint收到一个Message TLP,检查TLP Header,如果是RC的广播Message(011b)或者该Message终结于它(100b),它就接受该Message。当一个Switch收到一个Message TLP,检查TLP Header,如果是RC的广播Message(011b),则往它每个下游端口复制该Message然后转发。如果该Message终结于它(100b),则接受该TLP。如果下游端口收到发给RC的Message,则往上游端口转发。

        OK,TLP路由介绍暂时到这,更详细的内容有面有机会再展开。

 文章来源地址https://www.toymoban.com/news/detail-429537.html

 

 

 

到了这里,关于【PCIE体系结构六】TLP路由的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OSI体系结构和TCP/IP体系结构

     在第一章( 计网第一章 )的时候,曾经提到过OSI体系结构和TCP/IP体系结构,并对它们进行了简单的对比。这篇博客在其基础上进行更深层次的理解。 计算机网络在逻辑功能上可以分为通信子网和资源子网两部分。 事实上,OSI将低三层称为通信子网,即为了联网而附加的通

    2024年02月07日
    浏览(38)
  • 【体系结构】山东大学计算机体系结构知识点清单

    涵盖所有考点,复习绝对高效,点赞+留邮箱获取pdf版本 1. 计算机系统的层次结构 语言实现的两种基本技术: 翻译:先把 N+1 级程序全部转换成 N 级程序后,再去执行新产生的 N 级程序,在执行过程中 N+1 级程序不再被访问。 解释:每当一条 N+1 级指令被译码后,就直接去执

    2024年02月11日
    浏览(48)
  • 计算机网络七层体系结构(OSI七层结构)、TCP/IP四层模型、网络五层体系结构

    计算机网络七层体系结构(OSI七层结构)、TCP/IP四层模型、网络五层体系结构 七层体系结构(OSI七层结构) :为了使全世界不同体系结构的计算机能够互联,国际化标准组织ISO提出开放系统互联基本参考模型,简称OSI,即所谓的7层协议体系结构。 TCP/IP四层模型 :是由实际

    2024年02月06日
    浏览(42)
  • 计算机网络——计算机网络体系结构(2/4)-分层的必要性(五层协议原理体系结构)

    目录 物理层 数据链路层 网络层 运输层 应用层 计算机网络是个非常复杂的系统。 早在最初的ARPANET设计时就提出了分层的设计理念。 \\\"分层\\\"可将庞大而复杂的问题,转化为若干较小的局部问题,而这些较小的局部问题就比较易于研究和处理。 下面,我们以五层原理结构体系

    2024年02月07日
    浏览(38)
  • MySQL体系结构

     🎉欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克🍹 ✨博客主页:小小恶斯法克的博客 🎈该系列文章专栏:重拾MySQL-进阶篇 🍹文章作者技术和水平很有限,如果文中出现错误,希望大家能指正🙏 📜 感谢大家的关注! ❤️ 目录 🚀 MySQL体系

    2024年01月22日
    浏览(69)
  • 冯诺依曼体系结构

    冯·诺依曼体系结构(von Neumann architecture)是现代计算机体系结构的基础,也是目前广泛应用的计算机体系结构之一。它是由物理学家、数学家冯·诺依曼在1945年提出的,被认为是现代计算机的奠基之作。冯·诺依曼体系结构具有存储程序和通用性的特点,这意味着计算机的指

    2023年04月23日
    浏览(31)
  • 集合体系结构

    List系列集合:添加的元素有序,可重复,有索引 Collection:是单列集合的祖宗接口,它的功能是全部单列集合都可以继承使用的 set系列集合:添加的元素无序,不重复,无索引   方法名 说明 public boolean add(E e) 把给定的对象添加到当前集合中 public void clear() 清空集合中所有的

    2024年02月09日
    浏览(37)
  • 了解 PostgreSQL 体系结构

    PostgreSQL 是客户端/服务器关系数据库管理系统 (RDMS)。 PostgreSQL 还支持各种扩展插件,例如 Azure Database for PostgreSQL 超大规模 Citus 选项中的 Citus 扩展插件。 将扩展插件加载到数据库中后,它将像任何内置功能一样正常运行。 PostgreSQL 也有自己的查询语言,称为 pgsql。 此外,

    2024年02月16日
    浏览(31)
  • JVM 体系结构

    JVM: 跨平台语言 需要不同语言由自己编译器,生成符合 JSR-292 JVM规范的字节码文件,即可在 Java 虚拟机中运行  多语言混合编程: Java 平台上的多语言混合编程正成为主流,通过特定领域的语言去解决特定领域的问题是当前软件开发应对日趋复杂的项目需求的一个方向 每个应

    2024年02月03日
    浏览(35)
  • Spring的体系结构

    【Spring技术】Spring的体系结构 【Spring技术】Spring之IOC和DI入门案例 【Spring技术】Spring之Bean的配置与实例 【Spring技术】Spring依赖注入(DI配置) 【Spring技术】Spring第三方资源配置管理 【Spring技术】Spring容器技术 【Spring技术】Spring注解开发 【Spring技术】Spring整合MybatisJunit单元测

    2023年04月22日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包