当前位置: 首页 > news >正文

【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 标准协议有五路独立的数据通道,这些通道都只支持单向传输,五路通道分别为:

  • 读地址通道:主机在读地址通道上写入想要读取的数据的地址以及控制信息;
  • 读数据通道:从机在接收到地址后,将该地址上的数据通过读数据通道发送给主机;
  • 写地址通道:主机在写地址通道上写地址控制信息;在写地址操作结束之后,即主机确保从机已经获得了此次传输的地址和控制信息后,才开始在写数据通道上写数据;
  • 写数据通道
  • 写回复通道:从机在写回复通道上,将此次写传输的状态回复给主机。

每一路数据通道都遵循双向握手机制,即使用 VALIDREADY 信号作为控制信号来传输数据,只有 VALIDREADY 同时为高的时候,才可以正常的发送数据,而通常情况下:

  • 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 读操作约束关系

首先我们讨论的是读操作约束关系:
RVALIDRREADY 对应读数据通路的信号;
ARVALIDARREADY对应读地址通路的信号;
读操作固定的约束关系为:数据通道必须要等待地址通道的数据传输完成才可以尝试握手操作

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中&#xff0c;你可以使用Java 8的流式API来完成这个任务。 以下是一个例子&#xff1a; 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开发的一款开源压力测试工具&#xff0c;体积小&#xff0c;功能全&#xff0c;使用方便&#xff0c;是一个比较轻量级的测试工具&#xff0c;使用起来非常简单。因为jmeter是java开发的&#xff0c;所以运行的时候必须先要安装jdk才可以。jmeter是免…...

网络编程 lesson5 IO多路复用

select 当需要在一个或多个文件描述符上等待事件发生时&#xff0c;可以使用select函数。 select函数是一个阻塞调用&#xff0c;它会一直等待&#xff0c;直到指定的文件描述符上有事件发生或超时。 select函数详解 int select(int nfds, fd_set *readfds, fd_set *writefd…...

码出高效_第一章 | 有意思的二进制表示及运算

目录 0与1的世界1.如何理解32位机器能够同时处理处理32位电路信号&#xff1f;2.如何理解负数的加减法运算3.溢出在运算中如何理解4.计算机种常用的存储单位及转换5.位移运算规则6.有趣的 && 和 & 浮点数1.定点小数&#xff08;为什么会出现浮点数表示&#xff1f;…...

测试类型(单元、集成、系统或手动测试)

测试类型(单元、集成、系统或手动测试) 单元测试 单元是系统的单个组件&#xff0c;例如类或单个方法。孤立地测试单元称为单元测试。 优点&#xff1a;速度快/易控/易写 缺点&#xff1a;缺乏现实性/无法捕获所有错误&#xff08;例如与其他组件或服务的交互&#xff09; 单元…...

【笔试强训编程题】Day3.(字符串中找出连续最长的数字串 69385)和(数组中出现次数超过一半的数字 23271)

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;笔试强训编程题 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01;! 文章目录…...

学懂缓存雪崩,缓存击穿,缓存穿透仅需一篇,基于Redis讲解

在了解缓存雪崩、击穿、穿透这三个问题前&#xff0c;我们需要知道为什么我们需要缓存。在了解这三个问题后&#xff0c;我们也必须知道使用Redis时&#xff0c;如何解决这些问题。 所以我将按照"为什么我们需要缓存"、"什么是缓存雪崩、击穿、穿透"、&qu…...

Android 12.0SystemUI 状态栏下拉和通知栏始终居中

1.概述 在12.0的产品定制化开发中,在系统原生的SystemUI 状态栏下拉和通知栏,默认是根据手势的x 坐标的位置居中显示,但是如果太靠两边感觉不太好,下拉太靠边不太好看所以产品提出不管手势在哪里下滑 都要去下拉和通知栏居中显示 会比较好看些 下面就来实现这个需求 2.Sy…...

面向过程编程和面向对象编程的区别

目录 一、面向过程编程 举个栗子&#xff1a; 二、面向对象编程 继续举个栗子&#xff1a; 三、区别 面向过程编程和面向对象编程是两种不同的编程范式&#xff0c;它们在代码的组织和结构上有所不同。 一、面向过程编程 面向过程编程&#xff08;Procedural Programmin…...

2023年数学与人工智能国际会议——火热征稿中~

会议简介 Brief Introduction 2023年数学与人工智能国际会议(CFMAI 2023) 会议时间&#xff1a;2023年9月22 -24日 召开地点&#xff1a;中国杭州 大会官网&#xff1a;www.cfmai.org 2023年数学与人工智能国际会议(CFMAI 2023)由中山大学主办&#xff0c;CoreShare科享学术交流…...

格式化数字的实用命令:numfmt

在 Linux 系统中&#xff0c;numfmt 是一个用于格式化数字的实用工具。它可以将数字转换为不同的表示方式&#xff0c;如十进制、二进制、字节单位等。本文将详细介绍 numfmt 命令的使用方法&#xff0c;并提供一些适合初学者的示例。 Numfmt 命令语法 numfmt 命令的基本语法如…...

传统的交叉熵函数如何通过平滑处理可以适用于多标签分类任务

传统的交叉熵损失函数通常用于多分类问题&#xff0c;而在多标签分类问题中&#xff0c;每个样本可能属于多个标签&#xff0c;因此需要使用一些新的技术来优化交叉熵损失函数。 一种常用的技术是标签平滑&#xff08;Label Smoothing&#xff09;&#xff0c;它可以优化传统的…...

关于Netty的一些问题

1.Netty 是什么&#xff1f; Netty是 一个异步事件驱动的网络应用程序框架&#xff0c;用于快速开发可维护的高性能协议服务器和客户端。Netty是基于nio的&#xff0c;它封装了jdk的nio&#xff0c;让我们使用起来更加方法灵活。 2.Netty 的特点是什么&#xff1f; 高并发&…...

Java - ThreadLocal数据存储和传递方式的演变之路

Java - ThreadLocal数据存储和传递方式的演变之路 前言一. InheritableThreadLocal - 父子线程数据传递1.1 父子线程知识预热和 InheritableThreadLocal 实现原理1.2 InheritableThreadLocal 的诟病 二. TransmittableThreadLocal (TTL) 横空出世2.1 跨线程变量传递测试案例2.2…...

vuex三问

文章目录 一、什么是vuex&#xff1f;二、为什么使用vuex&#xff1f;三、如何使用vuex&#xff1f;1.首先安装vuex2.注册vue中3.实例化vuex的store4. 挂载在vue实例上5.在组件中就可以通过this.$store对vuex进行操作。 总结 一、什么是vuex&#xff1f; 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浮动&#xff1a;一、常见的三种网页布局形式&#xff1a;1.1 网页布局两大准则&#xff1a; 二 、浮动&#xff1a;2.1 浮动语法&#xff1a;2.2 浮动特性&#xff08;重难点&#xff09;&#xff1a;浮动元素通常与标准流的父级元素搭配使用&#xf…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例&#xff1a;使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例&#xff1a;使用OpenAI GPT-3进…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...