Advertisement

【ARM AMBA AXI 入门 11 - AXI 总线 AWCACHE 和 ARCACHE 介绍】

阅读量:

ARM AMBA AXI总线协议定义了AXI传输事务属性,用于控制存储从机和外设从机对传输事务的处理。AXI协议中的信号包括ARACHE和AWACHE,分别用于指示传输事务的处理方式。Slave type分为存储从机和外设从机,存储从机需支持所有事务属性信号,而外设从机需完成传输事务,具体支持方式由实现定义。系统级缓存通过缓存控制器提高访问速度,读写事务根据AxCACHE信号决定数据来源。AxCACHE信号由4个比特组成,分别表示缓存状态、传输属性修改、分配方式等。Memory types分为四种访问方式:Device访问、Normal Non-cacheable访问、Write-through访问和Write-back访问,分别对应不同的缓存策略和事务处理方式。

ARM AMBA AXI 总线 文章专栏导读

链接

ARM AMBA AXI 总线 文章专栏导读

ARM AMBA AXI总线文章专栏

文章目录

    • 1.1 AXI 传输事务属性
      • 1.1.1 slave type
      • 1.1.2 系统级缓存
  • 1.2 Memory Attributes

    • 1.2.1 Capable of being buffered, with AxCACHE entry 0

    • 1.2.2 Capable of modification, with AxCACHE entry 1

    • 1.2.3 Engages in cache allocation

    • 1.3 Memory types

该平台提供丰富多样的学习资源,涵盖多个学科领域,为用户提供全方位的知识服务。平台内容经过严格审核,确保信息的准确性和权威性。用户可以自由浏览和学习感兴趣的内容,获取所需的知识和技能提升。平台内容更新及时,涵盖最新的研究成果和教学方法,为用户提供持续的学习体验。

1.1 AXI 传输事务属性

AXI 协议规范性地规定了信号表示读写传输事务的类型,具体包括 ARCACHE 和 AWCACHE,统称为 AxCACHE。

当 Master 发出一个请求时,可以通过 AWCACHE/ARCACHE 信号向下级系统(组件)通知当前传输事务的处理方式。这些信号用于指定请求的内存属性。

它们可以控制以下行为:

通知系统中其他组件(如NI-700和CI-700)处理该笔交易的处理流程;
告知系统级的缓存和缓冲区处理该笔交易的处理方式。

1.1.1 slave type

AXI 协议中存在两类从机:

  • 存储从机(Memory Slave);
  • 与外设从机(Peripheral Slave)。

在我们的协议标准中,事务属性的传递旨在为目标设备提供必要的初始化信息,而这些目标设备必须具备所有相关的事务属性信号。

对于外设从机,协议中所包含的属性信号有哪些?其规定中只有一个要求:外设从机必须完成整个传输事务,即使其不支持某些事务属性信号。

外设从机对属性信号的支持以及相应的访问方式(method of access)由具体实现定义(IMPLEMENTATION DEFINED)。通常,设计者会将支持的方式记录在该从机的规格书里。从机也会对所支持的访问方式进行正确响应。

在极端情况下,设备接收到来自外部的访问请求,该请求不被支持,导致系统崩溃。然而,为了避免整个系统出现死锁,必须确保在完成数据传输操作后才允许系统崩溃。

该规定不支持复生机制,且持续正确的操作并非必要。

1.1.2 系统级缓存

AXI 协议缓存相关机制是针对处理器的系统级缓存的一种实现。

即为系统级缓存(System-Level Cache)与处理器内部缓存的区别。系统级缓存显著提升了整个系统访问外部存储的速度。当系统级缓存处于处理器核与外部存储之间时,可以被视为处理器核外部的 L2 缓存,如图所示,系统级缓存处于处理器核与外部存储之间,类似于处理器核的 L2 缓存结构。

在这里插入图片描述

AXI 总线接口将处理器核、系统缓存以及外部存储控制器互联。L1 缓存设置在处理器核内部。当处理器访问外部存储中的数据,且 L1 缓存中不存在对应数据时,向外部缓存发起传输事务。在系统缓存中处理该传输事务时,若该事务命中缓存表项,可以直接获取结果,从而省去访问外部存储所带来的缺失成本。

