PCIe接口二,三事

  • 结构
  • 互连
  • 通道
  • 硬件协议
    • 物理层
    • 数据传输
    • 数据链路层
    • 事务层

结构

从概念上讲,PCIe总线是旧 PCI/PCI-X 总线的高速串行替代品。 PCIe总线和旧PCI之间的主要区别之一是总线拓扑结构。

  • PCI 使用共享并行总线架构,其中PCI主机和所有设备共享一组公共地址、数据和控制线。
  • PCIe 基于点对点拓扑结构,通过单独的串行链路将每个设备连接到主机。

由于其共享总线拓扑,对旧PCI总线的访问是通过总线仲裁实现的。在多个主控的情况下,一次只能有一个主控,在一个方向上传输数据。此外,旧的PCI时钟方案将总线时钟限制为总线上最慢的外围设备。相比之下,PCIe总线链路支持任意两个端点之间的全双工通信,对跨多个端点的并发访问没有限制。

在总线协议方面,PCIe通信被封装在数据包中。PCIe端口的事务层打包和解包数据和状态信息。

由于电气信号和总线协议的根本差异,PCI和PCIe需要使用不同的机械外形和扩展连接器,因此需要新的主板和新的适配器板; PCI插槽和PCIe插槽不可互换。在软件层面,PCIe保留了与 PCI 的向后兼容性;传统 PCI 系统软件可以检测和配置较新的 PCIe设备,而无需明确支持PCIe标准,尽管无法访问新的 PCIe功能。

两个设备之间的PCIe链路的大小可以从1到32通道不等。在多通道链路中,数据包数据跨通道条带化,峰值数据吞吐量随整体链路宽度而变化。通道数在设备初始化期间自动协商,并且可以由任一端点限制。例如,单通道 PCIe (×1) 卡可以插入多通道插槽(×4、×8 等),初始化周期自动协商相互支持的最高通道数。链路可以动态向下配置自身,以使用更少的通道,从而在出现不良或不可靠的通道时提供容错能力。 PCIe标准定义了×1、×2、×4、×8、×12、×16 和×32 的链路宽度。 这使得PCIe 总线既可以服务于不需要高吞吐量的成本敏感应用程序,也可以服务于性能关键应用程序,例如 3D 图形、网络(10 千兆位以太网或多端口千兆位以太网)和企业存储(SAS 或光纤通道)插槽和连接器仅针对这些宽度的一个子集进行定义,中间的链路宽度使用下一个更大的物理插槽尺寸。

使用四通道 (×4) 的 PCI-X(133 MHz 64 位)设备和 PCIe 1.0 设备具有大致相同的峰值单向传输速率 1064 MB/s。在多个设备同时传输数据或与 PCIe外围设备进行双向通信的情况下,PCIe总线有可能比 PCI-X 总线性能更好。

互连

两个设备之间的PCIe链路由一个或多个通道组成,这些通道是使用两个差分信号对的双单工通道。
PCIe设备通过称为互连或链接的逻辑连接进行通信。链路是两个PCIe端口之间的点对点通信通道,允许它们发送和接收普通 PCI 请求(配置、I/O 或内存读/写)和中断(INTx、MSI 或 MSI-X)。
在物理层面,一条链路由一个或多个通道组成。 低速外围设备(例如 802.11 Wi-Fi 卡)使用单通道 (×1) 链接,而图形适配器通常使用更宽、因此速度更快的16通道 (×16) 链接。

通道

一条通道由两对差分信号对组成,一对用于接收数据,另一对用于发送。因此,每个通道由四根导线或信号走线组成。从概念上讲,每个通道都用作全双工字节流,在链路端点之间的两个方向上同时以八位“字节”格式传输数据包。 物理 PCIe链路可能包含 1 到 16 条通道,更准确地说是 1、4、8 或 16 条通道。通道数以“×”前缀书写(例如, “×8”代表八通道卡或插槽),其中×16是常用的最大尺寸。

硬件协议

PCIe 链路围绕串行(1 位)、点对点连接(称为通道)的专用单向对构建。这与早期的 PCI 连接形成鲜明对比,后者是一种基于总线的系统,其中所有设备共享相同的双向 32 位或 64 位并行总线。

PCIe是一种分层协议,由事务层、数据链路层和物理层组成。数据链路层被细分为包括媒体访问控制 (MAC) 子层。物理层细分为逻辑子层和电子层。物理逻辑子层包含一个物理编码子层 (PCS)。

