AXI接口协议详解-AXI总线、接口、协议

2023-05-16

转自:https://cloud.tencent.com/developer/article/1695010

AXI接口协议详解-AXI总线、接口、协议

AXI 总线

上面介绍了AMBA总线中的两种,下面看下我们的主角—AXI,在ZYNQ中有支持三种AXI总线,拥有三种AXI接口,当然用的都是AXI协议。其中三种AXI总线分别为:

AXI4:(For high-performance memory-mapped requirements.)主要面向高性能地址映射通信的需求,是面向地址映射的接口,允许最大256轮的数据突发传输;

AXI4-Lite:(For simple, low-throughput memory-mapped communication )是一个轻量级的地址映射单次传输接口,占用很少的逻辑单元。

AXI4-Stream:(For high-speed streaming data.)面向高速流数据传输;去掉了地址项,允许无限制的数据突发传输规模。

Stream的理解,可以想象一下水流,是连续不断的,向某一方向,以固定的速度输送的接口。以我们看视频为例,视频文件本来是保存在硬盘里的,怎么播放呢,不能一下子把整个文件都显示到屏幕上,而是以一定速度,连续不断地输出到屏幕上(每秒若干帧),这个过程就是流Stream接口完成的。

一、通信模型

图4‑10 AXI主设备与从设备之间的通信

从上图很容易看出,要通过AXI总线实现通信,我们需要一个主设备/上位机(Master)和一个从设备/下位机(Slave),并通过AXI总线将其相连。我们可以将上图中的主设备假定为CPU,从设备假定为RAM(DDR)。主设备和从设备的通信主要为了实现主设备对从设备的读写控制。

那如果多设备通过AXI进行连接呢?其实可以通过AXI Interconnect实现,在Vivado中也有类似的IP可以使用。

图4‑11 AXI Interconnect

AXI Interconnect可以将其简单地认为是一个带仲裁功能的多路选择器(MUX)。在配置从设备的地址时(Address)时,注意设备地址不能重叠,且地址分配时需要整块分配,而不是简单地跟在上个设备分配的地址之后继续分配。

关于地址分配举例如下:

图4‑12 地址分配举例

如上图所示,给Slave1分配好地址之后,直接接在Slave1的地址之后给Slave2分配地址是不行的,因为Slave2的地址范围(Address Range)过大,从0x40001000分配最多只能分配到0x40001FFF,即最多分配4K,而现在需要分配2G,应将地址偏移(Address Offset)设为2G的边界(boundary),即地址偏移+地址范围=FFFFFFFF,故此时地址偏移应该为0x80000000。

二、信号说明

首先说AXI4总线和AXI4-Lite总线具有相同的组成部分:

(1)读地址通道,包含ARVALID, ARADDR, ARREADY信号;

(2)读数据通道,包含RVALID, RDATA, RREADY, RRESP信号;

(3)写地址通道,包含AWVALID, AWADDR, AWREADY信号;

(4)写数据通道,包含WVALID, WDATA, WSTRB, WREADY信号;

(5)写应答通道,包含BVALID, BRESP, BREADY信号;

(6)系统通道,包含: ACLK, ARESETN信号。

AXI4总线和AXI4-Lite总线的信号也有他的命名特点

读地址信号都是以AR开头(A: address; R: read)

写地址信号都是以AW开头(A: address; W: write)

读数据信号都是以R开头(R: read)

写数据信号都是以W开头(W: write)

应答型号都是以B开头(B: back(answer back))

了解到总线的组成部分以及命名特点,那么在后续的实验中您将逐渐看到他们的身影。每个信号的作用暂停不表,放在后面一一介绍。

而AXI4-Stream总线的组成有:

(1) ACLK信号:总线时钟,上升沿有效;

(2) ARESETN信号:总线复位,低电平有效

(3) TREADY信号:从机告诉主机做好传输准备;

(4) TDATA信号:数据,可选宽度32,64,128,256bit

(5) TSTRB信号:每一bit对应TDATA的一个有效字节,宽度为TDATA/8

(6) TLAST信号:主机告诉从机该次传输为突发传输的结尾;

