【PCIE常见面试问题-1】

PCIE常见面试问题-1

  • 1 PCIE概述
    • 1.1 PCI为何发展开PCIE?
    • 1.2 什么是Root Complex(RC)
    • 1.3 什么是EP?
    • 1.4 什么是Swith
    • 1.5 PCIE协议如何组织通信的?
    • 1.6 简要介绍一下PCIE的分层结构,为什么需要分层?
    • 1.7 PCIE的事务类型有哪些?
    • 1.8 PCIE的事务类型对应哪些模式?
    • 1.9 PCIE的路由方案
    • 1.10 具体介绍一下PCIE的事务层

1 PCIE概述

1.1 PCI为何发展开PCIE?

PCI提高带宽的方法有两种,一是增加位宽, 二是提高速率。可增加位宽提高成本,增大占板面积,提高速率影响信号完整性,而且负载能力受限,例如33MHz的可以驱动10个负载,66MHz最多只能驱动4个负载。信号质量也存在问题;
再具体来说:
1.带宽需求:
PCI基于并行结构,增加位宽一是提高成本,二是带来信号完整性和扩展性的问题;
PCIe采用串行总线架构,每个lane的带宽为2.5Gbps,并且可以多lane并行使用;

2.信号完整性和可靠性
并行总线的信号完整性问题:传统的PCI总线是并行总线,多个信号线同时传输数据,容易受到噪声干扰和信号反射的影响,导致信号完整性问题。
串行总线的优势:PCIe采用串行总线架构,每个lane独立传输数据,减少了信号干扰和反射问题,提高了信号完整性和可靠性。

3.扩展性和灵活性
固定拓扑结构:传统的PCI总线采用固定的共享总线拓扑结构,所有设备共享同一总线,容易产生瓶颈。
点对点连接:PCIe采用点对点连接方式,每个设备都有专用的lane,可以独立通信,避免了共享总线的竞争问题,提高了扩展性和灵活性。

4.低延迟和高效率
共享总线的延迟问题:在传统的PCI总线上,多个设备共享同一总线,导致数据传输时需要等待总线空闲,增加了延迟。
专用通道的低延迟:PCIe的每个lane都是专用的,数据传输不需要等待,降低了延迟,提高了效率。

使用高速差分代替并行总线是大势所趋

1.2 什么是Root Complex(RC)

RC的含义就是一个实现CPU与PCIE上组件通信的媒介,CPU要读取某个组件信息,告知RC,其它的均有RC代劳了。可以简单理解RC为PCIE总线的主控制器;
RC支持的主要功能:
1、配置空间管理:RC管理 PCIe 总线上所有设备的配置空间。每个 PCIe 设备都有一些配置寄存器,这些寄存器存储设备的特定信息,如设备ID、厂商ID。
2、地址映射:RC负责分配 PCIe 总线上各个设备的地址。这包括内存映射和I/O映射,以确保不同设备之间的数据传输能够正确进行。
3、中断管理:PCIe设备可能会生成中断信号,RC负责管理这些中断,确保它们正确地传递到相应的处理器核心。
4、通信与数据传输:RC与其他 PCIe 设备之间通过 PCIe 链路进行通信。PCIe 链路分为一到多个通道,每个通道包含一个上行和一个下行通道,用于双向数据传输。

1.3 什么是EP?

Endpoint是PCIe总线上的终端设备,负责提供各种服务和数据传输功能。它要实现对RC的请求进行响应,并接收RC的配置。

1.4 什么是Swith

Switch组件,作用好比路由器,是扩展PCIE总线的的,能够允许更多的Endpoints设备链接到系统。它的内部可以视为多个虚拟的PCI到PCI的桥,实现扩展功能。该组件会根据事务类型将数据送到不同的通道。该组件对数据包没有处理的功能只有转发功能。
Switch具有多个端口,每个端口连接到PCIe总线的一个通道,或者连接到另一个Switch的端口。通道是数据传输的通路,每个通道包含一个上行通道和多个下行通道,用于双向数据传输。上行通道与Root Complex或上层的Switch连接,以接收和发送数据。 S下行通道与多个Endpoint设备连接,为这些设备提供PCIe总线访问。

1.5 PCIE协议如何组织通信的?

PCIE概括来说就是两种传输机制、三层逻辑结构、四种事务类型;
1、协议相关代码采用分层的方式进行组织的,分为事务层、链路层和物理层,以此实现用户数据的交互;
2、数据类型被分为内存、I/O、配置和消息四类,分别完成不同的功能。
3、数据交换是基于请求与完成(响应)的机制,也分为Non-Posted和Posted两种模式,Posted意思发送数据不需要接收端响应,而Non-Posted是要求接收端对发送数据进行响应。

