UCIeD2DAdapter位于ProcotolLayer及PhysicalLayer之间,如1所示。Adapter往上通过FDI接口连接ProtocolLayer,往下通过RDI接口连接PhysicalLayer。
▲UCIeD2DAdapter在UCIe分层协议中的位置
在UCIe分层协议中,D2DAdapter主要承担以下几项工作:
UCIeDie间的参数协商。链路状态管理。确保数据可靠传输。相关机制有CRC、Parity及Retry等。多协议栈的多路仲裁及选择。
以上几大工作中,D2DAdapter必须实现链路状态管理及参数协商,根据使用场景及需求可以支持数据可靠传或多路仲裁选择。
UCIeD2DAdapter主要作用
1Die间参数协商
UCIeDie间参数协商主要发生在链路初始化及Retrain期间,接下来主要讲讲Adapter在链路初始化中的作用。
1链路初始化中的Adapter初始化
在UCIeMainband传输Protocol发来的Flit之前,必须对UCIe链路进行初始化。UCIe链路初始化分为4个阶段,如2所示,其中,链路初始化最后一个阶段便是Adapter初始化。
▲UCIe链路初始化的4个阶段
RDI状态机进入Active状态后,链路初始化进入Stage3的Adapter初始化。Adapter初始化期间主要进行以下3项工作:
查询LocalUCIe的能力。比如支持哪些操作模式、是否支持多协议栈、是否开启Retry、PCIePortType及Retimer相关能力等等。注意:若LocalUCIe的链路速度为8GT/s以上,应该使能Retry能力,并在接下来跟对端进行参数交换时请求对端也开启Retry能力。跟对端UCIe进行参数交换。在查询完LocalUCIe具备的能力后,通过SidebandMessage{AdvCap.*}将自身能力告知对方,这一过程称为Adapter的参数交换。双方通过交换参数来获知对方信息并进行协商,协商一致后发送{FinCap.*}形成最终结论对链路最终工作状态进行配置。参数交换有个时间限制,从RDIActive开始,若8ms内没有完成参数交换也没有收到{Adv/FinCap.*.Stall}的Message来复位Timer,则触发参数交换的Timeout机制。FDIBringUp。FDIBringUp是指UCIeLink两侧的UCIe协议层之间经过一系列握手协商,使FDI状态机进入Active状态。FDIBringUp的过程如3所示,这里不作展开,以后会详细讲。对于有多组FDI接口的情况,每个FDI独立进行BringUp。
2链路状态管理
链路状态管理主要包括链路的Power状态等的管理。
UCIe协议层采用PCIe、CXL协议时必须支持LL2低功耗状态。Adapter通过与ProtocolLayer及PhisicalLayer进行握手,使UCIe链路进入低功耗状态。LL2状态下,可以对GlobalClock进行Gating,也可以在系统层面发送IdlePackage。FDI支持LL2Power状态,握手规则跟CXl256BFlitMode相同。RDI也支持LL但在LL2状态下,RDI内部可以将这两个状态映射为常规非低功耗状态。不作展开,后边会单独开一节讲UCIePM。
UCIe采用PCIe/CXL之外的其他StreamingProtocol时,对其PM能力未作要求。对于其他不支持PM的协议,在收到远端发来的PM请求后,可以回复PMNAK来拒绝PM请求。
3数据可靠传输
1插入信息
ProtocolLayer发给Adapter的Flit中,有些给Adapter预留的Reserved位,比如Flit_Hdr、DLP、CRC。这些信息需要Adapter来进行填充。
Flit_Hdr:为了保证发出的Flit被正确传递到对端对应ProtocolLayer,在Flit_Hdr中携带有当前Flit的协议类型、协议栈ID等信息。对于支持Retry机制的UCIe,Flit_Hdr中还携带有SequenceNumber及Ack/Nak等信息。DLP:对于Standard256BFlit而言,Flit_Hdr占用了原来DLP0/DLP1的位置,若没有FlitMarker,Adapter还负责在DLPBytes插入DLLP信息。CRC:CRC是循环冗余校验,在D2DAdapter中计算CRC并插入Flit适当位置,对端接收到Flit后能够通过解析CRC检测出最多3bit随机错误。在接收端,若根据接收到的Flit计算出的CRC跟Flit中标识的CRC不同,则Invalid当前Flit并请求重传。
当协议层发送64ByteFlit数据,适配层一般会在有效数据Flit的前面加上2ByteFlitHeader,后面加上2ByteCRC值,对于256BFlit一般需要额外增加2ByteCRC,每128BFlit对应2ByteCRC。
2可靠传输
除了CRC机制,UCIe还提供有FEC、Parity、Retry、FlowControl等机制来保证数据在链路上的可靠传输。
FEC:从Spec来看,D2DAdapter在FlitMode下没有涉及到FEC,在RawMode下由UCIeProtocolLayer来插入FEC。Parity机制:Parity机制是一种在数据传输间隙检测物理链路健康状态的机制。若开启了Parity机制,在常规数据流之间周期性插入ParityBytes,对端解析ParityBytes并判决链路是否出了问题。UCIeParity机制仅适用于On-Package的UCIe链路,对UCIeRetimer而言,ParityBytes并不占用其RecieverBufferCredit,RetimerRx也不能将Rarity数据写进其RxBuffer中或传递给对端的Retimer。Retry机制:UCIeRetry机制是PCIe0FlitModeRetry机制的简化版。速率为8GT/s及以上时,BER性能相对较差,此时必须有Retry机制。Retry一旦打开,即使中途掉速,仍然使需使用Retry。想关闭Retry,需要重新LinkTraining。FlowControl:流控时ProtocolLayer通过FDI传输Update_FCDLLP来更新Credit信息,在Adapter中需要将其打包为Optimized_Update_FC的格式并加载到Flit中。在接收端,Adapter从Flit中提取DLLP或Optimized_Update_FC,然后驱动到FDI对应接口上。
4多路复用及仲裁
UCIe支持多个协议栈共享同一个D2DAdapter,各协议栈通过独立的一组FDI接口连接到Adapter上。当多协议栈共享同一Adapter时,需要在Adapter中实现Arb/Mux、StackMux,通过Arb/Mux或StackMux的选通与否,实现多协议栈对Adapter及PHY的分时复用。示意如4所示。
▲UCIeProtocol->Adapter配置
需要注意的是:
多个协议栈的带宽需求不能超过UCIePHY的带宽能力。若其中某个协议栈某段时间内没有ProtocolFlit要发送,在选通该协议栈时需要插入NOPFlit,防止出现RDI与PHY速率失配。
UCIeSpecr0,Chapter1深度解读Chiplet互连标准“UCIe”
文章为作者独立观点,不代表股票交易接口观点