AXI4---原子访问

2024-04-24 12:44
文章标签 访问 原子 axi4

本文主要是介绍AXI4---原子访问,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

先理解一下什么是Single-copy atomicity size:

"Single-copy atomicity size"(单副本原子性大小)是一个概念,它定义了事务必须原子性地更新的最小数据块的大小,以字节为单位。原子性意味着在事务执行期间,数据的任何更改要么全部完成,要么完全不做,从而保证了数据的一致性和完整性。

这里的“单副本”指的是在一次事务中,数据的更新操作是作为一个整体进行的,对于其他观察者(系统中的其他主设备)而言,这个更新是不可见的,直到整个事务完成。这样做的目的是为了避免在多主设备系统中出现数据不一致的情况。

具体来说,单副本原子性大小的意义包括:

  1. 事务块大小:它规定了在执行写事务时,必须以不小于指定单副本原子性大小的块来更新内存。

  2. 数据一致性:确保在任何给定时间,系统内的数据项要么保持原样,要么被完整地更新为新值,不会出现中间状态。

  3. 系统要求:系统中所有参与通信的组件都必须支持所需的单副本原子性大小。例如,如果一个系统要求支持64位的原子操作,那么所有相关的主设备、从设备和互连都必须能够处理至少64位的原子事务。

  4. 设计灵活性:AXI4协议不强制要求特定的单副本原子性大小,允许系统设计者根据具体的应用需求来确定合适的大小。

  5. 通信组:不同的系统组件组可以有不同的单副本原子性大小,以适应它们之间的通信需求。

例如,如果单副本原子性大小设置为32位,则任何大于32位的事务必须以32位的倍数来更新内存,确保32位的数据项(如一个整数或浮点数)要么完全不被更改,要么被完整地更新。

1. 单副本原子性大小

AXI4协议引入了单副本原子性大小的概念。这个术语定义了一个事务原子性更新的最小字节数。AXI4协议要求大于单副本原子性大小的事务必须至少以单副本原子性大小的块来更新内存。

注意

  • 原子性并不定义数据更新的确切瞬间。必须确保的是,没有任何master能够观察到原子数据的部分更新形式。例如,在许多系统中,如链表这样的数据结构由32位原子元素组成。对这些元素之一的原子更新要求整个32位值同时更新。对于任何master来说,观察到一次只更新16位,然后在后来的某个时间点更新另外16位,是不可接受的。

更复杂的系统需要支持更大的原子元素,特别是64位原子元素,以便master可以使用基于这些更大原子元素的数据结构进行通信。

系统中支持的单副本原子性大小很重要,因为参与给定通信的所有组件都必须支持所需的原子元素大小。如果两个master通过互连和单个slave进行通信,那么所有参与的组件都必须确保事务以所需的大小原子性地处理。

AXI4协议不要求特定的单副本原子性大小,系统可以设计成支持不同的单副本原子性大小。不同的组件组可以在组内通信时有不同的单副本原子性大小。在AXI4中,术语“单副本原子组”(single-copy atomic group)描述了可以以特定原子性进行通信的组件组。例如,图A7-1显示了一个系统,其中:

  • 处理器、数字信号处理器(DSP)、DRAM控制器、DMA控制器、外设、SRAM内存和相关的互连,构成了一个32位单副本原子组。
  • 处理器、DSP、DRAM控制器和相关的互连,也构成了一个64位单副本原子组。

一个事务的原子性保证永远不会大于其起始地址的对齐边界。例如,在一个64位单副本原子组中,如果没有对齐到8字节边界的突发传输,那么它没有任何64位单副本原子性保证。

与事务相关联的byte strobes不影响单副本原子性大小。

1.1 多副本写原子性

为了指定系统提供多副本原子性,定义了一个名为Multi_Copy_Atomicity的属性。

如果将Multi_Copy_Atomicity属性设置为True,则定义系统具有此属性。

不支持Multi_Copy_Atomicity属性的系统,默认值为False。