(7) TVALID信号:主机告诉从机数据本次传输有效;

(8) TUSER信号 :用户定义信号,宽度为128bit。

对于AXI4-Stream总线命名而言,除了总线时钟和总线复位,其他的信号线都是以T字母开头,后面跟上一个有意义的单词,看清这一点后,能帮助记忆每个信号线的意义。如TVALID = T+单词Valid(有效),那么就应该立刻反应该信号的作用。每个信号的具体作用,在后面分析源码时再做分析。

三、各种 AXI 的应用的例子

表4‑11 各种 AXI 的应用的例子

接口

行业

应用例子

AXI4

音频和视频 / 图像处理

视频 DMA

通信 / 网络

以太网 VoIP 接收器,3GPP LTE 频道解码 r

嵌入式处理

AXI/PLBV46 桥(为了向下兼容),ChipScope AXI 监视器 (为了调试 / 嵌入式系统诊断)

AXI4-Lite

音频和视频 / 图像处理

解交织器,Gamma 校正,图像边缘轻度增强

汽车

控制器区域网络 (CAN)

通信 / 网络

10G 以太网 MAC,数字预失真 (DPD),波峰因数抑制 (CFR)

嵌入式处理

硬件 ICAP,BRAM 接口控制器,外部设备控制器

AXI4-Stream

音频和视频 / 图像处理

流式视频输入 / 输出,图像降噪

通信 / 网络

编码器 / 解码器,交织器 / 解交织器

DSP

CORDIC,FFT,FIR 编译器

嵌入式处理

流 FIFO,以太网外设

AXI 接口

三种AXI接口分别是:

AXI-GP接口(4个) :是通用的AXI接口,包括两个32位主设备接口和两个32位从设备接口,用过改接口可以访问PS中的片内外设。

AXI-HP接口(4个):是高性能/带宽的标准的接口, PL模块作为主设备连接(从下图中箭头可以看出)。主要用于PL访问PS上的存储器(DDR和On-Chip RAM)

AXI-ACP接口(1个):是ARM多核架构下定义的一种接口,中文翻译为加速器一致性端口,用来管理DMA之类的不带缓存的AXI外设, PS端是Slave接口。

我们可以双击查看ZYNQ的IP核的内部配置,就能发现上述的三种接口,图中已用红色方框标记出来,我们可以清楚的看出接口连接与总线的走向:

总结以上特点如下表所示:

接口名称

接口描述

主机

从机

M_AXI_GP0

通用 (AXI_GP)

PS

PL

M_AXI_GP1

PS

PL

S_AXI_GP0

通用 (AXI_GP)

PL

PS

S_AXI_GP1

PL

PS

S_AXI_ACP

加速器一致性端口 (ACP),cache 一致性回话

PL

PS

S_AXI_HP0

带有读 / 写 FIFO 的高性能端口(AXI_HP) 。( 注意 AXI_HP 接口有时被称作 AXI Fifo 接口,或 AFI)。

PL

PS

S_AXI_HP1

PL

PS

S_AXI_HP2

PL

PS

S_AXI_HP3

PL

PS

注意接口命名的规范(在表 2.2 的第一列)是表示了 PS 的角色的,也就是说,第一个字母 “M” 表示 PS 是主机,而第一个字母 “S” 表示 PS 是从机。

在ZYNQ中,支持AXI-Lite,AXI4和AXI-Stream三种总线,但PS与PL之间的接口却只支持前两种,AXI-Stream只能在PL中实现,不能直接和PS相连,必须通过AXI-Lite或AXI4转接。PS与PL之间的物理接口有9个,包括4个AXI-GP接口和4个AXI-HP接口、1个AXI-ACP接口。

AXI-DMA:实现从PS内存到PL高速传输高速通道AXI-HP<---->AXI-Stream的转换

AXI-FIFO-MM2S:实现从PS内存到PL通用传输通道AXI-GP<----->AXI-Stream的转换

AXI-DataMover:实现从PS内存到PL高速传输高速通道AXI-HP<---->AXI-Stream的转换,只不过这次是完全由PL控制的,PS是完全被动的。

