【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使用不同的地址空间来访问不同类型资源,如下表所示:
- 内存地址空间
内存地址空间(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