【PCIe 6.0】PCIe 6.0 新特性 - L0p 详解


🔥点击查看精选 PCIe 系列文章🔥


📢 声明

🥭 作者主页:【MangoPapa的CSDN主页】。 ⚠️ 本文首发于CSDN,转载或引用请注明出处【点击查看原文】。 ⚠️ 本文为非盈利性质,目的为 个人学习记录知识分享。因个人能力受限,存在协议解读不正确的可能。若您参考本文进行产品设计或进行其他事项并造成了不良后果,本人不承担相关法律责任。 ⚠️ 若本文所采用图片或相关引用侵犯了您的合法权益,请联系我进行删除。 😄 欢迎大家指出文章错误,欢迎同行与我交流 ~ 📧 邮箱:mangopapa@yeah.net

文章目录

1. L0p基本介绍 1.1 L0p引入 1.2 L0p的目的意义 1.3 L0p的适用范围 1.4 L0p能力协商 2. L0p的进入和退出 2.1 L0p动态链路宽度调整 2.1.1 策略概述 2.1.2 L0p响应ACK和NAK规则 2.1.3 L0p动态链路宽度调整举例 2.1.4 链路宽度下调 2.1.5 链路宽度上调 2.2 再次发送L0p请求 2.3 L0p的进入和退出耗时 2.4 L0p对称性 3. 链路管理DLLP 4. 进一步思考 4.1 为什么不继续采用FTS的方式了? 4.2 那么切换速度可以进L0p吗? 5. 参考



PCIe 6.0 协议标准最终版正式公布了,其中的技术细节也没必要藏着掖着了,之前写的协议分析笔记终于可以分享出来了。官方宣传媒体图,上!

在这里插入图片描述


1. L0p基本介绍

1.1 L0p引入

  PCIe 5.0中低功耗状态有:L0s,L1、动态链路宽度切换、速度切换。L0p是PCIe 6.0新引入的一种低功耗状态,工作在L0p状态下PCIe设备可以在不中断数据发送的情况下完成链路宽度切换,从而提升链路的带宽利用率、降低功耗。

  L0p在LTSSM中的位置如图1所示,其不是LTSSM主状态之一,某种意义上讲,L0p是L0的一部分。

在这里插入图片描述

▲ 图1 L0p在LTSSM中的位置

1.2 L0p的目的意义

  L0p的目的意义大致有以下几点:

Flit Mode只支持L0p。PCIe 6.0工作在Flit Mode时不支持L0s,转而采用L0p。 采用L0p时,不中断数据传输即可实现链路宽度切换。非Flit Mode下,或没有L0p时,调整链路宽度需要LTSSM从L0 -> Recovery -> Configuration,此间几us内数据流被中断。 L0p下被关掉的lane的功耗与L0s几无差别,这样一来,既能保证链路的带宽率利用率,也能链路降低功耗。 上调链路宽度从L0p回退到L0时,PHY无需重新训练

1.3 L0p的适用范围

  L0p适用于工作在Flit Mode的PCIe设备,是一项可选的功能,PCIe设备可以通过设备控制寄存器3的L0p Enable位(图2)来决定是否开始L0p功能。对于采用PCIe 6.0的Retimer,其伪端口必须支持L0p

  L0p只适用于Flit Mode,但其并非只适用于PCIe 6.0。采用了PCIe 6.0 IP的设备,若其工作在Gen1~Gen5速率下且为Flit Mode,L0p对其仍然适用。反过来讲, 采用了PCIe 6.0 IP的设备,若其工作在Flit Mode下,即便其速率为Gen1~Gen5的速率,其仍然不能进入L0s的低功耗状态。

在这里插入图片描述

▲ 图2 Device Control 3 Register

1.4 L0p能力协商

  收发端通过交换TS序列协商该链路是否启用L0p能力。TS1或TS2序列(standard或modified)中的数据速率指示符号第0bit(即symbol 4 bit 0) 指示当前设备其是否支持L0p,收发端在Configuration.Complete状态形成最终决定,L0p能够动态切换最大链路宽度是在Configuration.Linkwidth.Accept状态决定的。

  Flit Mode不等于L0p,因为L0p是可选的功能。即便工作在Flit Mode下,若设备未实现或未使能L0p能力,则设备仍然不能进入L0p状态,也不能动态调整链路宽度,此时调整链路宽度仍然需要从 L0 -> Recovery -> Configuration。


2. L0p的进入和退出

2.1 L0p动态链路宽度调整

2.1.1 策略概述

  一般而言,Flit Mode的PCIe设备在初次training的时默认开启全部可用的lane。在工作过程中,根据带宽利用情况决定下调或扩展lane的数目。进入L0状态后,初次发送L0p请求一定是链路宽度下调。

