AXI Lite协议详解

AXI Lite协议详解

  axi(Advanced eXtensible Interface)是一种总线协议,该协议是ARM公司提出的amba(Advanced Microcontroller Bus Architecture)3.0协议中最重要的部分,是一种面向高性能、高带宽、低延迟的片内总线。

1、概述

  axi的地址/控制和数据相位是分离的,支持不对齐的数据传输,在突发传输中,只需要首地址,同时分离的读写数据通道、支持显著传输访问、乱序访问。

  amba总线包括apb、ahb、axi,其中axi向下兼容其余两种总线,xilinx在推出zynq芯片之后,ARM端就使用axi总线互联外设,PS端也可以通过axi总线与PL端进行数据交换。因此对于开发ZYNQ FPGA来说,AXI总线是必须掌握的。

  axi4分为axi _lite、axi _full、axi _stream,axi_full是一种全模式的数据传输总线,相对来说比较复杂,支持突发传输,但是对于FPGA来说很多模式是不会被使用的,会使用到的信号和模式还是比较简单的。

  而axi _lite可以说是axi_full简化版本,不支持突发传输,每次只能读、写单个地址的数据,相对来说更加简单。

  axi _stream是一种流式传输协议,一般只在FPGA内部进行数据传输,各个信号比较简单。

  本文通过对手册的解读,对axi _lite协议进行讲解,通过一些时序图,加深对信号变化的理解。

2、axi _lite协议

  axi _lite接口的地址与数据通道是分离的,各自包含一组信号,数据的传输需要握手应答。包含写地址通道、写数据通道、写应答通道、读地址通道、读数据通道。因为读应答信号包含在读数据通道中,因此读过程少一个通道,每个通道的数据传输都需要握手,保证从机能正确接收数据。

  首先包括时钟信号ACLK和复位信号ARESETn,剩下的就是几个通道相关的信号了。

2.1、写地址通道

  写地址通道的作用就是将写操作的地址信号写入从机,写地址相关信号如下表所示,注意输入输出的方向是以主机模块为对象的。

表1 写地址通道信号
信号I/O位宽含义
AWADDRO32写地址信号
AWPROTO3写端口信号,lite协议中该信号一般为0。
AWVALIDO1写地址有效指示信号,高电平有效。
AWREADYI1写地址应答信号,高电平表示从机接收到主机输入的地址信号。

  需要写地址有效指示信号和写地址应答信号同时为高电平,表示从机接收到主机写入的地址数据,对应的时序有三种。

  如下所示,当写地址有效指示信号为高电平时,写地址应答信号开始为低电平,此时需要保持写地址有效指示信号,直到写应答信号拉高为止。

在这里插入图片描述

图1 写地址时序

  下图是第二种情况,写地址有效指示信号拉高时,写地址信号也为高电平,此时表示写入的地址已经被接收。

在这里插入图片描述

图2 写地址时序

  下图中写应答信号可能会提前拉高,那么写入地址有效后,下个时钟可以立即拉低。

在这里插入图片描述

图3 写地址时序

  注意:虽然说AWREADY信号可能会提前拉高,但是主机写入地址后必须主动拉高AWVALID信号,AWVALID不能等待AWREADY拉高后才拉高。

  当写地址通道写入地址数据后,必须等待从机的应答信号拉高后,地址信号和有效指示信号才能发送变化。

  后续通道的握手原理与该通道都一致,后续只会给其中一种时序图,希望能够理解。

2.2、写数据通道

  axi_lite总线可以通过掩码信号屏蔽部分数据线上的数据,1位掩码信号控制1字节数据的写入,掩码信号为低电平表示该字节数据不写入寄存器。昔日数据通道相应信号如下表所示:

表2 写数据通道信号
信号I/O位宽含义
WDATAO32写数据信号
WSTRBO4写数据掩码信号,低电平有效。
WVALIDO1写数据有效指示信号,高电平有效。
WREADYI1写数据应答信号,高电平表示从机接收到主机写入数据。

  写数据相关信号的时序如下图所示,只有当写入数据的应答信号为高电平时,才能表示主机将数据写入到从机中,此时才能将数据有效指示信号拉低,否则保持不变。

