AXI学习记录(4)

AXI学习记录(4)------AXI传输属性介绍



前言

上一篇文章AXI数据传输结构介绍中介绍了数据传输结构相关内容,接下来看看传输属性相关内容,主要描述了Caches,Buffers和memory controller如何处理事务。


1 事务类型

Slave分为Memory Slave和Peripheral Slave(外设),使用AR/WCACHE两个信号来指定事务属性,这两个信号的作用如下:

  1. 事务如何在系统中进行。
  2. 系统级缓存(System-Level Cache)如何处理事务。
  3. AXI使用AxCACHE来替换AR/WCACHE。

2 AXI Memory属性介绍

2.1 AXI3 Memory属性相关信号

在AXI3中,AxCACHE[3:0]指定事务的Bufferable,Cacheable和Allocate的属性。
在这里插入图片描述
那么,这些属性表示什么意思,或者说有什么作用?

  1. AxCACHE[0], Bufferable (B) bit
    该bit为1时,可以延迟事务到达最终目的地的时间。
  2. AxCACHE[1], Cacheable (C) bit
    该bit为1时,Cache enable。
  3. AxCACHE[2], Read-Allocate (RA) bit
    该bit必须C为1时才有效,当该bit为1时,建议将事务分配为读操作,不是强制。
  4. AxCACHE[3], Write-Allocate (WA) bit
    该bit必须C为1时才有效,当该bit为1时,建议将事务分配为写操作,不是强制。

2.2 AXI4 Memory属性相关信号

在AXI4中,AxCACHE[1]改成了Modifiable bit,基本功能还是一样的。当该bit为1时,表示可以修改事务的特征,为0时表示无法修改事务特征。
AXI4中附加:在AXI4中,对同一Slave使用相同ID的所有设备事务必须按照彼此的顺序进行排序(什么叫彼此的顺序?),建议在AXI3中也这样做。

2.2.1 AxCACHE[1]信号描述

Non-modifiable,AxCACHE[1]=0,在不可修改事务中,下面这些信号不能更改。
在这里插入图片描述
Modifiable,AxCACHE[1]=1,在每个传输事务中,下面这4个信号可以修改:

  1. The transfer address, AxADDR.;
  2. The burst size, AxSIZE.;
  3. The burst length, AxLEN;
  4. The burst type, AxBURST。

下面两个信号不能修改:

  1. The lock type, AxLOCK;
  2. The protection type, AxPROT。

2.2.2 AxCACHE[3:2]信号描述

在AXI4中,AxCACHE[3:2] (即Read_Allocate和Write_Allocate两个信号)与AXI3相比略有区别。

在读事务中,对于Write_Allocate bit的定义如下:

  1. AXI3中,由于有写事务,该bit可能已经在Cache中预先定义了。
  2. AXI4中,由于另一个Master的操作,该bit可能已经在Cache中预先定义了。这里就是AXI4中多出来的处理方式。

在写事务中,对于Read_Allocate bit的定义如下:

  1. AXI3中,由于有读事务,该bit可能已经在Cache中预先定义了。
  2. AXI4中,由于另一个Master的操作,该bit可能已经在Cache中预先定义了。这里就是AXI4中多出来的处理方式。

注意:当AxCACHE[3:2]=0‘b00时,不需要去查看Cache;当其不为0‘b00时,必须从Cache中查找事务。

2.2.3 Memory Type

下图中展示了AXI4的AxCACHE[3:0]属性,可以看出和前面AXI3(下图括号中的值是AXI3的)中还是有一些区别,主要就是在Read/Write-Allocate这里。
在这里插入图片描述
下面将指定每种Memory Type的行为:

Device Non-bufferable

  • 写响应必须从最终目的地获取;
  • 读数据必须从最终目的地获取;
  • 事务不可更改;
  • 读操作不能预先读取,写操作不能合并;
  • 从同一ID到同一Slave的不可更改(AxCACHE[1] = 0)读写事务,必须保持顺序。

Device Bufferable

  • 写响应可以从某个中间节点获取;
  • 写事务必须及时出现在最终目的地(怎么才叫及时?);
  • 读数据必须从最终目的地获取;
  • 事务不可更改;
  • 读操作不能预先读取,写操作不能合并;
  • 从同一ID到同一Slave的不可更改(AxCACHE[1] = 0)读写事务,必须保持顺序。

Device Non-bufferable和Device Bufferable这两种Memory Type都是不可更改的两者的区别在于写响应的获取位置在哪,而读事务则没有区别


