电子产业一站式赋能平台

PCB联盟网

搜索
查看: 171|回复: 0
收起左侧

ARM架构学习--AMBA CHI--简介和协议基础

[复制链接]

358

主题

358

帖子

4059

积分

四级会员

Rank: 4

积分
4059
发表于 2024-4-3 14:37:00 | 显示全部楼层 |阅读模式
本文翻译自文档? ? ?Learn the architecture - Introducing AMBA CHI   1.0

3tsybsn13g264024560721.png

3tsybsn13g264024560721.png

1 介绍AMBA Coherent Hub接口相干集线器接口(CHI) 是 AXI 相干性扩展 (ACE) 协议的演变。它是Arm 提供的高级微控制器总线架构 (AMBA) 的一部分。AMBA 是一个免费提供的、全球采用的开放标准,用于连接和管理片上系统 (SoC) 中的功能块。它有助于对具有大量控制器和外围设备的多处理器设计进行一次正确的开发。
CHI适用于需要一致性的广泛应用,包括移动、网络、汽车和数据中心。AMBA CHI 旨在保持具有越来越多的组件和流量的系统性能。
本指南介绍了CHI 协议的前三个问题,提供了 CHI 的一般概述,并深入探讨了几个特性。
Note:多元化和包容性是 Arm 的重要价值观。因此,我们正在重新评估我们在文档中使用的术语。较早的 Arm文档(包括 AMBA AXI 和 ACE 协议规范)使用术语主机和从机。本指南使用替换术语,如下所示:
? 新术语 Requester 与旧文档中的 master 同义
? 新术语 Subordinate 与旧文档中的 slave 同义
2 CHI 简介CHI专为可扩展性而设计,允许您构建小型、中型或大型系统。这些系统使用多个组件,从处理器集群、图形处理器和内存控制器到 I/O 桥、PCI Express (PCIe) 子系统和互连本身。
本节介绍CHI前三期的基本概念。
2.1 CHI 网络拓扑CHI定义了 CHI 网络中的不同组件,但没有定义用于连接这些组件的拓扑。这种拓扑灵活性允许您根据性能、功率和面积要求来驱动组件连接。
拓扑是:
?环形拓扑。在环中,每个组件直接连接到其他两个组件,形成一个环,所有组件都可以相互通信。这种拓扑的缺点是延迟随着环中组件的数量线性增加。这是因为事务必须遍历环,直到到达目的地。因此,环形拓扑最适合中型系统。
?网状拓扑。与环相比,网格包含更多交易到达目的地的路径,因此减少了交易的旅行时间。这以更多面积为代价,在系统中提供了更高的带宽。网状拓扑最适合大型规模系统。
?交叉开关互连。这种拓扑结构允许每个节点连接到每个可能的节点。这种设计提供了最佳性能,因为每个组件都直接连接到需要与之通信的组件。这种拓扑的缺点是连接所有组件的成本。这是因为系统中所需的电线数量会随着每个附加组件而显着增加。因此,交叉开关拓扑最适合小型系统。
下图显示了可以实现CHI 协议的不同类型的拓扑:

edcwn3ypxy564024560821.png

edcwn3ypxy564024560821.png

