PCIE协议-1

1. PCIe结构拓扑

一个结构由点对点的链路组成,这些链路将一组组件互相连接 - 图1-2展示了一个结构拓扑示例。该图展示了一个称为层级结构的单一结构实例,由一个根复合体(Root Complex, RC)、多个端点(I/O设备)、一个交换机以及一个PCI Express到PCI/PCI-X桥接器组成,所有这些都通过PCI Express链路互相连接。

1.1 根复合体

  • 根复合体(RC)表示输入/输出(I/O)层级结构的根,它连接了CPU/内存子系统和I/O。如图1-2所示,一个RC可能支持一个或多个PCI Express端口。每个接口定义了一个单独的层级域。每个层级域可能由单个端点组成,或者包含一个或多个交换机组件和端点的子层级结构。
  • 通过RC在层级域之间路由对等事务的能力是可选的,并且取决于具体实现。例如,一个实现可能在根复合体内部整合一个真实或虚拟的交换机,以软件透明的方式启用完整的对等支持。与交换机的规则不同,RC通常被允许在层级域之间路由对等事务时将数据包分割成更小的数据包(如下所述例外),例如,将一个具有256字节有效载荷的单个数据包分割成两个各具有128字节有效载荷的数据包。由此产生的数据包将受到本规范中包含的数据包形成规则的约束(例如,Max_Payload_Size(最大有效载荷大小)、Read Completion Boundary(读完成边界,RCB)等)。组件设计者应注意,将数据包分割成更小的数据包可能会带来负面的性能影响,特别是对于寻址PCI Express到PCI/PCI-X桥接器后面设备的事务。
  • 例外:支持对等路由Vendor_Defined Messages(供应商定义消息)的RC不得将Vendor_Defined Message数据包分割成小于128字节边界的小包,除非在128字节边界处(即,除了最后一个数据包外,所有生成的数据包的长度必须是128字节的整数倍),以保持跨PCI Express到PCI/PCI-X桥接器转发消息的能力。
  • RC必须作为请求者支持生成配置请求。
  • 允许RC作为请求者支持生成I/O请求。
  • 允许RC向选定的根端口生成到地址80h和84h I/O请求,而不考虑该根端口的PCI桥I/O解码配置;建议仅在特别需要时才启用此机制。
  • RC作为完成者不允许支持锁定语义。
  • RC作为请求者允许支持生成锁定请求。

1.2 端点

端点指的是一种可以作为PCI Express事务的请求者或完成者的功能,它可以代表自己,也可以代表一个不同的非PCI Express设备(除了PCI设备或主机CPU之外),例如,一个连接PCI Express的GPU controller或一个PCI Express到USB的host controller。端点被分类为传统型、PCI Express型,或根复合体集成端点(RCiEPs)。

1.2.1 传统端点规则

  • 传统端点必须是一个具有type0配置空间头标的功能。
  • 传统端点作为完成者必须支持配置请求。
  • 传统端点作为完成者可以支持I/O请求。

              ---允许传统端点接收到地址80h和84h的I/O请求,而不考虑该端点的I/O解码配置。

  • 传统端点可以生成I/O请求。
  • 如果设备的支持该需求的传统软件要求,传统端点可以作为完成者支持锁定内存语义。
  • 传统端点不得发出锁定请求。
  • 传统端点可以实现扩展配置空间能力,但软件可能会忽略这些能力。
  • 作为内存事务请求者运行的传统端点不要求能够生成4GB或更大的地址。
  • 如果请求中断资源,传统端点需要支持MSI(消息信号中断)或MSIX(多消息信号中断),或两者都支持。如果实现了MSI,传统端点可以支持MSI能力结构的32位或64位消息地址版本。
  • 传统端点支持为请求内存资源的基地址寄存器(BAR)32位寻址。
  • 传统端点必须出现在由根复合体(Root Complex)发起的层级域之一中。

