3. CCIX协议层
3.1 介绍
每个CCIX代理都有一个ID,通过ID进行消息路由。
每个CCIX端口可以与一个或多个其他CCIX端口通信。CCIX交换机(Switch)包括CCIX端口并支持CCIX链路。CCIX链路定义为两个CCIX端口之间的(逻辑)连接,具有专用的通信资源。
一个CCIX系统在正常工作前,需要主机通过发现(discovery)和枚举(enumeration)机制去初始化,CCIX规范并没有额外规定这个机制,完全遵守PCIe规范。
发现过程需要完成以下动作:
发现系统中存在的每个芯片。
发现系统中存在的所有传输交换机(transport switches),包括支持协议的嵌入式和独立式交换机。
发现在系统中每个芯片上的所有代理。
对于每个主代理,发现在系统地址映射中其所需的地址范围的大小。
对于每个从代理,发现从属代理可以提供给另一个芯片上的主代理的地址范围的大小。
枚举过程需要完成以下动作:
确定系统的拓扑结构和适当的路由算法。
将从代理分配给主代理。
确定主代理和从代理的全局系统地址映射(G-RSAM和G-HSAM)。
确定整个系统的代理ID分配。
3.2 消息字段
前面讲过,在CCIX链路层和CCIX事务层之间,是通过CCIX消息来进行通信的。CCIX消息可以分为几类,请求消息,监听消息和响应消息。下图是请求消息的所有字段(Field)。如果是128B的缓存行,“注释列”标明了所需的额外要求。另外,表的底部列出了请求消息中包含数据时所需的其它字段。
下图是监听消息的所有字段。
下图是响应消息的所有字段。
接下来,我们看看这些CCIX消息中每个字段的具体含义是什么。
TgtID: 目标标识(Target Identifier),6-bit宽度。
SrcID: 源标识(Source Identifier),6-bit宽度。
MsgLen:消息长度,6-bit宽度,以4字节增量的方式标识消息的长度,例如下表显示,消息最长116字节,最短4字节。
MsgCredit:用于标识消息信用是否传递给CCIX链路的发送方。后面会解释什么是信用。
Ext:如果设置为1,表示包含4B扩展。
MsgType:标识有效负载中的消息类型,4-bit宽度,编码含义如下表。
QoS:Quality of Service,服务质量优先级别。QoS主要用于主控制器和内存控制器事务调度;只有请求具有QoS字段;QoS设置不应影响功能正确性;QoS字段没有必要的行为要求,然而预期的默认行为是QoS的上升值表示更高的优先级。
TxnID: 事务标识(Transaction Identifier),12-bit宽度(对于128B的缓存行,只需11-bit)。
ReqOp,SnpOp, RespOp:指定要执行的操作,Opcode编码对于每种消息类型是不同的。
Addr:指定与消息相关的地址,允许的地址大小由AddrWidth属性定义。
NonSec:标识是对非安全区域的访问。
ReqAttr:请求属性,包括有关请求数据大小、内存属性、监听属性以及事务排序要求信息。ReqAttr[6:4]指明数据大小,合法的数据长度可以是1B,2B,4B,8B,16B,32B,128B;ReqAttr[2:0]指明了存储类型,编码如下。
User:用户定义的字段。
Data:写数据或者读响应数据。
BE:Byte Enable,字节使能。
Posion:指示对应的8-byte块是否有未更正的错误。
SnpCast:标识单独监听的代理,其编码如下表。
RespAttr:响应属性。在Comp响应中,此字段不用,必须设置为0;在CompData响应中,此字段指示响应接收器可以设置的缓存状态;在监听响应中,此字段指明在被监听端(snoopee)的一致性缓存状态。
DataRet:指示是否要将数据返回到主代理。当DataRet被置无效时,对于除SnpMakeI之外的所有监听:
要求返回“脏”缓存行的数据。
建议(但不是必需的)不为唯一的干净缓存行返回数据。
要求不为共享“干净”缓存行返回数据。
当DataRet有效时:
要求返回“脏”缓存行的数据。
建议为唯一的“干净”缓存行返回数据,但不是必需的。
要求不为共享“干净”缓存行返回数据。
今天先到这里吧,内容不多,但是有点杂乱。接下来会讲到CCIX的一致性协议,内容会比较多
【待续】
领取专属 10元无门槛券
私享最新 技术干货