AXI 原子访问

今天因为又看到了关于原子访问的问题,因此将对应的内容记录在这里。

在之前工作中会看到cpu中有原子指令,就是在做同一块memory地址进行读写时,会以原子的方式去写,读写期间不会在插入其他操作。后来在AMBA协议中也看到了原子访问的这种描述,就在想这两者之间的联系,想来想去,关系应该就是cpu发原子操作,互联协议保证原子操作的执行,但是互联上本身存在着很多的事务和传输,因此,怎么高效和可靠的完成原子传输就是互联要做的事情。

  1. AMBA3实现

在AMBA3中,采用LOCK操作来实现原子访问,本质上来说就是以READ-MODIFY-WRITE来作为连续的序列,第一笔读先来获取权限,此时axlock有效,之后的modify为多笔写操作,此时axlock依旧有效,当最后一笔写来临时,此时axlock无效,该笔访问操作完成。

注意:这里有几个关注点:

a. 一笔完整的lock操作中,不是lock信号不是都有效的;

b. lock操作会一起发起原子操作的master完全占有总线,这有两个点:

  1. lock操作需要等总线的所有操作都已经完成;

  2. lock操作会独占总线,在原子访问期间,其他所有的操作都不能干,这一点可是会降低总线带宽的哦。

c. lock访问不约束访问的id啥的;

因此,ARM在AMBA4优化了这个操作,为了提升总线带宽和性能,提出了exclusive的操作。

  1. AMBA4

在AMBA4中为了解决lock带来的总线占用问题,因此提出了exclusive。在exclusive上面,依旧采用READ-WRITE的操作,但是因为不再独占总线,因此需要slave侧来monitor exclusive操作,monitor的内容包含了transaction ID和transaction addr,slave侧需要监控每一个exclusive访问的ID,因此,可支持exclusive访问的数量会改变slave侧的monitor容量。

这里也有几个点需要注意:

a. exclusive访问并不会独占总线,会在slave侧记录exclusive访问;

b. 如果在exclusive访问期间,对应的memory空间被别的master写了,那么exclusive的写序列就没法完成,写数据也不会更新;

c. exclusive访问采用EXOKAY和OKAY来判别exclusive访问的成功与否。OKAY表示exclusive访问失败;

d. exclusive在整个序列期间exclusive信号都会有效。

OK,就这些了。

相关推荐
小雨笙笙43 分钟前
机器学习:线性回归学习
学习·机器学习·线性回归
HugoStudio_SWAN1 小时前
洛谷 P1420 / P1179 / B4262 最长连号、数字统计与词频统计——统计的三种面孔
c++·学习·程序人生·算法
是隼人1 小时前
buuctf-pwn [HarekazeCTF2019]baby_rop2(64位ret2libc)题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
aprilaaaaa3 小时前
(TC397 学习笔记)二、ICU和TIM的时钟计算
笔记·学习·fpga开发
hongmai6668883 小时前
ESP32-WROVER-IE-N4R8:外接天线+8MB内存,专治信号焦虑
笔记·单片机·嵌入式硬件·microsoft·risc-v
Persistent的粽子!3 小时前
C++:类与对象(一)
开发语言·c++·经验分享·笔记
xian_wwq4 小时前
【学习笔记】-深度认知系列-第8讲主流AI模型横向评测——GPT、Claude、Gemini、盘古、文心、通义
人工智能·笔记·学习
大牧师4 小时前
TypeORM 学习教程
数据库·sql·学习·node.js·orm·nest.js·typeorm
晨欣5 小时前
NVIDIA GPU 架构演进学习笔记(GPT-5.6 Terra 生成)
笔记·学习·gpu·显卡·nvidia·英伟达
小雪崩5 小时前
嵌入式学习 day40:数据库
数据库·学习