ARM各种Memory类型理解

在看ARM的各个文档时,经常出现很多memory属性相关的词汇,比如Device、Cacheable、Shareable之类,基于这段时间的学习理解和项目实践,把个人的一些理解记录下,仅供参考,有不当之处还望大家指正。
我们以CHI issueC P110 表2-12为例,介绍Device、Allocate、Cacheable、EWA(Bufferable)、Order以及SnpAttr如何影响ARM的memory类型。
在这里插入图片描述

1. MemAttr、Order和SnpAttr等属性分析

从MemAttr那一列的右边分析:
EWA
EWA和Bufferable是一个意思的,EWA指示的是一笔写请求的完成响应是否可以从中间节点返回。EWA=1,允许从中间节点返回;EWA=0,只能从写请求要到达的最终节点返回。
Cacheable
Cacheable指示一笔请求是否需要执行cache lookup,即查找cache内容。Cacheable=1,先进行cache查找,如果没有找到再去访问最终节点;Cacheable=0,必须访问最终节点。通常EWA=0的话,Cacheable肯定等于0,即不能提前返回响应的,那肯定也不能只查询cache就了事的。
Allocate
Allocate是是否需要cache分配的提示信号,也只是指示作用,具体要不要分配看情况。Allocate=1,为了性能考虑,推荐将数据分配到cache中;Allocate=0,为了性能考虑,推荐不要将数据分配到cache中。通常Cacheable=0的话,那Allocate肯定等于0的,因为不进行查找cache的话,也就没有必要分配cache给数据的。
Device
Device指示memory类型是Device,还是Normal,是决定访问memory类型的关键信号。Device=1,为Device memory type,该memory类型是由连带效应(side-effectts)的,即对一个地址的数据的操作可能会影响到另一个地址中的数据值。那些地址区间没有连带效应的也允许使用Device memory type,也就是说对一个地址的操作不影响到另一个地址的数据也可以用做Device空间,Device空间要求比较苛刻点,Device空间的数据是不允许被cache缓存,否则会导致系统功能紊乱,因此Cacheable和Allocate都为0,也就没有必要支持Snoop(SnpAttr必须等于0);Device=0,为Normal memory type,该memory类型是不具有连带效应的,即地址之间的操作互不干扰,Normal空间的数据可以被cache缓存,因此也支持Snoop(SnpAttr可以等于0,也可以等于1)。
其它列:
Order
Order用于多笔访问操作之间的保序需求,Device和Normal地址空间都有保序需求,Order=0,不需要保序;Order!=0,需要保序。
SnpAttr
表示该笔操作是否需要snoop;SnpAttr=1,需要snoop;SnpAttr=0,不需要snoop。操作是否需要snoop跟本身的操作类型也有关系的。

2. ARM Memory Type分析

现在我们来看下上表中ARM Memory Type那一栏,以Memory类型讨论,分为Device type memory和Normal type memory。

2.1 Device Type Memory

Device memory也就是Device=1的地址区间。
Reordering, R and nR: The Reordering and non-Reordering attributes;
Early Write Acknowledgement, E and nE:The Early Write Acknowledgement and no Early Write Acknowl-edgement attributes;
其实还有G和nG属性(Gathering and non-Gathering attributes,即多笔命令能否合并成一条命令),不过在CHI文档里没有体现,这里就暂时不说了,以上组合起来可以得到如下各种Device属性。

1、Device nRnE:
顾名思义就是这种地址需要保序,且不能支持EWA,即从endpoint节点返回写响应。
2、Device nRE:
这种地址需要保序,但可以支持EWA,即从POS或POC点返回写响应就可以的。
3、Device RE:
这种地址不需要保序,支持EWA。

加上nG和G属性,上述各种可以组成如下各种Device类型及保序强度。
在这里插入图片描述

2.2 Normal Type Memory

