下冰雹 · 1 天前

PCIe学习(八)

PCIe学习(一)
PCIe学习(二)
PCIe学习(三)
PCIe学习(四)
PCIe学习(五)
PCIe学习(六)
PCIe学习(七)

5.2 电源管理事件(PME)

PCIe中的唤醒协议为EP提供了一种方法,来重新激活上游链路,并请求系统软件将其返回到D0,以便执行所需的操作。

有两种唤醒机制,一种是通过边带(Side-band)信号,第二种是通过带内(In-band)的PME(Power Management Event)消息。需要注意的是,PME消息本质上是Message类型,也就是说PME消息也是一种TLP,因此PME消息只能在链路处于L0状态下,才可以正常发送。

5.2.1 PME消息

PME消息由支持PME通知的设备发出。PME消息格式如下:

image.png

在PCIe 5.0中,PME消息如下:

image.png

实现PME机制需要有一个前提:相关PCIe设备能够在非D0状态下处理PME消息,且收发PME消息时,链路已经被唤醒,且进入了L0状态。

基本的PME流程如下(假定设备和系统能够生成PME,并且链路已经转换到L0状态):

1、当前PCIe设备向上游端口发送PME消息;

2、该PME消息通过Switch(如果有的话),最后达到RC;

3、RC接收到了PME消息后,将其内容转发给主机内部的电源控制器(Power Management Controller);

4、电源控制器一般通过中断方式通知电源管理软件。主机软件利用PME消息中的Requester ID来发起对PMSCR寄存器的读写操作,并使得对应的PCIe设备返回至D0状态;

5、在设备上下文由于处于低功耗状态而丢失的情况下,电源管理软件也可以通过调用设备驱动程序来恢复设备内的信息。

RC一般在接到PME消息后,将PME消息保存在一个队列中,等待电源管理软件来处理;电源管理会发起PMSCR寄存器的配置读取请求,待到配置读取请求完成后,该PME消息被移出队列。

上述过程可能会发生死锁问题,比如下面:

1.传入的PME消息已经填充了PME消息队列,但是已经从下游端口又发来了其它PME消息。

2.电源管理软件从RC发起配置读取请求,以从最早的PME请求者读取PME_Status。

3.相应的Completion必须根据事务排序规则,排在之前发布的PME消息之后。

4.RC无法接受新的PME消息,因为队列已满,因此路径暂时被阻塞。但这也意味着Completion无法到达RC,因此RC不能清除队列中较旧的条目。

5.RC无法取得任何进展,出现死锁。

那么如何消除PME的死锁可能性呢?如果RC总是接受新的PME消息,即使它们会溢出队列,也可以避免这个问题。在这种情况下,RC可以简单的接收并丢弃后面的PME消息。为了防止丢弃的PME消息永久丢失,发送PME消息的设备需要检测一个超时间隔,称为PME服务超时。这样,在EP看来只是PME服务没有被接受,EP端的软件可以选择继续发送PME消息。

5.2.2 链路唤醒

前面说过,发送PME要求链路必须在L0状态。当设备处于非D0状态时,链路不处于L0状态,比如设备状态D3cold对应的链路状态是L2或L3,此时就需要先唤醒链路。PCIe协议定义了两种触发非通信链路唤醒的方法:

ØBeacon:由AUX电源驱动的带内指示器。Beacon只是通知上游组件应该向软件通知唤醒请求的一种方式。当Switch在下游端口上接收到Beacon时,它们反过来在上游端口上发送Beacon,最终到达根复合体RC,产生一个调用PM软件的中断。

ØWAKE#信号:由AUX电源驱动的边带信号。该信号可以直接路由到RC或其它系统逻辑以通知PM软件。尽管希望尽量减少链接的引脚数量,但添加此额外引脚的动机很容易理解。原因是组件必须消耗辅助电源才能识别下游端口上的Beacon,然后将其转发到上游端口。在电池供电的系统中,即使系统不工作,辅助电源可能也会耗尽电池。在这种情况下,首选的解决方案是在发送唤醒通知时绕过尽可能多的组件,WAKE#引脚可以很好地实现这一目的。如果功率不是一个问题,使用WAKE#引脚可能不太合适

