PCIe总线-PCIe总线简介(一)

1.概述

早期的计算机使用PCI(Peripheral Component Interconnect)总线与外围设备相连,PCI总线使用单端并行信号进行数据传输,由于单端信号很容易被外部系统干扰,其总线频率很难进一步提高。目前,为了提高总线频率以获得更高的总线带宽,高速串行总线逐步替代了并行总线,PCI Express总线已逐渐替代了PCI总线。

PCI Express总线使用高速差分总线和端到端的连接方式,每个PCIe设备都有一个或多个独立的传输通道(称为"lanes"),这些通道直接连接到主板的芯片组或CPU。每条通道包含两对差分信号,一对用于发送数据,一对用于接收数据,因此支持全双工通信。若要增加带宽,只需要增加lanes的数量即可,更加灵活。

  1. Lane和版本
    PCIe的基本单元是lane,它由一对发送和一对接收差分信号组成。多条lanes可形成更宽的传输通道,例如x1、x2、x4、x8、x16和x32配置,其中x代表lane的数量。随着计算机的发展,PCIe标准也在发展,目前常见的版本是PCIe 1.0、2.0、3.0、4.0以及5.0,每个新版本提供的带宽相比前一版本大约翻一番。

  2. 可扩展性和兼容性
    PCIe对热插拔设备提供支持,同时它也向后兼容;也就是说较新版本的插槽可以接受较旧版本的卡,而较新版本的卡也可以插入到较旧的插槽中工作(但速度会降低至插槽所支持的最高标准)。这提供了极大的灵活性和系统升级的方便性。

  3. 使用场景
    PCIe被广泛用于各种类型的设备连接,包括显卡、固态硬盘、以太网卡、Wi-Fi控制器、雷电扩展卡和其他高速外部设备。由于它的高速度和低延迟特性,PCIe在现代计算中是首选接口。

  4. 技术优势
    PCIe的主要优势在于其高性能和可扩展的带宽,这使得它能够支持最新的存储设备、高性能GPU以及通信设备的速度要求。其其他优势包括更小的物理占位、更好的I/O虚拟化支持和省电等。

随着计算需求的不断增长和新技术的出现,PCIe技术也在不断演进,以更好的适应未来硬件的发展需求。

2.速率

协议版本编码类型信号最大传输速度x1带宽x2带宽x4带宽x8带宽x16带宽推出时间
1.08b/10bNRZ2.5 GT/s250MB/s500MB/s1GB/s2GB/s4GB/s2003年
2.08b/10bNRZ5.0 GT/s500MB/s1GB/s2GB/s4GB/s8GB/s2007年
3.0128b/132bNRZ8.0 GT/s~1GB/s~2GB/s~4GB/s~8GB/s~16GB/s2010年
4.0128b/132bNRZ16.0 GT/s~2GB/s~4GB/s~8GB/s~16GB/s~32GB/s2017年
5.0128b/132bNRZ32.0 GT/s~4GB/s~8GB/s~16GB/s~32GB/s~64GB/s2019年
6.01b/1b(Flit Mode)PAM464.0 GT/s8GB/s16GB/s32GB/s64GB/s128GB/s2022年
7.01b/1b(Flit Mode)PAM4128.0 GT/s16GB/s32GB/s64GB/s128GB/s256GB/s2025年
  1. NRZ(Non-Return-to-Zero,不归零编码): 使用高低电平传输数据位,在数据位脉冲结束后,不需要回归到零电平。
  2. PAM4(4-Level Pulse Amplitude Modulation,四电平脉冲幅度调制): 是一种调制技术,采用4个不同的信号电平传输数据。PAM4信号的每个符号周期包含了两个比特的逻辑信息,比如用逻辑信号“0”来代表逻辑信号“00”,“1”代表“01”,“2”代表“10”,“3”代表“11”。
  3. Flit Mode: 流控单元模式,是一种1b/1b的编码方式。之前是以TLP为单位进行事务传输,PCIe 6.0以FLIT为单位进行事务传输,每个FLIT有256B数据,每B数据占用4UI。

3.PCIe总线拓扑结构