1.2 Memory Attributes

AxCACHE 信号共有 4 比特,每个比特代表不同的含义。

在这里插入图片描述

1.2.1 Bufferable,AxCACHE[0]

当AxCACHE[0]设置为高值时,表示该传输事务在传输至目的地的过程中,可以被网络层(interconnect)或者任意的AXI接口缓存,延迟若干个时钟周期。CPU在写传输事务时需要将数据写入主存储,可以先缓存于缓存中,直到被替换时才真正写入主存储。

因此,CPU在完成写入缓存后即认为写操作已完成。写事务原先的目标地是主存储,例如外部 DDR,理论上,目标地 DDR 应该在数据真正写入后,向 CPU 发送写回确认信号,以确认写传输事务的完成。然而,当前的机制是,一旦数据写入缓存,CPU 即时发送写回确认信号,从而结束了本次写回确认过程。

当AxCACHE[0]被设置为低时,该特性不再被允许。哪些情况下缓存被禁止,当CPU通过DMA技术将数据传输至IO设备时,数据首先被写入DMA内存中预先分配的缓冲区。此时,CPU需要确定数据何时彻底进入缓冲区,以便确保数据存入后,再启动DMA传输。

我们进一步探讨这一情况,假设数据已经被缓存于中间组件中,如果相邻的缓存操作将要写入相邻的地址(即位于同一个 cache line 中),那么通过将不同数据进行聚合处理,可以减少写入次数,从而节省总线资源。这一操作与 AxCACHE[1] Modifiable 信号的机制密切相关。

1.2.2 Modifiable, AxCACHE[1]

当 AxCACHE[1] 置高时,表示传输过程中,该写传输事务的传输特性可以改变。

协议列举了一些传输事务改变的情形:

  • 一个传输事务可以分解为多个更小的传输事务;
  • 同样地,多个传输事务可以被聚合为一个整体,这与上一节所描述的现象一致;
  • 在读传输事务中,系统可以预取相邻地址的读数据,以确保目的地址返回的数据量超过主机的需求;
  • 对于写传输事务,系统允许访问比需求地址范围更大的区域,并通过WSTRB信号来防止更新无关的数据;

上述几种情况中,几项信号可以发生改变(Modify):

  • 传输地址字段 AxADDR;
  • 传输位宽字段 AxSIZE;传输长度字段 AxLEN;
  • 传输类型字段 AxBURST;

此外,AxID参数、AxQOS参数等信号也是可以调整的,AxID参数的调整常见于interconnect的输出。

AxCACHE信号虽然可以进行修改,但也受到一些特定的限制。对于存储属性相关的信号进行修改时,必须确保不会降低传输事务对AXI组件的可见性,不能改变信号的传播路径,也不能影响事务对缓存的访问需求。此外,修改存储属性信号时需要考虑整个地址范围内的事务影响。

协议明确要求AxLOCK和AxPROT的信号不可更改。此外,在以下两种情况下,事务的信号不可更改:

如果修改后的事务地址超过了原地址的4K范围,这种修改将被视为无效操作。第二种情况与原子操作相关,具体信息可在手册中找到。

当AxCACHE[1]被设置为低值时,表明在传输过程中,该写传输事务的传输特性无法被改变。

在下图所示的场景中,某些信号是不可更改的。然而,ID 和 QoS 等信号仍然可以进行调整。例如,前者在多机通信场景中,通过 interconnect 连接后会发生变化,这与其存储属性无关。

在这里插入图片描述

AxCACHE 信号可以改变,但只能从 bufferable 修改为 non-bufferable。

1.2.3 cache-allocate

对于读写事务,AxCACHE中的高2比特位用于判断本次传输事务所访问地址中的数据是否存在缓存中,其中每个比特位分别用于判断是否存在缓存中的数据。

对于读事务 2 比特分别表示:

当前地址的数据可能已被前期访问所分派空间并存储在 cache 中。

当前地址的数据可被缓存至 cache 中,是因为其他主机事务导致空间被分配用于缓存,或者是本机的其他类型事务导致数据被缓存。(对于读事务而言,这相当于上一次的写事务,反之亦然)

