【ARM AMBA AXI 入门 1 - AXI 握手协议】
文章目录
- 1.1 AXI 双向握手机制简介
- 1.1.1 信号列表
- 1.1.2 双向握手目的
- 1.1.3 握手过程
- 1.2 数据通路的握手要求
- 1.2.1 读数据通路
- 1.2.2 读地址通路
- 1.2.3 写数据通路
- 1.2.4 写地址通路
- 1.2.5 写回复通路
- 1.2.6 全信号
- 1.3 不同数据通路间的约束关系
- 1.3.1 读操作约束关系
- 1.3.2 写操作约束关系(AXI3.0版)
- 1.3.3 写操作约束关系(AXI4.0版)
1.1 AXI 双向握手机制简介
AXI 标准协议有五路独立的数据通道,这些通道都只支持单向传输,五路通道分别为:
- 读地址通道:主机在读地址通道上写入想要读取的数据的地址以及控制信息;
- 读数据通道:从机在接收到地址后,将该地址上的数据通过读数据通道发送给主机;
- 写地址通道:主机在写地址通道上写地址和控制信息;在写地址操作结束之后,即主机确保从机已经获得了此次传输的地址和控制信息后,才开始在写数据通道上写数据;
- 写数据通道;
- 写回复通道:从机在写回复通道上,将此次写传输的状态回复给主机。
每一路数据通道都遵循双向握手机制,即使用 VALID 和 READY 信号作为控制信号来传输数据,只有 VALID 与 READY 同时为高的时候,才可以正常的发送数据,而通常情况下:
- VALID 信号用来表示什么时候 “地址、数据、和 控制信号” 是有效的;主设备置高 VALID 信号表示主设备已经将数据,地址或者控制信息放到的写总线上,并保持。
- READY 信号则用来表示什么时候从设备准备好采集数据了; 从设备置高 READY 信号表示从设备已经做好接收的准备。
主设备可以通过 VALID 信号置起来控制发送速度的同时,从设备也可以通过 READY 信号的置起与否控制接收速度,反压主设备的发送速度。
当双方的信息同时为高,时钟上升沿到达后,一次数据传输完成,在 1 到 N 次时钟上升沿后,双方传完了要传的信息后,两信号同时拉低。
1.1.1 信号列表
AXI 标准协议中,双向握手信号共10个,无论是主设备还是从设备,这10个信号都对应于5个输入信号,5个输出信号。
| 数据通路 | 握手信号对 |
|---|---|
| 写地址通路 | AWVALID, AWREADY |
| 写数据通路 | WVALID, WREADY |
| 写回复通路 | BVALID, BREADY |
| 读地址通路 | ARVALID, ARREADY |
| 读数据通路 | RVALID, RREADY |
1.1.2 双向握手目的
握手:目的是控制数据在总线上的流动和采样;
双向:目的是主设备和从设备都可以控制总线数据流动。于AXI总线 而言,无论是主设备还是从设备,都可以控制数据的传输。
1.1.3 握手过程
握手的三种情况:
-
READY 信号先于 VALID 信号改变:这种情况下,如果我们将目光对向主设备,会发现,从设备在主设备发送数据前就做好了接受的准备,当主设备VALID后,时钟上升沿就完成了数据的传输;READY 信号与 VALID 不同,接收方在置起 READY 之后发现:其实我好像还挺忙,然后拉低 READY 信号。只要此时 VALID 信号没有置起,这种操作是完全可以。

-
READY 信号与 VALID 信号同时改变:表明数据有效的同时也可以进行采样;

-
READY 信号晚于 VALID 信号改变:VALID信号先拉高,表明数据正确,再往后READY拉高,表明可以进行采样。