在这里插入图片描述

图4 写数据时序

  上述讲解了写地址和写数据通道后,是否会产生这样的疑问,必须在写地址完成后才能写入数据吗?

  手册中这幅图告诉了我们答案,如下图所示,图中有两种箭头。

  单向箭头指向可以在箭尾信号拉高之前或之后拉高的信号,意思就是两者的拉高顺序没有要求。即WVALID信号可以在AWREADY信号拉高之前或者之后拉高,因此写数据有效指示信号可以在写地址应答信号有效之前拉高,也表明写地址和写数据的有效信号可以同时拉高。

在这里插入图片描述

图5 写事务握手依赖关系

  双箭头指向必须在箭尾处信号拉高后才拉高的信号,比如BVALID信号必须在WVALID和WREADY均为高电平时才能拉高,即写数据完成后才能拉高写应答通道的主机应答信号。

  通过上文分析,写地址和写数据通道的信号时序可以如下图所示,地址和数据有效指示信号同时拉高,各自的应答信号拉高后立即拉低,其余时间保持不变。也是传输数据最快的方式,一般FPGA可以使用该时序。

在这里插入图片描述

图6 写地址、数据通道时序

2.3、写应答通道

  当主机向从机写入地址和数据之后,需要等待从机的写应答通道响应,告知主机此次写入是否正确,通过一个信号的状态可以查看从机是否正确接收数据。

表3 写应答通道信号
信号I/O位宽含义
BRESPI2应答状态信号,为0表示从机正确接收写数据。
BVALIDI1应答状态信号指示信号,高电平有效。
BREADYO1主机应答信号,表示接收到从机应答通道的信号。

  经过上面分析,BVALID信号必须在主机写入数据完成后,才能拉高,当写入BVALID有效时拉低,对应的时序图如下所示。

在这里插入图片描述

图7 写过程时序

2.4、读地址通道

  读地址通道相关信号与写地址通道相关信号含义一致,时序也一致,如下表所示,信号以AR开头,A表示地址,R表示读吧。

表4 读地址通道信号
信号I/O位宽含义
ARADDRO32读地址信号
ARPROTO3读端口信号,lite协议中该信号一般为0。
ARVALIDO1读地址有效指示信号,高电平有效。
ARREADYI1读地址应答信号,高电平表示从机接收到主机输入的地址信号。

由于信号与写地址基本一致,所以不再赘述。

2.5、读数据通道

  读数据通道相关信号如下表所示,相比写数据通道,多了一个应答信号。

表5 读数据通道信号
信号I/O位宽含义
RDATAI32读数据信号
RRESPI2读取传输的状态信号,成功读取从机数据时为0。
RVALIDI1读数据有效指示信号,高电平有效。
RREADYO1读数据应答信号,高电平表示主机接收到从机读出数据。

  由于读数据通道包含了RRESP信号,因此读过程就不存在读应答通道了。

  读过程的应答关系如下图所示,从机的读数据输出有效信号必须在读地址有效指示信号和读地址应答信号拉高之后才能拉高,而读数据应答信号可以在读数据有效指示信号拉高之前拉高。

  即读数据应答信号RREADY可以与读地址有效指示信号ARVALID同时拉高。

在这里插入图片描述

图8 读取事务握手依赖项

  相关的时序如下图所示,下图中读数据应答信号与读地址有效指示信号同时拉高,当然读数据应答信号也可以在读地址应答信号拉高之后才拉高,都没有影响。

在这里插入图片描述

图9 读时序

  手册中并没有对读写时序的顺序做相关要求,由于读、写时两个独立的通道,因此读写操作可以同时进行,但是在实际测试时发现,读写同一个地址的数据时会导致读出数据错误。

  因此在实际使用时,应该避免同时读、写同一地址数据,可以在写完之后在进行读操作,这样会降低总线效率,但实现逻辑简单,时序如下图所示。另一种方式就是在读操作时,如果当前也要进行写操作,对比读写地址是否一致,如果地址一样,则优先进行写操作,这种方式逻辑会复杂一点,还需要知道当前的写地址。