Normal memory也就是Device=0的地址区间。Normal memory可以区分如下:
1、Non-cacheable Non-bufferable:
Non-cacheable Non-bufferable其实是AXI的memory类型,不是ARM的memory类型。该类型可以看出是不能cache缓存和allocate数据的,并且写响应要从最终节点返回。

2、Non-cacheable Bufferable:
该种类型是不能被cache缓存和allocate数据的,但写响应可以从中间节点(如POC或POS)返回的。

3、Non-snoopable WriteBack No-allocate:
这种类型不是Snoopable属性,但支持cache缓存数据的,不支持allocate,在写数据发生cache miss下,直接将数据写到下游去,不需要allocate到本级cache。

4、Non-snoopable WriteBack Allocate:
这种类型不是Snoopable属性,但支持cache缓存数据的,且也允许allocate数据,在写数据发生cache miss下,需要将下游数据读到本级cache中,然后再往cache中写入该数据。

5、Snoopable WriteBack No-allocate:
这种类型和第三种一样,只不过多了支持Snoopable。

6、Snoopable WriteBack Allocate:
这种类型和第四种一样,只不过多了支持Snoopable。

3. 其它属性分析

我们一定还经常看到Shareability属性,这个属性和其它memory的属性有什么关系呢?表1为ACE协议中的Shareability domains和其它属性的关系。
在ACE协议中有四种级别的Shareability domain,如下:

  • Non-shareable:该domain只包含一个master;
  • Inner Shareable:该domain包含了几个master;
  • Outer Shareable:该domain包含了Inner domain和其它master;
  • System:该domain包含了系统中的所有domain;
    其实在ARMv8中只定义了三种Shareability domain,没有System domain,但这也不影响。

表1 AxCACHE and AxDOMAIN signal combinations
在这里插入图片描述
由表1可以看出Device memory总是认为是Shareable的,Device memory只用于System domain,因为Device memory不会被任何cache缓存,所有没必要分配其它domain的。
对于Normal Non-cacheable memory通常也只属于System domain,因为大家都不缓存,也没有必要分配给其它domain的。有些情况例外,需要分配domain的,例如memory地址的数据会被缓存在domain级别的位置,而不是放在下游的Systemcache,那就需要去监听它们。
对于Normal Cacheable memory有WriteBack和Writethrough两种属性,支持三种Shareability domains(不支持System domain),因为该类型的memory会cache数据,所以需要去snoop其它master的。
仔细想想,其实Shareablility只和memory类型和Cacheable属性有关的,与EWA、Allocate、SnpAttr等不相关的。当然Snoopable的请求肯定是属于Inner Shareable domain或Outer Shareable domain的。Non-snoopable请求的话,如果是Device memory type,那么就是System Domain;如果是Normal memory type且是Non-cacheable属性的话,那可能会是四个中的任何一个;如果是Normal memory type且是Cacheable属性的话,那应该是Non-shareable domain的。

4. 参考文献

1、《IHI0050C_amba_5_chi_architecture_spec-3》
2、《DDI0553B_j_armv8m_arm》
3、《AMBA® AXI™ and ACE™ Protocol》

————————————————
欢迎关注:
微信公众号:专芯致志er
微信号:cccccccchip
简介:分享Arm architecture, 各种ABMA协议, 芯片验证, 方法学, 脚本, EDA等知识

