#|【毅力挑战】PCIe 每日一问一答

本文意在督促自己持续学习 PCIe。日更长文做不到,但三言两语总该能写出来。一天至少更新一个 PCIe 相关知识点,聚沙成塔、集腋成裘,相信几年下来总能覆盖绝大部分的 PCIe 知识面。本文注定越往后越难更,看我能坚持多久吧。

文章目录
  • 2022 年
    • 2 月
      • 2022.02.07 - PCIe 有序集有哪几种?
      • 2022.02.08 - RCRB 是什么?
      • 2022.02.09 - CPL 状态有哪几种?
      • 2022.02.10 - Completion timeout 机制是什么?
      • 2022.02.11 - PCIe RC / EP / EPiRC 是什么?
      • 2022.02.12 - PCIe BAR 是什么?
      • 2022.02.13 - PCIe 转发、非转发事务是什么?
      • 2022.02.14 - PCIe 6.0 有哪些新变化?
      • 2022.02.15 - PCIe 有哪几种参考时钟架构?
      • 2022.02.16 - PCIe Crosslink 是什么?
      • 2022.02.17 - PCIe 复位机制
      • 2022.02.18 - 当同一 Requester 有多笔 MRd 发出时,加之 Flow Control 中 MRd、CPLD不 保序,如何知道 CPLD 回的是哪笔 MRd 的数据?
      • 2022.02.19 - Logic Idle Symbol 与 Idle Symbol (IDL) 是一样的吗?与 EIOS 有何关系?
      • 2022.02.20 - PCIe SDS/EDS 是什么?
      • 2022.02.21 - Modified TS1/TS2 是什么?Modify了什么?为什么要Modify?
      • 2022.02.22 - PCIe 有哪几种路由方式?
      • 2022.02.23 - Completer ID、Requester ID 与 BDF 的关系是什么?
      • 2022.02.24 - PCIe Tx Scramble 放在 Encode 之前之后?为什么?
      • 2022.02.25 - Polling.Compliance 状态是做什么的?Compliance Pattern 是干啥的?
      • 2022.02.26 - PCIe Link Traning,都 Traning了什么?
      • 2022.02.27 - M-PCIe 是什么?
      • 2022.02.28 - PCIe Gen2 也需要从Gen1切速吗?能不能直接进Gen2?
    • 3 月
      • 2022.03.01 - PCIe Retimer 是什么?
      • 2022.03.02 - PCIe Lane-Lane Skew 产生的原因 及 De-skew 方法?
      • 2022.03.03 - Link Error 包括哪几种?发生 Link Error 时是如何恢复的?
      • 2022.03.04 - Alternate Protocol Negotiation 是什么 ? 跟Modified TS的关系?
      • 2022.03.05 - PCIe Switch 有哪几种传输模式?

2022 年 2 月 2022.02.07 - PCIe 有序集有哪几种?
PCIe 物理层包(Physical Layer Package, PLP)又称有序集(Ordered-Set),长度为4B整倍数,用于链路训练、时钟偏差补偿、使链路进入电气闲或退出电气闲。PCIe 有序集有以下几种:
  • TS0 / TS1 / TS2,用于链路初始化、训练、协商等,TS0出现于PCIe 6.0。
  • SKPOS,用于收发端时钟补偿。
  • EIOS,使链路进入电气闲。
  • EIEOS,使链路退出电气闲。
  • FTSOS,使链路退出低功耗模式。
  • SDS / EDS,标志数据流开始/结束,仅用于Gen3及以上。
2022.02.08 - RCRB 是什么?
RCRB全称根复合体寄存器块(Root Complex Register Block),在常规配置空间之外额外指定4KB存储空间给RC用,该4KB空间所在的地址空间不能与常规配置空间或内存空间出现重叠。RCRB使用方式与常规配置空间类似,可用作PCIe的扩展能力寄存器或其他指定寄存器。
2022.02.09 - CPL 状态有哪几种?
PCIe Requester发出的所有PCIe Rd、NPWR、Atomic请求及PCIE 6.0的DWMR请求均需要Completer返回CPL/CPLD,CPL/CPLD中含有Cpl.Status字段,指示完成情况。那么CPL状态有哪几种呢?如下:
  • SC,Successful Completion,请求成功
  • UR,Unsupported Request,不支持的请求
  • CA,Completer Abort,支持但由于违例等原因被终止了
  • RRS,Request Retry Statys,需要重新发生请求。在Gen6之前叫CRS,即Configuration Request Retry Status,PCIe 6.0 的 DMWR也支持请求重传,所以把configuration去掉了。
  • 其他预留