1.2.2 PCI Express端点规则

  • PCI Express端点必须是一个具有type0配置空间头标的功能。
  • PCI Express端点作为完成者必须支持配置请求。
  • PCI Express端点不能依赖操作系统通过基址寄存器(BAR)声明的I/O资源分配。
  • PCI Express端点不得生成I/O请求
  • PCI Express端点作为完成者不得支持锁定请求,也不得作为请求者生成锁定请求。符合PCI Express标准的软件驱动程序和应用程序必须根据该要求编写,以防止在访问PCI Express端点时使用锁定语义。
  • 作为内存事务请求者运行的PCI Express端点要求能够生成大于4GB的地址。
  • 如果请求中断资源,PCI Express端点需要支持MSI(消息信号中断)或MSIX(多消息信号中断),或两者都支持。如果实现MSI,PCI Express端点必须支持MSI能力结构的64位消息地址版本。
  • 通过BAR请求内存资源的PCI Express端点必须设置BAR的可预取位,除非该范围包含具有读取副作用的位置,或者该功能在该位置不容忍写合并。
  • 对于设置了可预取位的所有BAR,PCI Express端点必须支持64位寻址。对于所有没有设置可预取位的BAR,允许使用32位寻址。
  • BAR请求的最小内存地址范围是128字节
  • PCI Express端点必须出现在根复合体发起的层级域之一中。

1.2.3 根复合体集成端点规则

  • 根复合体集成端点(RCiEP)是在包含根端口的根复合体的内部逻辑上实现的。
  • RCiEP必须是一个具有类型type0配置空间头标的功能。
  • RCiEP作为完成者必须支持配置请求。
  • RCiEP不得通过基址寄存器(BAR)声明要求I/O资源
  • RCiEP不得生成I/O请求
  • RCiEP不得作为完成者支持锁定请求,也不得作为请求者生成它们。符合PCI Express标准的软件驱动程序和应用程序必须编写,以防止在访问RCiEP时使用锁定语义。
  • 作为内存事务请求者运行的RCiEP需要能够生成等于或大于主机作为完成者能够处理的地址。
  • 如果请求中断资源,RCiEP需要支持MSI(消息信号中断)或MSIX(多消息信号中断),或两者都支持。如果实现了MSI,RCiEP可以支持MSI能力结构的32位或64位消息地址版本。
  • RCiEP可以支持通过基址寄存器请求内存资源的32位寻址。

1.3 Switch

Switch被定义为多个虚拟PCI到PCI桥接设备的逻辑集合,如图1-3所示。所有Switch都遵循以下基本规则:

  • Switch在配置软件中表现为两个或更多的逻辑PCI至PCI桥接。
  • Switch使用PCI桥接机制转发事务;例如,基于地址的路由。
  • 除了本文档中注明的例外情况,一个Switch必须能够在任何一组端口之间转发所有类型的事务层数据包(TLPs)。

  • 锁定请求必须按照第6.5节中的规定得到支持。Switch不必支持下游端口作为锁定请求的发起端口。
  • 每个启用的Switch端口必须遵守本文档中所述的流量控制规范。
  • Switch不允许将一个数据包分割成更小的数据包,例如,一个具有256字节有效载荷的单个数据包不得被分成两个各128字节有效载荷的数据包。
  • 在Switch的入口端口(入站链路)之间进行仲裁时,可以在同一个虚拟通道上发生争用时使用轮询或加权轮询。
  • 端点(由type0配置空间头标表示)在Switch的内部总线上,作为虚拟PCI至PCI桥接的对等体,必须不出现在配置软件中,这些虚拟桥接代表Switch的下游端口。

1.4 根复合体事件收集器

  • 根复合体事件收集器提供支持,用于终止来自RCiEPs(根复合体集成端点)的错误和PME(电源管理事件)消息。
  • 根复合体事件收集器必须遵循所有RCiEP的规则。
  • 根复合体事件收集器不需要解码任何内存或I/O资源。
  • 根复合体事件收集器通过其设备/端口类型值被识别。
  • 根复合体事件收集器具有基类08h、子类07h和编程接口00h。
  • 根复合体事件收集器位于根复合体中的总线上。允许多个根复合体事件收集器位于单个总线上。
  • 根复合体事件收集器通过根复合体事件收集器端点关联扩展功能明确声明支持的RCiEPs。
  • 根复合体事件收集器是可选的。

