PCIe | 辅助信号与复位机制
注:本文为 “PCIe 复位机制” 相关合辑。
图片清晰度受引文原图所限。
略作重排,未整理去重。
如有内容异常,请看原文。
PCIe 板卡辅助信号解析
业余程序员 plus 原创于 2024-08-15 20:57:31 发布
1. 简介
PCIe 扩展卡可依托 PCIe 插槽配置的辅助信号,实现系统唤醒、复位、调试、热插拔等各类系统功能。常用辅助信号包含REFCLK-/REFCLK+、PERST#、WAKE#、SMBCLK、SMBDAT、JTAG、CLKREQ#、PRSNT1#、PRSNT2#,各信号功能说明如下:
REFCLK-/REFCLK+:属于低压差分信号,主板输出的REFCLK信号需符合 PCIe 相关规范要求。PERST#:用于完成 PCIe 设备复位,同时标识系统主电源达到稳定状态的时长。WAKE#:由 PCIe 设备驱动,向主机发送唤醒相关信号。主机检测到该信号后,向设备供给主电源与参考时钟,完成 PCIe 链路激活。该信号可结合 OBFF 机制使用,主机可通过WAKE#调整设备缓冲区工作模式,例如缓冲区刷新、数据填充。设备可在无数据收发需求时进入低功耗模式,收到指令后快速唤醒并处理数据。CLKREQ#:由 PCIe 设备驱动,用于向主机申请参考时钟,保障 PCIe 接口完成数据收发。当设备进入 L1 PM Substates 状态时,CLKREQ#置高,参考时钟停止输出,PCIe 链路进入静默状态;主机或设备将CLKREQ#置低后,设备退出 L1 PM Substates 状态。SMBCLK:为 SMBus 总线提供时钟信号。SMBDAT:为 SMBus 总线提供数据信号。JTAG(TRST#、TCLK、TDI、TDO、TMS):引脚遵循 IEEE Standard 1149.1 定义的测试端口与边界扫描架构,PCIe 设备可选择性配置该接口。PRSNT1#、PRSNT2#:用于实现 PCIe 板卡的热插拔检测。
下文针对REFCLK-/REFCLK+、PERST#、WAKE#三类信号展开分析。
2. REFCLK-/REFCLK+
参考时钟采用低压摆幅差分架构,可降低信号抖动,同时适配新一代硬件制造工艺。该信号单端标称摆幅为0 V ∼ 0.7 V 0\ \text{V} \sim 0.7\ \text{V}0V∼0.7V,工作频率为100 MHz ± 300 PPM 100\ \text{MHz} \pm 300\ \text{PPM}100MHz±300PPM。
主板上各连接器对应的参考时钟采用点对点布线设计,单段布线长度不超过15 1515英寸(38.1 38.138.1厘米)。信号接收端处,数据与时钟的传输时延偏差需小于12 ns 12\ \text{ns}12ns。受时钟信号最大失配、传输通道最大长度共同影响,系统整体时延偏差区间约为9 ns ∼ 10 ns 9\ \text{ns} \sim 10\ \text{ns}9ns∼10ns。时钟源至连接器的路径中,REFCLK-与REFCLK+两条差分信号线的长度偏差需小于0.005 0.0050.005英寸(0.0127 0.01270.0127厘米)。布线阶段需将该组信号线与其他非时钟线路保持合理间距,抑制信号串扰。
3. PERST#
PERST#用于判定电源电压是否处于规范允许范围且状态稳定,在电源稳定后,该信号同步完成 PCIe 设备状态机及其他逻辑电路的初始化操作。
3.1 ACPI 电源状态
PERST#的电平变化通常与系统电源状态联动,本节先介绍 ACPI 电源状态体系。ACPI 规范定义多类电源状态,用于实现操作系统与硬件之间的电源管理协同。状态划分为全局状态、系统状态、设备状态、处理器状态四大类,各类常见状态说明如下表所示:
| 类别 | 状态 | 描述 |
|---|---|---|
| 全局状态 | G0 (S0) | 设备正常运行,满功率工作 |
| 全局状态 | G1 | 睡眠状态,包含 S1、S2、S3、S4 子状态 |
| 全局状态 | G2 / S5 | 系统停机,硬件保留部分供电 |
| 全局状态 | G3 | 物理断电,整机无供电 |
| 系统状态 | S0 | 系统完全启动并运行 |
| 系统状态 | S1 | 处理器暂停运算,唤醒速度较快 |
| 系统状态 | S2 | 处理器关闭,硬件功耗进一步降低,唤醒较快 |
| 系统状态 | S3 | 标准睡眠模式,运行数据暂存至内存 |
| 系统状态 | S4 | 休眠模式,运行数据暂存至存储介质 |
| 系统状态 | S5 | 系统关闭,部分硬件模块维持供电 |
| 设备状态 | D0 | 设备完全上电工作 |
| 设备状态 | D1, D2 | 分级休眠状态,可保留部分运行上下文 |
| 设备状态 | D3 | 设备主回路断电,保留待机供电 |
| 处理器状态 | C0 | 处理器满负荷运行 |
| 处理器状态 | C1 | 轻度休眠,停止指令执行,恢复速度快 |
| 处理器状态 | C2 | 中度休眠,关闭部分硬件模块,恢复速度放缓 |
| 处理器状态 | C3 | 深度休眠,可关闭处理器缓存,恢复耗时更长 |
3.2 Initial Power Up (G3 to S0)
下图为 PCIe 板卡从上电至稳定运行阶段,辅助信号、电源、PCIe 链路的时序关系。部分时序参数在 CEM 规范中有明确定义,对应数值将逐一标注。
工作流程如下:
- 若系统与 PCIe 板卡支持3.3 Vaux 3.3\ \text{Vaux}3.3Vaux辅助电源,优先完成该路电源上电,此阶段
PERST#可保持低电平或高电平。 - 3.3 Vaux 3.3\ \text{Vaux}3.3Vaux辅助电源稳定后,主机将
PERST#置低,令 PCIe 设备进入复位状态。 - 3.3 Vaux 3.3\ \text{Vaux}3.3Vaux辅助电源稳定后,经过延时 1,SMBus 总线开始工作。设备无3.3 Vaux 3.3\ \text{Vaux}3.3Vaux供电时,计时起点改为3.3 V 3.3\ \text{V}3.3V/12 V 12\ \text{V}12V主电源稳定时刻。
- 3.3 V 3.3\ \text{V}3.3V/12 V 12\ \text{V}12V主电源稳定后,经过延时参数TPVPERL \text{TPVPERL}TPVPERL(取值100 ms 100\ \text{ms}100ms),将
PERST#置高。主电源稳定的同时,参考时钟开始输出,参考时钟稳定所需时长为TPERST-CLK \text{TPERST-CLK}TPERST-CLK(取值100 μ s 100\ \mu\text{s}100μs)。据此计算,PERST#低电平持续时长最小值为TPVPERL + TPERST-CLK = 0.1001 s \text{TPVPERL} + \text{TPERST-CLK} = 0.1001\ \text{s}TPVPERL+TPERST-CLK=0.1001s。 - 参考时钟稳定后,需经过时长 4,PCIe 链路方可正常工作。
- 参考时钟稳定后,需经过时长 5,
JTAG接口方可正常工作。
设备上电初始阶段,配置空间寄存器内的 Link Control register 中 ASPM Control 位域硬件默认值需设为0 00。该位域仅允许系统 BIOS 或操作系统修改,其余软件无修改权限。
3.3 Power Management States (S0 to S3/S4 to S0)
系统切换至 S3 或 S4 状态前,需先将 PCIe 设备切换至 D3hot 状态,同时将 PCIe 链路设置为 L2 状态。完成上述配置后,插槽主电源与参考时钟停止输出,设备因主电源断开由 D3hot 切换为 D3cold 状态。设备处于 D3cold 状态时,3.3 Vaux 3.3\ \text{Vaux}3.3Vaux辅助电源持续供电。触发唤醒事件后,系统恢复主电源与参考时钟输出,待电源与时钟状态稳定,再将PERST#置高。
完整流程如下:
- 系统准备进入 S3/S4 状态前,将 PCIe 链路设置为 L2 静默状态。
- 链路进入静默状态并经过时长 1 后,将
PERST#置低,设备进入复位状态。 PERST#置低并经过时长 2 后,系统切断插槽主电源与参考时钟,二者进入不稳定状态。PERST#置低并经过时长 3 后,JTAG接口停止工作,进入静默状态。- 触发唤醒事件后,系统依次恢复主电源、参考时钟输出,经过时长 4,PCIe 设备恢复正常工作。
- 系统完成 S0 → S3/S4 → S0 状态切换的全过程中,
PERST#低电平持续时长最小值为TPERST \text{TPERST}TPERST,该参数取值为100 μ s 100\ \mu\text{s}100μs。
PCIe 设备从 D3cold 状态恢复运行时,配置空间寄存器内的 Link Control register 中 ASPM Control 位域硬件默认值需设为0 00。该位域仅允许系统 BIOS 或操作系统修改,其余软件无修改权限。
3.4 Power Down
结合电压容差要求,CEM 规范划定电源有效判定阈值区间:3.3 V 3.3\ \text{V}3.3V电源、3.3 Vaux 3.3\ \text{Vaux}3.3Vaux辅助电源阈值区间为2.5 V ∼ 3.00 V 2.5\ \text{V} \sim 3.00\ \text{V}2.5V∼3.00V,12 V 12\ \text{V}12V电源阈值区间为9.7 V ∼ 11.04 V 9.7\ \text{V} \sim 11.04\ \text{V}9.7V∼11.04V。若电源输出电压低于对应阈值,判定电源工作异常,系统执行下电流程。
PCIe 设备下电阶段各信号时序如下:
具体流程:
- 插槽主电源断开前,先将 PCIe 链路设置为静默状态,设备切换至 D3hot 状态。
- 链路进入静默状态并经过时长 1 后,将
PERST#置低,设备进入复位状态。 PERST#置低并经过时长 2 后,插槽主电源开始断电。PERST#置低并经过时长 3 后,参考时钟停止输出,JTAG接口同步停止工作,时长 3 数值大于时长 2。- 参数TFAIL \text{TFAIL}TFAIL定义异常断电场景下
PERST#的低电平保持时长,该参数最大值为500 ns 500\ \text{ns}500ns。
4. WAKE#
TODO…
5. 电压参数
6. 时间参数
参考资料
- PCI Express® Card Electromechanical Specification Revision 4.0
PCIe 复位机制
概述
PCIe(Peripheral Component Interconnect Express)是高性能点对点串行通信协议,协议定义多类复位机制,用于处理设备异常、链路故障、功能恢复等问题。整体分为传统复位与**函数级复位(FLR)**两大体系;传统复位包含冷复位、暖复位、热复位,其中冷、暖复位合称基础复位,热复位为带内复位。
一、复位体系分类
- 传统复位
早期规范定义,包含冷复位、暖复位、热复位。冷复位、暖复位属于基础复位;热复位属于非基础复位与带内复位。基础复位会将设备状态机、硬件逻辑、端口及配置寄存器恢复为默认值,依靠辅电源V a u x V_{aux}Vaux供电的粘性寄存器不受影响。 - 函数级复位(FLR)
PCIe 2.0 新增,为可选功能。可读取 Device Capabilities Register 的 FLR Capability 位(bit 28)判断设备是否支持。
各类复位耗时排序:冷复位> >>暖复位> >>热复位> >>FLR。
二、传统复位
2.1 冷复位(Cold Reset)
2.1.1 触发方式
整机断电重上电、设备主电源上电,也可通过边带信号PERST ‾ \overline{\text{PERST}}PERST配合上电流程触发。
2.1.2 特性与范围
复位等级最高,清空所有由主电源V C C V_{CC}VCC供电的寄存器、硬件逻辑与状态机;粘性寄存器仅在V a u x V_{aux}Vaux完全切断后才会重置,设备完成完整硬件初始化。
2.1.3 应用场景
整机上电、硬重启、硬件重新插拔、顽固故障恢复、固件烧录后初始化。
2.2 暖复位(Warm Reset)
2.2.1 触发方式
设备主电源保持供电,由硬件电路、POWERGOOD \text{POWERGOOD}POWERGOOD信号联动 ICH 生成PERST ‾ \overline{\text{PERST}}PERST信号触发。
2.2.2 特性与范围
属于基础复位,复位效果与冷复位基本一致,设备不断电,粘性寄存器数据保留。
2.2.3 应用场景
系统软重启、平台受控整机复位、固件升级后快速重置。
2.3 基础复位信号:PERST ‾ \overline{\text{PERST}}PERST
PERST ‾ \overline{\text{PERST}}PERST是实现基础复位的硬件边带信号,由 ICH 依据电源状态生成,可管控 PCIe 交换开关、桥设备、终端卡等器件。
上电时序:上电后PERST ‾ \overline{\text{PERST}}PERST拉低执行复位,维持一段时间后拉高释放,不同平台时序略有差异。
硬件通路说明:
终端设备通过金手指接收PERST ‾ \overline{\text{PERST}}PERST信号,板内分出两路独立复位信号:phy_por_rstn负责复位 PHY 模块,ctrl_rstn负责复位控制器模块。PHY 固件加载期间会临时屏蔽PERST ‾ \overline{\text{PERST}}PERST;设备未断电时,后续触发该复位不会重新加载固件。
终端设备可按需选择三种联动策略:仅复位 PCIe 模块、复位 PCIe 及关联模块、整卡全模块复位。
2.4 热复位(Hot Reset)
热复位为带内复位,不依赖边带信号,仅根复合体、交换开关可主动发起,终端设备无法触发。
2.4.1 触发条件
- 软件配置触发:向桥控制寄存器(Bridge Control Register)bit6(Secondary Bus Reset 位)写入1 11,端口生成带热复位标识的 TS1 有序集,在所有通道向下游传输。设备连续收到 2 组对应 TS1 有序集后执行复位。
- 链路状态触发:交换开关上行端口上报KaTeX parse error: Expected 'EOF', got '_' at position 9: \text{DL_̲Down}状态时,下行端口自动触发热复位。
2.4.2 LTSSM 状态流转
收到热复位指令后,链路训练状态机依次进入 Recovery、Hot Reset 状态,最终跳转至 Detect 状态并重新训练链路。持续接收合法 TS1 信号则保持 Hot Reset 状态,2 m s 2\ \mathrm{ms}2ms超时后自动切换至 Detect 状态。
2.4.3 指令传递规则
- 根端口、交换开关下行端口置位 Secondary Bus Reset,复位指令持续向下游传输,寄存器清零后停止。
- 交换开关上行端口收到热复位,会向所有下行端口广播指令并完成自身复位;终端设备仅复位自身。
- PCIe-to-PCI 桥会将热复位转换为PRST ‾ \overline{\text{PRST}}PRST信号,复位后端 PCI 总线。
2.4.4 链路参数调整流程
- 确认 LTSSM 处于 L0 状态;
- 配置链路控制寄存器、链路控制寄存器 2;
- 置位 Secondary Bus Reset 触发热复位;
- 等待2 m s 2\ \mathrm{ms}2ms后清除对应位,链路重新初始化。
2.4.5 特性与应用场景
复位范围覆盖整条下游链路及所有设备,设备不断电,粘性寄存器保持不变。适用于链路初始化失败、链路层错误恢复、链路速率/位宽调整、软件调试复位。
三、函数级复位(FLR, Function Level Reset)
3.1 触发方式
软件向设备控制寄存器 bit15(Initiate Function Level Reset 位)写入1 11启动复位。规范要求模块需在100 m s 100\ \mathrm{ms}100ms内完成动作。执行前需校验设备 FLR 能力,并等待所有待处理事务结束。
3.2 特性与范围
仅复位设备内单个功能模块的专属状态机与配置寄存器。以下内容不受影响:粘性位、硬件初始化位、链路/电源管理/流量控制类公共寄存器。FLR 不改变 LTSSM 状态,物理链路无需重训练。
3.3 应用场景
多功能设备、SR-IOV 虚拟化设备、高可用系统;用于单模块故障隔离、虚拟化设备复位、热插拔功能初始化。
四、复位优先级与拓展类型
4.1 复位优先级(力度由强到弱)
高等级复位可覆盖低等级复位,排序如下:
- 冷复位
- PERST ‾ \overline{\text{PERST}}PERST触发全局热复位
- 链路复位(仅重训练链路,不修改设备配置)
- FLR
4.2 拓展复位类型
- 带内热复位:链路传输 TS1 触发,作用于下游设备,触发链路重训练。
- 下游总线复位:PCIe-to-PCI 桥专用,仅复位后端 PCI 总线。
- 错误恢复复位:硬件根据错误等级自动触发,可纠正错误触发链路复位,致命错误触发热复位。
五、各类复位对比
5.1 热复位与 FLR 对比
| 对比项 | 热复位 | FLR |
|---|---|---|
| 作用粒度 | 链路级、设备级 | 单功能模块级 |
| 链路影响 | 触发 LTSSM 切换,链路重训练 | 链路状态保持不变 |
| 寄存器影响 | 大部分寄存器重置,粘性寄存器除外 | 仅重置模块专属寄存器 |
| 发起主体 | 根复合体、交换开关 | 软件直接操作功能寄存器 |
| 运行开销 | 耗时较长 | 耗时短,业务影响小 |
5.2 全类型复位
| 复位类型 | 所属分类 | 触发方式 | 作用范围 | 典型耗时 |
|---|---|---|---|---|
| 冷复位 | 传统复位/基础复位 | 断电重上电、PERST ‾ \overline{\text{PERST}}PERST | 整台设备(V C C V_{CC}VCC全部逻辑) | 最长 |
| 暖复位 | 传统复位/基础复位 | 硬件电路、PERST ‾ \overline{\text{PERST}}PERST | 整台设备(绝大部分逻辑) | 较长 |
| 热复位 | 传统复位/带内复位 | 软件写寄存器、TS1 有序集 | 整条下游链路及所有设备 | 较短 |
| FLR | 函数级复位 | 软件写功能寄存器 | 设备内单个功能模块 | ≤ 100 m s \leq 100\ \mathrm{ms}≤100ms(最短) |
5.3 简易特性
| 复位类型 | 作用范围 | 触发方式 | 特点 |
|---|---|---|---|
| 冷复位 | 整设备 | 断电重上电 | 彻底初始化硬件 |
| 暖复位 | 整设备 | PERST ‾ \overline{\text{PERST}}PERST | 不断电整机复位 |
| 热复位 | 下游整条链路 | 软件指令、TS1 | 链路全局重置,支持参数调整 |
| FLR | 单个功能模块 | 软件命令 | 隔离复位,不影响链路 |
| 链路复位 | PCIe 链路 | 链路请求 | 仅重训练链路,不改动配置 |
六、工程使用规范
6.1 选择原则
遵循从弱到强顺序:优先使用 FLR、链路复位;故障无法恢复再依次使用热复位、暖复位;最后使用冷复位,减少系统停机。
6.2 场景汇总
| 复位类型 | 典型应用场景 |
|---|---|
| 冷复位 | 整机上电/硬重启、固件卡死、寄存器锁死、固件烧录后初始化 |
| 暖复位 | 系统软重启、固件升级后快速复位 |
| 热复位 | 链路故障恢复、链路速率/位宽调整、驱动调试 |
| FLR | 虚拟化设备复位、单模块故障隔离、热插拔初始化 |
| 链路复位 | 链路协商失败、CRC 错误等链路层故障处理 |
参考资料
- PCI Express Base Specification Revision 5.0
- MindShare PCI Express Technology 3.0
- 《PCI、PCI-X 和 PCI Express 的原理及体系结构》
- 《PCI Express 体系结构导读》
reference
- PCIe板卡辅助信号解析_pcie clkreq-CSDN博客
https://blog.csdn.net/u011037593/article/details/141231501 - PCIe 的 4 种复位机制 | FPGA 开发圈
https://fpga.eetrend.com/blog/2024/100586493.html - PCIe 复位:必须了解的PERST#_pcie perst-CSDN博客
https://blog.csdn.net/icxiaoge/article/details/141781231 - 深入理解 PCIe 复位:Cold Reset, Warm Reset, Hot Reset 与 FLR 的对比与实践 - 知乎
https://zhuanlan.zhihu.com/p/1950491402824814975 - Understanding the 4 Types of PCIe Bus Resets · KAD
https://www.kad8.com/hardware/understanding-the-4-types-of-pcie-bus-resets/ - PCIe 总线 4 种复位介绍-电子工程专辑
https://www.eet-china.com/mp/a335800.html - (o゚v゚)ノ Hi - PCIe 复位:Clod reset、warm reset、Hot reset、Function level reset
https://www.cnblogs.com/cute/p/10309763.html