5.3 ASPM

ASPM(Active State Power Management)是一种基于硬件的链路节能机制,仅适用于设备处于D0设备电源状态时。进入和退出ASPM状态的转换由硬件根据具体实施标准启动;软件无法控制或观测此操作,只能使用配置寄存器的对应控制位来启用或禁用这一功能。

ASPM的两个低功率电源状态:

ØL0s:这种状态可以节省功率,但允许状态的快速进入和退出。主要方法是将Transmitter置于电气空闲状态。

ØL1 ASPM:比L0s状态的功率更低,但是状态进入和退出的延迟也更大。在此状态下,链路两端的Transmitter都置于电气空闲。

5.3.1 电气空闲

当发射机进入电气空闲,将停止驱动差分对信号,差分信号的电平将接近0V。根据节约功率的程度,链路电源状态处于L0s或L1.

5.3.1.1 发射机进入电气空闲

发射机在进入电气空闲之前,要通知链路另一端的接收机,否则接收机发现差分信号对没有被驱动,视为错误。发射机通过发送EIOS有续集,然后快速停止传输,将输出驱动器拉成三态(Tristate)。一旦发送了最后一个EIOS,发射机必须在8ns内进入电气空闲,并在该模式下保持至少20ns,无论数据速率是多少。电气空闲期间允许的差分峰值电压必须在0和20mV峰值之间,同样与数据速率无关,以减少接收机将线路上的噪声误解为有效信号的可能性。

在不同速率下,EIOS有续集的格式不同。

image.png
image.png

5.3.1.2 发射机退出电气空闲

当发射机退出电气空闲时,其所采取的步骤取决于所使用的数据速率。发射机必须在不到8ns的时间内通过发送FTS或TS1/TS2s恢复传输,从而导致转换回L0状态。

gen1:发射机开始使用有效的差分信号来发送TS1或FTS来通知接收机。接收机检测到电压高于静噪阈值,开始评估输入信号。

gen2:发射机发送EIEOS有续集

gen3:发射机同样是发送EIEOS有续集,但是格式与gen2时不一样

5.3.1.3 接收机进入电气空闲

当链路一端的发射机进入了电气空闲,另一端的接收机根据数据速率进行响应。两种电气空闲检测选项:

检测电气空闲电压

推测电气空闲

5.3.1.4 接收机退出电气空闲

接收器检测电压差以表示正常信号的恢复。当差分信号的峰值电压超过电空闲检测阈值时,将检测到退出电气空闲,该阈值允许在所有数据速率下设置在65和175mV之间。

在2.5 GT/s时,这个检测机制足够。但在更高的速率下,接收机不必依赖于该检测电路,除非在某些LTSSM状态期间或在以5.0 GT/s传输FTS序列之前的四个EIE符号期间接收EIEOS。有助于检测电气空闲退出的EIEOS的数量和时间取决于链路状态。

在电气空闲状态下,接收机的PLL失去时钟同步。当发射机退出电气空闲时,它发送FTS以退出L0s,或发送TS1/TS2s以退出所有其它链路状态。这样做为CDR逻辑提供了所需的转换条件,以重新同步接收机的PLL并实现位锁定和符号锁定或块对齐。

下图显示了链路状态转换,并突出显示了L0、L0s和L1之间的转换。请注意,从L0s到L1没有直接路径,因此L0s和L1之间转换必须先将链接返回到L0状态。

图示描述已自动生成

Link Capabilities寄存器有指示支持ASPM的字段。

图示描述已自动生成

软件可以配置Link Control寄存器的相关字段来启用或禁用ASPM。

图片包含 图示描述已自动生成

5.3.2 L0s状态

L0s是链路电源状态,只能在硬件控制下进入,并应用于链路的单个方向。比如,对于设备向主机大量写入,而主机不需要经常访问设备的场景,可以让下游lane进入L0s状态。