1.5 PCI Express到PCI/PCI-X桥接器

  • PCI Express到PCI/PCI-X桥接器提供PCI Express结构和PCI/PCI-X层级之间的连接。

2. 发现、配置和操作的硬/软件模型

PCI/PCIe硬件/软件模型包括了架构构建,这些构建对于发现、配置和使用一个功能(Function)是必要的,而不需要特定于功能的知识。关键要素包括:

  • 一个配置模型,它为系统软件提供了一种手段,用以发现系统中可用的硬件功能。
  • 执行基本资源分配的机制,用于可寻址资源,如内存空间和中断。
  • 启用/禁用控制,用于功能对接收请求的响应,以及发起请求。
  • 定义良好的排序和流量控制模型,以支持硬件/软件接口的一致和健壮实现(健壮指的是容错性,稳定性,可靠性,可维护性,可扩展性好)。

PCI Express配置模型支持两种机制:

  • PCI兼容配置机制:PCI兼容机制支持与传统PCI感知操作系统及其相应的总线枚举和配置软件100%的二进制兼容性。

  • PCI Express增强配置机制:提供增强机制是为了增加可用配置空间的大小,并优化访问机制。

每个PCI Express(PCIe)链路都通过一个虚拟的PCI到PCI桥接结构映射,并且与一个逻辑的PCI总线相关联。这个虚拟的PCI到PCI桥接结构可能是PCI Express根复杂端口的一部分,一个Switch上行端口,或者一个Switch下行端口。根端口是一个虚拟的PCI到PCI桥接结构,它从一个PCI Express根复合体开始一个PCI Express层次结构域。设备被映射到配置空间中,以便每个设备都会响应特定的设备编号。

3.PCI Express分层概述

本文档根据三个独立的逻辑层次来指定架构:事务层、数据链路层和物理层。每一层都分为两个部分:一个处理外发(待传输)信息的部分,以及一个处理内入(已接收)信息的部分,如图1-4所示。

这种分层定义的基本目标是促进读者对规范的理解。请注意,这种分层并不意味着特定的PCI Express实现。

PCI Express 使用数据包来在组件之间通信。数据包在事务层和数据链路层中形成,携带信息从发送组件传输到接收组件。随着传输的数据包流经其他层,它们会根据这些层处理数据包所需的额外信息进行扩展。在接收端,会发生相反的过程,数据包从它们的物理层表示形式转换为数据链路层表示形式,最终(对于事务层数据包)转换为可以由接收设备的事务层处理的形式。图 1-5 显示了事务级数据包信息通过各层的概念性流程。 

注意,为了链路管理的目的,两个数据链路层(连接到同一链路)之间支持一种更简单的数据包通信形式。 

3.1 事务层

架构的上层是事务层。事务层的主要职责是组装和拆解事务层数据包(TLPs)。TLPs 用于通信事务,例如读写以及某些类型的事件。事务层还负责管理基于信用的TLPs流量控制。

每个需要响应数据包的请求数据包都实现为分割事务。每个数据包都有一个唯一的标识符,使得响应数据包能够被正确地导向正确的发起者。数据包格式支持根据不同事务类型(内存、I/O、配置和消息)的不同寻址形式。数据包还可能具有诸如无监听(No Snoop)、松散排序(Relaxed Ordering)和基于ID的排序(ID-Based Ordering,IDO)等属性。

事务层支持四种地址空间:它包括三个PCI地址空间(内存、I/O和配置),并增加了消息空间。本规范使用消息空间来支持所有先前的边带信号,例如中断、电源管理请求等,作为带内消息事务。你可以将PCI Express消息事务视为“虚拟线”,因为它们的效果是消除了目前在平台实现中使用的广泛边带信号。

3.2 数据链路层