协议规定:“VALID信号一旦拉高,除非READY信号拉高接收数据完成,不会主动变低”,
1.2 数据通路的握手要求
以下的叙述包含两个前提:
- 默认READY和VALID信号为低,有效时为高;
- 叙述中VALID等待READY的表达,实际的意思为在VALID拉高后的时钟上升沿,检测READY是否为高,若为高,完成握手,并不代表VALID与READY的拉高顺序。
1.2.1 读数据通路
在一个 Burst 读传输操作时,从设备在数据有效时置高 RVALID,一旦置高,RVALID 需要等待 RREADY 信号拉高,完成握手,进行数据传输。读数据通道上包括从机发送给主机的读数据以及读操作完成状态回复,数据的宽度可以是 8,16,64,128,256,512 或者是 1024bits。
1.2.2 读地址通路
主设备在地址信号和控制信号有效时置高 ARVALID,一旦置高,需要等待从设备的ARREADY信号置高,完成握手,进行数据传输。虽然名字为读地址通道,但实际上仍由主机写入地址,只不过是写入要读取数据的地址。
1.2.3 写数据通路
在 Burst 写传输时,主设备在写数据有效时置高 WVALID 信号,拉高后 WREADY 等待 WREADY 信号拉高,完成握手。一般来说,写数据都发生在写地址操作之后,但也不是绝对的,在有些情况下,可以先写数据。但是,所有情况下,写回复必然是在写数据之后,是对此次写数据的状态回复。
写通道有一点读通道所不具有的特性是有 STROBE 信号,用于标识写数据中有效的传输字节,即有些无效的数据,出于减少主机工作量的目的,或者在读写宽度不对称时,被放到写数据通道上和有效数据一起发送。而 STROBE 的信号的作用就是标识出这些无用的数据,告知从机不需要接收无用数据。
1.2.4 写地址通路
主设备在地址信息与控制信息有效时,拉高 AWVALID,拉高后 AWVALID 等待从设备拉高 AWREADY,完成握手,进行数据传输。
1.2.5 写回复通路
用于从机将写完成情况回复给主机。所有的写传输操作都需要在写回复通道上接收此次写传输操作的完成情况。值得注意的是写回复是针对一次突发传输的,而不是针对每一次的写数据操作的。(一次突发传输包括了多次写操作)。
1.2.6 全信号
AXI 总线中有两个全局信号:
ACLK,全局的时钟信号,所有的传输操作都发生在ACLK的上升沿;ARESETn,全局复位信号,低电平有效。
1.3 不同数据通路间的约束关系
在前文中,我们延伸出通道内的约束关系如下
VALID信号一旦拉高,除非READY信号拉高接收数据完成,不会主动变低
不同数据通路之间,同样的存在约束关系,这很好理解:写回复通路的信号传递一定晚于写数据通路,这就天然的构建起不同通路的先后顺序关系,假如不满足这种约束关系,AXI 协议就可能会发生死锁,即 deadlock 没有办法正确工作。
同时一个AXI slave 按功能进行区分的行为建模,无非是读与写两种操作,读操作与写操作的约束关系同样不同。
1.3.1 读操作约束关系
首先我们讨论的是读操作约束关系:
RVALID 和 RREADY 对应读数据通路的信号;
ARVALID 和 ARREADY对应读地址通路的信号;
读操作固定的约束关系为:数据通道必须要等待地址通道的数据传输完成才可以尝试握手操作。
1.3.2 写操作约束关系(AXI3.0版)
其次我们讨论的是写操作的约束关系
这里涉及到了三个数据通路,来考虑约束关系,唯一的一个硬约束关系为,BVALID需要等到写数据通路完成握手后才能置高。
初学者在这里往往会感到迷惑
比如说 BREADY 跟 WVALD 与 WREADY间有无关系?
BVALID 和 AWVALID与AWREADY有无关系?实际上是,只要设计中的线没有进行相连,就是没有关系,针对于AXI而言,甚至可以 BREADY 信号第一个拉高,再去考虑其他信号的关系,唯一需要满足的即为写回复通路与写数据通路之间的约束,剩下的信号都是自由的。
1.3.3 写操作约束关系(AXI4.0版)
AMBA4在兼容AMBA3的基础上更为严格,目的是希望从设备不会在接收到数据信号后还需要等待地址信号。
推荐阅读:
https://developer.arm.com/documentation/100806/0402/?lang=en
https://aijishu.com/a/1060000000134828
http://www.tlcement.com/37357.html
https://zhuanlan.zhihu.com/p/96804919
相关文章:
【ARM AMBA AXI 入门 1 - AXI 握手协议】
文章目录 1.1 AXI 双向握手机制简介1.1.1 信号列表1.1.2 双向握手目的1.1.3 握手过程 1.2 数据通路的握手要求1.2.1 读数据通路1.2.2 读地址通路1.2.3 写数据通路1.2.4 写地址通路1.2.5 写回复通路1.2.6 全信号 1.3 不同数据通路间的约束关系1.3.1 读操作约束关系1.3.2 写操作约…...
详解uni-app应用生命周期函数
详解uni-app应用生命周期函数 详解uni-app应用生命周期函数 文章目录 详解uni-app应用生命周期函数前言一、应用生命周期函数二、页面生命周期函数总结 前言 UNI-APP学习系列之详解uni-app应用生命周期函数 一、应用生命周期函数 函数名说明onLaunch当uni-app 初始化完成时触…...
【WebFlux】List指定bean引用对象更新后同步到List
Java 8的流式API实现 如果你想在WebFlux中更新List中指定bean的引用对象并将其同步到List中,你可以使用Java 8的流式API来完成这个任务。 以下是一个例子: List<MyBean> myBeanList new ArrayList<>(); MyBean myBean1 new MyBean(); My…...
【JavaSE】Java基础语法(二十六):Collection集合
文章目录 1. 数组和集合的区别2. 集合类体系结构3. Collection 集合概述和使用【应用】4. Collection集合的遍历【应用】5. 增强for循环【应用】 1. 数组和集合的区别 相同点 都是容器,可以存储多个数据不同点 数组的长度是不可变的,集合的长度是可变的 数组可以存基本数据类型…...
jmeter做接口压力测试_jmeter接口性能测试
jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简单。因为jmeter是java开发的,所以运行的时候必须先要安装jdk才可以。jmeter是免…...
网络编程 lesson5 IO多路复用
select 当需要在一个或多个文件描述符上等待事件发生时,可以使用select函数。 select函数是一个阻塞调用,它会一直等待,直到指定的文件描述符上有事件发生或超时。 select函数详解 int select(int nfds, fd_set *readfds, fd_set *writefd…...
码出高效_第一章 | 有意思的二进制表示及运算
目录 0与1的世界1.如何理解32位机器能够同时处理处理32位电路信号?2.如何理解负数的加减法运算3.溢出在运算中如何理解4.计算机种常用的存储单位及转换5.位移运算规则6.有趣的 && 和 & 浮点数1.定点小数(为什么会出现浮点数表示?…...
测试类型(单元、集成、系统或手动测试)
测试类型(单元、集成、系统或手动测试) 单元测试 单元是系统的单个组件,例如类或单个方法。孤立地测试单元称为单元测试。 优点:速度快/易控/易写 缺点:缺乏现实性/无法捕获所有错误(例如与其他组件或服务的交互) 单元…...
【笔试强训编程题】Day3.(字符串中找出连续最长的数字串 69385)和(数组中出现次数超过一半的数字 23271)
作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:笔试强训编程题 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!!! 文章目录…...
学懂缓存雪崩,缓存击穿,缓存穿透仅需一篇,基于Redis讲解
在了解缓存雪崩、击穿、穿透这三个问题前,我们需要知道为什么我们需要缓存。在了解这三个问题后,我们也必须知道使用Redis时,如何解决这些问题。 所以我将按照"为什么我们需要缓存"、"什么是缓存雪崩、击穿、穿透"、&qu…...
Android 12.0SystemUI 状态栏下拉和通知栏始终居中
1.概述 在12.0的产品定制化开发中,在系统原生的SystemUI 状态栏下拉和通知栏,默认是根据手势的x 坐标的位置居中显示,但是如果太靠两边感觉不太好,下拉太靠边不太好看所以产品提出不管手势在哪里下滑 都要去下拉和通知栏居中显示 会比较好看些 下面就来实现这个需求 2.Sy…...
面向过程编程和面向对象编程的区别
目录 一、面向过程编程 举个栗子: 二、面向对象编程 继续举个栗子: 三、区别 面向过程编程和面向对象编程是两种不同的编程范式,它们在代码的组织和结构上有所不同。 一、面向过程编程 面向过程编程(Procedural Programmin…...
2023年数学与人工智能国际会议——火热征稿中~
会议简介 Brief Introduction 2023年数学与人工智能国际会议(CFMAI 2023) 会议时间:2023年9月22 -24日 召开地点:中国杭州 大会官网:www.cfmai.org 2023年数学与人工智能国际会议(CFMAI 2023)由中山大学主办,CoreShare科享学术交流…...
格式化数字的实用命令:numfmt
在 Linux 系统中,numfmt 是一个用于格式化数字的实用工具。它可以将数字转换为不同的表示方式,如十进制、二进制、字节单位等。本文将详细介绍 numfmt 命令的使用方法,并提供一些适合初学者的示例。 Numfmt 命令语法 numfmt 命令的基本语法如…...
传统的交叉熵函数如何通过平滑处理可以适用于多标签分类任务
传统的交叉熵损失函数通常用于多分类问题,而在多标签分类问题中,每个样本可能属于多个标签,因此需要使用一些新的技术来优化交叉熵损失函数。 一种常用的技术是标签平滑(Label Smoothing),它可以优化传统的…...
关于Netty的一些问题
1.Netty 是什么? Netty是 一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。Netty是基于nio的,它封装了jdk的nio,让我们使用起来更加方法灵活。 2.Netty 的特点是什么? 高并发&…...
Java - ThreadLocal数据存储和传递方式的演变之路
Java - ThreadLocal数据存储和传递方式的演变之路 前言一. InheritableThreadLocal - 父子线程数据传递1.1 父子线程知识预热和 InheritableThreadLocal 实现原理1.2 InheritableThreadLocal 的诟病 二. TransmittableThreadLocal (TTL) 横空出世2.1 跨线程变量传递测试案例2.2…...
vuex三问
文章目录 一、什么是vuex?二、为什么使用vuex?三、如何使用vuex?1.首先安装vuex2.注册vue中3.实例化vuex的store4. 挂载在vue实例上5.在组件中就可以通过this.$store对vuex进行操作。 总结 一、什么是vuex? Vuex 是一个专为 Vue.…...
Selenium自动化测试(基于Java)
目录 一. 了解Selenium ✅1.1 概念 ✅1.2 作用 ✅1.3 特点 ✅1.4 工作原理 二. Selenium Java 环境搭建 ✅2.1 下载 Chrome 浏览器 ✅2.2 查看浏览器的版本 ✅2.3 下载浏览器驱动 ✅2.4 验证环境是否搭建成功 三. Selenium 常用 API ✅3.1 定位元素 ✅3.2 操作对象…...
【网页布局形式----浮动】
网页布局形式----浮动 css浮动:一、常见的三种网页布局形式:1.1 网页布局两大准则: 二 、浮动:2.1 浮动语法:2.2 浮动特性(重难点):浮动元素通常与标准流的父级元素搭配使用…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG
TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码:HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...