物理层

PCIe 物理层(PHY、PCIEPHY、PCI Express PHY 或 PCIe PHY)规范分为两个子层,即电气子层和逻辑子层。
逻辑子层有时会进一步划分为 MAC 子层和 PCS,尽管这种划分并不是 PCIe 规范的正式组成部分。 Intel 发布的规范 PCIe PHY 接口 (PIPE)定义了 MAC/PCS 功能分区和这两个子层之间的接口。 PIPE 规范还标识了物理媒体附件 (PMA) 层,其中包括串行器/解串器 (SerDes) 和其他模拟电路;然而,由于 ASIC 供应商之间的 SerDes 实现差异很大,PIPE没有指定 PCS 和 PMA 之间的接口。

在电气层面,每个通道由两个单向差分对组成,运行速度为 2.5、5、8 或 16 Gbit/s,具体取决于协商的能力。发送和接收是单独的差分对,每个通道总共有四根数据线。

任何两个 PCIe 设备之间的连接称为链路,由一个或多个通道的集合构成。所有设备必须最低限度地支持单通道 (×1) 链路。设备可以选择支持由 2、4、8、12、16 或 32 条通道组成的更宽的链路。这以两种方式实现了非常好的兼容性:

PCIe 卡在物理上适合(并正常工作)至少与它一样大的任何插槽(例如,×1 大小的卡可在任何大小的插槽中工作);
大物理尺寸(例如,×16)的插槽可以使用较少的通道(例如,×1、×4、×8 或 ×12)进行电气布线,只要它提供较大物理插槽所需的接地连接尺寸。
在这两种情况下,PCIe 协商相互支持的最高通道数。许多显卡、主板和 BIOS 版本都经过验证,可在同一连接上支持 ×1、×4、×8 和 ×16 连接。

PCIe 连接器的宽度为 8.8 毫米,高度为 11.25 毫米,长度可变。连接器的固定部分长度包含两排,每排 11 个引脚(共 22 个引脚),而另一部分的长度根据通道数而变化。

数据传输

PCIe 通过用于数据的相同链路发送所有控制消息,包括中断。串行协议永远不会被阻塞,因此,延迟仍然可以与具有专用中断线的传统 PCI 相媲美。当考虑到基于引脚的中断的IRQ共享问题,以及消息信号中断可以绕过 I/O APIC,并直接传送到CPU的事实时,MSI 的性能最终会显着提高。

在多通道链路上传输的数据是交错的,这意味着每个连续的字节都沿着连续的通道发送。 PCIe 规范将这种交错称为数据条带化。虽然需要显着的硬件复杂性来同步(或纠偏)传入的条带化数据,但条带化可以显着减少链路上第 n 个字节的延迟。虽然通道不是紧密同步的,但对于 2.5/5/8 GT/s 的通道到通道偏斜有 20/8/6 ns 的限制,因此硬件缓冲区可以重新对齐条带化数据。 由于填充要求,条带化不一定会减少链路上小数据包的延迟。

与其他高数据速率串行传输协议一样,时钟嵌入在信号中。在物理层面,PCIe 2.0 使用 8b/10b 编码方案(行代码)来确保连续相同数字(0或1)的字符串长度受到限制。这种编码用于防止接收器丢失对位边缘位置的跟踪。在这种编码方案中,每 8 个(未编码的)有效载荷位数据被 10 个(编码)位的传输数据替换,从而导致 20% 的电带宽开销。为了提高可用带宽,PCIe 3.0 版改为使用带有加扰的 128b/130b 编码。 128b/130b 编码依靠加扰来限制数据流中相同数字串的运行长度,并确保接收器与发送器保持同步。它还通过防止传输的数据流中的重复数据模式来减少电磁干扰 (EMI)。

数据链路层

数据链路层为 PCIe 链路执行三项重要服务:

  • 对事务层生成的事务层数据包 (TLP) 进行排序
  • 确保通过明确要求重放未确认/错误 TLP 的确认协议(ACK 和 NAK 信令)在两个端点之间可靠传送 TLP
  • 初始化和管理流量控制信用

在发送端,数据链路层为每个传出 TLP 生成一个递增的序列号。它用作每个传输的 TLP 的唯一标识标签,并插入到传出 TLP 的标头中。 32 位循环冗余校验码附加到每个传出 TLP 的末尾。