架构中的中间层是数据链路层,充当事务层和物理层之间的中间媒介。数据链路层的主要职责包括链路管理和数据完整性,包括错误检测和错误校正。

数据链路层的传输端接受事务层组装的TLPs,计算并应用数据保护代码和TLP序列号,并将它们提交给物理层以在链路上传输。 接收数据链路层负责检查接收到的TLPs的完整性,并将它们提交给事务层进行进一步处理。在检测到TLP错误时,这一层负责请求重新传输TLPs,直到信息被正确接收,或确定链路已失败。

数据链路层还生成并消耗用于链路管理功能的包。为了区分事务层(TLP)使用的包,当提到在数据链路层生成和消耗的包时,将使用“数据链路层包(DLLP)”这个术语。

3.3 物理层

物理层包括所有用于接口操作的电路,包括驱动器和输入缓冲器、并行到串行和串行到并行转换、PLL(相位锁定环)和阻抗匹配电路。它还包括与接口初始化和维护相关的逻辑功能。物理层以特定于实现的格式与数据链路层交换信息。这一层负责将从数据链路层接收到的信息转换为适当的串行格式,并以与连接在链路另一端的设备兼容的频率和宽度通过PCI Express链路传输。

PCI Express架构有“钩子”来支持通过速度升级和先进的编码技术来支持未来的性能提升。未来的速率、编码技术或介质可能只影响物理层。

3.4 层功能和服务

3.4.1 事务层服务

在生成和接收事务层数据包(TLPs)的过程中,事务层与其在链路另一端的互补事务层交换流量控制信息。它还负责支持软件和硬件发起的电源管理。

初始化和配置功能要求事务层:

  • 存储由处理器或管理设备生成的链路配置信息
  • 存储由物理层硬件协商生成的链路能力,包括宽度和操作频率

事务层的数据包生成和处理服务要求它:

  • 从设备的核心应用层请求生成TLPs
  • 将接收到的请求TLPs转换为设备核心应用层的请求
  • 将接收到的完成数据包转换为有效载荷或状态信息,可交付给核心应用层
  • 检测不支持的TLPs并调用适当的机制来处理它们
  • 如果支持端到端数据完整性,生成端到端数据完整性CRC(ECRC)并相应更新TLP头标

流量控制服务:

  • 事务层跟踪跨链路的TLPs流控制信用量。
  • 事务信用状态定期使用数据链路层的传输服务传输给远程事务层。
  • 远程流量控制信息用于控制TLP传输。

排序规则:

  • 符合PCI/PCI-X兼容的生产者/消费者排序模型
  • 支持松散排序的扩展
  • 支持基于ID排序的扩展

电源管理服务:

  • 通过系统软件指定的机制进行软件控制的电源管理。
  • 硬件控制的自主电源管理在全速电源状态下最小化功耗。

虚拟通道和流量类别:

  • 提供虚拟通道机制(VC)和流量类别(TC)识别的组合,以支持不同服务和对某些类别应用程序的QoS(服务质量)支持。
  • 虚通道:虚通道提供了一种手段,通过链路的共同物理资源支持多个独立的逻辑数据流。从概念上讲,这涉及将不同的数据流多路复用到单个物理链路上。
  • 流量类别:流量类别是事务层数据包的一个标签,它在通过整个结构时未经修改地端到端传输。在结构内的每个服务点(例如,Switch)上,流量类别标签被用来应用合适的服务策略。每个流量类别标签定义了一个独特的排序域——对于包含不同流量类别标签的数据包,不提供排序保证。

3.4.2 数据链路层服务

数据链路层负责与链路对面的对应方可靠地交换信息。

初始化和电源管理服务:

  • 接受来自事务层的电源状态请求并传达给物理层
  • 向事务层传达 激活/重置/断开连接/电源管理状态

数据保护、错误检查和重试服务:

  • CRC(循环冗余校验)生成
  • 用于数据链路层级重试的传输TLP存储
  • 错误检查
  • TLP确认和重试消息
  • 错误指示用于错误报告和记录

3.4.3 物理层服务