2022.02.10 - Completion timeout 机制是什么?
PCIe设备发出的请求中有些请求需要Completer反馈Completion,此时Requester会等待Completion再进行下一步操作。在某些异常情况下,比如配置不当、系统故障等,Requeser无法收到Completion。为了不影响进一步使用,需要一种超时退出机制让Requester从这种等待状态恢复过来,这就是超时退出机制。
几点注意事项:
  1. 发生Completion Timeout时,Requester上报错误。
  2. 由于Switch仅用于交换请求不生成请求,Completion Timeout机制仅限于用在RC、EP及Bridge上,不适用与Switch。
  3. Completion Timeout机制默认打开,用户可通过配置Device Control 2寄存器来关闭该机制。Completion Timeout Value有几种选择,用户可通过配置Device Control 2寄存器进行选择。如果设备不支持可变的timeout value配置,那么在设计的时候,FLIT Mode下应把Timeout Value设置为40ms~50ms,非Flit Mode下应设置为50us~50ms(建议最少10ms)。
  4. 对于有多笔CPLD的MRd请求,若CPLD被中断,此前Requester收到的Data可以保留也可以丢弃。
2022.02.11 - PCIe RC / EP / EPiRC 是什么?
  • RC,Root Complex,根复合体,PCIe树的根,连接CPU、主存及PCIe Bridge/EP/Switch等。
  • EP,Endpoint,端点,具体的PCIe设备,比如带有PCIe接口的网卡、存储卡等。
  • RCiEP,集成了EP的RC。
2022.02.12 - PCIe BAR 是什么?
BAR,Base Address Register,是PCIe配置空间中从地址0x10开始的6个基地址寄存器,用以存储PCIe设备在PCIe地址空间中的基地址。该基地址非CPU内存的映射地址,两者间存在映射关系。通过配置PCIe设备BAR可以实现PCIe地址空间的动态分配。
2022.02.13 - PCIe 转发、非转发事务是什么?
转发事务,请求者发送TLP到完成者,无需完成者进行反馈。转发事务有MWr,Message。
非转发事务,请求者发送TLP到完成者,按照分割事务进行处理,需要完成者进行反馈。非转发事务有MRd,DMWr,IORd,IOWr,CfgRd,CfgWr。
由于转发事务无需反馈,其比非转发事务性能更高。非转发事务出错时,可以得到硬件通知;转发事务出错时,只能通过完成者记录错误并上报RC,由软件进行处理。
参考:non-posted事务和posted事务
2022.02.14 - PCIe 6.0 有哪些新变化?
  • 单 Lane 传输速率由 32 GT/s 变为 64 GT/s;
  • 传输信号由 NRZ 两电平变为 PAM4 四电平;
  • 编码方式由 128b/130b 变为 FLIT 编码;
  • 引入了 FEC 前向纠错机制,并维持既有的 Retry 重传机制;
  • LTSSM 新增加了 L0p 低功耗状态,允许部分 Lane Electric Idle、部分 Lane Active;
  • 新加了几种机制:DOE、CMA、DMWr、IDE。
参考:PCIe 6.0,到底 6 在哪?
2022.02.15 - PCIe 有哪几种参考时钟架构?
PCIe 有3种时钟架构,分别为:
  1. Common Refclk Architecture,通用参考时钟,收发端共享参考时钟。
  2. Data Clocked Refclk Architecture,仅发送端需要refclk,接收端CDR Refclk参考时钟从数据流中恢复。
  3. Separate Refclk Architecture,收发端采用独立的参考时钟,根据有无时钟扩频(SSC)可进一步分为SRNS及SRIS。
#|【毅力挑战】PCIe 每日一问一答
文章图片

三种基本 PCIe 参考时钟架构 友情链接:
  1. PCIe 参考时钟架构 (Refclk Architecture)
  2. 关于PCIe参考时钟的讨论
  3. PCIe 的时钟结构