在这里插入图片描述

图10 读写时序

3、总结

  前面已经详细讲解axi_lite接口的各个信号时序及注意事项,由此可知,axi_lite协议其实也比较简单,每个通道都需要两个信号进行握手,每次只能读写单个地址的数据。

  以下对要点进行总结:

  1. 主机的有效指示信号(写地址有效、写数据有效、读地址有效)必须主动拉高,不能等待从机的应答信号拉高之后在拉高(原因在于部分从机的应答信号信号可能需要等待主机有效信号拉高后才拉高,就会造成主机和从机均在等待对方拉高)。

  2. 主机写数据和写地址有效指示信号可以同时拉高,加快写入数据效率。

  3. 主机支持同时进行读写操作,但是不能同时读写同一地址数据。

  由于xilinx的部分IP只支持axi总线,PL端在调用该IP时,就必须将普通籍人口转换为axi接口时序。另外也可以通过axi总线将PL端的模块挂在PS的总线上,因此下文将通过Verilog HDL实现axi_lite_master模块。

  AXI手册可以在ARM公司官网下载,也可以在公众号后台回复“AXI手册”(不包括引号)获取。


  如果对文章内容理解有疑惑或者对代码不理解,可以在评论区或者后台留言,看到后均会回复!

  如果本文对您有帮助,还请多多点赞👍、评论💬和收藏⭐!您的支持是我更新的最大动力!将持续更新工程!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/463882.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++17之std::variant

1. std::variant操作 如下列出了为std:: variable <>提供的所有操作。

Docker 学习笔记一

一、什么是docker Docker 是一个基于轻量级虚拟化技术的容器&#xff0c;整个项目基于Go语言开发&#xff1b;Docker是一个C/S架构&#xff0c;后端众多模块各司其职&#xff0c;docker的daemon是运行在主机上通过client可以进行通信。 docker 由三部分组成&#xff1a;镜像(…

Rust 构建开源 Pingora 框架可以与nginx媲美

一、概述 Cloudflare 为何弃用 Nginx&#xff0c;选择使用 Rust 重新构建新的代理 Pingora 框架。Cloudflare 成立于2010年&#xff0c;是一家领先的云服务提供商&#xff0c;专注于内容分发网络&#xff08;CDN&#xff09;和分布式域名解析。它提供一系列安全和性能优化服务…

Figure 01掀起了具身智能的崭新篇章

在人工智能的发展历程中&#xff0c;OpenAI始终扮演着创新的先锋角色。最近&#xff0c;他们与Figure公司的合作成果尤为引人注目&#xff0c;这一合作将多模态大模型技术成功应用于Figure 01机器人的开发中&#xff0c;为人类与机器的互动开辟了全新的时代。该机器人不仅能够与…

innovus中path group 的策略和应用(上)

在所有的后端工具里边&#xff0c;有三个重要的引擎&#xff1a;auto-place&#xff0c;CTS&#xff0c;auto-route三个。这里边的auto-place是决断了整个设计时序的基点。由于&#xff0c;auto-place的动作是在设计的preCTS阶段&#xff0c;所以这里的设计时序就是广义上说的&…

HDFSDATANODE数据传输详解

本文主要阐述datanode中一个socket连接接收字节流的构成&#xff0c;帮助datanode的接收与处理数据。注意hadoop版本为3.1.1。 写在前面 Datanode本质上也是TCPServer&#xff0c;一般的TCPServer接到客户端请求以后会分配一个线程处理&#xff0c;对于Datanode而言&#xff…

npm、nodejs和vue之间关系和区别介绍

本文讲解npm、Node.js和Vue.js这三者之间的关系和区别&#xff0c;以及它们各自的特点。 首先&#xff0c;让我们来了解一下Node.js。 **Node.js** 是一个开源的服务器端运行环境&#xff0c;它允许开发者使用JavaScript来编写服务器端的代码。在传统的Web开发中&#…

[ROS 系列学习教程] rosbag Python API