在接收端,接收到的TLP的LCRC和序列号都在链路层验证。如果 LCRC 校验失败,或者序列号超出范围,与最后一个有效接收的 TLP 不连续,那么坏 TLP,以及在坏 TLP 之后收到的任何 TLP,被视为无效并被丢弃。接收器发送带有无效 TLP 序列号的否定确认消息 (NAK),请求重传该序列号之前的所有 TLP。如果接收到的 TLP 通过 LCRC 校验,并且具有正确的序列号,则将其视为有效。链路接收器递增序列号,跟踪最后接收到的良好 TLP,并将有效 TLP 转发到接收器的事务层。 ACK 消息被发送到远程发射器,表明 TLP 已成功接收,并且通过扩展,所有具有过去序列号的 TLP。

如果发送器接收到 NAK 消息,或者在超时期限到期之前没有收到确认(NAK 或 ACK),则发送器必须重新发送所有缺少肯定确认 (ACK) 的 TLP。除非设备或传输介质出现持续故障,否则链路层会提供与事务层的可靠连接,因为传输协议确保通过不可靠的介质传送 TLP。

除了发送和接收事务层生成的 TLP 之外,数据链路层还生成和使用数据链路层数据包 (DLLP)。 ACK 和 NAK 信号通过 DLLP 进行通信,一些电源管理消息和流量控制信用信息(代表事务层)也是如此。

实际上,链路上传输中未确认 TLP 的数量受两个因素的限制:发送器重放缓冲区的大小(必须存储所有已发送 TLP 的副本,直到远程接收器确认它们),以及流量控制接收者向发送者发放的信用。 PCIe要求所有接收器发出最少数量的信用,以保证链路允许发送 PCIConfig TLP 和消息 TLP。

事务层

PCIe实现拆分事务(请求和响应按时间分隔的事务),允许链路承载其他流量,同时目标设备为响应收集数据。

PCIe使用基于信用的流量控制。在该方案中,设备在其事务层中为每个接收到的缓冲区通告初始信用量。链路另一端的设备在向该设备发送交易时,会计算每个TLP
从其帐户中消耗的信用数量。发送设备可能仅在这样做不会使其消耗的信用计数超过其信用限制时才发送 TLP。当接收设备完成处理其缓冲区中的 TLP 时,它会向发送设备发送信用返还信号,这会将信用额度增加恢复的金额。信用计数器是模块化计数器,消耗的信用与信用额度的比较需要模块化算法。这种方案的优点(与其他方法如等待状态或基于握手的传输协议相比)是信用返回的延迟不会影响性能,前提是没有遇到信用限制。如果每个设备都设计有足够的缓冲区大小,则通常会满足此假设。

通常引用 PCIe 1.x 来支持每个通道每个方向250MB/s的数据速率。该数字是根据物理信号速率(2.5 千兆波特)除以编码开销(每字节 10 位)计算得出的。这意味着 16 通道 (×16) PCIe卡理论上每个方向的速度为 16×250 MB/s = 4 GB/s。虽然这在数据字节方面是正确的,但更有意义的计算是基于可用数据有效载荷率,这取决于流量的配置文件。

与其他高数据速率串行互连系统一样,由于额外的传输鲁棒性(CRC 和确认),PCIe 具有协议和处理开销。长时间连续单向传输(例如高性能存储控制器中的典型传输)可以达到 PCIe 原始(通道)数据速率的 95% 以上。这些传输也从增加的通道数量(×2、×4 等)中受益最大。但在更典型的应用中(例如 USB 或以太网控制器),流量配置文件的特点是,具有频繁强制确认的短数据包。 由于来自数据包解析和强制中断(在设备的主机接口或 PC 的 CPU 中)的开销,这种类型的流量会降低链路的效率。作为连接到同一印刷电路板的设备的协议,它不需要与长距离通信协议相同的传输错误容忍度,因此,这种效率损失并不是 PCIe 所特有的。