在此图中,圆圈代表网络中的请求者和从属组件。正方形代表在请求者和下属之间路由事务的中间组件。CHI协议迭代目前 CHI 协议有五个版本:A 到 E。本指南描述了问题 A 到 C 以及这三个版本之间的主要区别。CHI-A 版本是 CHI 协议的第一个版本。它为传输层提供了减少拥塞的功能。CHI-A 规范描述了 CHI 的基本行为。该规范包括:
?新通道、CHI 术语和组件命名的定义
?请求、探听过滤器和缓存状态转换的示例
?事务排序、独占访问和分布式虚拟内存 (DVM)操作的规则
CHI-B版本扩展了 CHI-A,但不直接向后兼容 CHI-A。它增加了支持 Armv8.1 和 Armv8.2 系统扩展的功能,例如:
?更大的物理地址宽度
?原子事务
? DVM的 VMID 扩展
?通道字段、事务结构以及可靠性、可用性和可服务性 (RAS) 特性的描述
?直接内存传输和直接缓存传输功能,可减少内存和窥探访问延迟
CHI-C版本是 CHI-B 的一个小扩展。此扩展主要添加了减少请求危险生命周期的功能。CHI-C 还添加了两个减少完成确认时间的操作码,并通过协议更改来支持这些操作码。
2.2 CHI 缓存行状态CHI使用与 ACE 类似的一致性模型,增加了对窥探过滤器和基于目录的系统的支持以实现窥探缩放。
CHI还使用与 ACE 相同的术语来定义缓存状态并添加部分和空缓存行状态。高速缓存行状态术语是:
? Valid and Invalid用于描述本地缓存中是否存在缓存行。
?如果缓存行有效,则它必须是唯一的或共享的:
? 唯一意味着缓存行仅存在于此缓存中,不存在于任何其他请求者本地缓存中。只有当它处于唯一状态时,才能存储到本地缓存行。
? Shared表示缓存行存在于此缓存中,可能存在也可能不存在于其他请求者本地缓存中。
? 如果缓存行是有效的,它必须是干净或脏:
? 干净意味着缓存不负责更新主内存。由于另一个缓存中的先前更新,缓存行仍然可以保持与主内存不同的值。
?脏意味着高速缓存行已针对主内存进行了修改。当这条线从这个缓存中被驱逐时,请求者必须确保主内存被更新,或者将脏责任传递给系统中的另一个组件。
? 行可以处于部分和空状态:
? 空缓存行没有有效字节的数据,但行的所有权仍属于请求者。
? 部分高速缓存行可以有一些有效字节,其中不包括任何字节或所有字节。这是因为状态已更新但有效字节尚未写入,或者因为所有字节已写入但状态尚未更新。有额外的限制监听处于此状态的线路时可以给出的响应。
然后将这些术语组合起来描述七种高速缓存行状态,如下图所示:

q2jkwi213mr64024560921.png

q2jkwi213mr64024560921.png

该图包含以下缓存行状态:
2.2.1 ?Invalid缓存行不存在于缓存中。
2.2.2 Unique Dirty此缓存行仅存在于此缓存中,并且相对于主内存进行了修改。在这种状态下,请求者可以执行对缓存行的写入,因为该行已经处于唯一状态。如果窥探指示它,则必须将高速缓存行转发给请求者。
2.2.3 Unique Dirty Partial该高速缓存行仅存在于该高速缓存中,并且相对于主存储器被视为已修改。它可以有一些有效的字节,其中一些不包括或全部字节。在这种状态下,请求者可以执行对缓存行的写入,因为该行已经是唯一的状态。作为对窥探的响应,高速缓存行不能直接转发给原始请求者,即使在窥探指示时也是如此。
2.2.4 Shared Dirty此缓存行已针对主内存进行了修改,并且此特定缓存负责更新主内存。因为缓存线是共享的,它可能存在于一个或多个本地缓存中,但这并不能保证。如果该行存在于多个缓存中,则这些缓存将在Shared Clean 中包含该行。
2.2.5 Unique Clean缓存行相对于主内存没有被修改,仅存在于单个本地缓存中。可以在不通知其他缓存的情况下进行修改。
2.2.6 Unique Clean Empty缓存行仅存在于该缓存中,但没有一个字节是有效的。可以在不通知其他缓存的情况下修改缓存行。如果监听请求线路,则线路不得返回Home 或直接转发给原始请求者。
2.2.7 Shared Clean缓存行可能保存在一个或多个本地缓存中。该行可能已针对主内存进行了修改,但此缓存不负责在驱逐时将该行写回内存。
3. CHI 协议基础CHI协议按节点类型对系统中的不同组件进行分类,并为节点之间的通信提供了一种手段。本指南的这一部分回顾了节点类型及其通信方式,然后更仔细地查看了作为 Flits 发送的协议消息。
3.1 节点三种主要节点类型是请求节点(RN)、归属节点 (HN) 和从属节点 (SN)。此外,还有杂项节点 (MN),本节也将介绍。
RN生成事务,例如读取和写入请求,这些事务被发送到 HN。HN 负责对请求排序,向 SN 生成事务,并可以发出 snoops 或处理 DVM 操作。
这些节点类型中的每一个都可以进一步分类如下:
? RN可以是完全一致的、I/O 一致的或具有 DVM 支持的 I/O 一致的:
?完全一致的请求节点 (RN-F),包含一致的缓存并将接受并响应监听
? I/O连贯请求节点 (RN-Is),没有一致的缓存,并且不能接受监听
?支持 DVM 的 I/O 连贯请求节点 (RN-D),具有与?RN-Is相同的功能是并且也可以接受 DVM 消息
?主节点可以是完全一致的、非一致的或杂项的:
?完全一致的主节点 (HN-F) 将所有请求排序到一致的内存并向 RN-F 发出探听
?非一致以 I/O 子系统为目标的主节点 (HN-Is) 订单请求
?杂项节点 (MN) 处理请求节点发送的 DVM 事务这些有时被实现为 HN-D 节点? 用于普通内存或外围和普通内存的从属节点 (SN-F):
? SN-F连接到支持连贯内存空间的内存设备。例如,内存控制器将连接到 SN-F 节点。
?外设或普通内存的 SN-F 连接到 I/O 外设或非一致内存
下表总结了每个节点类别的行为:

km4mhk5b0u264024561021.png

km4mhk5b0u264024561021.png


2vbl1wefsp064024561121.png

2vbl1wefsp064024561121.png

系统中的某些组件也可以分类为请求者或完成者,如下表所述:
?请求者是通过发出请求消息启动事务的组件。术语请求者可用于独立发起事务的组件。术语请求者也可用于独立发布下游请求消息或作为系统中发生的其他事务的副作用的互连组件。
?完成者是响应从另一个组件接收到的事务的组件。完成者可以是互连组件,例如 HN 或 MN,也可以是互连外部的组件,例如从属组件。
3.2 系统地址映射系统中的每个组件都分配有唯一的节点ID。CHI 使用系统地址映射(SAM) 将物理地址转换为目标节点 ID。
为了能够确定传出请求的目标节点ID,每个 RN 和 HN 都必须有一个SAM。
下图演示了RN SAM 将物理地址映射到 HN 节点 ID,以及HN SAM 将物理地址映射到 SN 节点 ID:
图3-1:RN SAM 将物理地址映射到 HN 节点 ID,HN SAM 将物理地址映射到 SN 节点 ID

lfcggjjwnrj64024561222.png

lfcggjjwnrj64024561222.png

在该图中,事件的顺序如下:
1.地址为 0x8000_0000 的事务通过节点 0 中的 RN SAM。
2. RN SAM确定目的地为节点 5。
3.事务被路由到 HN节点 5。
4. HN接收交易。
5. HN通过其 HN SAM 传递地址,并将目的地确定为节点 2。
6.事务通过节点 2 路由到 SN。
RN SAM必须满足以下要求:
?必须完整描述整个系统地址空间
?任何与物理组件不对应的物理地址必须映射到能够提供适当错误响应的节点
?所有 RN 必须具有一致的RN SAM 的视图。例如,地址 0xFF00_0000必须始终指向同一个 HN,无论是哪个 RN 发出的。
Note:SAM 的确切格式和结构完全由实现定义。CHI 规范没有提供如何将地址映射到节点 ID 的指导。
3.3 节点通道CHI对 ACE 使用不同的通道:
?请求和带标签的 REQ,并发送读取和写入请求、缓存维护请求和 DVM 请求
?响应和带标签的 RSP,并为各种类型的消息发送完成响应,包括写入和缓存对数据少窥探响应和操作完成确认的管理响应。
? Snoops和 Labeled SNP,并发出 snoops 或发送 DVM 操作 数据传输消息和 Labeled DAT,并发送写入和读取数据,以及带有数据的 snoop 响应
Note:以 TX 为前缀的通道用于发送消息,以字母 RX 为前缀的通道用于接收消息。下图显示了 RN-F 的 CHI 请求者接口上存在的通道:

x4n21d5b5tr64024561322.png

x4n21d5b5tr64024561322.png

图3-2:RN-F 和 CHI 主接口
当RN-F 发出读取请求时,它会在其 TXREQ 通道上发送请求。当读取的数据返回时,RN-F 在其 RXDAT 通道上接收数据。每个节点上的 TX 信号连接到目标节点上的 RX 信号。SNP 通道上存在以下限制:
?只有 HN-F 和 MN 在 SNP 通道上发布消息
? RN-F仅接受 SNP 通道上的监听
? MN仅接受 SNP 通道上的 DVM 消息监听
3.4 Flits所有协议消息都以Flit 的形式发送。Flits 是控制字段和标识符的分组集合,用于传递协议消息。
Flit中发送的一些控制字段包括操作码、内存属性、地址、数据和错误响应。每个通道需要不同的 Flit 控制字段。例如,在请求通道上读取或写入的 Flit 需要地址字段,而数据通道上的 Flit 需要数据和字节启用字段。
Flit中的字段不会像 PCIe 或以太网协议中的字段那样在多个数据包上序列化。相反,它们是并行发送的。
下图显示了请求Flit,以及 Flit Opcode 的详细信息:

o31ta43n1et64024561422.png

o31ta43n1et64024561422.png

图3-3:包含标识符、字节和 CPU 集群示例的矩形
CHI中用于传递 Flit 的握手机制与 ACE 中的不同。每个通道都与一个 FLITV 信号相关联,该信号由发射器设置为高电平,表示Flit 有效。然后在下一个 CLK 上升沿进行传输。Flits 只能由发送器在之前从接收器收到信用时发送。由 LCRDV 发出的信用信号在CLK 上升沿被断言和限定。
为了在Flit 中提供附加信息,CHI 定义了多个标识符字段。例如:
?源 ID 字段 (SrcID) 用于跨 CHI 网络路由 Flit。该字段标识了Flit 的发送者,每个 Flit 都有 SrcID 字段。Source ID 使用的值是发送消息的组件的节点 ID。
? Target ID字段 (TgtID),也用于在网络中路由 Flit。Target ID 值是接收消息的节点的节点 ID。除了 snoop Flit 之外,每个 Flit 都包含Target ID 字段。snoop 通道不包含 Target ID 的原因是CHI 使用该实现来识别哪些节点接收到 snoop。HN-F 可以使用任何机制来路由 snoop,例如向所有 RN-F 广播 snoop,或使用 Snoop过滤以仅针对 RN-F 的子集。无论使用何种机制,当窥探 Flit 离开互连时,它已经针对特定节点。
?每个 Flit 中都存在 Transaction ID 字段 (TxnID)。该字段是一个 8 位字段,用于标识源节点和目标节点之间的每个事务。来自 RN 的每个未完成的请求都必须具有唯一的 TxnID。RN 在任何时间点最多可以有 256 笔未完成的交易。
?请求操作码(Opcode),存在于REQ flit 中。这指定了事务类型,并且是确定事务结构的主要字段。例如,不同类型的读请求、写请求或无数据请求。
?数据缓冲区 ID (DBID) 仅存在于响应和数据 Flits 中。目标节点使用此标识符来表示接收写入数据的可用性,并取消分配需要完成确认的事务。
?对于写入,请求者在收到完成者的响应中的 DBID 值之前无法发送写入数据
?一些读取事务完成并带有完成确认,其中requester 表示已收到读取的数据。有关更多信息,请参阅事务流。当读取的数据被发送回请求者时,数据片段包括一个 DBID 值,供请求者在发送完成确认消息时使用。
下表总结了可以使用每个Identifier 的 Flit 类型:

bjisti2xrg064024561522.png

bjisti2xrg064024561522.png

有关这些标识符字段如何为整个事务更改的示例,请参阅事务流。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表