当前位置: 首页 > web >正文

pcie gen4,gen5,gen6 新增特性说明

Gen 4 新增特性

相比较gen3;

PCIe 4.0速度的升级算是例行公事,除此之外,PCIe 4.0在其他方面带来了哪些惊喜呢?我们按照spec的顺序,挑选重要的,进行一一揭晓!(以下内容均是基于PCIe 3.0作为对比)

1. 10-bit tag field(section 2.2.6.2):

在pcie协议中,事务发起者(requester)发送的TLP需要有身份ID,这个叫做transaction ID,而transaction ID由两部分组成,requster ID和TAG。其中,Requster ID包含了Bus/Device/Function信息。而Tag则表示同一个发起者(requster)同时暂存TLP的数量。(类似于一个axi master的outstanding burst数目)。completions寻找相关的Requster通过Transaction ID。requster ID(我是谁);routing ID(我要去那里)

关于TAG:

1. requster 发送non-posted TLP之后,在没有收到cpl报文之前,对应的Transaction ID不能被释放(在那里释放?)同一个requster发送的non-posted TLP的header中,requster ID肯定是一样的。当一个requster要发起多个non-posted TLPs是,tag字段才有具体的意义。

2。tag字段的大小据定了发送端可以暂存同一类型TLP的数量。PCIe 3.0 Spec中显示,默认是bit[4:0],就是默认长度是5,当enable extend Tag bit后,Tag长度为8。也就是说在PCIe 3.0中,每个PCIe设备的发送端最多只能暂存256个TLPs,换句话说,对于同一发起者而言,此时PCIe链路上有其256个TLPs在传输。

3, 其实,PCIe设备的Function设定中也可以扩展Tag字段,这里不展开了。

其实,在大多数情况下,8-bit Tag已经够用了,但是对于一些特殊的高性能系统来说,这还不够。我们来看个算式

其中,BW=payload bandwith, S=transaction payload size. N= number of oustanding NPRs(non-posted requst), RTT= transaction round-trip time.

从上面的算式中,我们可以看到发起者暂存TLPs数目,也就是Tag字段的大小,与有效带宽成正比。为了配合高速传输的需求,PCIe 4.0将Tag字段从原来的8-bit扩展到10-bit。 

Tag字段扩展后,TLP Header的大小以及其他字段的定义保持不变。扩展的两个bits,bit[9]和bit[8]分别位于Byte1 Bit[7]和bit[3](这两个bits在之前是Reserved)。10-bit Tag对应的Header定义如下:

Tag[9:8]的有效取值包括01b, 10b, 11b。00b是无效取值。也就是说,10-bit Tag最大暂存TLP数目由原来的256扩大到了768.

二、Scaled Flow Control(Section 3.4.2):

在之前的文章"Flow Control概述"中,对Flow Control做了大致的介绍,"PCIe科普贴"中对Flow Control的实现原理也做了比较详细的介绍。在PCIe 3.0中,Flow Control Update Packets中可以看到(下图),Header FC Field=8, Data FC Field=12, 这就意味着PCIe 3.0中Flow Control Credit有最大界限值:Header Credit最大为127,Data Credit最大为2047. (1 Credit=16B);

这个功能在DLLINK_CAP(capability中有详细解释);并且使能了该feature之后;在pcie 建链之后双方会进行DL_Feature dllp报文的发送和接受;用于确定scale的值。

在PCIe 4.0中,对TLP Header和Data如何选择相应的放大系数呢?怎么知道是x1,x4,x16呢?这就依赖于两个参数:Hdr Scale和Data Scale. 这两个参数就在FC DLLPs中,包括FC初始化DLLP: InitFC1 & InitFC2,FC Update DLLP:  UpdateFC,如下图. PF0_PORT_LOGIC/VC0_P_RX_Q_CTRL_OFF

当Scaled Flow Control功能处于Disabled状态时, 之后Hdr Scale和Data Scale的取值只能是00,这时,Flow Control Credits相关设定与PCIe 3.0一致。

当Scaled Flow Control功能被Enable之后,Hdr Scale和Data Scale的取值只能是三种:01,10,11,分别代表着放大系数x1,x4,x16.

引入"Scaled Flow Control"功能之后,PCIe的Data Link也发生了相应的变化。与PCIe 3.0相比, PCIe多了一个"DL_Feature"状态。