接口初始化、维护控制和状态跟踪:

  • 重置/热插拔控制/状态
  • 接口电源管理
  • 宽度和通道映射协调
  • 通道极性反转

符号和特殊有序集生成:

  • 8b/10b 编码/解码
  • 内嵌时钟调整和对齐

符号传输和对齐:

  • 传输电路
  • 接收电路
  • 接收端的弹性缓冲器
  • 接收端多通道去偏差(对于宽度 > 1)

系统可测试性(DFT)支持特性:

  • 合规模式
  • 修改的合规测试

3.4.4 层间接口

3.4.4.1 事务层/数据链路层接口

事务层到数据链路层接口提供:

  • 要通过链路发送的字节或多字节数据
  1. 本地TLP(事务层数据包)传输握手机制
  2. TLP边界信息
  • 链路请求的电源状态

数据链路层到事务接口提供:

  • 从PCI Express链路接收的字节或多字节数据
  • 接收字节的TLP帧信息
  • 链路的实际电源状态
  • 链路状态信息
3.4.4.2 数据链路层/物理层接口

数据链路层到物理接口层提供:

  • 要通过链路发送的字节或多字节宽数据
  1. 数据传输握手机制
  2. 字节的TLP(事务层数据包)和DLLP(数据链路层数据包)边界信息
  • 链路请求的电源状态

物理层到数据链路层接口提供:

  • 从PCI Express链路接收的字节或多字节宽数据
  • 数据的TLP和DLLP帧信息
  • 物理层检测到的错误指示
  • 链路的实际电源状态
  • 连接状态信息

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Failed to build flash-attn:ERROR: Could not build wheels for flash-attn

安装 FlashAttention 的时候遇到报错: Failed to build flash-attn ERROR: Could not build wheels for flash-attn, which is required to install pyproject.toml-based projects可能是安装的版本与环境存在冲突吧,我的环境是: python 3.1…

vector、heap数组、stack数组访问性能验证

测试目的 本次测试旨在比较不同数据结构(vector、数组)以及不同访问方法([]、at()、offset)在性能上的差异,从而为开发者提供在特定情境下做出最佳选择的依据。 测试代码 测试网址:Quick C Benchmarks 使用GCC9.5 …

网盘应用:桌面端界面欣赏,这个赛道容不下小玩家。

网盘(Cloud Storage)是一种云存储服务,允许用户在互联网上存储、管理和共享文件。它提供了一个在线的虚拟硬盘,用户可以通过网络将文件上传到云端,并随时随地访问和管理这些文件。 阿里云盘

王道数据结构个人向笔记-第二章(线性表)

文章目录 2.1 线性表的定义和基本操作2.2 顺序表2.2.1 顺序表的定义2.2.2 顺序表的插入、删除(实现是基于静态分配)2.2.3 顺序表的查找 2.3 链表2.3.1 单链表的定义2.3.2 单链表的插入删除2.3.3 单链表的查找2.3.4 单链表的建立2.3.4 双链表2.3.5 循环链…

React18+TS+NestJS+GraphQL 全栈开发在线教育平台

高质量平台级应用流行全栈技术实用职场技巧通用面试策略React18TSNestJSGraphQL 全栈开发在线教育平台(完结) 黑石老师,大厂技术专家,深耕前后端十多年。发现很多的前端同学都面临如下的职业困扰:没有能拿的出手的面试…

机器人系统ros2-开发实践07-将机器人的状态广播到 tf2(Python)

上个教程将静态坐标系广播到 tf2,基于这个基础原理这个教程将演示机器人的点位状态发布到tf2 1. 写入广播节点 我们首先创建源文件。转到learning_tf2_py我们在上一教程中创建的包。在src/learning_tf2_py/learning_tf2_py目录中输入以下命令来下载示例广播示例代码…

EXCEL数据快速上传至SAP透明表

文章目录 前言一、案例介绍/笔者需求二、备份数据三、数据处理转化 a.EXCEL转为TXT注意事项 b.EXCEL转为TXT 四、ABAP结合内表更新数据至透明表 a.代码实现 b.断点TXT上传至内表 c.查看上传结果 五、总结 前言 这篇文章…

