1、介绍PCIE SPEC中介绍的复位机制
2、databook中复位要求
3、实际controller的复位测试点
图1.PCIE复位的种类
PCIE 的4种复位机制
PCIe 总线规定了两大类复位方式,一种是传统的复位方式 ( Conventional Reset), 另一种是 FLR (Function⁃Level Reset,功能级复位) 方式。
其中 PCIe 总线的传统复位方式由两大类组成, 一个是 Fundamental Reset(基本复位), 而另一个是 Non⁃Fundamental Reset。 Fundamental Reset 方式包括 Cold 和 Warm Reset 方式, 可以将 PCIe 设备中的绝大多数内部寄存器和内部状态都恢复成初始值; Non⁃Fundamental Reset 方式指 Hot Reset 方式。
1、传统的复位方式
传统复位方式分为 Cold、 Warm 和 Hot Reset。其中 Cold Reset、Warm Reset 基于边带信号 PERST#,又称为Fundamental Resets。Hot Reset 不使用边带信号 PERST#,又称为 Non-Fundamental Reset。
PCIe 总线提供多种复位方式的主要原因是减小 PCIe 设备的复位延时。 其中传统复位方式的延时大于 FLR 方式。 使用传统复位方式时, Cold Reset 使用的时间最长, 而 Hot Reset 使用的时间最短。
Cold Reset
当一个 PCIe 设备的 Vcc电源上电后, 处理器系统将置该设备的 PERST#信号为有效, 此时将引发 PCIe 设备的复位操作, PCIe 总线将这种复位方式称为 Cold Reset 方式。
PCIe 设备进行 Cold Reset 时, 所有使用 Vcc进行供电的寄存器和 PCIe 端口逻辑将无条件进入初始状态。 但是使用这种方式依然无法复位使用 Vaux供电的寄存器和逻辑, 这些寄存器和逻辑只能在处理器完全下电时才能被彻底复位。
Warm Reset
当 PCIe 设备完成上电过程后, 也可能重新进行 Fundamental Reset(不断开主电源 Vcc 的情况下由系统触发导致的复位), 这种复位方式也被称为 Warm Reset。 PCIe 总线并没有规定 Warm Reset 的具体实现方式。
一个 PCIe 设备可以使用 Watchdog 逻辑, 对该 PCIe 设备进行复位, 这种方式就是 Warm Reset 的一种。 Warm Reset 也是一种 Fundamental Reset。
Hot Reset
当 PCIe 设备出现某种异常时, 可以使用软件手段对该设备进行复位。 如系统软件将 Bridge Control Register 的 Secondary Bus Reset 位置 1 时, 该桥片将 Secondary 总线上的 PCI / PCIe 设备进行 Hot Reset。 对于 PCI 总线, 当 Secondary Bus Reset 位置 1 时, Secondary 总线将使用 RST#信号对其下游的 PCI 设备进行复位。 而 PCIe 总线将通过 TS1 和 TS2 序列对下游设备进行 Hot Reset。
在 TS1 和 TS2 序列中包含一个 Hot Reset 位。 当下游设备收到一个 TS1 和 TS2 序列, 而 且其 Hot Reset 位为 1 时, 下游设备将使用 Hot Reset 方式进行复位操作。
除此之外当数据链路层向事务层报告 DL_Down 时, 该设备也将进行 Hot Reset。通过在下游设备的链路控制寄存器中设置 Link Disable bit,把设备禁用。如果将某个链路禁止,则该链路所有的下游 PCIe 设备都将收到链路禁止信号。当设备的 Link Disable bit 被置上后,会进入Recovery LTSSM 状态,即开始向 Root Complex 发送带Disable位设置的 TS1 消息。
Hot Reset 方式并不属于 Fundamental Reset。 PCIe 设备进行 Hot Reset 方式时, 也可以将 PCIe 设备的多数寄存器和状态恢复为初始值。
2、FLR (Function⁃Level Reset) 功能级复位
系统软件填写某些寄存器时, PCIe 设备将使用 FLR 方式进行复位。 支持 FLR 方式的 PCIe 设备需要在其 BAR 空间中提供一个寄存器, 当系统软件对该寄存器的 Function Level Reset 位写 1 时, PCIe 设备将使用 FLR 方式复位 PCIe 设备的内部逻辑。 FLR 方式对于 PCIe 设备是可选的, PCIe 总线规范并没有定 义 FLR 方式的具体实现过程, 但是定义了 FLR 方式的适用范围。
当系统软件初始化与某个 PCIe 设备相关的软件协议栈时, 也可能需要使用 FLR 方 式复位 PCIe 设备内部的逻辑。
当 PCIe 设备使用 FLR 方式进行复位时, 有些与 PCIe 链路相关的状态和寄存器并不会被复位, 如下所示。
● Sticky Registers。 与传统复位方式相同, FLR 方式也不能复位这些寄存器, 但是系统软件可以对部分 Sticky Registers 进行修改。 当 Vaux被移除后, 在这些寄存器中保存的数据才会丢失。
● HwInit 类型的寄存器。 在 PCIe 设备中, 有些配置寄存器的属性为 HwInit, 这些寄存器的值由芯片的配置引脚决定, 或者在上电复位后从 E2PROM 中获取。 Cold 和 Warm Reset 可以复位这些寄存器, 然后从 E2PROM 中重新获取数据; 但是使用 FLR 方式, 不能复位这些寄存器。
● 此外还有一些特殊的配置寄存器不能被 FLR 方式复位, 如 Max_Payload_Size、 RCB 和 一些与电源管理、 流量控制和链路控制直接相关的寄存器。
● FLR 方式不会影响 LTSSM 状态机。
PCIE IP 复位管理
以上是PCIE中SPEC规定的4种复位机制,然而在实际的DUT(synopsys 提供的IP)中PCIE的各个子模块都依赖于时钟和复位进行初始化工作,为此databook中介绍了时钟复位发生器(CRG),一个为PCIE各个子模块和PHY产生时钟和复位的generation。
从上图中我们看到PCIE初始化的起点就是来自Power_on Reset上电复位,PCIE提供的复位源还有Button Reset 、PERST#和test_rst_n。经过Reset Generation Module,将一系列复位信号传到Controller和PHY中,并且CRG还将接受Controller发出的电源管理复位信号、应用层ltssm使能(app_ilssm_enable)、由链路层Link_Down发出的link_req_rstn_not信号。
下图将展示由DataBook提供的CRG产生的各个子模块的复位信号,让大家对PCIE设备整个复位信号的来源有一个大致的了解。
除此DataBook还列举出这些复位信号是由哪种复位机制产生,让我们能够更好的识别4种复位机制产生的复位信号。
PCIE的复位有关的测试功能点
在了解SPEC规定的4种复位机制以及IP是如何管理复位信号的,我们将进行实际的复位检测。PCIE设备分为RC、EP、SWITCH且链路也具备多种情况,在实际的验证环境中PCIE设备还存在支持SATA接口、JTAG等其他情况,因此,我们已RC为例,简要罗列一个PCIE子系统环境的复位检测情况。由于对PCIE的使用情况和性能需求不同以及PCIE设备里自定义寄存器不同,此次的功能点并不能涵盖PCIE复位的所有情况。仅作为学习PCIE复位的一个参考。
PCIE controller中的复位信号有power_up_rst_n、perst_n、button_rst_n、rp_pwr_rst_n。power_up_rst_n由上电复位产生,且会将全局复位peset_n信号置为有效,将会使得core IP的所有寄存器进行复位操作包括sticky registers(由辅助电源管理的寄存器,此时应该的辅助电源应该没有提供,若提供的话此处上电复位不会重置sticky registers)。button_rst_n是用于测试和debug模式通过Pin角重置芯片复位,其效果和上电复位一样。
在介绍rp_pwr_rst_n、rp_perst_n、rp_button_rst_n这些复位信号线,我们首先要了解一个知识点。自研的功能控制或状态寄存器(CSR)。为了更好的进行链路管理、链路状态监控以及配置 PCIe 控制器的特定行为(如链路参数、中断控制等),开发者通过 APB(Advanced Peripheral Bus)总线挂载的自研寄存器对链路状态和配置进行控制。优点在于APB 作为低速外设总线,适合管理非实时敏感的寄存器,与高速的 AXI 或 PCIe 事务层隔离,避免阻塞核心数据传输。此处设计确实很巧妙,既不占用AXI的资源隔离了事务层还能动态调整PCIE的配置与监控。
但这种方式需要PCIE的使用者去了解自定义寄存器的功能以及使用方法,且在controller的top层,设计人员需要将这些rp_xxx等信号线进行连接,送入到device层,再经过clk_rst.v文件处理时钟和复位信号,以供相关模块使用。
当然一个PCIE的子系统环境比以上介绍的均要复杂,因为除了PCIE相关模块还可能存在支持SATA接口、JTAG、APB总线等。这些模块的时钟和复位信号均由CRG产生,当然不同的复位源对应不同的模块或是总线,他们均有自己的作用域,这个要对照SPEC具体来看。以上简单的复位分析,以供大家参考和学习,介绍这里的目的也是通过对复位的学习,发现自己对这个PCIE的架构和子系统环境有一个更深的理解,希望也能帮助到大家。