pcie 3.0(左) Vs pcie4.0(右) Data LInk状态机

不过,要进入DL_Feature状态还是有条件的,需要在Data Link Feature Capabilities Register中enable "Data Link Feature Exchange" bit.

在Flow Control中,DL_Feature这个状态主要用于Scaled Flow Control功能的握手交互(专业名称叫做Handshake)。在这个过程中,会用到一个叫做"Data Link Feature DLLP",这个DLLP也是PCIe 4.0新增的, 如下图。dwc_PCIE_USP/PF0_DLINK_CAP

Data Link Feature DLLP中Byte1 bit[7]是Feature Ack bit,就是用来握手的, Byte 3 bit[0]也就是Feature support的bit[0]代表Scaled Flow Control是否support,Feature support的其他bit[22:1]目前是保留的, 以备将来之用。

三、Simplified Protocol Timer(Section 3.6.2.1):

到了PCIe 4.0,PCI-SIG协会自己都不想再为16GT/s单独增加另外一个REPLAY_TIMER Table。于是,提出了更加简便的REPLAY_TIMER Limits.

对于所有的速率的都一样,只有两种选择:

1,当Extend Synch bit=0时,REPLAY_TIMER Limits=24K~31K Symbol time;

2,当Extend Synch bit=1时,REPLAY_TIMER Limits=80K~100K Symbol time;

Extend Synch bit则在Link Control Register中设置:

对于这个简化的REPLAY_TIMER,当PCIe链路运行在2.5GT/5GT/8GT时,你也可以选择无视,依然选择原本的定义方式。但是,当PCIe链路运行在16GT/s时,你就别无选择咯,只能按照PCIe 4.0 Spec的要求,乖乖的实验简化RETPLAY_TIMER。

四、Link Equalization(Section 4.2.3):

此节不详细说明。

五、Lane Margining(Section 4.2.13):

在PCIe 4.0协议中,16GT/s拥有一个特有的功能,叫做"Lane Margining",因为是针对接收端的,也可以叫做"Rx Lane Margining". 当PCIe链路运行在2.5GT/s、5GT/s、8GT/s时,无法启动这个功能。当PCIe链路出于L0状态时,Lane Margining功能允许Host监控并修复接收端出现的信号偏差(包括电压和时间),

 pcie gen4 &pcie gen5;

最大的区别就是速率上的区别;

2. refclk 抖动容忍程度也不同:

pcie gen4: +/- 300ppm;

pcie gen5: +/- 100ppm;

3. link 均衡的差别;

gen5 支持

euqalizaiton bypass to highest rate; 使能该特性之后如果ep,rc双方都支持那么link时可以直接从gen1--》gen5; 跳过中间 3,4 步骤;

No equalization needed:

如果链路上的所有组件都支持 32.0 GT/s 或更高的数据速率,并且都支持“无需均衡”的机制,那么系统允许跳过整个均衡过程,直接将链路训练到所有设备共同支持的最高速率(如 32.0 GT/s)。这一机制是通过 TS1/TS2(或其修改版本)中的有序集合进行协商的。

该机制的适用前提包括:

  • 设备能从以前的链路训练中获取在所有速率下都适用的均衡设置;
  • 或者该设备在所有高于 5.0 GT/s 的速率下根本不需要均衡;
  • 如果设备设置了“禁止跳过均衡”的控制位,则不得宣称支持该机制。

总的来说该机制在双方都在gen5建联之后,跳转到gen3,或gen4.不需要从新做eq;节省时间。

gen6 & gen5

01)64 GT/s数据速率,通过x16配置可达到256Gbps;

02)PAM4信令利用了行业中已有的PAM4;

PAM代表脉冲振幅调制,数字4代表电平数量。大多数工程师都熟悉NRZ调制,即非归零调制。NRZ使用两级信号。当Vcc ~ 0V时,逻辑 “0”是通过的。当Vcc ~ 1.8/3.3/5V时,逻辑 “1”通过。每个单位间隔发送一个0或一个1,或一个bit。所以NRZ基本上是一个PAM2。

