CXL学习(七)

文摘   科技   2023-01-24 23:50   河北  

第五章 CXL ARB/MUX

ARB/MUX提供CXL.io和CXL.cache/CXL.mem链路层控制和数据信号的动态多路复用,以及与Flex Bus物理层接口,如下图中的黄色部分。

在发送方向上,ARB/MUX仲裁来自CXL链路层的请求,合并复用数据。ARB/MUX还处理来自链路层的电源状态转换请求:将其解析为单个请求,并转发到物理层,为每个链路层接口维护虚拟链路状态机(Virtual Link State Machine,VLSM),并生成ARB/MUX链路管理包(ARB/MUX Link Management Packet,ALMP),以代表每个链路层在链路上传递电源状态转换请求。

在接收方向上,ARB/MUX确定与flit关联的协议,并将flit转发到适当的链路层。它还处理ALMP数据包,参与任何所需的握手,并更新其VLSM。


5.1 VLSM状态

ARB/MUX为其接口的每个CXL链路层维护vLSM,并根据其从本地链路层,或从远程对端的ARB/MUX接收到的电源状态转换请求完成转换状态。这句话中翻中的意思就是,电源转换请求可能是本地上层链路层发来的(发送方向),也可能是CXL链接的另一端链路层发过来的(接收方向)。下表列出了vLSM的不同可能状态。去除L1.1,L1.2和L1.3,总共有9种状态。


ARB/MUX查看每个vLSM的状态,以解析为转发到物理层的单个状态请求。如下图,表中的行表示vLSM[0]状态,表中的列表示vLSM[1]状态。例如,当前vLSM[0]状态是L1.0,当前vLSM[1]状态是Active,则从ARB/MUX到物理层的已解析请求将是Active(图中红圈)。

下表描述了vLSM从一种状态转换到下一种状态的条件。

5.1.1 本地vLSM转换的其它规则

  1. 如果任何链路层请求进入到Retrain,ARB/MUX必须将请求转发到物理层,以启动LTSSM(Link Training and Status State Machine)转换到Recovery。
  2. 一旦vLSM处于Retrain状态,预计相应的链路层最终将请求ARB/MUX转换为Active。
  3. 如果LTSSM移动到Detect,每个vLSM必须最终转换到Reset。

插播一句,什么是LTSSM?在PCIe链路可以正常工作之前,需要对PCIe链路进行链路训练,在这个过程中,就会用到LTSSM状态机。LTSSM状态机涵盖了11个状态,包括Detect,Polling,Configuration,Recovery,L0,L0s,L1,L2,Hot Reset,Loopback,Disable。再多的我就不懂了,以后有时间看看PCIe,补上这块。


5.1.2 跨链路的虚拟LSM状态转换规则

5.1.2.1 通用规则

如果CXL.io协议关闭,则链路无法针对任何其他协议运行(CXL.io操作是最低要求)。这个好理解,因为CXL.io基本等同PCIe了。

5.1.2.2 进入Active的交换协议

进入Active所需的ALMP协议包括本地和远程VLSM之间的4个ALMP交换,如下图所示。

5.1.2.3 状态同步协议

在初始链路训练期间达到最高协商操作速度后,必须向ARB/MUX发送所有后续LTSSM Recovery转换。Recovery退出后,必须执行vLSM状态同步协议。


5.1.2.4 状态请求ALMP

发送状态请求ALMP以请求将状态更改为Active或PM。对于PM,请求只能由上游端口上的ARB/MUX发起。

此处的PM,应该指的是L1。


5.1.2.5 状态ALMP


5.1.2.6 意外ALMP

以下描述了意外ALMP将触发链路recovery的情况:

  • 退出recovery后执行状态同步协议时,状态ALMP以外的任何ALMP都被视为意外的ALMP,并将触发recovery。
  • 当已发送active请求ALMP时,收到除active状态ALMP或active请求ALMP之外的任何ALMP都被视为意外ALMP,并将触发recovery。
  • 没收到状态请求ALMP,就收到了状态ALMP。

5.1.3 vLSM状态转移规则的应用

5.1.3.1 初始链路训练


5.1.3.2 状态交换快照示例


5.1.3.3 L1中止示例


5.2 ARB/MUX链路管理包

ALMP是一个1DW数据包。该1DW数据包在528位flit的低16字节上重复四次,以提供数据完整性保护;flit在高位加零。如果ARB/MUX在ALMP中检测到错误,它将启动链路的重新训练。

其中Byte 0保留,Byte 1-3编码如下图。


5.2.1 ARB/MUX旁路功能

当FlexBus链路在PCIe模式下运行时,ARB/MUX必须禁用ALMP的生成。

5.3 仲裁和数据复用/解复用

ARB/MUX负责在来自CXL链路层的请求之间进行仲裁,并根据仲裁结果复用数据。仲裁策略是取决于具体实现。此外,需要有一种方法来控制CXL.io链路层和CXL.cache/CXL.mem链路层的相对仲裁权重。


本章总结:这一章的ARB/MUX在CXL里面是承上启下的作用。由于CXL增加了单独的CXL.mem/CXL.cache事务层和链路层,所以在传输方向上,需要ARB/MUX合并两套链路层的请求和数据,在接收方向上,需要ARB/MUX拆分接收到的请求和数据,分发给两套链路层。


【待续】

老秦谈芯
交流ASIC技术