OpenSPG docker 安装教程

文章目录 前言自述 一、OpenSPG1.介绍 二、安装步骤1.安装服务端2.客户端部署 前言 自述 我最近是想结合chatglm3-6b和知识图谱做一个垂直领域的技术规范的问答系统,过程中也遇到了很多困难,在模型微调上,在数据集收集整理上,在知…

【Qt 学习笔记】Qt常用控件 | 输入类控件 | Dial的使用及说明

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt常用控件 | 输入类控件 | Dial的使用及说明 文章编号:Qt…

【intro】GraphSAGE

论文 https://arxiv.org/pdf/1706.02216 abstract 大图中节点的低维embedding已经被证明在各种预测任务中非常有用,然而,大多数现有的方法要求在embedding训练期间图中的所有节点都存在;这些先前的方法属于直推式(transductive&#xff09…

女性名字有孤寡数,易离婚

丁老师:您好!我孩子(女孩)准备取名:周小程,宝宝出生于阳历2016年8月13号16时30分左右,准备给孩子取个名字,在网上查询了哈,这个名字的分数还蛮高的,99分&…

Mitmproxy 抓包工具安装使用

简介 Mitmproxy是一个使用python编写的中间人代理工具,跟Fiddle、Charles等等的抓包工具是差不多的,同样可以用于拦截、修改、保存http/https请求。比起Fiddle、Charles,mitmproxy有一个最大的特点是支持python自定义脚本。 安装 Win 官网…

【重塑世界的火种】制造业:从匠人之心到智能未来之旅

在人类文明的宏伟乐章中,有一段旋律始终激昂,它既古老又现代,既是力量的象征,也是智慧的结晶——这就是制造业,一个将梦想变为现实,将创意铸就为生活的神奇领域。今天,让我们一起走进这个塑造世…

【ITK配准】第七期 尺度(Metric)- 均方Metric

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享ITK中的均方Metric,即itk::MeanSquaresImageToImageMetricv4,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力…

携手并进:OpenCSG与博云科技共同探索DevOps的AI化之路

01 DevOps AI化迫在眉睫 数字化转型的浪潮席卷全球,企业对于提升研发效能和软件交付质量的需求日益迫切。在这一背景下,AIGC的发展为DevOps带来了革命性的变化。近日,OpenCSG与云计算解决方案服务商博云宣布建立战略合作伙伴关系&#xff0c…

FebHost:为什么注册法国.FR域名?

注册 .FR 域名,意味着您的网站将主要面向法国市场。法国不仅是欧盟内购买力第二强的经济体,也是全球第七大经济体。值得注意的是,法语是29个国家的官方语言,使用人数约达2.7亿。一旦您拥有了 .FR 域名,就能向这个具有强…

C++算法题 - 二叉树层次遍历

目录 199. 二叉树的右视图637. 二叉树的层平均值102. 二叉树的层序遍历103. 二叉树的锯齿形层序遍历 199. 二叉树的右视图 LeetCode_link 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节…

Web前端三大主流框架是什么?

Web前端开发领域的三大主流框架分别是Angular、React和Vue.js。它们在Web开发领域中占据着重要的地位,各自拥有独特的特点和优势。 Angular Angular是一个由Google开发的前端框架,最初版本称为AngularJS,后来升级为Angular。它是一个完整的…

全面升级企业网络安全 迈入SASE新时代

随着数字化业务、云计算、物联网和人工智能等技术的飞速发展,企业的业务部署环境日渐多样化,企业数据的存储由传统的数据中心向云端和SaaS迁移。远程移动设备办公模式的普及,企业多分支机构的加速设立,也使得企业业务系统的用户范…

Redis如何保证数据一致性?

Redis如何保证数据一致性? Redis通常作为持久层数据库(例如MySQL)的缓存层,如果缓存或者数据库数据发生改变,如何保证双方的数据是一致的? 这其实是要分情况讨论滴,对数据一致性不同的要求有不…