下图是一个典型的x86计算机PCIe总线拓扑结构。RC(Root Complex)是每条PCIe总线的开始,PCIe设备通过RC和CPU通信。在x86计算机中,RC集成了PCIe总线端口、存储器控制器等一系列与外部设备有关的接口,比较复杂,而在其他体系结构的计算机中,RC可能只包含PCIe总线端口,通常只有一个端口。下图中的RC内部通过PCI-PCI桥扩展出来3个端口。第一个端口下面节了一个Switch,Switch的作用是扩展链路,该Switch通过内部的PCI-PCI桥扩展出来3个下行端口,这3个端口都可以接PCIe设备,PCIe设备被称为EP(Endpoint)。第二个端口没有扩展,可以直接接PCIe设备。第三个端口接了一个PCIe转PCI或PCI-X桥,该桥下面可以接PCI或PCI-X设备。

PCIe_Topology_Example

下图是intel 10代酷睿和400系列芯片组的示意图。CPU通过DMI总线和PCH芯片(南桥)连接。DMI总线使用和PCIe总线相同的物理层,因此带宽也和PCIe相同。CPU和400系列芯片组都集成了PCIe RC。CPU中RC引出的x16连接显卡。400系列芯片组的RC引出的24 lanes连接对带宽要求不高的设备,比如PCIe网卡、M.2 NVMe SSD等。

400系列芯片组示意图

下图是intel 12代酷睿和600系列芯片组的示意图。相比10代酷睿和400系列芯片组,12代酷睿和600系列芯片组将PCIe总线版本提升到5.0,提升了PCIe总线数量,增加了CPU直出的PCIe总线数量,避免经过北桥芯片引起的性能损失。

Z690芯片组示意图

4.PCIe总线层次结构

PCIe总线是一个分层结构,结构如下图所示,包含了应用层(Device Core、PCIe Core Hardware/Software Interface)、事物层(Transaction Layer)、数据链路层(Data Link Layer)、物理层(hysical Layer)。报文中的数据在应用层中产生,发送后会依次穿越事物层、数据链路层和物理层,接受端接收到报文后处理顺序和发送端相反,其依次经过物理层、数据链路层和事物层,数据最终被交付到接受端的应用层。

PCI_Express_Device_Layers

和网络报文类似,PCIe报文发送时,会在报文头和报文尾加上该层PCIe协议规定的数据,接收端接收到报文后再依次剥离相应的协议数据。如下图所示,发送数据时Data在应用层产生,穿越事物层时会加上Header和ECRC(End-to-end CRC),穿越数据链路层时会加上Sequence Number和LCRC(Link CRC),穿越物理层时会加上Framing。接收数据时,穿越物理层时剥离Framing,穿越数据链路层时剥离Sequence Number和LCRC,穿越事物层时剥离Header和ECRC,最终数据交付到应用层。事物层、数据链路层和物理层PCIe总线规范做了明确的规定,要求设计者严格遵守,而应用层PCIe总线规范没有严格规定,设计者可以根据需要进行自行设计。

ECRC是可选的,其主要的目的是解决Switch中可能的传输错误问题,如果用户的PCIe总线中没有Switch(只是简单的Root与Endpoint的端对端直连),完全可以不使用ECRC。

Packet_Flow_Through_the_Layers

  1. 应用层
    这一层决定了PCIe设备的类型和基础功能,可以由软件和硬件协同实现。如果该设备为EP,则其最多可拥有8项功能(Function),且每项功能都有一个对应的配置空间(Configuration Space)。如果该设备为Switch,则应用层需要实现包路由(Packet Routing)等相关逻辑。如果该设备为RC,则应用层需要实现虚拟的PCIe总线0(Virtual PCIe Bus 0),并代表整个PCIe总线系统与CPU通信。

  2. 事物层
    接收端的事务层负责事务层包(Transaction Layer Packet,TLP)的解码与校检,发送端的事务层负责TLP的创建。此外,事务层还有QoS(Quality of Service)和流量控制(Flow Control)以及Transaction Ordering等功能。

  3. 数据链路层
    数据链路层负责数据链路层包(Data Link Layer Packet,DLLP)的创建、解码和校检。同时,本层还实现了Ack/Nak的应答机制,以处理传输失败的情况。

  4. 物理层
    物理层负责Ordered-Set Packet的创建和解码,同时负责发送与接收所有类型的包(TLPs、DLLPs和Ordered-Sets)。在发送之前需要对包进行一系列的处理,如Byte Striping、Scramble(扰码)和Encoder(8b/10b for Gen1/Gen2, 128b/130b for Gen3/Gen4)。在接收端需要进行相反的处理。此外,物理层还实现了链路训练(Link Training)和链路初始化(Link Initialization)的功能,一般通过链路训练状态机(Link Training and Status State Machine,LTSSM)完成。