PCIe接口二,三事相关推荐

  1. Mini PCIe接口双频WiFi+BT5.0二合一RTL8822CE无线网卡

    这是一款采用标准迷你PCIe半尺寸封装,符合11ac标准双频双通蓝牙WiFi二合一高性能无线网卡,支持Linux和Window主流操作系统! 模块主要特性如下: 主芯方案:RTL8822CE; 通信接 ...

  2. 缓存架构设计细节二三事

    缓存架构设计细节二三事 原创 2016-03-08 58沈剑 架构师之路 本文主要讨论这么几个问题: (1)"缓存与数据库"需求缘起 (2)"淘汰缓存"还是&q ...

  3. python输入y继续运行_Python二三事 - 接触Python(x,y)

    注释:本文原来转自博客大巴的一篇文章,向原作者致谢!我也做了相应的修改,更加完善对于Pythonx,y的介绍 Python 二三事 面向初学者介绍Python相关的一些工具,以及可能遇到的常见问题. ...

  4. AHCI协议、NVME协议、SATA总线、PCIe总线、SATA接口、PCIe接口、M.2接口

    内容来自 硬件茶谈 硬盘的SATA M.2 NGFF NVME是什么意思,详解硬盘的总线协议与接口 侵删. 一.协议 AHCI和NVME协议民用很多,而SCSI协议大多用在服务器上. 二.总线   总 ...

  5. 再谈NAND 【转】 关于SSD的二三事,NAND闪存的一些常识

    2010 年6月的时候,我跟大家介绍过 SSD固态硬盘与闪存(Flash Memory)  和  NAND Flash结构与驱动分析 时隔1年半,相关的技术都有所更新,所谓温故知新,让我们再谈SSD ...

  6. 老曹眼中的研发管理二三事

    这是在gitchat上的第一次分享,中生代联手gitchat在做研发管理的专题活动,作为先锋,抛砖引玉. 关于管理,必然会谈到业界先贤德鲁克先生对管理的定义. 管理就是界定企业的使命,并激励和组织人力 ...

  7. PCIE接口详解及应用模式

    PCI-Express(peripheral component interconnect express)是一种高速串行计算机扩展总线标准,它原来的名称为"3GIO",是由英特尔 ...

  8. S5P4418 android 5.1 EC20 R2.0 PCIE接口调试记录

    硬件:三星S5P4418 软件:android 5.1.1 模块:移远EC20 R2.0 PCIE接口 1.USB驱动:Quectel_WCDMA&LTE_Linux_USB_Driver_U ...

  9. [SSD科普1] PCIE接口详解及应用模式

    PCI-Express(peripheral component interconnect express)是一种高速串行计算机扩展总线标准,它原来的名称为"3GIO",是由英特尔 ...

最新文章

  1. Android 导入项目时出现错误的解决方法(红色感叹号)
  2. 【GZAdmin】开源BS demo快速搭建
  3. C# 子类实例化基类 基类使用不了子类的方法_C#学习笔记09--构造方法/析构方法/继承/多态/封装...
  4. 希尔排序Linux下C实现
  5. Oracle查询和解锁表
  6. jooq和jdbc_在jOOQ之上构建的RESTful JDBC HTTP服务器
  7. MAC地址进行验证的方法
  8. magento 增加一个layout template
  9. Android 中Touch(触屏)事件传递机制
  10. Arturia Analog Lab V for Mac - 超强键盘模拟合成器
  11. web 开发生产率_11种可帮助Web开发人员克服最后期限的生产力工具
  12. itools3.0服务器维护,苹果设备管理哪家强?iTools3.0 完胜 iTunes
  13. mahout第一篇-----Mahout学习路线图
  14. 解决浏览器看不到Flash文档(尤其某慕课)
  15. 通过cookie登录以及使用账号密码登录
  16. JS切割截取字符串方法总结
  17. JAVA汉字拼音解析
  18. 共享文件夹服务器内存资源不足,『excel文件打开就提示可用资源不足,无法完成此任务』共享文件夹怎么设置...
  19. 从实时音视频的微场景看混音技术
  20. 浪潮8460m4安装linux,NF8460M4(DDR4) – IPMI设置

热门文章

  1. Topit.me:小清新+文艺范的视觉社交平台
  2. angelababy都靠它保持身材,只需10秒随时随地喝到新鲜果汁!
  3. oracle中表结果对比,ORACLE 两个表或两个结果集的数据对比常用的函数
  4. java投票排名怎么弄_微信投票中,怎样快速投票把排名提上去呢?
  5. 怎么判断英文网站是否做过谷歌优化?
  6. 线性代数(三十九) :格拉姆-施密特正交化与标准正交基
  7. 疫情中的日本东京it工作
  8. POJ1984 Navigation Nightmare —— 种类并查集
  9. C++数组去重与排序
  10. PAT 1006 换个格式输出整数 (15 分)(Java)