1.6 简要介绍一下PCIE的分层结构,为什么需要分层?

对于复杂的协议,分层是必须要做的事情,分层有利于对实现功能有着明确、合理的划分,不仅增加代码的可读性,更有助于提高其可读性,并利于扩展;
在这里插入图片描述

1、事务层
事务层是PCIE协议的对外接口层,用户对数据进行组帧和解析是在本层进行,本层产生的数据包称之为事务层数据包,即(Transaction Layer Packets,TLP)。此外事务层还具有基于信用积分的流控功能,支持不同事务类型的不同形式的数据传输。

2、数据链路层
数据链路层充当事务层和物理层之间的中间阶段,主要职责包括链路管理和数据完整性,包括错误检测和纠正。

数据链层在传输链路上接收事务层的TLP数据包添加序列号和校验码交给物理层,而且链路层非常尽责,会对事务层交付的数据包进行缓存,如果检测到传输错误会进行重发,直到接收正确或确定链路通信失败。

链路层还具有链路管理功能,并有相应的数据包,称之为“数据链路层数据包(DLLP)”该数据包是实现两个组件间的数据交换,并没有路由功能,换言之,如果一包数据要跨过大山大河到达接收端,中间经过无数站点,DLLP数据包只在两站之间进行数据交换,主要实现的功能有流量控制、电源管理、应答机制和虚拟通道。

3、物理层
物理层分为两个部分,一部分是逻辑子层,一部分是电气子层。逻辑子层模块负责与数据链路层的数据交换,会对接收链路层事务进行再次封装,对接收电气子层事务进行解析,并会进行8B/10B编码或者128B/130B编码,进行传递之间的转换和极性反转等工作,电气子层则更多的负责时钟数据恢复、均衡等电气操作。物理层数据包称之为PLP,Physical Layer Packet。

1.7 PCIE的事务类型有哪些?

PCIE的事务类型有:内存事务、I/O事务、配置食物和消息事务;消息是PCIE拓展的;
1.内存事务
内存事务并不一定是读写内存,而是代表一种大数据量的数据交换方式;
2.I/O事务
会逐渐被弃用并被MMIO替代。MMIO(Memory-Mapped I/O,内存映射I/O)是一种访问设备寄存器和配置空间的机制。在PCIe架构中,MMIO是一种I/O访问方法,它允许软件通过内存地址范围来读取或写入设备寄存器的值而不是通过传统的I/O端口方式。
3.配置
每个 PCIe 设备都有一组配置寄存器,包含设备的重要信息、功能设置以及与设备通信所需的控制寄存器等。在PCIE设备应用前必须经过配置阶段;
4.消息
消息是PCIE新增的一种事务类型,用来取代PCI的一些边带信号,使得所有的信号传递都通过报文来实现。比如中断、电源管理和错误消息;

1.8 PCIE的事务类型对应哪些模式?

只有Memory Write 和Message 是Posted即不需要响应的两种模式

1.9 PCIE的路由方案

PCIE之间组件的通信是两点间的数据交换,而且可能链路很长,因此需要机制保证;
PCIE的路由方案:ID路由、地址路由和模糊路由;
1.ID路由
ID路由即BDF路由方案,即采用Bus Number、Device Number和Function Number来确定目标设备的位置。这是一种兼容PCI的路由方案,主要用于设备的配置、带数据和不带数据的返回数据包。
2.地址路由
地址路由包括对IO和Memory两种事务类型的路由,在帧头中包含了目的设备的地址信息,处理器会为每个设备分配一段地址信息,这也是数据包传输过程中的标志符。
3.模糊路由
模糊路由(Implicit Routing,又译为隐式路由)只能用于Message的路由。用来实现电源管理、错误信号、热插拔、虚拟通道等功能;

1.10 具体介绍一下PCIE的事务层

RC相比是他要处理诸多事务,这些事务以统一的方式对外发出,不同端点(Endpoints)的专用模块就好比具体执行的,接收不同事务进行处理反馈。

进一步理解地址空间: “Address Spaces” 指的是不同的寻址空间,代表着不同内存区域或者设备寄存器区域,也代表着不同的事务类型。PCIE使用不同的地址空间来访问不同类型资源,如下表所示:
在这里插入图片描述

  1. 内存地址空间
    内存地址空间(Memory Address Space)也就是内存事务类型,用于访问主机系统中的内存区域。设备可以通过PCIe直接访问主机内存,实现数据的读取和写入。这种地址空间允许设备通过 DMA(直接内存访问)等技术直接在内存中进行数据传输。
    内存地址空间支持读的请求与完成、写请求和原子操作的请求与完成这三大类事务类型,支持32bit地址和64bit地址两种地址空间。