2022.02.16 - PCIe Crosslink 是什么?
为了解决不同处理器间的互联问题, PCIe 提供一种 Crosslink 的链接方式。两个同方向的 Port 相接称为 PCIe Crosslink,比如 Downstream Port 接 Downstream Port 或 Upstream Port 接 Upstream Port PCIe。
Cosslink 是一种可选的能力。支持 Crosslink 的两个 PCIe 设备在 Link Training 的时候沟通谁是 DSP 谁是 USP(具体可搜索 Crosslink random time)。
友链:PCIe中的Crosslink与Multi-Root/Multi-Processor系统
2022.02.17 - PCIe 复位机制
PCIe有四种复位方式:冷复位(Cold Reset)、暖复位(Warm Reset)、热复位(Hot Reset)及功能层复位(Function Level Reset)。简介如下:
  • 冷复位 - 关主电源,可通过sideband信号或power state两种方法实现冷复位。
  • 暖复位 - 不关主电源,无特定规范,可选方案,可自行设计。
  • 热复位 - Inband实现。Switch的Upstream Port收到热复位时,复位其自己并广播给其Downstream Port来复位Downstream Port;Switch的Dpstream Port收到热复位时,只复位其自己。
  • 功能层复位 - 对于多Function的Device,可以只复位特定的Function。FLR只复位内部状态及寄存器。
冷复位和暖复位基于边带信号由系统生成,称为基本复位,由硬件触发;热复位由上游设备生成,以包(TS有序集)的形式传达到下游,由软件触发。
PCIe设备复位释放后,重新进行链路训练及初始化,需等待至少100ms才能向其发出访问请求。若初始化之前便收到了配置请求,需返回RRS CPL要求重传。

友情链接:
  1. PCIe扫盲——复位机制介绍(Fundamental & Hot)
  2. PCIe扫盲——复位机制介绍(FLR)