链路宽度下调:当吞吐量较小链路较清闲时,收发端协商后进入L0p状态降低活跃态的lane数目。在保证现有数据发送带宽需求的前提下,关闭部分lane使其进入电气闲状态,同时剩余lane继续发送数据流。 链路宽度上调:链路宽度上调的前提是当前链路已经工作在L0p状态且lane数目未达到最大。若当前PCIe设备吞吐量逐渐加大以至于目前lane数难以满足需求,收发端协商上调lane数目,激活电气闲状态的lane,以满足系统吞吐量需求。

  注意

在协商好的最大链路宽度范围内,L0p支持的动态切换链路宽度为x1, x2, x4, x8, x16。L0p不支持到x1, x3, x5等的切换。 鉴于Configuration状态时关闭的lane存在链路可靠性差的可能,L0p不能也无法激活在Configuration状态下关闭的lane。如果需要激活其他lane,仍然需要L0 -> Recovery -> Configuration重新协商。 从L0p -> Recovery后,有效链路宽度回退到进L0p之前L0的链路宽度。 若链路控制寄存器(图3)中的自动链路关闭位置一,则 ①禁止发送链路宽度下调的L0p请求,且 ②必须发送上调链路宽度的请求,将链路宽度恢复至最近一次Configuration协商后的最大链路宽度。

在这里插入图片描述

▲ 图3 Link Control Register

2.1.2 L0p响应ACK和NAK规则

  USP或DSP均可以主动发起动态切换链路宽度请求,另一方可以同意(回ACK)也可以拒绝请求(回NAK)。只有在双方就能不能进L0p、切换成哪种链路宽度达成一致之后,才能进入预期的L0p链路状态。Rx在收到L0p请求后,必须在1us内进行回应;若请求者在2us内未等到回应,其可以重新发送请求,也可以放弃请求。

  更多L0p ACK和NAK规则如下:

若L0p.Priority为0,不论当前端口是否已处于L0p,其均有权拒绝对端发来的链路宽度下调L0p请求。 若端口出于热节流或链路可靠性原因请求下调链路宽度,其应将L0p 请求中的L0p.Priority位置一,并确保在100ns内开始发送该L0p请求。此时,若对端未发送L0p请求且下个Flit也不打算发送L0p请求,那么对端必须接受该L0p请求并回复ACK。 任何请求动态下调链路宽度的端口,即便其得到了对端的ACK答复,当导致其链路宽度下调的因素消除后,其应主动恢复原有的链路宽度。 若DSP和USP同时请求L0p动态链路切换(某端口收到L0p请求后100ns内自己也会发送L0p请求即为同时),此时双方需要竞争方能成为最终的requester。竞争规则如下:
○ 若双方L0p.Priority均置一,链路宽度窄者胜;
○ 若只有一方L0p.Priority置一,L0.Priority置一者胜;
○ 若双方L0p.Priority均为0,L0p请求链路宽度不同链路宽者胜,链路宽度相同DSP胜。

2.1.3 L0p动态链路宽度调整举例

  以X16链路为例,一种L0p动态切换链路宽度的协商过程如图4所示:

    DSP与USP在Configuration状态协商开启L0p能力。 USP发送L0p请求给DSP,请求将链路宽度切换为x8,DSP回复ACK。 DSP即USP lane 0-7继续传输数据流,lane 8~15 发送EIOSQ并进入电气闲状态。 一段时间后,DSP发送L0p请求,请求上调链路宽度为x16,同时USP请求继续把链路宽度下调至x4。两者L0p.Priority均为0,DSP获胜,USP回复x16 L0p以ACK,DSP回复x4 L0p以NAK。 lane 8~15 重新发送TS1或TS2以重新训练,并在合适位置插入EIEOS使链路退出电气闲。 DSP及USP均工作在x16下。

在这里插入图片描述

▲ 图4 L0p动态链路宽度举例

2.1.4 链路宽度下调

  双方端口就链路宽度下调达成一致意见后,两方端口需要独立完成以下事项:

待关闭lane上从其下一Flit开始将Flit中的SKPOS替换为EIOSQ,发送完EIOSQ后进入电气闲状态,其他无需关闭的lane不发送EIOSQ,且照常发送数据Flit。 若发出L0p请求的端口未收到ACK,只要其收到了EIOSQ,等同于收到ACK,该关lane的关lane。 所有待关闭的lane上同时收到EIOS后才能进入L0p,若存在某待关闭的lane上未收到EIOS,则不能进入L0p,而是进入Recovery。

2.1.5 链路宽度上调

  双方端口就链路宽度上调达成一致意见后,需要完成以下事项:

发送L0p请求的端口在待开启的lane上发送EIEOSQ,其他lane照常发送数据流,对端收到EIEOSQ后激活相关lane。 在开启相关lane时,需注意:待开启的lane与其他正常工作中的lane一起规划SKPOS。考虑到待开启的lane在发送EIEOSQ中的多个EIEOS时有可能会被SKPOS打断,此时可以通过合理规划EIOSQ的起始时刻来保证其中的多个EIEOS背对背发送(未被SKPOS打断),一旦被SKPOS打断,可以重新发。 所有待开启的lane上均连续收到8个TS1或TS2后,开始发送TS2。 数据速率为8GT/s及以上时,若所有待激活的lane上收到8个连续的TS2,且在收到1个TS2后发出了16个TS2,该端口所有激活及待激活状态下的lane在发送下一SKPOS前需发送SDS。 数据速率为8GT/s及以上时,Rx需在所有已激活、待激活的lane间完成lane间de-skew。 若24ms还没激活相关lane,则进入Recovery状态。

