PCIE 学习笔记(入门简介)
PCIE 学习笔记
书到用时方恨少啊,一年前学PCIE的笔记,再拿出来瞅瞅。发到博客上,方便看。
PCIE基础
PCIE和PCI的不同
PCIE采用差分信号传输,并且是dual-simplex传输——每条lane上有TX通道和RX通道,所以每条lane上的信号是4条。PCI是同步时钟、并行传输。

PCIE是端到端的传输,一条链路上只能有两个设备,而PCI是共享总线型的。
PCIE的lane可以扩展成x2, x4, x8, x16, x32.
PCIE没有专门的中断信号,而是通过message报文传输。
PCIE version | Gigabits/second/lane/direction | coding |
V1 | 2.5 | 8/10b |
V2 | 5 | 8/10b |
V3 | 8 | 128/130b |
V4 | 16 | 128/130b |
V5 | 32 | 128/130b |
PCIE 拓扑

PCIE系统主要包括RC、Switch和EP(pcie设备)。一个PCIE树上最多可以有256个PCIE设备。
组件
RC (ROOT COMPLEX)
RC是PCIE树的根节点,RC可以有一个或者多个PCIE端口(port),它可以根CPU 和memory controller相接,或者说分隔PCIE domain和CPU/MEMORY domain。
类似于PCI 中的HOST主桥。
Switch

Switch有一个上游端口和两个或者两个以上的下游端口。上游端口是RC或者上游Switch的下游端口。
Switch中每个端口都可以看成是一个PCI-to-PCI bridge,这些bridge也都有配置空间,跟PCI中一样,配置空间有IO/Memory 的base address和limit size。
Switch中还有一条虚拟的PCI总线连接Switch内部的各个bridge。
Switch还支持crosslink的连接方式,也就是Switch上游端口可以和其他Switch的上游端口连接;下游端口也可以和其他Switch的下游端口连接。
Ingress和Egress:在一次传输中,Switch中的端口可分为ingress port和egress port,划分跟数据流向有关。Ingress port就是数据进来的端口,egress port就是输出流出的端口。
Virtual channel:端口上一般都会采用virtual channel的技术来缓存不同ingress port发来的数据。Virtual channel就是buffer,缓存数据。最多8个VC。
数据在Switch中传输,涉及到VC/TC mapping、端口仲裁、VC仲裁。
EP(endpoint)
EP有三种: legacy EP,PCIE EP,RC integrated EP。
Legacy EP:就是PCI device
PCIE EP:
RC integrated EP:集成在RC内部的EP。
PCIE bridge
PCIE bridge就是PCI-to-PCI/PCI-X bridge
PCIE 层次简介

PCIE协议分为如上三层:transaction layer, data link layer, physical layer。
发送端发送的报文以此经过transaction -> data link layer ->physical,经过物理链路到达接收端,又经过physical layer->data link layer -> transaction layer到达接收端。
不同层次的数据包格式如下,这个简单的格式,实际更复杂:

在transaction layer,TLP由header+data+ECRC,可能也会有TLP Prefix和TLP digest。
Data link layer接受transaction layer的TLP报文,加上sequence number和LCRC;在data link layer还有自己独有的DLLP,DLLP尽在data link layer以下传输,不会传到transaction layer。
transaction layer service
主要是生成和接受TLP,进行基于credit的flow control,power management。
在初始化和配置中,事务层的作用:
保存处理器设置的链路配置信息;
将物理层链路协商的bus width 和frequency保存在link capabilities结构中。
在TLP生成的接收中,事务层的作用:
为device core发出的请求生成TLP。
将接受到的请求转换成device core可识别的Requests(或者说一种格式吧)
从接受到的完成报文提取出data payload和status信息给到device core。
识别出不支持的TLP,并且采用合适的机制进行处理。
如果支持end-to-end 数据完整性,那么生成CRC,并且更新对应的TLP header。
在流控中,事务层的作用:
追踪传输中TLP的flow control credit信息。
将credit status周期性地传递给对端的transaction layer,这是通过data link layer实现的。
根据credit来阻塞TLP传输。
事务层在ordering的作用:
PCI/PCI-X兼容的生产者-消费者ordering model。
Relaxed-ordering
ID-Based ordering
事务层在电源管理的作用:
软件控制的电源管理
硬件自动控制的电源管理。
事务层在VC和TC上的作用:
结合VC和TC机制,来为不同类型的服务和应用提供不同的服务和QoS。
Virtual channel
Traffic class
Data link layer service
初始化和电源管理的作用:
接收来自transaction layer的电源状态请求,并将他们传递给physical layer。
将active/reset/disconnected/power managed state传给transaction layer。
数据保护、错误检查、重试:
CRC生成。
为了重试机制,保存发送的TLP。
错误检查
TLP应答和retry messages。
错误报告和打印。
Physical layer service
接口初始化、maintenance control、状态追踪
复位、热插拔控制和状态
连线的电源管理
协商Width and lane mapping
Lane polarity inversion。
生成Symbol和ordered set
8b/10b 编码、解码。
嵌入式的时钟tuning和对齐。
Symbol传输和对齐
传输电路
接收电路
接收端的弹性缓冲器
接收端的Multi-lane de-skew
DFT feature
PCIE配置空间

0x00- 0x3f这段配置空间是PCI、PCIE设备都要支持的。
0x40-0xff这段空间主要存放于MSI中断和电源管理相关的capabilities。
0x100-0xfff是PCIE所独有的。
Capability
Capability是PCI/PCIE配置结构,一个capability对应一个capability point和一段空间,可以把一个capability看做寄存器set,
多个capability组成capability 链表,上一个capability保存下一个capability的point。当然会有一个其实的capability point register。
每种Capability 结构中的capability ID是唯一的,
PCI Power management capability

PCIE capability

Device capability:max payload等
Link capability:supported link speed/width, current link speed, negotiate link widthdeng 。
PCIE extended capability

包含VC/TC mapping table和端口、VC仲裁策略。
端口仲裁和VC仲裁
VC(virtual channel)
Virtual channel:端口上一般都会采用virtual channel的技术来缓存不同ingress port发来的数据。Virtual channel就是buffer,缓存数据。最多8个VC。
数据在Switch中传输,涉及到VC/TC mapping、端口仲裁、VC仲裁。

TC/VC mapping


Arbitration

端口仲裁:当有多个ingress port的 数据包用同一个VC的时候,决定哪个port使用该VC。
VC仲裁:在egress port上,有多个VC,仲裁决定哪个VC从egress port发出,也就是占用link。
Transaction layer
TLP格式

TLP Header

TLP 类型
Fmt和Type两个字段决定TLP类型。



主要有五种访问类型:存储器、I/O、配置、message、原子操作。
存储器、I/O、配置读请求;不带数据
存储器、I/O、配置写请求;带数据
存储器、I/O、配置读完成;带数据
I/O、配置写完成;不带数据
消息请求;带数据或不带数据
原子操作:swap、CAS
三种TLP路由方式
地址路由
通过地址来定位目标设备,用在memory和I/O 请求中。
在Switch的PCI-to-PCI bridge的配置空间中有I/O address、limit和memory address、limit,用来判断地址是否在bridge的访问空间内。
在TLP header中就会有地址字段。

ID路由
通过ID来定位目标设备,用在配置读写请求和完成报文。
ID是由bus number, device number和function number组成的。

PCI-to-PCI bridge的配置空间中会有primary bus number, secondary bus number和subordinate bus number。Primary bus number是bridge上游bus number,secondary bus number是下游第一个PCI bus number,subordinate bus number是下游最后一个bus number。
隐式路由
用在message报文中,要么是发向RC,要么是从RC广播。
Data link layer
data link layer作用
数据交换
接收事务层TLP并转发到物理层;
从物理层接收TLP转发到事务层。
初始化和电源管理的作用:
接收来自transaction layer的电源状态请求,并将他们传递给physical layer。
将active/reset/disconnected/power managed state传给transaction layer。
数据保护、错误检查、重试:
CRC生成。
为了重试机制,保存发送的TLP。
错误检查
TLP应答和retry messages。
错误报告和打印。
组成