2.配置地址空间
配置地址空间(Configuration Address Space)也就是配置事务,用于访问设备的配置寄存器。每个 PCIe 设备都有一组配置寄存器,包含设备的重要信息、功能设置以及与设备通信所需的控制寄存器等。通过配置地址空间,系统可以对设备进行初始化、配置和管理。这也是使用PCIE设备前的必要步骤。
这种配置空间的访问方式为系统和设备之间的通信提供了标准化的接口,有助于确保设备之间的互操作性和系统的稳定性。事务类型包括两种类型:
1)Configuration Read Transaction(读事务): 主机系统通过 PCIe 总线向目标设备的配置空间读取信息。这通常涉及读取设备的配置寄存器,以获取设备的状态、特性和其他信息。
2)Configuration Write Transaction(写事务): 主机系统通过 PCIe 总线向目标设备的配置空间写入信息。这用于配置设备的各种参数,使其适应系统需求。

3.I/O地址空间
IO地址空间(IO Address Space)用于访问设备的 IO 空间,允许设备使用类似于传统 IO 端口的方式进行通信和数据传输。这部分主要是兼容PCI的。支持读的请求与完成和写的请求与完成,支持的地址格式是32bit。–现在也会被取代;

4.Message地址空间
Message地址空间用于提供了一种灵活的数据传输机制,使得设备之间可以通过异步的方式进行通信,从而更好地支持一些事件驱动的场景,例如中断传递、错误通知、电源管理等。这种异步通信机制有助于提高系统的效率和响应速度。

具体的事务层TLP包格式概述:事务层由请求和完成两种类型组成,是基于包的方式进行端到端的数据交换。
在这里插入图片描述

【REF】
1.https://fpgaup.com/fpgauptext.php?cidi=171

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/476200.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用pyspark把kafka主题数据经过etl导入另一个主题中的有关报错