作为改良产品,PAM4是一个多级的技术,使用四级信令。基本上有着四级信令,分别对应Vcc ~ 0V、Vcc/3、(2*Vcc)/3和Vcc。每个单位间隔发送两个比特而不是一个。 它发送的是0-0、0-1、1-0或1-1。下图详细说明了这些差异:

一般来说,NRZ调制支持有一个“眼”的眼图。对于PCIe 5.0规范,“眼”有一个特定的眼高和电压水平,这取决于定义的通道长度。PAM4调制眼图支持三个 "眼"。对于PCIe 6.0规范,每个“眼”也有一个定义的眼高和电压水平,用于特定的信号通道。

为什么PCIe 6.0规范采用了PAM4

以前的PCIe规格是NRZ或PAM2。PAM4规范已被其他网络标准采用,开始是56Gbps,112Gbps,未来是224Gbps。其他标准中存在PAM4的先例。

PAM4信令使数据速率翻倍,同时使用相应NRZ调制原理的相同奈奎斯特频率。例如,PCIe 5.0架构使用16GHz的奈奎斯特频率。使用PAM4调制,PCIe 6.0架构使用相同的16GHz奈奎斯特频率,但数据速率翻倍,达到每条链路64GT/s,并通过x16配置达到256Gbps的双向带宽。

PAM4与NRZ相比,优势是什么?

PAM4减少了通道损耗,因为它以每UI两个bit的一半频率运行。这使得PCIe 6.0规范的信道覆盖范围与PCIe 5.0规范提供的类似。PCIe 6.0规范中的PAM4调制甚至可能允许更少的损耗和扩展的覆盖范围。

从另一个角度来看,对于相同的信号频率,你可以将数据速率提高一倍,或者为下一代应用增加带宽或吞吐量。

【PCIe 6.0】颠覆性技术!你NRZ相守20年又怎样?看我PAM4如何上位PCIe 6.0 !_pcie6.0 pam4-CSDN博客

2. 通道和PAM-4

(a)PCIe 5.0 32GT/s(NRZ信号)显示2个信号电平和单眼,(b) PCIe 6.0 64GT/s(PAM-4信号)显示4个信号电平和3个不同的眼。图1中的两个信号具有相同的16GHz奈奎斯特频率和相同的单位间隔(UI)。这意味着他们基本上可以使用相同的PCIe 5.0通道,而不会让频率相关损耗变得更糟糕,如果使用64GT/s的NRZ信号,奈奎斯特频率为32GHz。这就是56G和112G以太网转换到PAM-4信号的原因,也是PCIe 6.0现在转换到PAM-4的原因,可以降低信号损耗。但是PAM-4的四个电压电平在一个UI中使用2bit编码,而NRZ是1bit编码,从而使数据速率提高了一倍。这听起来很棒,但是这里有一项重要的权衡因素。由于发射端(TX)的总体电压摆幅没有增加,因此PAM-4系统中每只眼的可用电压仅为NRZ的1/3。因此,信号在TX和接收端(RX)之间遇到的任何噪声都会对信号完整性造成更大的损害。

03)轻量级的FEC和CRC减轻了与PAM4信令相关的误码率增加;

pcie6为什么引入FEC:

1. 使用 PAM4 编码带来的信噪比下降

  • PCIe 6.0 为了在不成比例增加功耗的前提下提升带宽,引入了 PAM4(4-level Pulse Amplitude Modulation)。
  • PAM4 每两个 bit 映射为一个符号,虽然带宽翻倍,但每一位的“眼图”更小,信噪比(SNR)降低,误码率(BER)上升。
  • 在这种情况下,传统的误码检测(如 CRC)+重传策略已不足以满足 高吞吐量 + 低延迟 + 低误码 的目标。

2. 传统 CRC 检测+重传机制不够高效

  • PCIe 1.0–5.0 中,使用 8b/10b 或 128b/130b 编码,主要依赖 LCRC 检测错误 和 Replay Buffer 做重传。
  • 在 PCIe 6.0 这种高速传输中,频繁重传将严重影响有效带宽和延迟。
  • 为了避免重传并在传输链路上修复轻微错误,PCIe 6.0 引入 低延迟 FEC(Low Latency FEC)。

FEC是在rx端实现还是在tx端实现?FEC可以修复几bit错误?

1. FEC 是在 RX 端实现还是 TX 端?

答案:

FEC 的编解码分别在 TX 和 RX 两端实现:

tx实现编码;rx实现解码和纠错;

2. FEC 可以修复几 bit 错误?

答案:

这取决于 FEC 使用的算法和参数,但 PCIe 6.0 使用的是 低延迟、有限纠错能力的 FEC,主要是 对每个 FLIT 能够修复小范围(通常是 1~2 个符号)的错误。

04)基于Flit的编码支持PAM4调制并实现>2倍的带宽增益;

gen6,使用flit 包之后tlp格式还会保留吗?

PCIe 6.0 在使用 FLIT 模式时,TLP(Transaction Layer Packet)格式在逻辑层仍然保留,但在物理层不会再原样发送传统的 TLP 格式,而是经过重新封装为 FLIT 单元进行传输。

FLIT 模式中的关键变化:

  • FLIT(Flow Control Unit) 是一种定长(固定 256 字节)传输单元,是 PCIe 6.0 新增的机制。
  • 原本变长的 TLP 会先被拆分、打包成一个或多个 FLIT Payload;
  • 每个 FLIT 中可能包括多个 TLP(如多个小包)、一个大 TLP 的片段、甚至还可包含 DLLP。

因此,在链路上传输的单位已从“包”(TLP)转变为“帧”(FLIT),这有助于:

  • 使用 PAM4 编码获得更高带宽;
  • 更好地进行 FEC 编码;
  • 提高 传输效率与可预测性。

假设你要发送一个 64-byte 的 Mem Write TLP,在 PCIe 5.0:

  • 会构造一个完整的 TLP 包;
  • 加入 DLLP 信息;
  • 经物理层直接以 bit 流形式发送。

而在 PCIe 6.0:

  • 同样构造一个 TLP;
  • 然后将其塞进一个 FLIT;
  • 每个 FLIT 是 256B 固定长度,填不满的部分使用 Padding。

为什么使用flit之后会大幅降低延迟?

FLIT 模式降低延迟的核心原因是:它将原本变长、带开销的数据包(TLP/DLLP)转变为结构化、定长、流水化处理的传输单元,极大地提升了传输效率并减少了协议开销与重传延迟。

05)更新了用于Flit模式的数据包布局,以提供额外功能并简化处理;

移除了automic operation:原子操作

06)保持与所有前几代PCIe技术的向后兼容性。

http://www.xdnf.cn/news/7916.html

相关文章:

  • Linux虚拟文件系统(2)
  • TASK04【Datawhale 组队学习】构建RAG应用
  • kafka配置SASL_PLAINTEXT简单认证
  • ElasticSearch安装
  • 学习 Android(十)Fragment的生命周期
  • (6)python爬虫--selenium
  • Java面试实录:从JVM调优到Spring Cloud实践
  • Flask-SQLAlchemy核心概念:模型类与数据库表、类属性与表字段、外键与关系映射
  • 计算机视觉与深度学习 | Python实现CEEMDAN-ISOS-VMD-GRU-ARIMA时间序列预测(完整源码和数据)
  • Vulkan 动态渲染
  • npm、pnpm、yarn 各自优劣深度剖析
  • [CSS3]百分比布局
  • Qt初识.
  • 乐视系列玩机------乐视pro3 刷写第三方资源操作步骤 乐视系列机型通用刷写第三方步骤
  • k8s面试题-ingress
  • Rust 学习笔记:泛型
  • Kubernetes中runnable接口的深度解析与应用
  • linux查看本机服务器的外网IP命令
  • Linux问题排查-引起服务器带宽使用率高的内鬼
  • 文件上传功能uploadify.js报updateSettings is not a function
  • 【Java高阶面经:微服务篇】5.限流实战:高并发系统流量治理全攻略
  • C++23关联容器的异质擦除重载 (P2077R2)介绍
  • 面试题 - 微服务相关的经典问题(33道)
  • 数据库与Redis数据一致性解决方案
  • 日语学习-日语知识点小记-构建基础-JLPT-N4阶段(26):のは ・ のが ・ のを
  • 命令行删除node_modules
  • 鸿蒙HarmonyOS 【ArkTS组件】通用属性-背景设置
  • 扩散模型(DDPM)
  • 游戏引擎学习第300天:从排序键更改为排序规则
  • ElasticSearch各种查询语法示例