AXI-VDMA:实现从PS内存到PL高速传输高速通道AXI-HP<---->AXI-Stream的转换,只不过是专门针对视频、图像等二维数据的。

除了上面的还有一个AXI-CDMA IP核,这个是由PL完成的将数据从内存的一个位置搬移到另一个位置,无需CPU来插手。

上面的IP是完成总线协议转换,如果需要做某些处理(如变换、迭代、训练……),则需要生成一个自定义Stream类型IP,与上面的Stream接口连接起来,实现数据输入输出。用户的功能在自定义Stream类型IP中实现。

oAXI 协议

讲到协议不可能说是撇开总线单讲协议,因为协议的制定也是要建立在总线构成之上的。虽然说AXI4, AXI4-Lite, AXI4-Stream都是AXI4协议,但是各自细节上还是不同的。

总的来说, AXI总线协议的两端可以分为分为主(master)、从(slave)两端,他们之间一般需要通过一个AXI Interconnect相连接,作用是提供将一个或多个AXI主设备连接到一个或多个AXI从设备的一种交换机制。当我们添加了zynq以及带AXI的IP后再进行自动连线时vivado会自动帮我们添加上这个IP,大家应该是不陌生了。

AXI Interconnect的主要作用是,当存在多个主机以及从机器时, AXI Interconnect负责将它们联系并管理起来。由于AXI支持乱序发送,乱序发送需要主机的ID信号支撑,而不同的主机发送的ID可能相同,而AXI Interconnect解决了这一问题,他会对不同主机的ID信号进行处理让ID变得唯一。

AXI协议将读地址通道,读数据通道,写地址通道,写数据通道,写响应通道分开,各自通道都有自己的握手协议。每个通道互不干扰却又彼此依赖。这也是AXI高效的原因之一。

AXI 协议之握手协议

AXI4 所采用的是一种 READY, VALID 握手通信机制,简单来说主从双方进行数据通信前,有一个握手的过程。 传输源产生 VLAID 信号来指明何时数据或控制信息有效。而目地源产生 READY 信号来指明已经准备好接受数据或控制信息。传输发生在 VALID和 READY 信号同时为高的时候。 VALID 和 READY 信号的出现有三种关系。

AXI4和AXi4-stream都支持三种握手机制,但其具体的总线结构是不同的,详情在后文中会介绍。这三种握手机制分别是:

(1) VALID 先变高 READY 后变高。时序图如下:

上图中的模式为VALID信号先于READY信号拉高,此时数据在VALID信号和READY信号为高时,在时钟上升沿触发,开始传输在箭头处发生。

(2) READY 先变高 VALID 后变高。时序图如下:

上图中的模式为READY信号先于VALID信号拉高,此时数据在VALID信号和READY信号为高时,在时钟上升沿触发,同样在箭头处信息传输发生。

(3) VALID 和 READY 信号同时变高。时序图如下:

上图中的模式为READY信号伴随着VALID信号拉高,此时数据在VALID信号和READY信号为高时,在时钟上升沿触发。在这种情况下,信息传输立马发生,如图箭头处指明信息传输发生。

需要强调的是, AXI的五个通道,每个通道都有握手机制。

三、突发式读写

1、突发式读的时序图如下

按照传统的RAM的读写方式,给定一个Address,只能读取或者写入一个Data,但是在Burst模式下,给定一个Address,可以连续写入或者读取多组数据。

当地址出现在地址总线后,传输的数据将出现在读数据通道上。设备保持 VALID 为低直到读数据有效。为了表明一次突发式读写的完成,设备用 RLAST 信号来表示最后一个被传输的数据。

2、 突发式写时序图如下:

这一过程的开始时,主机发送地址和控制信息到写地址通道中,然后主机发送每一个写数据到写数据通道中。当主机发送最后一个数据时, WLAST 信号就变为高。当设备接收完所有数据之后他将一个写响应发送回主机来表明写事务完成。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AXI接口协议详解-AXI总线、接口、协议 的相关文章

  • ZYNQ 在linux 通过AXI_GPIO操作电平

    在petalinux 通过AXI GPIO操作电平 以zynq为例 xff0c vivado工程 xff1a axi gpio n都是选择的一位输出 xff1a 管脚约束 xff1a set property SEVERITY Warnin
  • zynq gpio linux,ZYNQ 在linux 通过AXI_GPIO操作电平

    在petalinux 通过AXI GPIO操作电平 以zynq为例 xff0c vivado工程 xff1a axi gpio n都是选择的一位输出 xff1a 管脚约束 xff1a set property SEVERITY Warnin
  • zynq gpio linux,zynq AXI GPIO使用

    通用 如果需要GPIO中断 需要打开arm core中的pl ps中断 如下图 API详情 xgpio函数 int XGpio Initialize XGpio InstancePtr u16 DeviceId 名称 代码 解释 函数名 X
  • ZYNQ7000-AXI GPIO详解

    摘要 AXI GPIO是ZYNQ的一个IP核 xff0c 它能够将PS侧的AXI4 Lite接口转成PL侧的IO口 xff0c 可解决PS侧IO口不够用的问题 本文就AXI GPIO的概念 作用 配置与使用做了详细说明 xff0c 展示了示
  • zynq7000 linux axi-gpio驱动:重置axi-gpio驱动方法

    linux gpio 从内核空间导出到用户空间 petalinux 在制作 Linux 系统时 xff0c 会自动的将 gpio 从内核空间导出到用户空间 xff0c 在用户空间下可以通过 sysfs 方式控制 gpio xff1b 用户空
  • ZYNQ中的GPIO与AXI GPIO

    GPIO GPIO 一种外设 xff0c 对器件进行观测和控制MIO 将来自PS外设和静态存储器接口的访问多路复用到PS引脚上处理器控制外设的方法 通过一组寄存器包括状态寄存器和控制寄存器 xff0c 这些寄存器都是有地址的 xff0c 通
  • RS-485接口协议详解

    RS 485详解 通信协议 通讯协议主要是实现两个设备之间的数据交换功能 xff0c 通讯协议分硬件层协议和软件层协议 硬件层协议决定数据如何传输问题 xff0c 比如要在设备1向设备2发送0x63 xff0c 0x63的二进制数为0110
  • xilinx ZYNQ 7000 AXI GPIO

    0AXI GPIO 第一部分 PS 和 PL之间的通讯有一个接口称为AXI AXI总线具体的内容这边不去深究 xff0c 可以理解为一种特殊协议的通讯方式 AXI GPIO是什么意思 xff1f PL是FPGA它可以做成任何你想要的东西 x
  • AXI STREAM ,AXIS总线的理解

    全兼容ZEDBOARD 开发板子 SYSCLK TAOBAO COM 1 xff0c VALID和READY 是所有AXI总线必须有的 xff0c VALID是MASTER告诉SLAVE数据已经展现在了总线上了 xff0c 你可以取走了 x
  • AXI DMA总结、内核axidmatest.c测试程序分析、SG mode

    AXI DMA 概述 xff1a XILINX提供的AXI DMA支持Scatter Gather mode和Direct Register mode 数据位宽支持32 64 128 256 512 1024bits xff0c strea
  • 在EBAZ4205 zynq7010上运行AXI_DMA中断回环测试

    在EBAZ4205 zynq7010上运行AXI DMA loop interrupt 整体的布局图 这是上面的一张接口图 下面对每个模块附上截图 AXI DMA的输出mm2s introut s2mm introut接到PS系统的中断触发
  • AXI接口协议详解-AXI总线、接口、协议

    转自 xff1a https cloud tencent com developer article 1695010 AXI接口协议详解 AXI总线 接口 协议 AXI 总线 上面介绍了AMBA总线中的两种 xff0c 下面看下我们的主角
  • AXI4-Stream 介绍

    转载出处 https zhuanlan zhihu com p 152283168 上篇对AXI4总线作了介绍 接下来对AXI4 Stream进行简要介绍 本文是个人总结 如有问题 欢迎批评指正 AXI4 Stream在AXI4家族中相对来
  • 深入浅出AXI协议(2)——通道及信号

    一 前言 在之前的文章中 我们主要介绍了什么是AXI协议 AXI协议的特点与优点 然后对于AXI协议非常重要的五通道结构进行了介绍 了解了5个通道各自的作用 本文我们继续AXI协议的学习 我们将讨论5个通道的具体内容和相对应的信号 这一部分
  • AXI Narrow Transfer、Unaligned Transfer

    本文为转载内容 原文链接 深入 AXI4 总线 三 传输事务结构 知乎 读写数据结构 在 AXI 数据传输过程中 主要涉及到窄位宽数据传输 Narrow Transfer 非对齐传输 Unaligned Transfer 以及混合大小端传输
  • 深入 AXI4总线 (四):RAM 读取实战

    光说不练 云玩家 这篇文章中我们就通过访问一个 AXI4 接口的 RAM 的实际操作 加深我们对 AXI4 总线的理解 我们的实验平台是 ISE 14 7 以及 modelsim 10 2 RAM 的 ip 使用 ISE 的 block m
  • AXI总线学习小结

    1 AXI总线结构 AXI总线由5个通道构成 通道名称 通道功能 数据流向 read address 读地址通道 主机 gt 从机 read data 读数据通道 包括数据通道和读响应通道 从机 gt 主机 write address 写地
  • Xilinx ISE、MicroBlaze系列教程

    本文是Xilinx MicroBlaze系列教程的第0篇文章 这个系列文章是我个人最近两年使用Xilinx MicroBlaze软核的经验和笔记 以Xilinx ISE 14 7和Spartan 6 Vivado 2018 3和Artix
  • AXI4-Stream协议总结

    AXI4 Stream去掉了地址项 允许无限制的数据突发传输规模 一 接口信号描述 信号 源 描述 ACLK 时钟源 全局时钟信号 所有信号在ACLK信号上升沿采样 ARESETn 复位源 全局复位信号 ARESETn低电平有效 TVALI
  • AXI总线之DDR控制器的实现

    由于FPGA的内部RAM资源实在有限 同时又不得不面临大数据量缓存的问题 因此 将DDR进行共享成了最为直接有效的解决方案 设计目标 PL端有多个需要大量数据缓存的通道 让每个通道都将DDR作为外部缓存 FIFO 注意 总的突发在1Gbps