每一个PCIe接口(interface)都必须包含事物层、数据链路层和物理层,比如Switch的每个port,如下图所示。

Switch_Port_Layers

PCIe总线层次结构的详细信息如下图所示,这里不再赘述。

PCIe总线层次结构的详细信息

5.PCIe总线信号

参考资料

  1. PCIEXPRESS体系结构导读
  2. PCI Express technology 3.0
  3. PCI_Express_Base_r3.0_10Nov10
  4. PCIe7_0_Intro_PCIe_6_0_Solution
  5. http://blog.chinaaet.com/justlxy/p/5100053251
  6. https://www.jianshu.com/p/5889b7963558

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

文件夹读取不到文件:深度解析与高效恢复策略

一、遭遇文件夹读取难题:文件离奇失踪 在日常使用电脑或移动设备的过程中,我们有时会遇到一个令人头疼的问题:原本存储着重要数据的文件夹突然变得“空空如也”,其中的文件仿佛凭空消失一般,无法正常读取。这种文件夹…

开源博客项目Blog .NET Core源码学习(10:App.Framwork项目结构分析)

开源博客项目Blog的解决方案总共包括4个项目,其中App.Hosting项目包括所有的页面及控制器类,其它项目主要提供数据库访问、基础类型定义等。这四个项目的依赖关系如下图所示,本文主要分析App.Framwork项目的主要结构及主要文件的用途。   …

IDEA 远程调试

1.什么是远程调试 Java提供了一个远程调试功能,支持设置断点及线程级的调试同时,不同的JVM通过接口的协议联系,本地的Java文件在远程JVM建立联系和通信。 2.服务端开启远程调试 开启远程调试功能,需要修改tomcat 的catalina.sh…

Spring Cloud Gateway Server MVC

之前你如果要用spring cloud gateway ,就必须是webflux 的,也就是必须是异步响应式编程。不能和spring mvc 一起使用。现在spring cloud 新出了一个可以不用webflux的gateway。 具体使用mvc的gateway步骤如下 普通的Eureka Client的项目 如果你只是想测…

unity无法使用道路生成插件Road Architect(ctrl和shift无法标点)

切换一下布局就行了。 附:Road Architect教学地址

以行动激发消费活力,加多宝引领高品质消费浪潮

2024年“315”期间,加多宝携手全国多地市场监督管理局、消费者协会等单位,围绕今年“激发消费活力”主题,积极配合各地相关政府部门开展系列宣传活动,以实际行动呼吁切实保护消费者合法权益,共建诚信消费环境&#xff…

Kubernetes概念:服务、负载均衡和联网:2. Gateway API

Gateway API 官方文档:https://kubernetes.io/zh-cn/docs/concepts/services-networking/gateway/ Gateway API 通过使用可扩展的、角色导向的、 协议感知的配置机制来提供网络服务。它是一个附加组件, 包含可提供动态基础设施配置和高级流量路由的 API…

机器学习——AdaBoost算法

机器学习——AdaBoost算法 在机器学习领域,AdaBoost算法是一种非常流行的集成学习方法,旨在提高分类器的性能。本篇博客将介绍AdaBoost算法的原理、算法流程、算法参数,对比AdaBoost和随机森林的区别,并使用Python实现AdaBoost算…

数据结构·排序

1. 排序的概念及运用 1.1 排序的概念 排序:排序是将一组“无序”的记录序列,按照某个或某些关键字的大小,递增或递减归零调整为“有序”的记录序列的操作 稳定性:假定在待排序的记录序列中,存在多个具有相同关键字的记…

