解读 PCIe Gen6 RAS

本文用于自我学习,也用于讨论,聚焦于个人认为的重点框架和重点内容,由于每个人的知识盲点不一样,可能会忽略了您认为的其他重点,若如此,也欢迎提出探讨,如果本人确实已知,会尽量解答。尽量不太涉及具体的寄存器。

3.8 PCIe RAS

主要包含了四个基本组成部分:

为了能够理解后面的内容,需要解释以下几个名词:

LCRC是链路CRC,它在数据链路层为通过链路传输的每一个TLP(事务层协议数据包)生成和校验。其目的是检测链路上的传输错误。

ECRC(端到端CRC),它由发送方在事务层生成,并在数据包最终目标的接收端的事务层进行校验。

Flit FEC是‌前向纠错(Forward Error Correction)‌技术在Flit层面的应用,核心作用是‌主动纠正传输过程中的误码‌。

DES是Debug, Error Injection, and Statistic gathering的首字母组合。

***讨论:*到这里,会有些同学好奇,在AER的机制中,已经有了LCRC,ECRC,如下图所示,LCRC发生在数据链路层,ECRC发生在传输层,那么RAS是不是冗余了这些保护操作呢?这里需要理解RAS和AER的关系,随着PCIe技术迭代(如PCIe 6.0),RAS架构在AER基础上进一步扩展:新增链路保护(如ECRC、FEC)、数据路径保护(RAM/控制信号保护)、调试统计(Error Injection/State Logging)等功能,形成更完整的系统级容错体系。而 ‌AER(Advanced Error Reporting)‌ 是PCIe设备的"高级错误报告"机制。AER是RAS架构中"错误报告"的核心子模块,RAS则是基于AER信息,整合多维度技术(链路保护、数据路径保护、调试统计等)实现系统级容错的完整架构‌。所以AER的手段在介绍RAS的时候,当然也会涉及。

3.8.1 RAS Data Protection(RAS DP)

主要包括RAM Protection和DataPath Protection,其中RAM Protection的保护手段就是ECC和Parity,所指的RAM也是控制器里的RAM,其中不包括DES部分。而DataPath Protection的保护手段也是ECC和Parity,所指的数据路径包括本地PCIe 控制器和AXI接口,可参考下面的图基本理解其原理。

从上面的图中,可以看出,每个AXI通道的出口会自动产生校验码,入口会自动check校验码。

上图中,基本也能看出RAS所保护的RAM和数据通路。

同时也有些表格说明RAS的保护属性,主要是介绍具体的保护方法,如ECC的范围,多少个bit等,什么时候用ECC,什么时候用Parity,ECC的保护有什么特性之类的,为了帮助更形象地快速理解,又不占用太多篇幅,下面简单贴了一张表供参考,详细请查看spec。

注意:表中划红线的条目是包括下面内容的条目,表格上容易混淆,以为它就是配置项但有没有ECC。

也介绍些这个阶段的错误注入功能,如下表所示,表中列出了支持的错误注入功能和错误统计的功能,也包含在后面的章节中。

下图解释了软件是操作RAS模块去获取事件计数的流程图。软件可以通过写操作去控制counter寄存器的清/使能/选择区域/选择编号。可以通过读操作配合前面的写操作,可以读到想要的counter。

Uncorrectable Error Handling

处理就是要么PCIe link down

要么就是另一种就是RAS DP Error Mode的处理流程了

如果是

TX TLP Handling

RX Errored TLPs 需要转发到应用层。

后续接收到的TLP不保证正确性,必须丢弃。

TX TLP Handling(32-bit, 64-bit)

Bad TLP 会被清楚并传输

后续的TLP被清楚并传输

正在进行的重放被清除并传输

后续的重放被静默丢弃

TX TLP Handling(128-bits, 256-bit and 512-bit)

Bad TLP被静默丢弃

后续TLP被静默丢弃

正在进行的重放被清除并传输

后续重放被静默丢弃

讨论:

这些策略的差异,本质是平衡"错误隔离"与"链路效率":

  • 32/64位配置下,系统更倾向于"主动传输错误信息"以快速触发处理;
  • 128/256/512位配置下,系统优先"丢弃错误数据"以减少链路负担,但保留Replay的"错误标记传输"以保障重传机制的完整性。

触发错误处理流程:错误TLP到达接收端后,触发RAS机制的错误处理流程(如错误日志记录、错误上报、链路隔离等);

隔离错误影响:通过"传输错误TLP"而非直接丢弃,系统能精准定位错误源(如哪个设备、哪个链路段),避免错误扩散到其他链路或设备;

障链路稳定性:若直接丢弃错误TLP,链路可能因"数据包缺失"触发更严重的错误(如超时、链路复位);而"清除并传输"能维持链路的连续性,为后续错误处理争取时间。

Correctable error handling:

3.8.2 RAS Debug, Error Injection, and Statistics

Debug

一般诊断(传统内部探针点):IP提供相应的引脚信号去诊断控制总线和每个控制模块的重要状态信号

硅片调试支持(PIPE、去偏、Ack/Nak、反转、FC、EQ、LTSSM、重放的控制和状态):

IP提供些引脚信号和寄存器表征调试状态和信息

LTSSM监控支持:LTSSM Monitor,通过IP提供的监控器能够监控到更多LTSSM的细节。

Error Injection

IP提供了一系列寄存器去设置错误注入,这些错误注入覆盖上述内容。

Statistics

第一个功能是我们可以获取有关控制器在各低功耗LTSSM状态下的RX/TX数据吞吐量和花费时间的信息。下图描述了基于时间的分析寄存器访问框架,从图中可以看出,软件通过配置寄存器选择了监控开启和停止,选择信号,选择报告等等,然后再通过软件读的操作,把结果读出来。

Event counters:

事件计数寄存器访问,软件通过写操作去执行事件计数模块的 清除/使能/事件选择/lane选择等操作,通过读操作区执行结果读回。

事件主要包括Decode Error, sync header error, ebuf overflow等等

相关推荐
9527华安17 小时前
FPGA纯verilog实现 2.5G UDP协议栈,基于1G/2.5G Ethernet PCS/PMA or SGMII,提供14套工程源码和技术支持
5g·fpga开发·udp·ethernet·verilog·sgmii·2.5g udp
逻极19 小时前
AI 规范驱动开发“三剑客”深度对比:Spec-Kit、Kiro 与 OpenSpec 实战指南
人工智能·驱动开发·ai·agent
逻极19 小时前
Claude Code 实战:Spec-Kit、Kiro、OpenSpec 规范驱动开发三剑客
ide·人工智能·驱动开发·ai·自动化
奋斗的牛马1 天前
硬件基础知识-电容(一)
单片机·嵌入式硬件·学习·fpga开发·信息与通信
li星野1 天前
打工人日报#20251110
fpga开发
0基础学习者2 天前
跨时钟域处理
fpga开发·verilog·数字ic
FPGA_小田老师2 天前
Xilinx FIFO Generate IP核(8):FIFO设计常见问题与解决方案
fpga开发·fifo generate·fifo常见问题·fifo异常定位·fifo丢数·fifo读数重复
范纹杉想快点毕业2 天前
100道关于STM32的问题解答共十万字回答,适用入门嵌入式软件初级工程师,筑牢基础,技术积累,校招面试。
驱动开发·单片机·嵌入式硬件·fpga开发·硬件工程
知识充实人生2 天前
时序收敛方法二:Fanout优化
fpga开发·fanout·高扇出·时序收敛