本页是介绍 Multi-Gigabit Transceiver (MGT)的系列页面的第六页,也是关于 PMA的第二页。
介绍
在上一页中,我们讨论了比特(bits)借助 PMA 通过物理通道进行传输。但是,这个数据流并不总是打开的: 为了节省电量,可以关闭 MGT 的大部分功能。当 MGT 在笔记本电脑内部实现 SATA、 PCIe或 SuperSpeed USB 时,这一点尤其重要。当应用这些协议(protocols)时,在没有数据要传输时保持物理链路处于活动状态会浪费能源。
因此, MGT 必须能够转换到低功耗状态。更重要的是, MGT 必须能够通知另一方何时需要从低功耗状态唤醒。 PMA 负责为此目的(以及其他目的)生成和检测 OOB 信号。
Out-of-band (OOB) 信号由用于传输数据流的相同差分线上的简单电活动模式组成。这些 OOB 信号仅在常规数据流关闭时才可传输。这些信号最重要的一点是,接收器可以借助非常简单的逻辑检测到它们。这使得接收 OOB 信号的 MGT 即使在 MGT 处于低功耗状态时也能检测到它。
MGTs 支持的另一个功能是发射器能够检测它是否与另一 MGT 物理连接(无需让另一 MGT 做任何事情)。此功能称为Receiver Detection 。
本页介绍了这两种功能: OOB 信号和 receiver detection。为方便起见,这里再次显示了前两页的框图:
传输 OOB 信号
Out-Of-Band (OOB)信号通常是一个简单的方波信号,带有一个常数频率。此信号只能代替常规数据流传输,并且不能与其同时传输。
每个协议(protocol)对 OOB 信号的形状要求都不同, FPGA MGT 通常有输入端口,允许应用逻辑根据最常用的协议(特别是PCIe 和 SATA )要求 OOB 信号。
OOB 信号的命名和要求因协议而异。例如:
- PCIe 协议将其 OOB 信号称为“Beacon”。使用在 30 kHz 和 500 MHz之间具有频率的方波信号即可满足要求。然而,协议甚至不要求信号是周期性的。 Beacon 用于从低功耗状态唤醒。
- SATA 协议定义了三种类型的 OOB 信号: COMRESET、 COMINIT和 COMWAKE。协议准确定义了这些信号的形成。 COMRESET 由主机(host)端使用,用于重置设备。 COMINIT 仅由设备发送,用于初始化链接。 COMRESET 和 COMINIT 与信号完全相同,但它们的含义取决于哪一端发送它们。 COMWAKE 由任一端使用,用于将链接从低功耗状态唤醒。
- USB SuperSpeed 协议将其 OOB 信号称为“Low Frequency Periodic Signaling”(LFPS)。这是一个方波, 10 MHz 和 50 MHz之间有一个频率。这个信号用于终止低功耗状态,但也用于各种其他目的。具体来说,数据流的初始设置由严格定义的 LPFS 信号交换组成。协议定义了几种 LFPS 信号模式,每种模式都有不同的含义。例如,如果主机在 100 ms期间连续传输 LFPS 信号,则需要重置设备。
有时 MGT 无法生成适合特定协议的 OOB 信号。这可以通过打开发送器发送数据并向 MGT 提供与所需信号模式相对应的数据流来解决。具体来说,如果关闭 MGT的编码功能, MGT 的行为就像简单的 SERDES。然后可以借助要传输的数据任意塑造所需的信号模式。例如,可以通过传输连续的“0”和“1”序列来生成方波。此解决方案的主要缺点是未使用 MGT的编码功能,因此必须在应用逻辑中实现编码功能。
Electrical idle
当 MGT的发射器关闭或处于低功耗模式时,其输出(output)通常处于 electrical idle 状态。这意味着发射器将两条差分输出线(D+ 和 D-)连接到接地。因此,这些线之间的电压为零,但每条线相对于接地也具有零电压。
当 MGT 处于休眠状态时, electrical idle 状态与发送 OOB 信号相反。或者,总结一下发送器的三种可能状态:
- 传输数据。只有处于此状态, MGT 才认为已通电。
- OOB的传输
- Electrical idle
如上所述, OOB 仅偶尔用于唤醒处于低功耗状态的另一端,或作为启动链路的一部分。因此,大多数时候, MGT 要么在传输数据,要么在 electrical idle 状态下处于休眠状态。
检测 OOB 信号
当 MGT 关闭或处于低功耗状态时,其接收器可能需要检测另一方是否发送了 OOB 。这对于响应恢复正常运行的请求尤其必要。
大多数协议并未准确指定 OOB 信号的波形,而是定义了一系列可能性。因此,接收器无法将到达的信号与预期的波形进行比较。相反,当差分线上有任何活动时,就会检测到 OOB 信号。换句话说,如果数据流已关闭,但差分线上的电压变化太大而无法将其视为 electrical idle,则说明另一方传输了 OOB 信号。
因此, FPGA MGT 没有用于检测 OOB的输出端口(output port)。相反,当接收器检测到 electrical idle时,输出端口会变为高电平。此端口的名称通常类似于“rx_elecidle”。
不幸的是, MGT对 electrical idle 的检测机制可能不可靠。具体来说,当另一方传输数据流时,接收方的 electrical idle 检测器的行为在不同的 MGT 上有所不同: 在这种情况下, MGT 可能会检测到 electrical idle 。同样, MGT 也可能会确定没有 electrical idle 。还可能会发生随机检测。每 FPGA 的行为都不同。
从理论上讲,这不是问题,因为当数据流处于活动状态时,为什么需要检查 electrical idle ?但在现实生活中, MGT 可能会在另一方不期望的情况下传输数据。因此,应用逻辑应设计为在预期另一方关闭但常规数据流到达时做出正确反应。
electrical idle 检测的另一个问题是对噪声的敏感性: 完美的 electrical idle 是两条差分线的电压均为零。由于噪声,接收器可能会测量到足以排除 electrical idle的电压。然后应用逻辑可能会将其解释为 OOB 信号。
总之,没有简单的解决方案可以可靠地检测 OOB 信号。应用逻辑必须设计为弥补 electrical idle 探测器的缺陷。
Receiver detection
PCIe 协议和 SuperSpeed USB 需要能够检测链路另一端是否连接了什么东西。这种检测需要在不尝试启动与另一端的通信的情况下进行。此功能称为receiver detection 。
这是 SuperSpeed USB所必需的,因为计算机需要知道设备何时与其物理断开连接。如果在链路处于低功耗状态时发生此类断开连接,计算机将无法判断发生了什么事情: 无论如何,线路上都不应有任何活动。因此,协议要求主机每运行一次 100 ms时执行一次接收器检测。这样计算机就可以验证设备是否仍然连接,而不会浪费能源。
PCIe 协议要求在每 PCIe slot 上进行 receiver detection ,然后再尝试与可能连接到此 slot的设备建立链接。由于建立链接需要启动 MGT (更准确地说是 training sequence)以传输数据,因此避免不必要的尝试对于节省能源非常重要。
MGT的发射器通过在其两根输出线(output wires)(D+ 和 D-)上创建一个短电压脉冲来执行 receiver detection 。这是一 common mode 电压脉冲,因此参考接地的相同电压施加到两根电线上。如果另一侧有接收器,则可测量的电流(current)将流过接收器的终端电阻。这个电流(current)会影响发射器输出处的电压。如果另一侧没有接收器,则电流可以忽略不计。因此,发射器在脉冲开始后不久测量其输出处的电压,并据此确定另一侧是否存在接收器。
需要脉冲(而不是普通的直流电压)的原因是发射器和接收器之间有一个电容器。脉冲之后,电流会立即流动,因为脉冲电压会落在发射器和接收器的终端电阻上。随着电容器充电,电流会变低,就像任何 RC 电路一样。如果电压保持稳定,电流最终会变为零。
需要注意的是,对于 D+ 和 D-,只有当接收器的终端电阻连接到接地时, receiver detection 才能工作。例如, PCIe 协议要求这些终端电阻为 50Ω。通过在 D+ 和 D-之间连接 100Ω 电阻,无需连接到接地,即可实现相同的差分阻抗。如果以这种方式进行终端,除 receiver detection之外的所有功能都将正常工作。不同之处在于,所有其他功能都依赖于 D+ 和 D-之间的差分电压,但 receiver detection 是通过在两根线上施加相同的电压来实现的。如果终端电阻未连接到中间的接地,则不会有电流流动,因此将无法检测到接收器。