LJgibbs · 2022年05月25日

PHY Interface 协议翻译:8PCIe等操作示例

PHY Interface For the PCI Express, SATA, and USB 3.1 Architectures

Version 4.3

©2007 - 2014 Intel Corporation—All rights reserved.

8 Sample Operational Sequences

本节描述了一些 PCIe、SATA 以及 USB 操作示例的时序图和过程(译注:其实只有 PCIe 的:)。本节涉及的时序图和过程都并非唯一或者必须的。

8.1 Active PM L0 to L0s and back to L0 – PCI Express Mode

这个例子中,PHY 在 MAC 控制下,对链路进行了主动电源管理(ASPM,Active State Power Management),从 L0 状态进入到 L0s 状态,随后重新回到 L0 状态。

当 MAC 或者更高层的逻辑想要将链路状态转移为 L0s 时,MAC 会发送一条电气空闲有序符号集(Electrical idle),使 PHY 发送逻辑转入空闲状态,并将 PHY 电源状态转移为 P0s。注意对于 16 或者 32 比特总线,MAC 需要始终在总线上对齐电气空闲有序符号集,使 COM 符号位于低字节位置(TxDataK[7:0])。

图 8-1-1 链路从 L0 进入 L0s 状态时序图

链路退出 L0s 状态的程序是这样的,MAC 将 PHY 从 P0s 状态转移为 P0 状态,等待 PHY 重新发送准备就绪后,(置起 PhyStatus),开始发送 FTS 序列(Fast Training Sequences)。注意,下图的 L0s 转为 L0 的状态图中,PHY 处于 2.5GT/s 速率。

图 8-1-2 链路从 L0s 进入 L0 状态时序图

8.2 Active PM L0 to L1 and back to L0 – PCI Express Mode

这个例子中,PHY 在 MAC 控制下,对链路进行了主动电源管理(ASPM,Active State Power Management),从 L0 状态进入到 L1 状态,随后重新回到 L0 状态。本例中的 PHY 属于 EP,(即面向上游端口连接),并且假设 EP 已经满足了 PCIe 协议中规定进入 L1 的所有条件。

在 MAC 通过 PHY 发送 PM_Active_State_Request_L1 消息,并得到 PM_Request_ACK message 的回复后,MAC 和上例中一样,发送一条电气空闲有序符号集(Electrical idle),使 PHY 发送逻辑转入空闲状态,并将 PHY 电源状态转移为 P1。(译注:此处时序图相较上例而言,区别只是 PowerDown 将 00b 改为了 10b)

图 8-2-1 链路从 L0 进入 L1 状态时序图

链路退出 L1 状态的程序是这样的,MAC 将 PHY 从 P1 状态转移为 P0 状态,等待 PHY 发送重新准备就绪后,(置起 PhyStatus),开始发送 TS1 (Training sequence)有序符号集。注意,下图的 L0s 转为 L0 的状态图中,PHY 处于 2.5GT/s 速率。(译注:此处和上例的区别主要在于 PHY 恢复 traffic 后发送的内容不同,从L0s 状态恢复时发送的是 FTS 序列。)

图 8-2-2 链路从 L1 进入 L0 状态时序图

8.3 Receivers and Electrical Idle – PCI Express Mode Example

本节中的示例只针对 2.5GT/s 速率的情况。注意,在 5.0 GT/s 或者 8 GT/s 速率时,RxElecIdle 信号对于 MAC 而言可能是不可靠的,MAC 需要根据 PCIe 3.0 或者 USB 3.0 协议中的相关内容提到的方法来检测 PHY 是否进入电气空闲状态。5.0 GT/s 速率下,可参阅第 6 章中的表 6-4 中的 RxElecIdle 定义。

译注图 表 6-4 中的相关描述

本部分阐述了两个例子,分别涉及了从工作状态进入空闲状态,以及从空闲状态返回工作状态时,PIPE 接口的信号时序。在各传输情况中,RxElecIdle 信号和 RxValid 信号的跳变之间,可能存在很大的时间差。

下图展示的是 PHY 从工作状态进入空闲状态时接口的响应。本例中,RxElecIdle 信号置高和 RxValid 信号置低和具体实现中弹性缓存的深度,以及符号同步逻辑的实现直接相关。注意,发送机在进入空闲状态的过程中可能会发送一些垃圾数据,这些垃圾数据会被传输到 RxData[] 信号线上,MAC 需要丢弃发送方进入电气空闲状态后,到本次 RxValid 信号置低期间,接收的任何数据。

图 8-3-1 接收机从工作状态进入空闲状态时序图

第二个例子是在接收机从空闲状态转回工作状态的接口响应。在本例中,RxElecIdle 信号置低(表示 Rx 差分信号线上开始有活动迹象),到 RxValid 信号置起之间存在一定时间间隔(表示 RxData[] 信号上出现有效数据)。这项延迟的大小取决于接收方重新训练的时间,以及弹性缓存的深度。

图 8-3-2 接收机从空闲状态重新进入工作状态时序图

8.4 Using CLKREQ# with PIPE – PCI Express Mode

CLKREQ# 用于下游设备请求上游设备关闭参考时钟的应用场景中。当 REFCLK 停止后,通常会导致 PIPE PHY 的输入时钟也同样停止。PCI Express CEM spec 允许下游设备在 L1 或者 L2 链路状态中停止 REFCLK。

关闭 REFCLK 的一般使用场景是,MAC 将 PHY 置于 P2 电源状态后,置低 CLKREQ#。重新打开 REFCLK 时,MAC 置高 CLKREQ# 信号,延时一段时间之后,延时的长短取决于 PHY 的具体实现,PHY 重新回到可用状态。

对于那些使用 CLKREQ# 来触发进一步电源管理措施的应用来说,PIPE 协议兼容 PHY 需要满足下述要求:

CLKREQ# in L1

当 MAC 将链路转移到 L1 状态,并且打算置低 CLKREQ# 以停止 REFCLK 时,在链路进入 L1 状态后,MAC 不是和通常一样将 PHY 转移为 P1 状态,而是直接将 PHY 转移为 P2 电源状态后,MAC 置低 CLKREQ# 信号。

之后,当 MAC 想重新使链路工作时,

  • 置高 CLKREQ#
  • 等待 REFCLK 稳定
  • 等待 PHY 准备就绪
  • 将 PHY 转移为 P0 状态后,重新开始链路训练

CLKREQ# in L2

当 MAC 将链路转移到 L2 状态,并且打算置低 CLKREQ# 以停止 REFCLK 时,在链路进入 L2 状态后,MAC 置低 CLKREQ# 信号。

之后,当 MAC 想重新使链路工作时,(译注:和 L1 时完全相同)

  • 置高 CLKREQ#
  • 等待 REFCLK 稳定
  • 等待 PHY 准备就绪
  • 将 PHY 转移为 P0 状态后,重新开始链路训练

Delayed CLKREQ# in L1

对于一条长时间空闲的 L1 链路,MAC 可能会希望停止其 REFCLK,这种情况下,PHY 本身处于 P1 状态,MAC 需要先将 PHY 转移为 P0 状态,再转移为 P2 状态,之后置低 CLKREQ# 信号。

使链路恢复的操作和先前的例子一致。

原文: Mindshare
译者: LJGibbs
文章来源:https://zhuanlan.zhihu.com/p/514542659

《PCI Express Technology 3.0》翻译系列

更多IC设计技术干货请关注FPGA的逻辑技术专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。
推荐阅读
关注数
10614
内容数
577
FPGA Logic 二三事
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息