2022.02.18 - 当同一 Requester 有多笔 MRd 发出时,加之 Flow Control 中 MRd、CPLD不 保序,如何知道 CPLD 回的是哪笔 MRd 的数据?
对于不同的 Completer 或 VC,可以根据 CPLD TLP Header 中的 TC 和 Completer ID 来判断该笔 CPLD 归属于哪一笔 MRd。
对于同一 Completer 同一 VC,问题所言的情况(多笔 MRd,MRd/CPL 失序)不会发生。MRd 是非转发请求,Requester 在发出 MRd 请求后,在收完 CPL/CPLD 或 CPL Timeout 之前不会发下一笔 MRd。即便能够连续发出多笔 MRd,也不涉及 MRd/CPLD 失序的情况。Flow Control机制对于不同 VC 不保序,但是对同一VC是保序的,MRd 在Flow Control NPR Buffer中按照先入先出的顺序发出。
2022.02.19 - Logic Idle Symbol 与 Idle Symbol (IDL) 是一样的吗?与 EIOS 有何关系?
不一样。
Logic Idle Symbol ,逻辑闲符号数据是 0x00,与 EIOS 没啥特定关系,当链路上临时没有数据包要发送时候(链路逻辑闲),发送器继续发送逻辑闲符号。
Idle Symbol (IDL) ,数据是 0x7c,是 EIOS @Gen1/Gen2 中的一个符号。Gen1/Gen2时,一个 EIOS 由 1 COM + 3 IDL 组成,Gen3 及以上时 EIOS 由 16 个 0x66组成。
Tx Logic Idle 时,所有 lane 上都发 Logic Idle Symbol。
更多请看本人博文:【PCIe有点闲】电气闲,逻辑闲,到底谁更闲?
2022.02.20 - PCIe SDS/EDS 是什么?
SDS,全称 Start of Data Stream Ordered Set,在发送Data Block 第 1 DW 前发送。与之对应的是EDS,发送Data Block 最后 1 DW 后发送 EDS,标志数据块的结束,下一笔就是 OS 有序集了。
发送 SDS 对链路状态有所要求,在 LTSSM 跳转到 L0 状态前的最后一个子状态发送 ,包括 Cfg.Idle、Rcvr.Idle、Tx_L0s.FTS,且只能在这些状态时发送。
SDS/EDS 仅适用于Gen3 及以上速率,不适用于 Gen1/Gen2 是因为 Gen1/Gen2 时还没出现 SDS/EDS,协议要兼容老版本。Gen1/Gen2 时,LTSSM 跳到 L0 前不发 SDS 发啥?在所有lane上同时发 Logic Idle Symbol,就是0x00。
Loopback 时,OS<->DataBlock切换时 Tx 无需发送 SDS 或 EDS,Rx 也 无需检查 SDS 或 EDS。
2022.02.21 - Modified TS1/TS2 是什么?Modify了什么?为什么要Modify?
非 PCIe 协议运行在 PCIe PHY 上或发送 TS Message 时,在 LTSSM 部分子状态采用 Modified TS1/TS2。
允许发送 Modified TS1/TS2 的 LTSSM 子状态有 Cfg.Lanenum.Wait、Cfg.Lanenum.Accept、Cfg.Complete。在此之前的,必须在 Polling.Active、Polling.Cfg、Cfg.Linkwidth.Start、Cfg.Linkwidth.Accept 状态将 Standard TS1/TS2 Symbol 5 的 bit[7:6] 置为 2’b11,以此在收发端协商是否支持 Modified TS。只有在收发端均支持 Modefied TS 时,才能发送 Modified TS,否则仍然发送 Standard TS。
跟 Standard TS1 / TS2 比,Modified TS 更改了 Symbol 6~15,这些 Symbol 主要是均衡相关字段,采用 Modified TS 是为了在协商完毕链路宽度后,同时协商Lane number及alternate protocolol,并bypass EQ。
2022.02.22 - PCIe 有哪几种路由方式?
PCIe 路由一般指 TLP 路由,DLLP 只在相邻设备 DL 间传递,不携带路由信息也无需路由。PCIe TLP 路由方式有 基于地址、ID 的路由及隐式路由 3 种,各组件根据 TLP Header 中的相关字段决定以何种方式路由该 TLP。
  • 地址路由:基于设备地址的路由,适用于 Memory 及 IO 请求(含 DMWr 及 Atomic)。Address 位于 TLP Header 的 Address 字段。基于地址路由的Memory 请求,地址可以为 32 bit 或 64 bit 地址;IO 请求采用 32 bit 地址。
  • ID 路由:基于设备 ID 的路由,适用于 Cfg 请求及 Completion。ID 位于 TLP Header 的 BDF 字段(对于 ARI 而言,只有 BF没有D)。
  • 隐式路由:适用于广播 Message,比如:中断、Error、电源管理、功率闲置、Lock 事务等消息及厂商自定义的消息。
参考:
  1. PCIe扫盲——TLP路由(Routing)基础
  2. ID ROUTING
  3. ADDRESS ROUTING
  4. IMPLICIT ROUTING
  5. PCIe ARI (Alternative Routing-ID Interpretation)介绍