[Java基础揉碎]单例模式

目录 什么是设计模式 什么是单例模式 饿汉式与懒汉式 饿汉式vs懒汉式 懒汉式存在线程安全问题 什么是设计模式 1.静态方法和属性的经典使用 2.设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、 以及解决问题的思考方式。设计模式就像是经典的棋谱&am…

Docker进阶:Docker-cpmpose 实现服务弹性伸缩

Docker进阶:Docker-cpmpose 实现服务弹性伸缩 一、Docker Compose基础概念1.1 Docker Compose简介1.2 Docker Compose文件结构 二、弹性伸缩的原理和实现步骤2.1 弹性伸缩原理2.2 实现步骤 三、技术实践案例3.1 场景描述3.2 配置Docker Compose文件3.3 使用 docker-…

Spark Map 和 FlatMap 的比较

Spark Map 和 FlatMap 的比较 本节将介绍Spark中map(func)和flatMap(func)两个函数的区别和基本使用。 函数原型 map(func) 将原数据的每个元素传给函数func进行格式化,返回一个新的分布式数据集。 flatMap(func) 跟map(func)类似,但是每个输入项和…

基于51单片机数控直流电压源proteus仿真LCD显示+程序+设计报告+讲解视频

基于51单片机数控直流电压源proteus仿真LCD显示( proteus仿真程序设计报告讲解视频) 仿真图proteus7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0072 讲解视频 基于51单片机数控直流电压源proteus仿真程序…

37、Linux中Xsync数据同步备份工具

37、Linux中Xsync数据同步备份工具 一、介绍二、配置集群hostname三、修改xsync文件四、赋权五、安装Rsync六、验证一七、配置免密登录1、生成rsa密钥2、copy机器自身公钥到目标机器3、.ssh/文件目录赋权 八、验证二 ⚠️ 注:本文全程在普通用户下操作,…

基于spring boot的个人博客系统的设计与实现(带源码)

随着国内市场经济这几十年来的蓬勃发展,突然遇到了从国外传入国内的互联网技术,互联网产业从开始的群众不信任,到现在的离不开,中间经历了很多挫折。本次开发的个人博客系统,有管理员,用户,博主…

QT----基于QT的人脸考勤系统ubuntu系统运行,编译开发板

目录 1 Ubantu编译opencv和seetaface库1.1 Ubantu编译opencv1.2 Ubuntu编译seetaface1.3 安装qt 2 更改代码2.1 直接运行报错/usr/bin/ld: cannot find -lGL: No such file or directory2.2 遇到报错摄像头打不开2.3 修改部分代码2.4 解决中文语音输出问题 3 尝试交叉编译rk358…

QTabWidget的tabbar不同方向显示 文字方向设置 图标跟随变化 实现方式 qt控件绘制原理

先来看结果图:(参考博客:QTabWidget中tab页文本水平或垂直设置_pyqt tab_widget.settabposition(qtabwidget.west) 字体-CSDN博客) 从图中可知,"普通"是qt自己的样式,但是很明显,在垂…

SpringBoot Starter解析

conditional注解解析 介绍 基于条件的注解作用: 根据是否满足某一个特定条件决定是否创建某个特定的bean意义: Springboot实现自动配置的关键基础能力 常见的conditional注解 ConditionalOnBean: 当容器中存在某个Bean才会生效ConditionalOnMissingBean: 不存在某个Bean才会…

JavaEE企业级分布式高级架构师课程

教程介绍 本课程主要面向1-5年及以上工作经验的Java工程师,大纲由IT界知名大牛 — 廖雪峰老师亲自打造,由来自一线大型互联网公司架构师、技术总监授课,内容涵盖深入spring5设计模式/高级web MVC开发/高级数据库设计与开发/高级响应式web开发…

【ESP32S3 Sense接入百度在线语音识别】

视频地址: ESP32S3 Sense接入百度在线语音识别 1. 前言 使用Seeed XIAO ESP32S3 Sense开发板接入百度智能云实现在线语音识别。自带麦克风模块用做语音输入,通过串口发送字符“1”来控制数据的采集和上传。 步骤概括    (1) 在百度云控制端选择“语音…
最新文章