首先看一下我们的示例代码 import os from pyspark.sql import SparkSession import pyspark.sql.functions as F """ ------------------------------------------Description : TODO:SourceFile : etl_stream_kafkaAuthor : zxxDate : 2024/11/…

什么是反向 DNS 查找以及它的作用是什么?

反向DNS查询(rDNS)是一种技术,用于确定与某个IP地址对应的域名。当我们对一个IP地址进行反向DNS查询时,实际上是向域名系统(DNS)的特殊部分请求信息,这部分被称为PTR记录。PTR记录会返回与这个I…

HarmonyOS鸿蒙系统上File文件常用操作

HarmonyOS鸿蒙系统上,file文件常用操作记录 1.创建文件 createFile(fileName: string, content: string): string {// 获取应用文件路径let context getContext(this) as common.UIAbilityContext;let filesDirPath context.filesDir / fileName;// 新建并打开…

音视频pts/dts

现在的视频流有两个非常重要的时间戳,pts和dts,其中pts是显示的时候用,dts在解码的时候用。 pts很好理解,按照pts的顺序以及duration不间断的display就可以了。 dts在解码的时候用,那么这句话怎么理解,解…

输出比较简介

输出比较简介 主要是用来输出PWM波形,这个波形是驱动电机的(智能车和机器人等)必要条件 OC(Output Compare)输出比较,还有IC,全称是Input Capture,意为输入捕获,还有CC…

揭秘AIGC下的数字时代:交互设计的隐秘力量与未来革命

在当今数字化时代,交互设计已经成为我们日常生活中不可或缺的一部分。它不仅仅是关于产品或服务的界面设计,更是关于如何通过这些界面与人进行有效的沟通和互动。本文将探讨交互设计的深层含义、面临的挑战以及其对未来科技发展的影响。 文章来源&#x…

使用node-addon-api实现从c到nodejs模块全流程

目录 1 前言 2 安装nodejs 3 安装开发工具链 3.1 安装node-gyp 3.2 安装编译工具链(C/C 编译器) 4 初始化 Node.js 项目 4.1 创建项目目录 4.2 初始化 package.json 4.3 安装必要的库 5 编写代码 5.1 创建项目结构 5.2 编写动态库代码 5.3 编…

Python3.11.9+selenium,获取图片验证码以及输入验证码数字

Python3.11.9+selenium,获取图片验证码以及输入验证码数字 1、遇到问题:登录或修改密码需要验证码 2、解决办法: 2.1、安装ddddocr pip install ddddocr 2.2、解析验证码函数 import ddddocr def get_capcha_text():#获取验证码图片ele_pic = driver.find_element(By.XPAT…

测试工程师如何在面试中脱颖而出

目录 1.平时工作中是怎么去测的? 2.B/S架构和C/S架构区别 3.B/S架构的系统从哪些点去测? 4.你为什么能够做测试这一行?(根据个人情况分析理解) 5.你认为测试的目的是什么? 6.软件测试的流程&#xff…

css水平居中+垂直居中

display:“flex”,position: “absolute”,top:“50%”,left:“50%”,transform: ‘translate(-50%, -50%)’

Linux 服务器使用指南:从入门到登录

🌟快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。 🌟 🚩博主致力于用通俗易懂且不失专业性的文字,讲解计算机领域那些看似枯燥的知识点🚩 目录 一…

99.【C语言】数据结构之二叉树的基本知识

目录 1.树的定义 树是递归定义的 一些细碎的概念 2.树的判断法则 树结点结构的定义 自然想到的定义方法 左孩子右兄弟定义 3.树的应用:文件系统 4.树的特殊形式:二叉树 5.特殊的两类二叉树 满二叉树 完全二叉树 完全二叉树和满二叉树之间的关系 高度为h的完全二叉…

Bug:引入Feign后触发了2次、4次ContextRefreshedEvent

Bug:引入Feign后发现监控onApplication中ContextRefreshedEvent事件触发了2次或者4次。 【原理】在Spring的文档注释中提示到: Event raised when an {code ApplicationContext} gets initialized or refreshed.即当 ApplicationContext 进行初始化或者刷…

Ubuntu20.04从零安装IsaacSim/IsaacLab

Ubuntu20.04从零安装IsaacSim/IsaacLab 电脑硬件配置:安装Isaac sim方案一:pip安装方案二:预构建二进制文件安装1、安装ominiverse2、在ominiverse中安装isaac sim,下载最新的4.2版本 安装Isaac Lab1、IsaacLab环境克隆2、创建con…

低速接口项目之串口Uart开发(二)——FIFO实现串口数据的收发回环测试

本节目录 一、设计思路 二、loop环回模块 三、仿真模块 四、仿真验证 五、上板验证 六、往期文章链接本节内容 一、设计思路 串口数据的收发回环测试,最简单的硬件测试是把Tx和Rx连接在一起,然后上位机进行发送和接收测试,但是需要考虑到串…

算法编程题-排序

算法编程题-排序 比较型排序算法冒泡排序选择排序插入排序希尔排序堆排序快速排序归并排序 非比较型排序算法计数排序基数排序 本文将对七中经典比较型排序算法进行介绍,并且给出golang语言的实现,还包括基数排序、计数排序等非比较型的算法的介绍和实现…

【软考】系统架构设计师-信息系统基础

#信息系统基础核心知识点 信息系统5个基本功能:输入、存储、处理、输出和控制 诺兰模型:信息系统计划的阶段模型,6阶段 初始阶段,传播阶段,控制阶段,集成阶段,数据管理阶段,成熟阶…

【架构】主流企业架构Zachman、ToGAF、FEA、DoDAF介绍

文章目录 前言一、Zachman架构二、ToGAF架构三、FEA架构四、DoDAF 前言 企业架构(Enterprise Architecture,EA)是指企业在信息技术和业务流程方面的整体设计和规划。 最近接触到“企业架构”这个概念,转念一想必定和我们软件架构…

使用低成本的蓝牙HID硬件模拟鼠标和键盘来实现自动化脚本

做过自动化脚本的都知道,现在很多传统的自动化脚本方案几乎都可以被检测,比如基于root,adb等方案。用外置的带有鼠标和键盘功能集的蓝牙HID硬件来直接点击和滑动是非常靠谱的方案,也是未来的趋势所在。 一、使用蓝牙HID硬件的优势…

数据结构-二叉树_堆

目录 1.二叉树的概念 ​编辑1.1树的概念与结构 1.2树的相关语 1.3 树的表示 2. ⼆叉树 2.1 概念与结构 2.2 特殊的⼆叉树 2.2.2 完全⼆叉树 2.3 ⼆叉树存储结构 2.3.1 顺序结构 2.3.2 链式结构 3. 实现顺序结构⼆叉树 3.2 堆的实现 3.2.2 向下调整算法 1.二叉树的概…