数据链路层通过ACK/NAK协议发送和接受TLP,主要包括发送部件和接收部件。
发送部件包括Replay buffer、ACK/NAK DLLP接收逻辑和TLP发送逻辑。
接收部件包括Error check逻辑、ACK/NAK DLLP发送逻辑和TLP接收逻辑。

链路层状态机
链路层通过data link control and management state machine(DLCMSM)来控制链路状态,并且在事务层和物理层之间传递链路状态。

链路层从物理层获取link上的状态,如下:
DL_Inactive: 物理层向链路层报告当前PCIE链路不可用,对端没有连接人和设备,或者没有检测到对端的设备。
DL_Feature(optional):物理层报告当前链路可用,进行data link feature exchange(这些feature保存在capability结构中。)
DL_Init:物理层通知链路层当前PCIE链路可用,正在对VC0进行流量控制。当前链路层不能接收或者发送TLP和DLLP。
DL_Active:当前PCIE链路处于正常工作状态。
链路层向事务层报告link上的状态,如下:
DL_Down:告知事务层,当前link处于DL_Inactive状态,没有从对端检测到设备。
DL_Up:告知事务层,link上检测到对端设备,正在跟对端的设备进行数据链路层交流。也就是link处于DL_Active状态。
Link状态跳变过程如下:
DL_Incative:当hot, warm, cold reset之后,link进入DL_Inactive状态;当时FLR reset不能。
在这个状态下,所有跟链路层状态机有关的信息都被复位到默认值;retry buffer中的数据丢失。
链路层向事务层报告DL_Down状态,事务层接收到DL_Down之后,会丢弃所有的outstanding transaction,停止发送TLP。
链路层本身会丢弃TLP相关的信息,停止生成和接受DLLP。
DL_Inactive -> DL_Init的情况有两种:
端口不支持DL_Feature特性,软件没有disable当前link,物理层报告LinkUp 状态位为1(表示对端接入设备).
端口支持DL_Feature,但是被软件disable;软件没有disable当前link,物理层报告LinkUp 状态位为1(表示对端接入设备).
DL_Init:改状态分为两个子状态:FC_INIT1和FC_INIT2。在INIT1阶段,向事务层报告DL_Down状态,在FC_INIT2阶段,报告DL_Up状态。
在端口处于DL_Down状态的时候,接收端会丢弃那些接收到的但没有去应答的TLP。
DL_Init ->DL_Active:当流量初始化完成,并且物理层LinkUp为高,进入DL_Active状态。
DLLP报文

DLLP主要分为:
ACK
NAK
电源管理DLLP
流控DLLP
Vendor-defined DLLP


ACK/NAK应答机制
参考《PCIE体系结构导读》7.2章节。
发送端和接收端通过sequence number来标记报文。
接收端不会为每个报文回复应答。如果发送端发送了3-5 sequence number报文,接收端NAK应答中的AckNak_Seq_Num是4,说明报文3-4已经被成功接受。
链路层发送报文的顺序
TLP、DLLP和物理层报文PLP都会使用同一个物理link发送报文,他们之间的顺序是有要求的,一般发送中的报文优先级最高,越是底层的报文优先级越高。
优先级从高到低如下:
正在传输的TLP和DLLP。
PLP。
NAK DLLP
ACK DLLP
重新发送replay buffer中的TLP
其他在事务层等待的TLP。
其他DLLP。
Physical layer-逻辑子层logical sub-block
4.1 逻辑子层结构图

Byte striping/un-striping
将数据分到不同的lane上,或者从多条lane上合并数据。
会进行de-skew操作。
Scrambler、de-scrambler 加扰
加扰:通过线性反馈移位寄存器LSFR产生伪随机序列,数据跟这个伪随机序列进行异或操作。
作用:防止信号有某些固定的重复值,降低EMI干扰
8/10b编码 2.5GT/s 5.0GT/s
8/10b
为了0、1均衡,如果在一个高速链路上有较多连续的“1”,会将AC耦合电容充满,从而影响这些电容正常工作。
连续传输的0或1不会超过5个。
保证每十位中最多有6个0或者6个1.
但是仅仅如此还不够,可能10位中连续是6个0或者1,那么0或1就会聚集。所以有了CRD(current running disparity),每个byte(symbol)的编码都有两个,一个0多,一个1多