ROS 系列学习教程(总目录) 本文目录 1. 构造函数与关闭文件2. 属性值3. 写bag文件内容4. 读bag文件内容5. 将bag文件缓存写入磁盘6. 重建 bag 文件索引7. 获取bag文件的压缩信息8. 获取bag文件的消息数量9. 获取bag文件记录的起止时间10. 获取话题信息与消息类型 rosbag 的 Pyt…

【Java探索之旅】运算符解密 位运算,移位运算

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; Java入门到精通 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一、位运算符1.1 按位与 &1.2 按位或 |1.3 按位取反 ~1.4 按位异或^ 二、移位运…

快速排序算法,简洁,易懂

目录 代码实现&#xff08;java&#xff09;&#xff1a; 一、首元素作为基准值 图&#xff1a; ​编辑 基本思路&#xff1a; 代码&#xff1a; 代码补充说明&#xff1a; 二、中间元素作为基准值 代码&#xff1a; 参考学习文章&#xff1a; 今天我们不刷力扣了&#xff0c;…

Java Web项目—餐饮管理系统Day07-套餐管理(二)

文章目录 1. 套餐的分页查询2. 更新套餐![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/209298cf3b4349c5a2fed56a3d33350e.png)第一步, 依据套餐id查询到套餐的基本信息以及关联菜品信息.第2步, 将请求数据进行保存(更新). 3. 批量的停售启售 这部分开发剩下的部分…

CSS Module

CSS Module的作用&#xff1a;将CSS样式作用域限制在特定的组件范围内&#xff0c;以避免全局样式污染和命名冲突。 Vue中如何实现样式模块…

SVN修改已提交版本的注释

目录 一、需求分析 二、问题分析 三、解决办法 一、需求分析 ​开发过程中&#xff0c;在SVN提交文件后&#xff0c;发现注释写的不完整或不够明确&#xff0c;想再修改之前的注释文字​。 使用环境&#xff1a; SVN服务器操作系统&#xff1a;Ubuntu 20.04.6 LTS SVN版本&…

物理隔离条件下,如何安全高效地进行内外网文件导入导出?

内外网文件导入导出通常指的是在内部网络&#xff08;内网&#xff09;和外部网络&#xff08;外网&#xff09;之间传输文件的过程。这在企业环境中尤其常见&#xff0c;因为内部网络通常包含敏感数据&#xff0c;而外部网络&#xff08;如互联网&#xff09;则允许更广泛的访…

计算机网络实验——学习记录

1. tun/tap模块&#xff1a;为Linux系统提供网络虚拟功能&#xff0c;tun位于网络OSI模型的三层&#xff08;网络层&#xff09;&#xff0c;tap位于网络的二层&#xff08;数据链路层&#xff09;。 1.1 验证是否包含tun/tap模块&#xff1a;modinfo tun&#xff1b; 1.2 验…

8:00面试,8:06就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到9月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…

echarts散点图自定义tooltip,鼠标放上去展示多行数据

先放效果图 如图&#xff0c;就是鼠标悬停在散点上&#xff08;这里的散点我替换成了图片&#xff0c;具体做法参考这篇文章&#xff1a;echarts散点图的散点用自定义图片替代-CSDN博客&#xff09;时&#xff0c;可以展示多行数据。之前查找资料的时候&#xff0c;很多用字符串…

封装哈希表

本文旨在讲解哈希表的封装&#xff0c;我们以哈希桶的结构来进行封装unorderedmap/set。要想实现封装哈希表&#xff0c;我们首先得先将哈希表的结构给搭建出来&#xff0c;然后再根据哈希桶的结构进一步封装unorderedmap/set&#xff01; 下面我们先来实现哈希桶的结构&#x…

12_Linux内核结构

Linux内核结构 1.内核的主要组成部分 Linux 内核主要的 5 个部分&#xff1a;进程调度、内存管理、虚拟文件系统、网络接口、进程通信。在系统移植的时候&#xff0c;它们是内核的基本元素&#xff0c;这 5 个部分之间的关系&#xff0c;如图所示&#xff1a; 进程调度&#…

V-JEPA模型,非LLM另外的选择,AGI的未来:迈向Yann LeCun先进机器智能(AMI)愿景的下一步

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…
最新文章