PCIe 系统拓朴结构和基本组件介绍

2024-03-21 08:40

本文主要是介绍PCIe 系统拓朴结构和基本组件介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文从PCIe常见的系统应用和BaseSpec的角度,简要介绍PCIe拓扑结构和各个组件的功能及基本概念。

PCIe 系统拓扑结构

        

PCIe 拓扑结构

此图是BaseSpec中关于PCIe fabric及拓扑结构的示意图,一个常见的PCIe系统内,一般的会包含一个或多个RootPort及SoC其他组件共同组成的RootComplex。一个或多个PCIe Switch,以及多个PCIe Endpoint(或Legacy Endpoint)组件。

上图以AMD Ryzen CPU为例,Ryzen CPU SoC可以认为是Root Complex,其下挂了若干个Endpoint设备,如Storage,Graphics等。AMD X570可以认为是Switch的部分,因为往往chipset下面还会连接更多的PCIe Endpoint设备,比如更多的PCIe/NVME/SSD/USB等存储设备,以太网控制器,声卡等等。

PCIe系统组件

Root Complex

PCIe BaseSpec中描述的RootComplex不只是描述一个SoC中的IP,而是一系列功能。一般的PCIe接口协议相关的叫Root Port,是pcie系统结构中的一个port。BaseSpec定义的RootComplex是:

  • RC 表示IO Hierarchy的Root,并且和CPU/Memory子系统相连。
  • RC可以包含一个或多个PCIe port (Root Port). 每一个interface分别定义了PCIe域及其层级结构。 每一个PCIe域和层级结构可以包含一个或多个PCIe Switch和Endpoints。
  • RC需要支持产生configuration request。
  • RC可选的支持产生I/O request。
  • 当RC作为Completer时,不允许支持Lock操作。相反的,RC可以支持发送Locked requester as Requester。

上面是一段从BaseSpec翻译过来的,阅读起来非常绕口。稍微总结几句:

1. RC是整个PCIe树形数据结构中唯一的主控者,一个PCIe tree结构下只允许有一个PCIe RC,可以有多个Switch和Endpoint。

2. RC是整个属性结构的发起者和建立者,换言之,因为PCIe是使用Configuration request来枚举和建立PCIe层级结构的,所以只有RC允许发起configuration request。所有其他的PCIe 设备均不允许发送configuration request。

3. RC也是传统PCIe设备中唯一的Host (可以理解为CPU),而传统设备中,只有Host CPU可以发送IO指令,所以BaseSpec描述,RC支持IO Request。因为现代CPU大多使用IOMMU,而非传统IO操作,所以IO request基本已经很少使用了,所以这个IO request对RC来说是Optional。

4. 不支持作为Lock completer, 这个用的比较少,应该是因为RC作为唯一的主控设备,如果他的内存或者某compoment被PCIe hierarchy下面的某个Endpoint给Lock住了,要防止互锁的发生,所以RC是不允许被Lock的。

PCIe Switch

       

上图PEX9797就是AVAGO推出的PCIe Gen3多端口PCIe switch及典型应用场景。
  • 向上连接一个PCIe 的Root Complex (CPU)
  • 下面挂在若干个高速设备(此处是4个GPU)
  • 另外此PCIe switch支持一个端口对接到另一个PEX9797 switch,用于扩展PCIe endpoint设备数量,或者作为transparent bridge (Optional)对接另一个PCIe tree。

下图是一个PCIe Switch的内部结构概念图。一个Switch由一个Upstream Port,负责和上一级Switch或者Root Port对接。和若干个downstream port,以及一个内部的“交换器/桥接器/路由器”,名称可能很多,工程差不多,主要实现TLP或者Message的路由。

PCIe Endpoint

再PC和Server领域,我们大量的能看到PCIe Endpoint(终端)设备,比如个人PC上用的显卡(金手指那个接口就是PCIe),NVMe硬盘,网卡(特别是万兆网卡),插在PCIe插槽上的声卡等。服务器上的GPGPU,AI算力卡等等,基本上全部使用PCIe接口。Endpoint常见支持的Feature有:

  • 支持Memory read/write requestor和completor。
  • 支持发送MSI/MSI-X/INT-x等中断消息。
  • 支持最大实现6个BAR(Base Address Registers)
  • Endpoint只能作为Configuration和IO requester的重点。不能转发和自己发送configuration/IO request.
  • Endpoint可以支持多个function,physical function 和virtual function。


全文完

这篇关于PCIe 系统拓朴结构和基本组件介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/832244

相关文章

Redis 基本数据类型和使用详解

《Redis基本数据类型和使用详解》String是Redis最基本的数据类型,一个键对应一个值,它的功能十分强大,可以存储字符串、整数、浮点数等多种数据格式,本文给大家介绍Redis基本数据类型和... 目录一、Redis 入门介绍二、Redis 的五大基本数据类型2.1 String 类型2.2 Hash

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

Vue3视频播放组件 vue3-video-play使用方式

《Vue3视频播放组件vue3-video-play使用方式》vue3-video-play是Vue3的视频播放组件,基于原生video标签开发,支持MP4和HLS流,提供全局/局部引入方式,可监听... 目录一、安装二、全局引入三、局部引入四、基本使用五、事件监听六、播放 HLS 流七、更多功能总结在 v

linux系统中java的cacerts的优先级详解

《linux系统中java的cacerts的优先级详解》文章讲解了Java信任库(cacerts)的优先级与管理方式,指出JDK自带的cacerts默认优先级更高,系统级cacerts需手动同步或显式... 目录Java 默认使用哪个?如何检查当前使用的信任库?简要了解Java的信任库总结了解 Java 信

5 种使用Python自动化处理PDF的实用方法介绍

《5种使用Python自动化处理PDF的实用方法介绍》自动化处理PDF文件已成为减少重复工作、提升工作效率的重要手段,本文将介绍五种实用方法,从内置工具到专业库,帮助你在Python中实现PDF任务... 目录使用内置库(os、subprocess)调用外部工具使用 PyPDF2 进行基本 PDF 操作使用

Java Instrumentation从概念到基本用法详解

《JavaInstrumentation从概念到基本用法详解》JavaInstrumentation是java.lang.instrument包提供的API,允许开发者在类被JVM加载时对其进行修改... 目录一、什么是 Java Instrumentation主要用途二、核心概念1. Java Agent

Oracle数据库在windows系统上重启步骤

《Oracle数据库在windows系统上重启步骤》有时候在服务中重启了oracle之后,数据库并不能正常访问,下面:本文主要介绍Oracle数据库在windows系统上重启的相关资料,文中通过代... oracle数据库在Windows上重启的方法我这里是使用oracle自带的sqlplus工具实现的方

Kotlin 协程之Channel的概念和基本使用详解

《Kotlin协程之Channel的概念和基本使用详解》文章介绍协程在复杂场景中使用Channel进行数据传递与控制,涵盖创建参数、缓冲策略、操作方式及异常处理,适用于持续数据流、多协程协作等,需注... 目录前言launch / async 适合的场景Channel 的概念和基本使用概念Channel 的

Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧

《Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧》本文将通过实际代码示例,深入讲解Python函数的基本用法、返回值特性、全局变量修改以及异常处理技巧,感兴趣的朋友跟随小编一起看看... 目录一、python函数定义与调用1.1 基本函数定义1.2 函数调用二、函数返回值详解2.1 有返

Vue和React受控组件的区别小结

《Vue和React受控组件的区别小结》本文主要介绍了Vue和React受控组件的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录背景React 的实现vue3 的实现写法一:直接修改事件参数写法二:通过ref引用 DOMVu