若 2 比特值为 2'b00,则表示 CPU 指令该传输事务无需至缓存中查找,必须直接自主机存储系统读取或写入。

当 2 比特的值不同于 2'b00 时,可能已经在 cache 中存储了该地址缓存。因此,该传输事务必须首先检查 cache 中是否存在该地址缓存,若不存在则需访问主存储。

这里可能存在这种情况,尽管CPU按照指令顺序认为该数据已缓存,但由于指令出现乱序或数据未完全就绪等原因,实际存储情况可能与CPU记录的不一致,具体判断需由缓存控制器完成。

我们对读写事务中的AxCACHE[2]AxCACHE[3]特性进行了详细分析,其中,写事务是关键环节。

当AWCACHE[3]置高时,表示本主机可能已缓存写事务的数据,应首先在缓存中查找对应项。当AWCACHE[3]置低而AWCACHE[2]置高时,该位置的数据可能因他机操作或本机读事务已缓存,仍需在缓存中查找。

在读事务中,字段的含义与写事务相对应,因此可以通过交换读写事务的顺序来实现功能。同时需要关注的是,相应位域的分配标志位交换位置。

1.3 Memory types

总体而言,AxCACHE[3:0]的主要功能在于为不同存储类型(Memory type)设计编码方式。在前文部分,我们仅对各个比特位的含义进行了说明。换句话说,根据传输事务的具体存储类型,可以执行相应的操作。

在这里插入图片描述

存储类型可划分为四种类型,我们依次探讨每一种情况。除去上表所述情况,AxCACHE剩余的可能数值均作为备用使用。

在访问 Device 时,AxCACHE[3:1]被设定为3’b000,传输事务在中间节点无法进行修改。具体而言,不能进行预读操作(Prefetch read)和汇聚写操作(Merge write)。这是因为,在访问非存储外设时,读写操作涉及寄存器值,预取数据并非必要。而将不同类型的写事务进行聚合可能导致预期之外的问题,例如相邻寄存器操作的顺序可能无法按照预期进行。

基于 AxCACHE[0] 决定 device 访问是否可以被中间节点缓存,影响 bufferable 性质。中间节点缓存对 device 访问的控制情况,以及 bufferable 性质的决定因素。

Normal访问定义为正常地访问存储介质,而不进行缓存查找,其中AxCACHE[3:1]被设置为001。在Normal非缓存访问中,中间组件能够对传输事务信息进行修改,并提供事务聚合的支持。

基于AxCACHE[0]的设置,可以控制是否可以将normal访问结果缓存到中间节点中,同时也决定了该访问是否具备bufferable性质。

Write-through访问策略
在Write-through访问策略中,缓存的写入操作采用直写方式,即在进行写入操作的同时,也会同步写入主存储中。在此时,AxCache[1:0]会被设置为2’b10,从而允许中间组件修改传输事务,实现写入事务的聚合与读取操作的预取。在此过程中,AxCache[0]会被置低,确保每个写入事务最终都能正确写入目标地址。

通过缓存机制,读取数据时可以利用缓存层存储的记录,每次读写操作均需进行缓存查找,以定位相应的表项信息。

基于 AxCache[3:2] 的不同,从图中可得共有 4 种情况,分别代表不同的分派提示类型。例如,No-allocate 建议不要为该事务分配缓存空间。Read-allocate 则建议将读事务分配缓存,但不建议为写事务分配缓存。然而,这些建议都是基于处理器从性能出发提出的,由缓存控制器根据情况决定执行。

Write-back访问策略即为缓存层的写回机制,其特点在于数据仅存于缓存中,而被替换的缓存单元则在后续操作中被写入到主存储器。该策略表明,当进行Write-back操作时,数据仅存于缓存中,而被替换的缓存单元则在后续操作中被写入到主存储器。

AxCache[1:0] = 2’b10,即中间组件可以修改传输事务,并且进行缓存。

与Write-through访问相比,区别在于写回策略中并不是每次写事务后都需要更新主缓存,因此无需将每个写事务传输至原本的目的地(即主存储)。

推荐阅读
https://zhuanlan.zhihu.com/p/148813963

全部评论 (0)

还没有任何评论哟~