2022.02.23 - Completer ID、Requester ID 与 BDF 的关系是什么?
TLP Header 中的 Requester ID, Completer ID 用以在 PCIe Hierarchy 中唯一标识生成、完成该 TLP 的 PCIe Function,两者均由 Bus Number、Device Number 及 Function Number 组成的 (ARI 没有Device Number)。Requester 的 BDF 称为 Requester ID,Completer 的 BDF 称为 Completer ID。
对于 MWr 等基于地址路由的转发事务而言,Requster ID 可有可无;对于 MRd 等基于地址路由的非转发事务而言,要求有 Reqesuter ID,其 Completion 中携带有 Completion ID 及 Requester ID。
2022.02.24 - PCIe Tx Scramble 放在 Encode 之前之后?为什么?
乱序应该放在编码之前。
发送序列中存在连续重复序列时,发送能量会集中在特定频点附近较窄的范围,产生较大的电磁辐射。scramble 乱序,是为了消除连续出现的重复序列,把能量集中的离散能量谱打散成白噪声,从而大大减小 EMI。
8b/10b,128b/130b,1b/1b 等编码,在串行数据流中加入时钟信息,使得接收端 PLL 能够从数据流中恢复出时钟。编码有以下益处:① 减少时钟布线的问题;② 减小时钟线引入的电磁干扰;③实现直流平衡;④增强误码检测性能。
若先编码再乱序,数据流中的时钟信息会被破坏,直流均衡也难以保证。
2022.02.25 - Polling.Compliance 状态是做什么的?Compliance Pattern 是干啥的?
Polling.Compliance 是 LTSSM Polling 子状态之一,用于 PCIe 链路的合规性测试,与 PCIe 测试设备配合使用。Polling.Compliance 期间,收发端 PCIe 设备发送 Compliance Pattern,在相邻通路间产生最坏的干扰及 EMI,测试设备来评估待测 PCIe 链路上的电压、时序是否符合规范,并测试 EMI、BER 及串扰程度。Loopback 模式下,32 GT/s 及以上速率时,Loopback Master 发送 Modified Compliance Pattern。TS 或 Link Control Register 2 也可以特别要求发送 Modified Compliance Pattern。
正常操作中一般不会进 Polling.Compliance 状态,但是所有的 PCIe 设备 必须 实现该功能,这是其 DFT 不可或缺的一环。
Polling.Active 状态进入 Polling.Compliance 的 3 个条件(满足其一即可):
  1. Link Control 2 Register 的 Enter Compliance 位置一,即我方主动要求进入 Compliance。
  2. 24 ms 内 未进入 Polling.Configuration,且检测到的 Lane 中,有 lane 未退出电气闲。此时该 PCIe 设备在所有检测到的 Lane 上发送 Compliance Pattern。无源负载,比如 50 Ω 阻抗的探针或 50 Ω 接地阻抗连接到任一差分信号对上,都会使设备进入 Polling.Compliance。
  3. 24 ms 内 未进入 Polling.Configuration,且收到了对端发来的 8 个 TS1 中,Compliance Receive bit 置一,且 Loopback bit 为 0 (非 Loopback 模式)。
所有 Lane 退出电气闲 且发送完 1024 个 TS1 后,Polling.Compliance 退回到 Polling.Active。
2022.02.26 - PCIe Link Traning,都 Traning了什么?
位锁定、符号锁定、Block 对齐、链路宽度、链路速率、极性、链路反排、Lane 间消抖
2022.02.27 - M-PCIe 是什么?
M-PCIe 是面向移动设备等功耗敏感型设备 PCIe 协议,即 Mobile-PCIe。
M-PCIe 与标准 PCIe 的 TL、DL 层相同。相比于标准 PCIe,M-PCIe 引入了 MIPI M-PHY。M-PHY 能够进行快速的电源状态切换,从而降低功耗。M-PHY 仅在实际传输时处于最大功耗状态,Burst 传输完毕进入低功耗状态“STALL”,紧接着退至最低功耗“HIBERN8”状态。此外,M-PHY 支持非对称链路,允许链路上存在不同数量的收发器。
M-PCIe 功耗更低,但其支持的速率不如标准 PCIe 高。M-PCIe 支持 Gear1~3 三种速率,为 1.25 GT/s, 2.5 GT/s 及 5.0 GT/s,Gear2/3 分别对应 PCIe Gen1/2 速率。
2022.02.28 - PCIe Gen2 也需要从Gen1切速吗?能不能直接进Gen2?
需要。不能。
无论收发端支持的最高速率是多少,第一次 Traning 必须进 Gen1 L0,这是协议要求的。
即使是 Gen2 速率,第一次也要按照 Gen1 进行 Traning。到达 Gen1 L0后,由于还未达到最高速率,LTSSM 进入 Recovery, 状态跳转如下:
L0 (Gen1) -> Recovery.RcvrLock -> Recovery.RcvrCfg -> Recovery.Speed -> Recovery.RcvrLock -> Recovery.RcvrCfg -> Recovery.Idle -> L0 (Gen2)
3 月 2022.03.01 - PCIe Retimer 是什么?
随着 PCIe 的迭代,传输速率越来越高,高速信号传输中的信号衰减问题越来越大。目前解决信号衰减的三大方案:① 高速 PCB 板材;② Retimer;③ Redriver。Retimer 是三者中性价比最高的一种方案,也更为主流。2021年是 Retimer 发展元年。
【#|【毅力挑战】PCIe 每日一问一答】Retimer 通过 其 Rx 端 CTLE/DFE (连续时间线性均衡/判断反馈均衡) 、CDR (时钟数据恢复) 及 Tx 端 EQ (均衡),来够补偿信道损耗,消除信号抖动,提升信号完整性,从而增加传输距离。
Redriver 是放大信号,Retimer 是重新生成信号。Retimer 比 Redriver 性能更高,但时延也更大。
#|【毅力挑战】PCIe 每日一问一答
文章图片