如果满足以下条件,系统被定义为具有多副本原子性:

  • 所有组件观察到对同一位置的写入是按相同顺序的。
  • 除了发起者之外,任何组件都能观察到对某个位置的写入,该写入对所有组件都是可观察的。

多副本原子性可以通过以下方式确保:

  • 使用单个串行化点(Point of Serialization, POS),对于给定的地址,确保对同一位置的所有访问都是有序的。这必须确保在该位置的新值对任何组件可见之前,该位置的所有一致性缓存副本都被使无效。
  • 避免使用位于任何组件上游的转发缓冲区。这防止了某个位置的缓冲写入在对所有组件都可见之前,就对某些组件变得可见。

注意

如果使用ARM v8架构处理器,系统必须具有Multi_Copy_Atomicity属性。这是支持带有获取(Acquire)的加载(Load)和带有释放(Release)的存储(Store)指令所必需的。带有释放的存储指令要求该存储操作是多副本原子性的。

这篇关于AXI4---原子访问的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/931795

相关文章

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

Lua 脚本在 Redis 中执行时的原子性以及与redis的事务的区别

在 Redis 中,Lua 脚本具有原子性是因为 Redis 保证在执行脚本时,脚本中的所有操作都会被当作一个不可分割的整体。具体来说,Redis 使用单线程的执行模型来处理命令,因此当 Lua 脚本在 Redis 中执行时,不会有其他命令打断脚本的执行过程。脚本中的所有操作都将连续执行,直到脚本执行完成后,Redis 才会继续处理其他客户端的请求。 Lua 脚本在 Redis 中原子性的原因

OpenStack中加固VNC访问安全

OpenStack中加固VNC访问安全 目录 OpenStack中加固VNC访问安全1.问题发现2.流程分析3.潜在后果4.解决方案④配置IPtables⑤VNC添加访问密码 5.参考链接 1.问题发现 很多同学使用noVNC之后都没有退出终端的习惯,往往都是用完了就直接关闭网页窗口。说这样隐患很大,如果内网里面有一些script kiddie随时都能将我们线上的虚拟

Qt: 详细理解delete与deleteLater (避免访问悬空指针导致程序异常终止)

前言 珍爱生命,远离悬空指针。 正文 delete 立即删除:调用 delete 后,对象会立即被销毁,其内存会立即被释放。调用顺序:对象的析构函数会被立即调用,销毁该对象及其子对象。无事件处理:如果在对象销毁过程中还涉及到信号和槽、事件处理等,直接 delete 可能会导致问题,尤其是在对象正在处理事件时。适用场景:适用于在确定对象已经不再被使用的情况下,并且不涉及异步处理或事件循环中的

Windows下安装Elasticsearch,启动报错,解决方法,访问

对于Windows用户,我们推荐使用MSI安装包进行安装。这个安装包使用图形用户界面来引导你进行安装。 首先,从这里https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.1.1.msi下载Elasticsearch 6.1.1的MSI安装包。 然后双击下载好的安装包文件启动图形化安装程序,在第一个界面,选

Redis 篇-深入了解基于 Redis 实现分布式锁(解决多线程安全问题、锁误删问题和确保锁的原子性问题)

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录         1.0 分布式锁概述         1.1 Redis 分布式锁实现思路         1.2 实现基本的分布式锁         2.0 Redis 分布式锁误删问题         2.1 解决 Redis 分布式锁误删问题         3.0 Redis 分

访问controller404:The origin server did not find a current representation for the target resource

ider build->rebuild project。Rebuild:对选定的目标(Project),进行强制性编译,不管目标是否是被修改过。由于 Rebuild 的目标只有 Project,所以 Rebuild 每次花的时间会比较长。 参考:资料

Springboot工程配置https访问

背景 因为前端工程使用nginx配置了https访问,在https直接请求我们Springboot后端的http接口会报错。那么我们就需要配置使得我们后端的springboot服务支持https访问。 证书生成 在配置springboot工程https之前,我们需要生成自签名证书以及Spring Boot通常使用的PKCS#12格式的密钥库。 生成自签名证书 openssl req -x