————————————————

  • 24
    点赞
  • 127
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
### 回答1: ARMMemory Compiler(内存编译器)是一种用于生成芯片设计中的存储器单元的工具。它能够根据给定的设计要求和约束,自动生成存储器的物理布局和连接。Memory Compiler在芯片设计中起到关键作用,因为存储器是现代芯片中的重要组成部分。 Memory Compiler通常支持各种类型的存储器,例如静态随机存取存储器(SRAM)和双端口存储器(DP-RAM)。它能够根据设计要求生成适当的存储器单元,并考虑到性能、功耗和面积等方面的权衡。 使用ARMMemory Compiler可以带来一些明显的优势。首先,它可以大大减少人工布局的工作量,因为它可以自动化生成存储器的物理布局和电路连接。这样,设计团队可以更快地完成芯片设计的整体流程。 此外,Memory Compiler也能够优化存储器的性能和功耗。通过考虑设计要求和约束,它可以生成最佳的电路布局和连接方式,以提供最佳的性能和功耗表现。 除此之外,Memory Compiler还可以根据不同的制造工艺和芯片需求进行适应性优化。这意味着它可以生成适用于不同工艺节点和不同应用的存储器设计。 总的来说,ARMMemory Compiler是一种非常有用的工具,它可以帮助设计团队快速生成高效的存储器单元,并优化性能和功耗。它在芯片设计中发挥着重要的作用,有助于提高设计的效率和整体性能。 ### 回答2: ARMMemory Compiler是一种用于设计和生成存储器的工具。存储器是计算机系统中至关重要的组件,用于存储和检索数据。Memory Compiler基于ARM架构,提供了一种快速方便的方法来设计和生成高性能、低功耗的存储器。 使用ARMMemory Compiler可以从高层面开始设计存储器,然后通过自动生成RTL(寄存器传输级)描述和物理布局,生成完整的存储器解决方案。它支持各种存储器类型,如SRAM(静态随机存储器)、ROM(只读存储器)和寄存器文件。通过使用Memory Compiler,设计人员可以轻松地定制存储器的规格和特性,以满足不同应用的需求。 Memory Compiler具有许多优势。首先,它非常灵活,可以根据设计需求生成各种存储器配置。其次,它能够自动优化存储器的面积和功耗,以提供最佳的性能。此外,Memory Compiler还支持布线约束的自动生成,使存储器的集成更加容易。 另一个重要的功能是Memory Compiler提供了设计验证和分析工具,以确保生成的存储器满足设计要求。设计人员可以使用这些工具来检查存储器的正确性、时序和功耗等性能指标。通过这些工具,设计人员可以进行各种分析和优化来改善存储器的性能和可靠性。 总而言之,ARMMemory Compiler是一种强大的工具,可用于设计和生成高性能、低功耗的存储器。它提供了灵活的设计选项和自动优化功能,并具备验证和分析工具,帮助设计人员创建高质量的存储器解决方案。这使得Memory Compiler成为设计人员在ARM架构中成功实现存储器设计的关键工具之一。 ### 回答3: ARMMemory Compiler 是一种用于生成存储器(Memory)的工具。存储器在计算机中起到临时存储数据的作用,能够高效地读写数据。Memory Compiler 能够根据用户的需求和规格要求生成符合要求的存储器。 Memory Compiler 的使用步骤通常包括以下几个步骤: 1. 设计规格:在使用 Memory Compiler 之前,首先需要确定存储器的规格,例如需要存储器的大小、读写速度、功耗等需要满足的条件。 2. 参数设置:根据设计规格,设置存储器的相关参数,例如存储位宽、读写周期、数据接口等。 3. 逻辑设计:根据设定的参数,Memory Compiler 会自动生成存储器的逻辑电路,并进行布局和布线的优化。 4. 物理设计:在逻辑设计的基础上,进行更加详细的物理设计,包括对电路的布局、布线、时钟和功耗优化等。 5. 仿真验证:通过使用仿真工具对生成的存储器进行功能和性能验证,确保存储器能够满足设计规格和要求。 6. 生成存储器:在经过验证后,Memory Compiler 会自动生成存储器的物理设计文件,可以用于后续芯片生产的流程。 使用 ARMMemory Compiler 可以帮助设计人员快速生成符合要求的存储器,提高设计效率和可靠性。存储器在现代计算机和嵌入式系统中起到重要的作用,Memory Compiler 的使用对于设计和开发各种型号的处理器和控制器等芯片具有重要意义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谷公子的藏经阁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值