ZYNQ学习--AXI总线协议
一、AXI 总线简介
AXI(Advanced Extensible Interface)高级拓展总线是AMBA(Advanced Microcontroller Bus Architecture)高级微控制总线架构中的一个高性能总线协议,由ARM公司开发。AXI总线协议被广泛应用于高带宽、低延迟的片上系统(SoC)设计中,尤其是在处理器、存储器、外设之间的数据传输。2010年发布AXI4
1.1 AXI4-Full
- 用途:主要面向高性能内存映射需求,适用于复杂系统中频繁的数据传输和大规模的突发传输场景。
- 特点:支持突发传输,一次传输可以多达 256次传输周期,(所谓突发传输,就是给一个地址,可以对从这个地址开始的若干个地址处的值都进行读写,至于这若干个地址分别是什么,需要根据写/读地址通道 Master 给出的控制信号来决定)。 提供读/写独立通道,读写操作可以并行。完整的地址映射,用于复杂的存储器管理。支持多种数据宽度(如 32 位、64位、128 位等),并支持字节控制,使其非常灵活。
- 应用场景:高带宽、高吞吐量需求的场景,比如 DDR 控制器、处理器与外设之间的通信。
1.2 AXI4-Lite
- 用途:轻量级、低吞吐量的内存映射通信,适用于较简单的设备控制和配置寄存器访问。
- 特点:只支持单次传输,不支持突发传输。占用很少的逻辑资源,适合那些只需要简单控制命令的外设。地址映射简单,只支持32和64bit 数据长度,但相比 AXI4-Full 的复杂性更低。
- 应用场景:低速外设、寄存器配置接口,如简单的 GPIO 控制、系统状态寄存器等。
1.3 AXI4-Stream
- 用途:面向高速流数据传输,特别适用于不需要地址映射的持续数据流场景。
- 特点:无地址信号,数据是持续流动的,特别适合需要连续传输大量数据的应用。 支持无限制的突发传输,更适合音频、视频、数据包等大规模数据流的传输。数据宽度和传输速率可以动态调整,满足不同的性能需求。
- 应用场景:高速数据流传输,如音频、视频处理系统,网络数据包处理。
1.4 AXI 的工作方式
要通过AXI总线实现通信,需要一个主设备/上位机(Master)和一个从设备/下位机(Slave),并通过AXI总线将其相连。
如果多设备通过AXI进行,可以通过AXI Interconnect IP或者 AXI SmartConnect IP实现。两个IP核都是用于存储器映射的,SmartConnect可以提供高带宽且资源使用更合理。
注: AXI4-Stream可以用DMA,Stream FIFO等IP进行存储器到流数据的转换
1.5 AXI 通道简述
AXI4 和 AXI4-Lite 包含五个独立的通道(如图所示)
- 读地址 Read Address Channel:对应的地址通道会携带一次事务所需的全部地址和控制信息。
- 读数据 Read Data Channel :位宽可为8、16、32、64、128、256、512、1024bit 的数据总线且包含读响应数据。
- 写地址 Write Address Channel:对应的地址通道会携带一次事务所需的全部地址和控制信息。
- 写数据 Write Data Channel:位宽可为8、16、32、64、128、256、512、1024bit 的数据总线,包含数据掩码位WSTRB: 为每一个8bit数据准备的字节选通信号,用于指示数据的哪几个字节是有效的。
- 写响应 Write Response Channel:从设备使用写响应通道回应写事务,全部的写事务都需要写响应通道的完成信号。
注:AXI4-Stream 只有一个通道和AXI的写数据通道类似,突发长度无限制
1.6 读写数据的过程示意
突发长度在控制信号中,一个地址可以对应多个数据。每一个通道都拥有自己的VALID与READY信号用于实现握手,其中VALID信号表示通道的地址、数据或控制信息已经可用,而READY信号则表示接收方已准备好接收信息,其中,读数据和写数据通道还拥有LAST信号,该信号用于指示当前传输是否为当前事务中的最后一次传输。
读数据的过程如下图所示:
写数据的过程如下图所示:
二、AXI4-Full 信号描述
公共信号
信号名 | 来源 | 描述 |
---|---|---|
ACLK | 时钟源 | 公共时钟信号 |
ARESETn | 复位源 | 公共复位信号,低有效 |
所有信号都在公共时钟的上升沿被采样。
写地址通道信号
信号名 | 来源 | 描述 |
---|---|---|
AWID | 主设备 | 写地址ID,该信号用于标识写地址组 |
AWADDR | 主设备 | 写地址,写突发操作中第一次数据传输的地址 |
AWLEN | 主设备 | 突发长度,这个字段标识突发传输的次数 |
AWSIZE | 主设备 | 突发大小,这个字段表示每次突发传输的大小 |
AWBURST | 主设备 | 突发类型,包括突发类型和突发大小信息,该字段决定了每次突发传输时地址的计算方法 |
AWLOCK | 主设备 | 锁定类型,提供关于传输时原子特性的额外信息 |
AWCACHE | 主设备 | 存储器类型 |
AWPROT | 主设备 | 保护类型 |
AWQOS | 主设备 | 服务质量,即每次写传输的QoS标识符,仅AXI4支持 |
AWREGION | 主设备 | 区域标识符,允许一个从设备的单个物理接口用作多个逻辑接口,仅AXI4支持 |
AWUSER | 主设备 | 用户定义信号,可选 |
AWVALID | 主设备 | 主设备给出的地址和相关控制信号有效 |
AWREADY | 从设备 | 从设备已准备好接收地址和相关的控制信号 |
写数据通道信号
信号名 | 来源 | 描述 |
---|---|---|
WID | 主设备 | 写数据ID,该信号用于标识写数据传输,仅AXI3支持 |
WDATA | 主设备 | 写出的数据 |
WSTRB | 主设备 | 数据的字节选通,数据中每8bit对应这里的1bit |
WLAST | 主设备 | 该信号用于标识当前传输是否为突发传输中的最后一次传输 |
WUSER | 主设备 | 用户定义信号,可选 |
WVALID | 主设备 | 主设备给出的数据和字节选通信号有效 |
WREADY | 从设备 | 从设备已准备好接收数据选通信号 |
写响应通道信号
信号名 | 来源 | 描述 |
---|---|---|
BID | 从设备 | 写响应ID,该信号用于标识写响应传输 |
BRESP | 从设备 | 写响应,该信号表示写传输的状态,事务是否结束 |
BUSER | 从设备 | 用户定义信号,可选 |
BVALID | 从设备 | 从设备给出的写响应信号有效 |
BREADY | 主设备 | 主设备已准备好接收写响应信号 |
读地址通道信号
信号名 | 来源 | 描述 |
---|---|---|
ARID | 主设备 | 读地址ID,该信号用于标识读地址组 |
ARADDR | 主设备 | 读地址,读突发操作中第一次数据传输的地址 |
ARLEN | 主设备 | 突发长度,这个字段标识每次突发传输的传输次数 |
ARSIZE | 主设备 | 突发大小,这个字段表示每次突发传输的大小 |
ARBURST | 主设备 | 突发类型,包括突发类型和突发大小信息,该字段决定了每次突发传输时地址的计算方法 |
ARLOCK | 主设备 | 锁定类型,提供关于传输时原子特性的额外信息 |
ARCACHE | 主设备 | 存储器类型 |
ARPROT | 主设备 | 保护类型 |
ARQOS | 主设备 | 服务质量,即每次读传输的QoS标识符,仅AXI4支持 |
ARREGION | 主设备 | 区域标识符,允许一个从设备的单个物理接口用作多个逻辑接口,仅AXI4支持 |
ARUSER | 主设备 | 用户定义信号,可选 |
ARVALID | 主设备 | 主设备给出的地址和相关控制信号有效 |
ARREADY | 从设备 | 从设备已准备好接收地址和相关的控制信号 |
读数据通道信号
信号名 | 来源 | 描述 |
---|---|---|
RID | 从设备 | 读数据ID,该信号用于标识读数据传输 |
RDATA | 从设备 | 读出的数据 |
==RRESP == | 从设备 | 读响应,这信号表示读传输的状态 |
==RLAST == | 从设备 | 该信号用于标识当前传输是否为突发传输中的最后一次传输 |
RUSER | 从设备 | 用户定义信号,可选 |
RVALID | 从设备 | 从设备给出的数据和响应信息有效 |
RREADY | 主设备 | 主设备已准备好接收读取的数据和响应信息 |
低功耗接口信号
信号名 | 来源 | 描述 |
---|---|---|
CSYSREQ | 时钟控制器 | 系统退出低功耗状态请求,外设的系统时钟控制器通过该信号发出请求用于离开低功耗状态 |
CSYSACK | 外设 | 退出低功耗状态响应,外设响应系统低功耗状态退出请求时使用的信号 |
CACTIVE | 外设 | 时钟激活,该信号表示外设需要时钟信号 |
三、AXI 总线协议
3.1 时钟和复位
- 时钟:每个AXI组件都需要一个全局时钟信号ACLK,全部的信号都在ACLK的上升沿被采样,一切输出信号都必须在ACLK的上升沿之后发生改变。
- 复位:AXI协议使用低有效复位信号ARESETn,该信号是可以异步拉低,但必须在ACLK的上升沿同步释放。
- 在复位期间,下列信号需要遵循特定的要求:
主接口必须拉低ARVALID、AWVALID与WVALID信号。
从接口必须拉低RVALID与BVALID信号。
其它信号则可以为任意值。
在ARESETn被释放后的下一个时钟上升沿,主设备可以拉高ARVALID、AWVALID与WVALID信号,如下图所示:
3.2 握手过程 – 每个数据传输都发生
五个事务通道都使用VALID/READY作为握手信号,传输地址、数据和控制信息,使用这种握手方式,主从双方都可以对传输速度进行控制。源端产生VALID信号意味着其地址、数据或控制信息有效,目的端产生READY信号意味着它可以接收信息,只有当双方的VALID与READY信号都为高时传输才会开始。
读数据和写数据通道还拥有LAST信号,该信号用于指示当前传输是否为当前事务中的最后一次传输。
握手示意:VALID有效时候发生传输,且要求有效时候数据稳定不变
源端必须在令VALID信号有效之后再等待READY信号有效,一旦VALID有效,源端必须等待握手发生,即在保持VALID不变的情况下,等待目的端的READY信号有效。
源端在T1之后给出地址、数据或控制信息,并令VALID有效,在T2之后,目的端检测到VALID有效并给出READY有效信息,在T3阶段传输会发生,因此在T3阶段及之前,源端不能释放或改变需要传输的信息。
3.2 突发结构 – AXI4中突发长度 = AxLEN[7:0] + 1
AXI协议定义了三种突发类型:
- 固定(FIXED):在突发事务中,每次传输的地址一致,有效的字节线也是一致的,但是可以通过WSTRB信号控制实际有效的字节。这种方式通常用于对同一位置的重复访问,如读取或清空FIFO时。支持1~16的突发长度
- 递增(INCR):在一次递增突发事务中,每次传输,地址都会在之前的地址基础上递增,递增量为传输大小(和 突发字节SIZE有关 )。支持1~256的突发长度。
- 回绕(WRAP):这种类型和递增方式类似,但是,地址到达上界后,地址就会回绕到下界。仅支持为2、4、8或16的突发长度。
突发读时序
突发写时序
3.3 读写响应结构 RESP
AXI协议提供了读写事务中的响应信号:
对于读事务而言,从设备在读数据通道上发送响应信息,使用RRESP[1:0]信号。
对于写事务而言,从设备在写响应通道上发送响应信息,使用BRESP[1:0]信号。
响应共有四种类型:
- OKAY:一般访问成功。该信号表示一个一般访问成功,也表示一个独占访问失败。
- EXOKAY:独占访问成功。
- SLVERR:从设备错误。该信号表示向从设备的访问已成功,但从设备希望向原始主设备返回一个错误条件。
- DECERR:译码错误。通常由互联器生成,表示根据给定的事务地址找不到从设备。
3.4 通道间的关系
AXI协议要求各个通道间必须保持如下关系:
- 写响应必须紧跟在其所属的写事务的最后一次写传输之后。
- 读数据必须紧跟着它的地址之后。
- 通道握手必须符合通道握手依赖关系。
除此之外,协议没有规定其它的任何关系,这意味着,在一个事务中,写数据信号可以提前于写地址信号,这种情况通常发生在写地址的通道的寄存器阶段要更多时, 同样,写数据可以和写地址信号同时出现。
==注意:==当互联器需要决定目标地址空间或从设备地址空间时,必须对地址和写数据重排,以确保写数据仅对其关联的从设备有效。
3.5 通道握手信号依赖关系 – 其他关系类似参考手册即可
手册中提供了信号依赖图:
- 单头箭头指向的信号可以在始端信号有效前或有效后有效。
- 双头箭头指向的信号只有在始端信号有效后才能有效。
读传输依赖如图:从设备在使能RVALID前必须等待ARVALID和ARREADY信号都使能,从设备可以在主设备使能ARVALID前使能ARREADY
四、AXI-Lite 总线协议 – 传输过程与AXI是类似
只支持单次传输,不支持突发传输。占用很少的逻辑资源,适合那些只需要简单控制命令的外设。地址映射简单,只支持32和64bit 数据长度,但相比 AXI4-Full 的复杂性更低。下图为Lite的五个通道信号。
参考资料
AXI_总线_中文版
正点原子SDK篇_AXI接口简介 – 视频
AXI4协议之AXI4-Lite接口详解及实战
补充
- 计算 AXI总线的最大传输带宽(实际是会受到主从端信号影响的) 需要考虑以下因素:
1.AXl总线的频率
2.AXl总线的数据宽度
3.AXl总线的传输协议
假设AXI总线的频率为F,数据宽度为W,传输协议为AXI4,那么AXI总线的最大传输带宽可以通过以下公式计算: 最大传输带宽=FW2
其中,2是因为AXI4协议中每个时钟周期可以传输两个数据,即读和写。因此,最大传输带宽的单位为bps(比特每秒)举个例子,如果AXI总线的频率为100 MHz,数据宽度为64位(即8字节),那么最大传输带宽为:最大传输带宽=100 MHz8字节2=1.6 Gbps,这个值表示AXI总线的最大传输带宽为1.6 Gbps。
-
突发传输:一般表示的是两个设备之间进行数据传送的一种模式,也可将其称为突发模式下的数据传输。而突发(Burst)是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输的周期数就是突发长度(Burst Lengths,简称BL)。在突发传输模式下,多个数据单元当做一个单元(相当一个数据块)来传送,从而提高了传输效率。AXI Full 中突发传输相当于单个传输事务可以传输多个数据以此来提高数据的传输效率,减小了传输管理的开销。
-
主设备可以在前面事务未完成的时候就发送新的事务。AXI outstanding 就是发出去的地址数量,未处理的地址可以先存放在AXI总线的缓存里,等完成一次传输事物之后,无需再握手传输地址,即可立即进行下一次的数据传输,所以outstanding本质上是为了实现数据传输的pipeline,本次事务握手完成,对下一次事务完成进行等待,事务上有一些特殊规定处理。