棋子 · 2022年06月06日

CCIX(三)

3. CCIX协议层

3.1 介绍

每个CCIX代理都有一个ID,通过ID进行消息路由。

每个CCIX端口可以与一个或多个其他CCIX端口通信。CCIX交换机(Switch)包括CCIX端口并支持CCIX链路。CCIX链路定义为两个CCIX端口之间的(逻辑)连接,具有专用的通信资源。

f1a96669c74ff4fbbbe39bd18cdaf4b9.png

一个CCIX系统在正常工作前,需要主机通过发现(discovery)和枚举(enumeration)机制去初始化,CCIX规范并没有额外规定这个机制,完全遵守PCIe规范。

发现过程需要完成以下动作:

  • 发现系统中存在的每个芯片。
  • 发现系统中存在的所有传输交换机(transport switches),包括支持协议的嵌入式和独立式交换机。
  • 发现在系统中每个芯片上的所有代理。
  • 对于每个主代理,发现在系统地址映射中其所需的地址范围的大小。
  • 对于每个从代理,发现从属代理可以提供给另一个芯片上的主代理的地址范围的大小。

枚举过程需要完成以下动作:

  • 确定系统的拓扑结构和适当的路由算法。
  • 将从代理分配给主代理。
  • 确定主代理和从代理的全局系统地址映射(G-RSAM和G-HSAM)。
  • 确定整个系统的代理ID分配。

3.2 消息字段

前面讲过,在CCIX链路层和CCIX事务层之间,是通过CCIX消息来进行通信的。CCIX消息可以分为几类,请求消息,监听消息和响应消息。下图是请求消息的所有字段(Field)。如果是128B的缓存行,“注释列”标明了所需的额外要求。另外,表的底部列出了请求消息中包含数据时所需的其它字段。

a5841b5e530095c7c3ba442027405ed6.png

下图是监听消息的所有字段。

335c4f2abd7282d20513ef7da18c6842.png

下图是响应消息的所有字段。

97cfed891f5664e23f805472d31a31f4.png

 接下来,我们看看这些CCIX消息中每个字段的具体含义是什么。

  • TgtID: 目标标识(Target Identifier),6-bit宽度。
  • SrcID: 源标识(Source Identifier),6-bit宽度。
  • MsgLen:消息长度,6-bit宽度,以4字节增量的方式标识消息的长度,例如下表显示,消息最长116字节,最短4字节。

54ddd66150f961e9304695db15cd7e1b.png

  • MsgCredit:用于标识消息信用是否传递给CCIX链路的发送方。后面会解释什么是信用。
  • Ext:如果设置为1,表示包含4B扩展。
  • MsgType:标识有效负载中的消息类型,4-bit宽度,编码含义如下表。

a08adc0dacf82acecacf4ec2b749329f.png

  • 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]指明了存储类型,编码如下。

ac5270deed4b1e04755a9701416a56e7.png

ecf5238c1b25d5c1ddad0bc2bf4e0a37.png

  • User:用户定义的字段。
  • Data:写数据或者读响应数据。
  • BE:Byte Enable,字节使能。
  • Posion:指示对应的8-byte块是否有未更正的错误。
  • SnpCast:标识单独监听的代理,其编码如下表。

7ff74715a231bdc02b18ed4482100d38.png

  • RespAttr:响应属性。在Comp响应中,此字段不用,必须设置为0;在CompData响应中,此字段指示响应接收器可以设置的缓存状态;在监听响应中,此字段指明在被监听端(snoopee)的一致性缓存状态。
  • DataRet:指示是否要将数据返回到主代理。当DataRet被置无效时,对于除SnpMakeI之外的所有监听:
  • 要求返回“脏”缓存行的数据。
  • 建议(但不是必需的)不为唯一的干净缓存行返回数据。
  • 要求不为共享“干净”缓存行返回数据。

当DataRet有效时:

  • 要求返回“脏”缓存行的数据。
  • 建议为唯一的“干净”缓存行返回数据,但不是必需的。
  • 要求不为共享“干净”缓存行返回数据。

今天先到这里吧,内容不多,但是有点杂乱。接下来会讲到CCIX的一致性协议,内容会比较多

原文链接:老秦谈芯
作者:老秦谈芯

推荐阅读

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