传输


Symbol
编码结果可以通过Dxx.y和Kxx.y表示,前者表示数据字符,后者表示控制字符。

Figure4.5中,在TLP前面加上STP symbol,在TLP后面加上END,分别表示TLP的开始和结束。

在figure 4.6中,在DLLP前面加上SDP,后面加上END。

加上TLP,DLLP的开始符号和结束符号之后再进行byte-striping。

128/130b 编码 8GT/s
每个symbol是8bit。
每条lane上传输sync bit。

两位Sync bit
‘b10代表是data block。
‘h01代表ordered set block
Ordered set block
在所有的lane同时传输相同的ordered set block。
Data block
Data block 包括framing token、DLLP、TLP。
Framing token类似于8/10b编码中的控制符号。


传输
传输TLP和DLLP

EDS framing token之后代表要传输ordered set block,从下图figure4.17中可以看出,所有lane上传输的ordered set block是相同的。

Physical layer-电气子层electrical sub-block
Power management
System architecture
相关文章:
PCIE 学习笔记(入门简介)
PCIE 学习笔记书到用时方恨少啊,一年前学PCIE的笔记,再拿出来瞅瞅。发到博客上,方便看。PCIE基础PCIE和PCI的不同PCIE采用差分信号传输,并且是dual-simplex传输——每条lane上有TX通道和RX通道,所以每条lane上的信号是…...
锁的优化机制了解嘛?请进!
点个关注,必回关 文章目录自旋锁:自适应锁:锁消除:锁粗化:偏向锁:轻量级锁:从JDK1.6版本之后,synchronized本身也在不断优化锁的机制,有些情况下他并不会是一个很重量级的…...
5.点赞功能 Redis
Redis(1)简介Redis 是一个高性能的 key-value 数据库原子 – Redis的所有操作都是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。非关系形数据库数据全部存在内存中,性能高。(2&#…...
Java序列化和反序列化(详解)
一、理解Java序列化和反序列化 Serialization(序列化):将java对象以一连串的字节保存在磁盘文件中的过程,也可以说是保存java对象状态的过程。序列化可以将数据永久保存在磁盘上(通常保存在文件中)。 deserialization(反序列化):将保存在磁…...
【刷题篇】链表(上)
前言🌈前段时间我们学习了单向链表和双向链表,本期将带来3道与链表相关的OJ题来巩固对链表的理解。话不多说,让我们进入今天的题目吧!🚀本期的题目有:反转单链表、链表的中间结点、合并两个有序链表反转单链…...
ConcurrentHashMap设计思路
ConcurrentHashMap设计思路Hashtable vs ConcurrentHashMapHashtable vs ConcurrentHashMap Hashtable 对比 ConcurrentHashMap Hashtable 与 ConcurrentHashMap 都是线程安全的 Map 集合Hashtable 并发度低,整个 Hashtable 对应一把锁,同一时刻&#…...
Unity基于GraphView的行为树编辑器
这里写自定义目录标题概述基于GitHub上:目前这只是做了一些比较基础的功能节点开发,仅仅用于学习交流,非完成品。项目GitHub连接:[https://github.com/HengyuanLee/BehaviorTreeExamples](https://github.com/HengyuanLee/Behavio…...
网络流量传输MTU解析
基本概念 以太网的链路层对数据帧的长度会有一个限制,其最大值默认是1500字节,链路层的这个特性称为MTU,即最大传输单元 Maximum Transmission Unit,最大传输单元,指的是数据链路层的最大payload,由硬件网…...
30个HTML+CSS前端开发案例(四)
30个HTMLCSS前端开发案例(17-20)鼠标移入文字加载动画效果代码实现效果鼠标悬停缩放效果实现代码效果鼠标移入旋转动画实现代码效果loding加载动画实现代码效果资源包鼠标移入文字加载动画效果 代码实现 <!DOCTYPE html> <html><head&g…...
《TPM原理及应用指南》学习 —— TPM执行环境3
本文对应《A Practical Guide to TPM 2.0 — Using the Trusted Platform Module in the New Age of Security》的第6章第3节。 6.3 Summary —— 总结 Now that you have an execution environment (or maybe both of them) set up, you’re ready to run the code samples f…...
实验名称:经典同步问题:生成者与消费者问题
实验名称:经典同步问题:生成者与消费者问题 相关知识 信号量 信号量是用来协调不同进程间的数据对象,可用来保护共享资源,也能用来实现进程间及同一进程不同线程间的进程同步。分为二值信号灯和计算信号灯两种类型。 进程与线…...
EasyCVR视频云存储的架构解析与Sharelist云存挂载方法介绍
一、什么是视频云存储? 视频云存储主要用于为上层应用提供视频文件、结构化信息、事件信息的相关服务。云存储节点分为数据文件存储节点和结构化数据存储节点。数据文件存储节点主要用于视频、图片的存储。结构化数据存储节点用于存储结构化数据并提供相关服务。 …...
电机参数中力矩单位kgf.cm,Nm,mNm表示的含义
力的基本知识 质量和力的比例系数 质量和重力的关系有一个重力系数:g≈9.8 N/kg≈10,后面看到的1kgf就相当于1kg物体的力也就是10N 杠杆原理 对于同一个支点,在不考虑杠杆的重量的情况下,实现同样的作用效果,距离支点越近&…...
使用scikit-learn为PyTorch 模型进行超参数网格搜索
scikit-learn是Python中最好的机器学习库,而PyTorch又为我们构建模型提供了方便的操作,能否将它们的优点整合起来呢?在本文中,我们将介绍如何使用 scikit-learn中的网格搜索功能来调整 PyTorch 深度学习模型的超参数: 如何包装 P…...
Windeployqt 打包,缺少dll 的解决方法
Windeployqt 打包,缺少DLL 的原因分析,解决方法 很多同学使用工具windeployqt进行打包发布后,运行exe文件时,还是会出现下图所示的系统错误提示,这种情况就表示相关的DLL 库文件没有被正确打包。可是windeployqt明确显…...
第四章:搭建Windows server AD域和树域
由于Windows简单一点,我就先搞Windows了。AD域:视频教程:https://www.bilibili.com/video/BV1f84y1G72x/在创建AD域时要把网卡配置好这是打开网卡界面的命令DNS要改成自己的,因为在创建域的同时也会自动创建DNS打开服务器管理器&a…...
【解决方案】老旧小区升级改造,视频智能化能力如何提升居民安全感?
一、需求背景 随着我国社会经济的快速发展与进步,城市宜居程度成为城市发展的重要指标,城市的发展面临着更新、改造和宜居建设等。一方面,社区居民对生活的环境提出了更高的要求;另一方面,将“智慧城市”的概念引入社…...
【遇见青山】项目难点:缓存穿透的解决方案
【遇见青山】项目难点:缓存穿透的解决方案1.缓存穿透现象缓存空对象布隆过滤其他方案2.解决方案,缓存空数据1.缓存穿透现象 缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据…...
单一职责原则|SOLID as a rock
文章目录 意图动机:违反单一职责原则解决方案:C++中单一职责原则的例子单一职责的优点1、可理解性2、可维护性3、可复用性在C++中用好SRP的标准总结本文是关于 SOLID as Rock 设计原则系列的五部分中的第一部分。 SOLID 设计原则侧重于开发 易于维护、可重用和可扩展的软件。…...
使用百度地图官方WEB API,提示 “ APP 服务被禁用“ 问题的解决方法
问题描述 项目上用了百度地图官方WEB API,打开界面时百度地图无法打开,出现弹窗: APP被您禁用啦。详情查看:http://lbsyun.baidu.com/apiconsole/key#。 原因分析: 查看错误信息:"status":240,…...
AI辅助开发深度探索:在快马平台上对比评测类qoderwork官网的AI代码生成能力
最近在研究AI辅助开发时,发现一个很有意思的现象:同样是生成一个网页项目,不同AI模型给出的代码风格和实现思路差异很大。这让我萌生了一个想法——能不能搭建一个平台,专门用来对比评测不同AI模型的代码生成能力?就像…...
DIFY vs LangChain:零代码与全代码AI开发框架实战对比(附真实案例)
DIFY vs LangChain:零代码与全代码AI开发框架实战对比(附真实案例) 当企业或开发者希望将大语言模型(LLM)能力整合到业务中时,选择适合的开发框架至关重要。DIFY和LangChain代表了两种截然不同的技术路线&a…...
工厂里EtherCAT从站模块坏了别慌!手把手教你用Startup list和CoE-online快速换新(附配置顺序避坑指南)
工厂EtherCAT从站模块更换实战指南:Startup list与CoE-online的高效应用 当生产线上的EtherCAT从站模块突然罢工,设备维护工程师往往面临两难选择:是临时在线修改参数快速恢复生产,还是彻底解决"即插即用"的配置难题&am…...
HunyuanVideo-Foley命令行教程:infer.py参数详解与批量音效生成脚本编写
HunyuanVideo-Foley命令行教程:infer.py参数详解与批量音效生成脚本编写 1. 环境准备与快速部署 在开始使用HunyuanVideo-Foley进行音效生成前,我们需要确保环境已经正确部署。本教程基于RTX 4090D 24GB显存显卡和CUDA 12.4优化环境。 1.1 镜像启动与…...
nli-distilroberta-base实际项目:高校招生简章关键条款与考生疑问逻辑关系库构建
nli-distilroberta-base实际项目:高校招生简章关键条款与考生疑问逻辑关系库构建 1. 项目背景与需求 高校招生简章通常包含大量专业条款和政策说明,每年都会收到大量考生关于条款理解的咨询。传统的人工解答方式存在几个痛点: 效率低下&am…...
LFM2.5-1.2B-Thinking-GGUF效果展示:同一Prompt下Thinking中间态与终版回答对比图
LFM2.5-1.2B-Thinking-GGUF效果展示:同一Prompt下Thinking中间态与终版回答对比图 1. 模型简介 LFM2.5-1.2B-Thinking-GGUF是Liquid AI推出的轻量级文本生成模型,特别适合在资源有限的环境中快速部署和使用。该模型采用GGUF格式存储,通过ll…...
Windows下FFmpeg环境配置全攻略:从下载到视频剪辑实战
Windows下FFmpeg环境配置全攻略:从下载到视频剪辑实战 在数字内容创作爆发的时代,视频处理能力已成为开发者和创作者的必备技能。FFmpeg作为开源多媒体处理领域的"瑞士军刀",其强大功能与跨平台特性使其成为处理音视频文件的首选工…...
语音合成延迟优化:IndexTTS-2-LLM网络IO调优实战
语音合成延迟优化:IndexTTS-2-LLM网络IO调优实战 1. 为什么语音合成总在“等”?从用户卡顿说起 你有没有试过在语音合成页面点下“开始合成”,然后盯着进度条数秒——明明只是一句话,却要等3秒、5秒,甚至更久&#x…...
LiuJuan Z-Image Generator参数详解:CFG Scale=2.0与12步生成高质量人像
LiuJuan Z-Image Generator参数详解:CFG Scale2.0与12步生成高质量人像 想用AI生成一张惊艳的人像照片,却发现要么细节模糊,要么风格怪异,怎么调参数都达不到理想效果?如果你也遇到过类似问题,那今天这篇文…...
s2-pro语音合成教程:支持数字/单位/英文缩写智能朗读技巧
s2-pro语音合成教程:支持数字/单位/英文缩写智能朗读技巧 1. 快速了解s2-pro语音合成 s2-pro是Fish Audio开源的专业级语音合成模型镜像,它能将文本转换为自然流畅的语音。这个工具特别适合需要语音播报、有声读物制作、视频配音等场景的用户。 与普通…...