友情链接:
  1. PCIe Base Spec R6.0, Chapter 4.3
  2. 均衡器EQ和它在高速外部总线中的应用
  3. ReTimer和ReDriver简介
  4. PCIe Retimer是个什么样的市场?
2022.03.02 - PCIe Lane-Lane Skew 产生的原因 及 De-skew 方法?
同一 Link 多条 Lane 之间难免存在 Skew,即便 Tx 端采用同一 Clock 同时发送,不同 Lane 上到达 Rx 时间也难以相同。PCIe Lane-Lane Skew 一般源于以下几点:
  • 电气 Driver 及 Receiver 之间存在差异。
  • 印刷线路板阻抗变化。
  • 不同 Lane 的走线长度存在差异。
Gen1/Gen2 时常用检测 OS 序列中的 COM 符号来实现多 Lane 的 De-skew;Gen3及以上常采用检测 SDSOS、EIEOS、SKP等方式来实现 De-skew,具体情况需具体分析。
2022.03.03 - Link Error 包括哪几种?发生 Link Error 时是如何恢复的?
Link Error,链路错误,是指连接两个 PCIe 设备的物理链路出现错误,通常在物理层检测出并传达到数据链路层。Link Error 包括以下几种:8b/10b 解码错误、framing 出错、符号/Block 锁定后失锁、弹性缓存上下溢出及 Lane 间消抖失败。
如果是在链路 Training 期间发生链路错误(非 Detect、Disable状态),无需特殊操作,LTSSM 正常运转,各个状态的 Timeout 机制保证 LTSSM 回转到 Detect 状态进行 Retraining。
如果是在 L0 状态发生链路错误(frame error等),可以由软件控制 LTSSM 由 L0 -> Recovery 进行链路恢复,或者重新训练。需要注意的是,出现链路错误后,下游设备是无法通过错误链路告知上游设备的,需要由错误链路上游的交换开关 USP 或 RC 上报错误,开启 Retraining。软件通过查验相关寄存器确认是否训练成功。
2022.03.04 - Alternate Protocol Negotiation 是什么 ? 跟Modified TS的关系?
为了扩展 PCIe 设备的适用范围,PCIe 5.0 开始支持 Alternate Protocol。Alternate Protocol 是指运行在 PCIe PHY 上的非标准 PCIe 协议,目前有 CXL 协议。
CXL 运行在 PCIe 5.0 PHY 上,支持 CXL 协议的设备也支持 PCIe 协议。那么到底采用 CXL 还是 PCIe 协议,收发端在进行链路训练的时候可以进行协商,即 Alternate Protocol Negotiation。Alternate Protocol Negotiation 采用 Modified TS1/2,跟 Cfg.Lanenum.Wait、Cfg.Lanenum.Accept、Cfg.Comple 并行,bypass EQ。可参考 2022.02.21 Modified TS 相关介绍。
勘误:
2022.02.21 ,alternate protocol 协商与 lane number 协商并行。
2022.02.15,添加参考文献
2022.03.05 - PCIe Switch 有哪几种传输模式?
PCIe Switch 传输 TLP 有两种模式:① Store & Forward;② Cut-through。
  • Store & Forward,接收报文并进行校验,如有错误走 NAK DLLP 请求重传,否则推送到 Egress Port。这种模式保证送到 Switch 出口的报文是正确的,但也因此增加了延时。对于 Data Payload 比较大的 TLP,采用该模式时延很大。
  • Cut-through,直接了当,接收报文直接推给 Egress Port,没收完也推,延时低但不保证报文正确。当接收完报文进行校验,发现报文错了,发送 NAK DLLP 给 Requester 请求重传,然后给 Completer 发送 EDB(End Bad)让 Completer 无视该报文(如下图)。当链路质量不好时,频繁出现校验失败,采用该模式很浪费带宽。

#|【毅力挑战】PCIe 每日一问一答
文章图片

▲ 图1 Switch Cut‐Through Mode Showing Error Handling 参考:
  1. PCI Express Technology, Mindshare.inc, chapter 10
  2. STORE & FORWARD AND CUT-THROUGH

    推荐阅读