2.2 再次发送L0p请求

  端口再次发送L0p请求的时间点是有要求的,满足以下任一条件时本端口方可以再次发送L0p请求:

不论上次L0p请求由谁发起,此刻距上次成功实现动态链路切换已过去1us。 上次L0p请求由本端口发起,但被拒绝了。 上次L0p请求由对端发起且本端口已回复ACK,若上次L0p请求请求上调链路宽度,无论本端口是否监测到对应lane退出电气闲,即无论上调是否成功完成,只要过去2us,本端口均可再次发送L0p请求。

  (为什么没提到下调链路宽度呢?下调链路宽度是双方端口能够主动控制的,但是上调可就不是这么回事了,链路坏了还真就上调不了。)


2.3 L0p的进入和退出耗时

  对于一直处于活跃状态的lane而言,上调和下调链路宽度对数据传输没有任何影响。

  当下调链路宽度时,对于要关闭的lane而言,考虑到要把SKP替换为EIOS才能进入电气闲,最差情况是2个SKP的间隔1.5ms;当上调链路宽度时,耗时跟从L1退出的耗时相同。


2.4 L0p对称性

  大家知道,Tx和Rx可以单独进入和退出L0s状态,但是对于工作在Flit Mode且启用了L0p的PCIe 6.0设备,其Tx和Rx必须同时进入或退出L0p,且Tx和Rx的链路宽度相同,称之为L0p的对称性。为什么要这么做呢?减少设计的复杂度。考虑到USP及DSP的处理速度或许不同,DSP及USP在动态切换链路宽度的时候,或许存在短时间的链路宽度不同的情况,这是允许的,我们仍然称起是对称的。


3. 链路管理DLLP

  目前链路管理DLLP类型只有L0p链路管理DLLP这一种,其格式如图5所示。

  各字段意义如下:

Byte0:固定值 8’b00101000,用以指示当前为链路管理DLLP。 Byte1:指示链路管理的类型,目前只有L0p DLLP这一种类型,值为8’b00000000。 Byte2:bit[3:0]表示L0p的命令类型,0100 -> L0p 请求,0110 -> L0p ACK,0111 -> L0p NAK,1010 -> L0p链路上调训练完成;bit[4]在L0p命令为L0p请求时表示L0p请求的优先级,1为高优先级;bit[7:5]预留。 Byte3:bit[3:0]及bit[7:4]均表示链路宽度,其中bit[3:0]是L0p请求或链路上调训练完成的链路宽度,bit[7:4]是L0p NAK/ACK的响应负载,0001b -> x1, 0010b -> x2,0100b -> x4,1000b -> x8,0000b -> x16。

在这里插入图片描述

▲ 图5 Link Management DLLP (Flit Mode)

  以下几种情况对应的链路管理DLLP无效,Rx收到后应予以忽略:

链路管理类型 或 L0p命令类型为保留字段。 链路管理类型 或 L0p命令类型正常,但L0p命令类型对应的链路宽度或响应负载为保留字段。

4. 进一步思考

4.1 为什么不继续采用FTS的方式了?

  根据经验,为使设备工作在最坏的环境下仍能正常从L0s回退到L0,设计人员往往采用较大的N_FTS,复杂度增加是一方面,对降低功耗也不太友好。想必之下,从lane数较少的L0p回退到L0,采用EIEOS,方法更为简单直接有效。


4.2 那么切换速度可以进L0p吗?

  怕是不行。不同速率下的信号质量不同,其对应的均衡、加重/去加重参数不同,每切换一种速度都需要重新进行均衡等,即需要进Recovery重新均衡后再切速。


5. 参考

    The PCIe® 6.0 Specification Webinar Q&A: Leveling Up with L0p 如何成功过渡到PCIe 6.0并应对芯片设计新挑战? What Disruptive Changes to Expect from PCI Express Gen 6.0 PCIe 6.0时代下的IP挑战


— END —

🔥 精选往期 PCIe 协议系列文章🔥

【最新技术早知道】PCIe Gen5 还没用上,Gen6 就来了?PCIe 6.0 系列文章之:《PCIe 6.0,到底 6 在哪?》 【PCIe 6.0】颠覆性技术!你NRZ相守20年又怎样?看我PAM4如何上位PCIe 6.0 ! PCIe事务排序(Transaction Ordering) PCIe地址转换服务(ATS)详解 PCIe访问控制服务(ACS) PCIe锁定事务(Locked Transactions)介绍 PCIe TLP Prefix & PASID TLP Prefix介绍

⬆️ 返回顶部 ⬆️

来源url
栏目