【CHI】CHI协议自问自答

devtools/2024/10/22 3:07:22/

        学习CHI有一段时间了,如今回过头来,再读协议,一些问题做个记录。如果有错误的地方,欢迎指正。如果有其他的问题,也欢迎留言讨论。

spec: IHI0050F_amba_chi_architecture_spec

【持续更新ing】


目录

1. 怎么理解CHI协议分层?

2. CHI怎么没有burst概念?

3. snoop flit怎么没有tgtID?

4. 怎么理解SAM?跟flit中的tgtID什么关系?

5. 怎么理解order保序?

6. 为什么Read Transaction中只有MakeReadUnique可以回Comp?

7. 怎么理解cache stashing?

参考链接:


1. 怎么理解CHI协议分层?

        我们再来回顾一下CHI的分层,协议层(protocol)、网络层(network)和链路层(link)。具体描述参见下表:

相比于AMBA之前的总线,CHI为什么要做协议分层?

        之前的AHB/AXI,其实是把协议层链路层糅合到一起,所以没有分层的概念,从链路上的信号基本就能知道所要作的操作是什么。但是抽象出来看的话,在一个系统中,每个参与者(组件)都有各自需要关注的内容。比如,Master(CPU)主要关注读写操作,需要描述内存属性、size大小、安全性,也就是协议层;而中间的互联组件(ICN)则不关注所做的操作是什么,只关注从哪里来到哪里去,以及怎么去传输,也就是网络层和链路层

        所以协议分层,可以在不同的层次做不同的事情。同样的,我们看待问题也要考虑是站在哪个层级。

2. CHI怎么没有burst概念?

        AXI中的burst传输,就是只需要给定起始地址和burst大小,读/写 burst大小的数据。

        那么CHI呢,是一致性总线协议,DAT通道是基于half/full cacheline大小传输的,即burst大小是一个cacheline。然后再根据size/BE确定具体的data。

3. snoop flit怎么没有tgtID?

        snoop是HNF发给RN的,没有tgtID,怎么知道是发给哪个RN?协议中snoop flit没有tgtID,为什么?但是在实现的时候肯定还是要有的,可能是加到flit,也可能是其他什么形式?

4. 怎么理解SAM?跟flit中的tgtID什么关系?

        SAM:System Address Map,就是通过地址addr得到tgtID。 具体实现可自定义。

系统中,请求者必须具有系统地址映射 (SAM) 才能确定请求的目标 ID。
SAM 的范围可能很简单,只需为所有传出请求提供固定的节点 ID 值即可。
SAM 必须提供整个地址空间的完整解码。
建议将任何与物理组件不对应的地址发送到可以提供适当错误响应的代理。

RN SAM : 映射物理地址到HN的Node ID;

HN SAM : 映射物理地址到SN的Node ID;

那么,问题来了,为什么可以通过地址得到target ID ?

在一个系统中,内存被划分为很多部分,A部分连接在SN1上,由HN1管理;B部分连接在SN2上,由HN2管理,.....(具体实现时,可能不是这种简单的映射关系,一般都是hash把地址打散)

这样,如果是到RN到地址A范围的请求,就会根据RN SAM映射成HN1的tgtID。

而这个tgtID就会填充到flit中,这样在网络上传输时就会转发到正确的目的地。

5. 怎么理解order保序?

6. 为什么Read Transaction中只有MakeReadUnique可以回Comp?

注意上述Read transactions structure中【6.MakeReadUnique Only】

理论上来说,Read transactions必须要带回数据,也就是CompData,或者RespSepData + DataSepResp;为什么MakeReadUnique可以只回复Comp ?

我们再看MakeReadUnique定义:

以及RN发起MakeReadUnique的初始状态:

可以知道,RN发起MakeReadUnique时,本身是有S态数据的,如果在返回的时候,HN知道它还保留有数据,没有在这个过程中被无效掉,就无需再返回data,只是返回comp就好。

7. 怎么理解cache stashing?

        cache stashing是为了将数据搬到特定cache中存放,比如接下来RN1可能使用data1,那么就把data1缓存到RN1中,以提高性能。

        同prefetch一样,stash操作也只是一种hint。可以选择接受或不接受。区别是prefetch是RN自己发出,自己预取;而stash则是其他RN发出,“stash”到stashNID的RN。

HN在将stash通知到RN后,RN可以:

  • 接受,使用datapull机制来获取cacheline;
  • 接受,不使用datapull,另外发起Read获取数据
  • 忽略。

所以,datapull机制就是通过snoop响应来暗示读请求的一种方式,不需要单独的读请求来获取数据。

下面是一个stash事务的flow:

未完待续


参考链接:

Arm AMBA协议集及应用场景详解 - 极术社区 - 连接开发者与智能计算生态

What is AMBA, and why use it?--YouTube


http://www.ppmy.cn/devtools/127714.html

相关文章

基于机器学习的二手车价格因素识别与预测

1.项目背景 随着二手车市场的快速发展,消费者对二手车的需求逐渐增加,然而,由于二手车的定价涉及多种复杂因素,不同条件下的车辆价值差异较大,如何精准地评估二手车的市场价值成为了一个亟待解决的问题。本项目通过数…

《使用Gin框架构建分布式应用》阅读笔记:p52-p76

《用Gin框架构建分布式应用》学习第4天,p32-p76总结,总计25页。 一、技术总结 1.Go知识点 (1)iouti 书上使用ioutil包读取JSON文件,但是从go 1.16 开始,不再推荐使用ioutil,应该使用os 包。 (2)json.Unmarshal() …

【AI论文精读5】知识图谱与LLM结合的路线图-P4(完)

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】 P1,P2,P3 6 协同LLMs与知识图谱(KGs) 近年来,LLMs与知识图谱(KGs)的协同工作引起了越来越多的关注,这种协同结合了LLMs与知…

大厂面试真题-Arthas有哪些常用的命令

Arthas是Alibaba开源的一款Java诊断工具,它可以在不重启JVM的情况下,动态地查看JVM运行状态、类加载情况、内存使用情况、线程执行情况等,帮助开发者轻松排查线上问题。以下是Arthas排查线上问题时常用的命令: dashboard&#xff…

Windos如何调节麦克风音量

1、打开控制面板 2、点击:硬件和声音 3、出现下图,点击:声音。 4、打开如下界面,先点击:录制 5、再鼠标右键:麦克风阵列。点击属性。 6、选择级别,然后调解音量,最后确定应用。

连锁收银系统

商淘云连锁管理系统助力连锁企业实现“人货账”全方位数字化管理,它依托连锁品牌进销存管理实现门店订货、线下收银、线上商城、会员营销等一体化管理。 门店订货补货支持连锁直营、加盟 不同门店不同进货价、不同门店不同商品、不同门店在线或者账期支付、门店PC或…

进一步开发在线课程管理系统的功能,包括学生查看课程、提交作业、查看成绩等。

1. 学生查看课程功能 学生需要一个页面来查看他们已经注册的课程列表。我们可以在数据库中创建一个关联表 enrollments,用于记录学生注册的课程。 a. 修改数据库设计 新增一张 enrollments 表,来存储学生注册的课程信息: CREATE TABLE en…

叉车安全防撞装置的作用

‌叉车安全防撞装置的核心作用在于提升叉车运行时的安全性,特别是在倒车或经过岔路口等驾驶员视线可能受阻的情境下,通过探测叉车周围的障碍物距离,实时为驾驶员提供必要的辅助信息,有效预防碰撞事故的发生。‌ 这些装置通过多种技…