107,287
社区成员




本文意在督促自己持续学习 PCIe。日更长文做不到,但三言两语总该能写出来。一天至少更新一个 PCIe 相关知识点,聚沙成塔、集腋成裘,相信几年下来总能覆盖绝大部分的 PCIe 知识面。本文注定越往后越难更,看我能坚持多久吧。
回帖停更,只更原文 👉 【毅力挑战】PCIe 每日一问一答
2022.03.09 - PCIe LCRC 和 ECRC 有何区别?
PCIe 采用 CRC 校验来检测 TLP 是否存在错误,根据检测层次不同可分为 LCRC 及 ECRC。
两者存在以下区别:
LCRC | ECRC | |
---|---|---|
错误层次 | 数据链路层 | 事务层 |
错误原因 | 物理层信号质量不好 | Switch 转发时出错 |
是否可修正 | 可修正 | 不可修正 |
错误处理方法 | - 反馈 NAK 请求重传 - 无需软件参与 | - 上报错误给系统 - 需要软件参与 |
Switch 处理方法 | 重新计算 LCRC | ECRC 不做修改 |
是否可选 | 必选 | 可选 |
参考:
2022.03.08 - Native EP 和 Legacy EP 是啥?
EP 分两种:Legacy EP 及 Native EP。Leagcy EP 是指原本给 PCI-X 总线接口设计的 EP 被改为 PCIe 总线接口 EP。Native EP 是指标准的 PCIe EP。Legacy EP 支持部分 Native EP 禁止的操作,Native EP 全部通过内存映射来操作。两者比较如 表1 所示。
Legacy EP | Native EP | |
---|---|---|
是否支持 IO 事务? | 支持 | 不支持 |
是否支持锁定事务? | ● 支持(完成者) ● 不支持(请求者) | 不支持 |
是否支持 64 位寻址? | 可以不支持 64 位寻址 | 对于可预取的存储空间必须支持 64 位寻址, 不可预取的存储空间允许映射到低 4GB |
支持的中断类型 | ● 支持 INTx ● 必须支持 MSI | 只支持 MSI |
勘误 - 2022.03.08 表格错行,删除后更新
2022.03.07 - TLP Digest 是什么?
Digest,又名 ECRC。
TLP 包格式:Prefix + Header + Data Payload + Digest。TLP Digest 便是这 TLP 包的组成部分,位于 TLP 末尾,长度 1DW,存放了该 TLP 的 ECRC 值。
TLP 四大组成中,除了 Header,其他都是可选项,包括 Digest。TLP Header 中有一个字段 TD (TLP Digest),用以标记该 TLP 是否使用 Digest,或者说该 TLP 是否使用 ECRC。如果 Header 显示该 TLP 不含 Digest,但最后收到了 Digest,这个 TLP 就是个畸形包,要上报错误。
2022.03.06 - Poisoned TLP 是什么?是干啥的?
Data Poisoning 或称 Error Forward,是一种事务层报告错误的方法,报告错误时发送的 TLP 为 Poisoned TLP。Poisoned TLP,有毒的 TLP,仅用于含有 Data 的 Request 或 Completion,比如 写请求、MsgD、读完成、Atomic 请求及完成。
Poisoned TLP 通过 TLP Header 中的 EP 位来指示,EP=1 时,即表示当前 TLP 数据被破坏了。注意,是 TLP Data 被破坏了,不是Header,Header 出错可不归他管,Header 出错那就是另外的故事了。Posioned TLP 用于控制 Error 在整个系统内的传播,协助软件诊断该 TLP 路由路径上的 Switch 是否给该 TLP 贴上了有毒标签。
在生成这个 TLP 的时候就知道这是个 Data 错误的 TLP。既然知道 Data 出错,为什么还要继续发?—— 以读请求为例,Requester 发出读请求后,在等待 Completion,现在数据读回传了,但是 Switch 在半路就检测到 Data 出错了,你这 Completion 还要不要继续发?不发的话,Requester 还在等,直到 Timeout。倒不如给个错误信号,至少不会让 Requester 久等。Requester 收到 Poisoned TLP,知道发生了事务层错误,至于这数据要不要用,都不违法。
友情链接
2022.03.05 - PCIe Switch 有哪几种传输模式?
PCIe Switch 传输 TLP 有两种模式:① Store & Forward;② Cut-through。
参考:
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.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。软件通过查验相关寄存器确认是否训练成功。
勘误:
Fix typo, 2022.02.10 TImeout, Timeoit -> Timeout
2022.03.02 - PCIe Lane-Lane Skew 产生的原因 及 De-skew 方法?
同一 Link 多条 Lane 之间难免存在 Skew,即便 Tx 端采用同一 Clock 同时发送,不同 Lane 上到达 Rx 时间也难以相同。PCIe Lane-Lane Skew 一般源于以下几点:
Gen1/Gen2 时常用检测 OS 序列中的 COM 符号来实现多 Lane 的 De-skew;Gen3及以上常采用检测 SDSOS、EIEOS、SKP等方式来实现 De-skew,具体情况需具体分析。
2022.03.01 - PCIe Retimer 是什么?
随着 PCIe 的迭代,传输速率越来越高,高速信号传输中的信号衰减问题越来越大。目前解决信号衰减的三大方案:① 高速 PCB 板材;② Retimer;③ Rediver。Retimer 是三者中性价比最高的一种方案,也更为主流。2021年是 Retimer 发展元年。
Retimer 通过 其 Rx 端 CTLE/DFE (连续时间线性均衡/判断反馈均衡) 、CDR (时钟数据恢复) 及 Tx 端 EQ (均衡),来够补偿信道损耗,消除信号抖动,提升信号完整性,从而增加传输距离。
Redriver 是放大信号,Retimer 是重新生成信号。Retimer 比 Redriver 性能更高,但时延也更大。
友情链接:
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)
。
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.26 - PCIe Link Traning,都 Traning了什么?
位锁定、符号锁定、Block 对齐、链路宽度、链路速率、极性、链路反排、Lane 间消抖
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 个条件(满足其一即可):
所有 Lane 退出电气闲 且发送完 1024 个 TS1 后,Polling.Compliance 退回到 Polling.Active。
2022.02.24 - PCIe Tx Scramble 放在 Encode 之前之后?为什么?
乱序应该放在编码之前。
发送序列中存在连续重复序列时,发送能量会集中在特定频点附近较窄的范围,产生较大的电磁辐射。scramble 乱序,是为了消除连续出现的重复序列,把能量集中的离散能量谱打散成白噪声,从而大大减小 EMI。
8b/10b,128b/130b,1b/1b 等编码,在串行数据流中加入时钟信息,使得接收端 PLL 能够从数据流中恢复出时钟。编码有以下益处:① 面减少时钟布线的问题;② 减小时钟线引入的电磁干扰;③实现直流平衡;④增强无码检测性能。
若先编码再乱序,数据流中的时钟信息会被破坏,直流均衡也难以保证。
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.22 - PCIe 有哪几种路由方式?
PCIe 路由一般指 TLP 路由,DLLP 只在相邻设备 DL 间传递,不携带路由信息也无需路由。PCIe TLP 路由方式有 基于地址、ID 的路由及隐式路由 3 种,各组件根据 TLP Header 中的相关字段决定以何种方式路由该 TLP。
参考:
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 是为了在协商完毕链路宽度后,跳过 Lanenumber 协商及均衡。