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

相关文章

MySQL中的InnoDB单表访问过程

《MySQL中的InnoDB单表访问过程》:本文主要介绍MySQL中的InnoDB单表访问过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、访问类型【1】const【2】ref【3】ref_or_null【4】range【5】index【6】

前端如何通过nginx访问本地端口

《前端如何通过nginx访问本地端口》:本文主要介绍前端如何通过nginx访问本地端口的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、nginx安装1、下载(1)下载地址(2)系统选择(3)版本选择2、安装部署(1)解压(2)配置文件修改(3)启动(4)

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

NGINX 配置内网访问的实现步骤

《NGINX配置内网访问的实现步骤》本文主要介绍了NGINX配置内网访问的实现步骤,Nginx的geo模块限制域名访问权限,仅允许内网/办公室IP访问,具有一定的参考价值,感兴趣的可以了解一下... 目录需求1. geo 模块配置2. 访问控制判断3. 错误页面配置4. 一个完整的配置参考文档需求我们有一

C#实现访问远程硬盘的图文教程

《C#实现访问远程硬盘的图文教程》在现实场景中,我们经常用到远程桌面功能,而在某些场景下,我们需要使用类似的远程硬盘功能,这样能非常方便地操作对方电脑磁盘的目录、以及传送文件,这次我们将给出一个完整的... 目录引言一. 远程硬盘功能展示二. 远程硬盘代码实现1. 底层业务通信实现2. UI 实现三. De

python通过curl实现访问deepseek的API

《python通过curl实现访问deepseek的API》这篇文章主要为大家详细介绍了python如何通过curl实现访问deepseek的API,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编... API申请和充值下面是deepeek的API网站https://platform.deepsee

Nginx 访问 /root/下 403 Forbidden问题解决

《Nginx访问/root/下403Forbidden问题解决》在使用Nginx作为Web服务器时,可能会遇到403Forbidden错误,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录解决 Nginx 访问 /root/test/1.html 403 Forbidden 问题问题复现Ng

使用Dify访问mysql数据库详细代码示例

《使用Dify访问mysql数据库详细代码示例》:本文主要介绍使用Dify访问mysql数据库的相关资料,并详细讲解了如何在本地搭建数据库访问服务,使用ngrok暴露到公网,并创建知识库、数据库访... 1、在本地搭建数据库访问的服务,并使用ngrok暴露到公网。#sql_tools.pyfrom

Javascript访问Promise对象返回值的操作方法

《Javascript访问Promise对象返回值的操作方法》这篇文章介绍了如何在JavaScript中使用Promise对象来处理异步操作,通过使用fetch()方法和Promise对象,我们可以从... 目录在Javascript中,什么是Promise1- then() 链式操作2- 在之后的代码中使

如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件

《如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件》本文介绍了如何使用Docker部署FTP服务器和Nginx,并通过HTTP访问FTP中的文件,通过将FTP数据目录挂载到N... 目录docker部署FTP和Nginx并通过HTTP访问FTP里的文件1. 部署 FTP 服务器 (