Normal Non-cacheable Non-bufferable

  • 写响应必须从最终目的地获取;
  • 读数据必须从最终目的地获取;
  • 事务可更改;
  • 写操作能合并;
  • 从同一ID到重叠地址(什么是重叠地址?)的读写事务,必须保持顺序。

Normal Non-cacheable Bufferable

  • 写响应可以从某个中间节点获取;
  • 写事务必须及时出现在最终目的地(怎么才叫及时?Spec中还专门说没有机制来确定写事务何时出现在最终目的地,那该如何确定?);
  • 读数据必须从最终目的地 or 正在到最终目的地的写事务中(如果使用该种方式,必须是最新的写事务,不能缓存数据供后续读取)获取;
  • 事务可更改;
  • 写操作能合并;
  • 从同一ID到重叠地址的读写事务,必须保持顺序。

对于从正在到最终目的地的写事务中读取数据的操作,该数据与同时到达最终目的地的读写事务无法区分,故不能用来当做"写事务必须及时出现在最终目的地"。


Write-Through No-Allocate

  • 写响应可以从某个中间节点获取;
  • 写事务必须及时出现在最终目的地;
  • 读数据可以从中间缓存获取;
  • 事务可更改;
  • 写操作能合并;
  • 读写事务需要缓存查找;
  • 同一ID到重叠地址的读写事务,必须保持顺序;
  • 建议内存系统不分配这些事务,避免影响性能(为什么只有这里说了会影响性能,上面那些不会吗?)。

Write-Through Read-Allocate

  • 满足Write-Through No-Allocate的要求;
  • 建议分配读事务,不分配写事务。

Write-Through Write-Allocate

  • 满足Write-Through No-Allocate的要求;
  • 建议分配写事务,不分配读事务。

Write-Through Read and Write-Allocate

  • 满足Write-Through No-Allocate的要求;
  • 建议分配写事务,建议分配读事务。(那到达分配哪个?)

Write-Back No-Allocate

  • 写响应可以从某个中间节点获取;
  • 写事务不必及时出现在最终目的地;
  • 读数据可以从中间缓存获取;
  • 事务可更改;
  • 可以预先读取;
  • 写操作可合并;
  • 读写事务需要缓存查找;
  • 同一ID到重叠地址的读写事务,必须保持顺序;
  • 建议内存系统不分配这些事务,避免影响性能。

Write-Back Read-Allocate

  • 满足Write-Back No-Allocate的要求;
  • 建议分配读事务,不分配写事务。

Write-Back Write-Allocate

  • 满足Write-Back No-Allocate的要求;
  • 建议分配写事务,不分配读事务。

Write-Back Read and Write-Allocate

  • 满足Write-Back No-Allocate的要求;
  • 建议分配读事务,建议分配写事务。

2.2.4 不匹配的Memory属性

对于访问同一块内存区域的不同代理,可以使用不匹配Memory属性,需要遵守下面的规则:

  • 访问同一内存区域的所有Masters,必须在任何层次结构级别上对该内存区域有一致的可缓存性。
    对于不可缓存的Memory区域:所有Master都使用AxCACHE[3:2]=0‘b00的事务访问该区域。
    对于可缓存的Memory区域:Master根据不同的Memory Type设置AxCACHE[3:2]。
  • 不同的Master可以使用不同的分配指示;
  • 如果一个地址是Normal不可缓存的,那么任何Master都可以使用设备内存事务访问它;
  • 如果寻址区域具有Bufferable属性,则任何Master都可以使用不允许缓冲行为的事务访问该区域。

例如:要求从最终目的地址回复的事件不允许可缓存行为。

2.3 事务缓冲(Buffering)

为什么有事务缓冲,目的就是允许中间节点生成相应,系统可以优化操作延迟和带宽。需要保证:

  • 数据最终一致性:缓冲的写操作按照正确的顺序提交到最终Memory/device。
  • 非缓存(no-cacheable)写操作的及时性(必须保证写操作在最终目的地及时可见),防止访问冲突。

3 访问权限

AXI中提供访问权限信号(AxPROT[2:0],其中ARPROT[2:0]用来控制读事务权限,AWPROT[2:0]用来控制写事务权限)来阻止非法传输(哪些行为称为非法传输?)。下图展示了AxPROT[2:0]的属性:
在这里插入图片描述
注意:该位所标示的只是建议,并不能在所有情况下精确表示。例如:一个混合了指令和数据的事物,默认情况下,推荐将访问标记为一个数据访问,除非明确知道该事物是一个指令访问。


总结

本文简单介绍了AXI事务属性,重点就是通过控制AxACHE[3:0]和AxPROT[2:0]这两个信号,来控制缓存行为和访问权限,确保系统组件正确处理事务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值