5.3.2.1 进入L0s

对EP和Switch来说,空闲的定义不同。这样做的原因是希望在链路恢复时间通过Switch传播时尽量减少恢复时间。

事务层和数据链路层不知道物理层发送器是否已进入L0s,但触发向L0s转换的空闲条件必须从事务层和链路层持续报告给物理层,以便其能够及时做出选择。

需要注意的是,即使软件禁用了ASPM,端口在其接收机上也必须始终允许L0s。这允许链路另一端的启用了ASPM的设备仍然将链路的一侧转换为L0s状态。

5.3.2.2 退出L0s

如果发射机检测到空闲状态的条件不再成立,则必须启动从L0s到L0的退出。发射机发送一个或多个FTS有续集。FTS有续集的数量取决于链路训练时,双方协商的结果。在发送完一定数量的FTS之后,发射机将发送一个SOS。接收机此时应该能够建立比特锁定和符号锁定或块锁定,并且应该准备好恢复正常操作。

当Switch从下游端口接收到L0s到L0的转换请求,Switch须向上游端口请求L0s到L0的转换。当Switch从上游端口接收到L0s到L0的转换请求,Switch须向所有下游端口请求L0s到L0的转换。

5.3.3 L1 ASPM状态

L1 ASPM状态提供了比L0更深的节能,但具有更大的恢复延迟。这种状态导致链路的两个方向进入L1状态,并导致每个设备内的链路层和事务层去激活。

进入此状态是由上游端口请求的,例如来自EP或Switch的上游端口。下游端口响应该请求,并同意进入L1,或者通过与下游组件的协商过程拒绝该请求。退出L1 ASPM可以由下游端口或上游端口启动。

图示描述已自动生成

5.3.3.1下游组件决定进入L1 ASPM

规范并没有明确定义EP或Switch的上游端口决定进入L1 ASPM状态的所有条件。给出的要求包括:

支持并启用L1

已满足进入L1的设备特定要求

没有待传输的TLP

没有等待传输的DLL

如果下游组件是Switch,则在上游端口可以启动L1进入之前,Switch的所有下游端口必须处于L1或更高的节能状态。

5.3.3.2 协商进入L1 APSM

由于从L1 ASPM恢复所需的延迟较长,因此采用协商过程来确保链路另一端的端口启用L1 ASPM,并准备进入L1。协商包括发送几个数据包:

  • PM_ Active_State_Request_L1 DLLP:下游端口发起此DLLP,启动协商过程
  • PM_ Request_Ack DLLP:当上游端口满足条件时,返回此DLLP
  • PM_Active_State_Nak message TLP:当上游端口不能进入L1 APSM,发送此消息

PCIe协议规定,发送TS1来退出电气空闲,从而链路退出L1状态。接收端口发送TS1来进行响应,并且物理层遵循其LTSSM协议来完成恢复状态并将链路返回到L0。

当Switch从下游组件接收到L1退出请求,Switch必须在1μs内返回TS1来响应下游端口的L1退出请求,同时必须在其上游链路上退出L1。

图示描述已自动生成

当Switch从上游组件接收到退出L1请求,Switch必须在1μs内返回TS1来响应上游端口的L1退出请求,同时必须向处于L1 ASPM状态的所有下游端口发送TS1。

图示描述已自动生成

5.3.4 ASPM退出延迟

在Link Status,Link Control,Link Capabilities,Device Capabilities寄存器中,有ASPM退出延迟的设置字段和指示字段。

今天就唠这么多吧~~

btw,前几天拿到了7.0 base spec。感叹一下,学不完,根本学不完。看来要从入门到放弃了。。。

END

作者:老秦谈芯
文章来源:老秦谈芯

推荐阅读

更多 IC 设计干货请关注IC 设计专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。

推荐阅读
关注数
23168
内容数
1378
主要交流IC以及SoC设计流程相关的技术和知识
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息