随机推荐

  • springboot使用oshi获取系统cpu、内存、jvm信息

    OSHI 是基于 JNA 的 xff08 本地 xff09 操作系统和硬件信息库 它不需要安装任何其他额外的本地库 xff0c 旨在提供一种跨平台的实现来检索系统信息 xff0c 例如操作系统版本 进程 内存和 CPU 使用率 磁盘和分区
  • 常用的linux命令

    目录相关命令 xff1a ls 列出当前目录下的文件列表信息 目录 文件夹 当前 xff1a 登陆成功之后 xff0c 打开终端所处的一个目录 a 显示隐藏文件 linux下以 开头的文件是隐藏文件 xff0c 默认不显示 l 显示目录下文
  • 字节后端一二面,讯飞一面

    1 自我介绍 2 rdb aof 3 线程池 4 ping命令用了什么协议 5 应用层的协议 6 为什么四次挥手要timewait 7 算法题 xff1a 和为k的子数组个数 xff08 前缀和 xff09 8 幻读 7 隔离级别 8 tc
  • mysql以某个字段分组进行条件查询,如果为0则补0

    需求 xff1a 有一个version plan表 xff0c 其中有一个字段is urgent 且每个version plan与一个模块moduleId关联 xff0c 现在要查出is urgent为1的模块数和这个模块的总数 xff0c
  • 数据库系统第六章-关系数据理论复习

    候选码若关系中的一个属性或属性组的值能够唯一地标识一个元组 xff0c 且他的子集不能唯一的标识一个元组 xff0c 则称这个属性或属性组做候选码 函数依赖 范式 虽然STC xff08 S T C xff09 3NF xff0c 但它仍存
  • Spring Security登录验证过程详解

    前端 xff1a 在前端页面输入username和password 通过地址login访问验证 后台 xff1a 调用 AbstractAuthenticationProcessingFilter doFilter 方法 原因 xff1a
  • 关于STL的一些理解

    1 集合set 定义 xff1a set lt int gt s1 类型可选 se begin 返回指向第一个元素的迭代器 se clear 清除所有元素 常用 se count 返回某个值元素的个数 常用 xff0c 一般用来查这个元素在
  • ModuleNotFoundError: No module named ‘...’:报错解决方案

    1 module包没安装 这个 就是包的名字 xff0c 看问题定位 xff0c import源文件 xff0c 然后去site packages里找那个模块 xff0c 如果是空的没安装 xff0c 这时候可以在对应的环境里使用pip i
  • C语言----结构体,枚举,共用体

    1 xff09 结构体 span class token comment 例 xff1a 一个描述学生的结构体 span span class token keyword struct span span class token class
  • Nvidia jetson agx xavier can通讯失败,修改时钟源pllaon

    一 问题详情 在调试Xavier can的过程中 xff0c can通信始终有问题 xff0c 收发都会报错 后来发现时钟源导致波特率不匹配 xff0c 所以不能通信 二 修改时钟源 在虚拟机使用官方sdkmanager xff0c 下载安
  • linux下实现https访问

    http转https 适用于linux服务器 linux下nginx 43 ssl实现https访问 xff08 一 xff09 环境准备 xff08 二 xff09 下载nginx源码 xff0c 编译nginx并添加ssl模块 xff0
  • Nvidia Jetson nano 安装Archiconda、gpu版torch、踩坑记录

    Nvidia Jetson nano 安装Archiconda gpu版torch 踩坑记录 jetson nano 属于aarch64架构 xff0c 不同于一般的x86 64的linux系统架构 xff0c 而torch官网上面 htt
  • linux下的yum,vim,gcc,gdb

    我们在windows系统下我们能够很简单进行粘贴复制下载安装 xff0c 也能通过vs进行我们缩写代码的编译运行 xff0c 但是我们在linux下我们应该怎样去操作我们的这些命令呢 xff0c 这章我们就讲解一下我们linux下常用的一些
  • 【Keil】Keil5添加源程序和头文件

    xxx c就是源程序 xxx h就是头文件 源程序添加方法 双击文件夹 xff0c 例如图片上的Source xff0c 跳出弹窗 xff0c 选择需要添加的源程序即可 添加头文件的方法 1 首先点击图片红框处 xff0c 或是在文件夹te
  • C 标准库 string常用函数 笔记

    文章目录 64 TOC 文章目录 前言字符串长度strlen sizeof 字符串拼接strcat strncat 字符串拷贝strcpy strncpy memcpy 内存填充memset 字符串比较strcmp strncmp 字符串查
  • node.js中的http.request方法使用说明_node.js

    方法说明 xff1a 函数的功能室作为客户端向HTTP服务器发起请求 语法 xff1a 复制代码 代码如下 http get options callback 由于该方法属于http模块 xff0c 使用前需要引入http模块 xff08
  • ARM中SP、LR、PC三个寄存器介绍

    寄存器定义和用途 定义 寄存器是中央处理器内的组成部份 寄存器是有限存贮容量的高速存贮部件 xff0c 它们可用来暂存指令 数据和位址 用途 可将寄存器内的数据执行算术及逻辑运算 xff1b 存于寄存器内的地址可用来指向内存的某个位置 xf
  • Linux buffer/cache介绍

    free 命令 与 buffer cache 在 Linux 系统中 xff0c 我们经常用 free m命令来查看系统内存的使用状态 xff1a m 显示单位为MB free m 各个参数的说明 total 内存总数 used 已经使用的
  • 数字签名算法RSA

    RSA RSA数字签名算法源于RSA公钥密码算法的思想 xff0c 将RSA公钥密码算法按照数字签名的方式运用 RSA数字签名算法是迄今为止应用最为广泛的数字签名算法 RSA数字签名算法的实现如RSA加密算法一致 RSA数字签名算法主要可分
  • AXI接口协议详解-AXI总线、接口、协议

    转自 xff1a https cloud tencent com developer article 1695010 AXI接口协议详解 AXI总线 接口 协议 AXI 总线 上面介绍了AMBA总线中的两种 xff0c 下面看下我们的主角