建议翻看着底部的参考文档资料和本文一起辅助阅读
本文带你详细的了解AXI总线协议,并且基于官方手册,能够提高你的手册阅读能力。
什么是AXI
AXI 的英文全称是 Advanced eXtensible Interface,即高级可扩展接口,它是 ARM 公司所提出的 AMBA(Advanced Microcontroller Bus Architecture)协议的一部分
- AMBA(Advanced Microcontroller Bus Architecture) 高级微控制器总线架构
AXI(Advanced eXtensible Interface)高级扩展接口是ARM AMBA的一部分,这是一个在1996年首次推出的微控制器巴士系列。AXI的第一个版本最早包含在2003年发布的AMBA 3.0中。2010年发布的AMBA 4.0包括了AXI的第二个主要版本,AXI4。也就是我们现在使用的AXI4接口
片上总线AMBA
随着微处理器芯片的规模越来越大,功能越来越复杂,需要一个统一的片上总线来进行管理。为此,业界出现了很多片上总线标准。其中,由ARM公司推出的AMBA片上总线受到了广大IP开发商和SoC系统集成者的青睐,已成为一种流行的工业标准片上结构。
AMBA 1
只有ASB和APB协议;AMBA 2
引入AHB协议用于高速数据传输;AMBA 3
,为适应高吞吐量传输和调试引入AXI和ATB,增加高级可扩展接口,而AHB协议缩减为AHB-lite,APB协议增加了PREADY和PSLVERR,ASB由于设计复杂而不再使用;AMBA 4
,AXI得到了增强,引入QOS和long burst的支持,根据应用不同可选AXI4,AXI4-lite,AXI4-stream,同时为满足复杂SOC的操作一致性引入ACE和ACE-lite协议,APB和ATB也同时得到增强,比如APB加入了PPROT和PSTRB,另外为改善总线数据传输引入QVN协议;- 适应更加复杂的高速NOC设计,引入环形总线协议,推出的
AMBA CHI
协议。
AXI接口
AXI4 协议支持以下三种类型的接口:
1、AXI4:用于满足高性能存储器映射需求
2、AXI4-Lite:简化版的 AXI4 接口,用于较少数据量的存储映射通信。
3、AXI4-Stream:用于高速数据流传输,非存储器映射 它不需要地址通道。
AXI应用
AXI4 协议支持突发传输,主要用于处理器访问存储器等需要指定地址的高速数据传输场景。AXI-Lite为外设提供单个数据传输,主要用于访问一些低速外设中的寄存器。而 AXI-Stream 接口则像 FIFO 一样,数据传输时不需要地址,在主从设备之间直接连续读写数据,主要用于如视频、高速 AD、PCIe、DMA 接口等需要高速数据传输的场合。
- AXI4适用于内存映射接口,并允许高吞吐量爆发,只用一个地址数据,最高可达256个数据传输周期,
ZYNQ
在ZYNQ中 AXI总线用于PS 和 PL 之间进行数据交互
zynq的ps上共留了9个AXI接口,其中两个GP AXI master、两个GP AXI slave、四个HP AXI slave、以及一个ACP AXI slave。
接口类型如下:
第一个字母“M”表示 PS 是主机,而第一个字母“S”表示 PS 是从机。
- 通用 AXI(General Purpose AXI):一条 32 位数据总线,适合 PL 和 PS 之间的中低速通信。
- 加速器一致性端口(Accelerator Coherency Port):在 PL 和 APU 内的 SCU 之间的单个异步连接,
总线宽度为 64 位。这个端口用来实现 APU cache 和 PL 的单元之间的一致性,PL 是做主机的。 - 高性能端口(High Performance Ports):四个高性能 AXI 接口,带有 FIFO 缓冲来提供“批量”读
写操作,并支持 PL 和 PS 中的存储器单元的高速率通信。数据宽度是 32 或 64 位,在四个接口中 PL 都是
做主机的。
STM32
在STM32H7中 ①是 64 位的 AXI 总线矩阵,在 D1 域,②和③都是 32 位的 AHB 总线矩阵,不同的是②在 D2 域,而③是在 D3 域
AXI总线矩阵D1域中的各个外设是挂在 64 位 AXI 总线组成 6*7 的矩阵上。6 个从接口端外接的主控分别是 LTDC、DMA2D、MDMA、SDMMC1、AXIM 和 D2-to-D1 AHB 总线
。7 个主接口端外接的从设备分别是 D1-to-D2 AHB 总线、 AHB3 总线、Flash A、Flash B、AXI SRAM 、QSPI 和FMC。另外 AHB3 再分支出 APB3 总线。
AXI接口
AXI4 和 AXI4-Lite接口包含5个不同的通道:两个读通道和三个写通道。
两个读通道:读地址通道(read address channel)、读数据通道(read data channel);
三个写通道:写地址通道(write address channel)、写数据通道(write data channel)、写响应通道(write response channel);
通道 | 数据 | 功能 |
---|---|---|
读地址通道(read address channel) | 主机->从机 | 主机要读取从机数据的地址 |
写地址通道(write address channel) | 主机->从机 | 主机要写入从机数据的地址 |
写数据通道(write data channel) | 主机->从机 | 主机要写入从机的数据 |
读数据通道(read data channel) | 从机->主机 | 从机返回被读取的数据到主机 |
写响应通道(write response channel) | 从机->主机 | 从机返回响应信号到主机 |
基于VALID/READY
的握手机制数据传输协议,传输源端使用VALID表明地址/控制信号、数据是有效的,目的端使用READY表明自己能够接受信息。数据总线可为(8/16/32/64/128/256/512/1024bit),最大为单次传输一个字节的数据。
时钟和复位
时钟
ACLK,全局时钟信号,所有输入信号都在时钟上升沿采样,所有输出信号都必须发生在时钟上升沿之后。
复位
协议规定复位为低电平有效
。需要注意的是ARVALID,AWVALID,WVALID,RVALID,BVALID(这几个信号的含义会在后面说明)在复位时必须保证是处于低电平的。
AXI信号命名规则 A 表示ADDR地址 W表示write写入 R表示read读取 再加上后面的具体类型 就是一个完整的信号名
比方说AWSIZE
就是主机向从机发送每次突发传输的字节数
AMBA AXI and ACE Protocol Specification AXI3, AXI4, and AXI4-Lite ACE and ACE-Lite文档的A2.1-2.7页
写地址通道信号
信号名 | 源 | 描述 |
---|---|---|
AWID | 主机 | 写地址ID ,用来标志一组写信号 |
AWADDR | 主机 | 写地址 ,给出一次写突发传输的写地址 |
AWLEN | 主机 | 突发长度,给出突发传输的次数 |
AWSIZE | 主机 | 突发大小,给出每次突发传输的字节数 |
AWBURST | 主机 | 突发类型 |
AWLOCK | 主机 | 总线锁信号,可提供操作的原子性 |
AWCACHE | 主机 | 内存类型,表明一次传输是怎样通过系统的 |
AWPROT | 主机 | 保护类型,表明一次传输的特权级及安全等级 |
AWQOS | 主机 | 质量服务QoS |
AWREGION | 主机 | 区域标志,能实现单一物理接口对应的多个逻辑接口 |
AWUSER | 主机 | 用户自定义信号 |
AWVALID | 主机 | 有效信号,表明此通道的地址控制信号有效 |
AWREADY | 从机 | 表明“从”可以接收地址和对应的控制信号 |
写数据通道信号
信号名 | 源 | 描述 |
---|---|---|
WID | 主机 | 一次写传输的ID tag |
WDATA | 主机 | 写数据 |
WSTRB | 主机 | 写数据有效的字节线,用来表明哪8bits数据是有效的 |
WLAST | 主机 | 表明此次传输是最后一个突发传输 |
WUSER | 主机 | 用户自定义信号 |
WVALID | 主机 | 写有效,表明此次写有效 |
WREADY | 从机 | 表明从机可以接收写数据 |
读地址通道信号
信号名 | 源 | 描述 |
---|---|---|
ARID | 主机 | 读地址ID,用来标志一组写信号 |
ARADDR | 主机 | 读地址,给出一次写突发传输的读地址 |
ARLEN | 主机 | 突发长度,给出突发传输的次数 |
ARSIZE | 主机 | 突发大小,给出每次突发传输的字节数 |
ARBURST | 主机 | 突发类型 |
ARLOCK | 主机 | 总线锁信号,可提供操作的原子性 |
ARCACHE | 主机 | 内存类型,表明一次传输是怎样通过系统的 |
ARPROT | 主机 | 保护类型,表明一次传输的特权级及安全等级 |
ARQOS | 主机 | 质量服务QoS |
ARREGION | 主机 | 区域标志,能实现单一物理接口对应的多个逻辑接口 |
ARUSER | 主机 | 用户自定义信号 |
ARVALID | 主机 | 有效信号,表明此通道的地址控制信号有效 |
ARREADY | 从机 | 表明“从”可以接收地址和对应的控制信号 |
读数据通道信号
信号名 | 源 | 描述 |
---|---|---|
RID | 从机 | 读ID tag |
RDATA | 从机 | 读数据 |
RRESP | 从机 | 读响应,表明读传输的状态 |
RLAST | 从机 | 表明读突发的最后一次传输 |
RUSER | 从机 | 用户自定义 |
RVALID | 从机 | 表明此通道信号有效 |
RREADY | 主机 | 表明主机能够接收读数据和响应信息 |
写响应通道信号
信号名 | 源 | 描述 |
---|---|---|
BID | 从机 | 写响应ID tag |
BRESP | 从机 | 写响应,表明写传输的状态 |
BUSER | 从机 | 用户自定义 |
BVALID | 从机 | 写响应有效 |
BREADY | 主机 | 表明主机能够接收写响应 |
brust突发
Burst:是一种根据单个地址完成多个数据项传输的过程,每一个传输的数据项都被称为 Beat(Transfer)。由于只有一个地址传输,突发中每个 Beat (Transfer)的地址都是基于传输类型 (INCR、FIXED或WRAP) 计算得到的。
Beat(Transfer):是AXI突发中的单个数据传输。
AXI协议是基于burst的,主机只给出突发传输的第一个字节的地址,从机必须计算突发传输后续的地址。突发传输不能跨4KB边界(防止突发跨越两个从机的边界,也限制了从机所需支持的地址自增数)。
突发长度
- 突发长度 ARLEN[7:0]决定读传输的突发长度,AWLEN[7:0]决定写传输的突发长度。
- AXI4扩展突发长度支持INCR突发类型为1~256次传输,对于其他的传输类型依然保持1~16次突发传输(Burst_Length=AxLEN[7:0]+1)
传输规则 wraping burst ,burst长度必须是2,4,8,16, burst不能跨4KB边界,不支持提前终止burst传输
- AMBA AXI and ACE Protocol Specification AXI3, AXI4, and AXI4-Lite ACE and ACE-Lite文档的A3-44页
突发字节
- 突发字节
AWSIZE[2:0]:表示一个 transfer 中的 Bytes 个数。 3’b000=>1 ,3’b001=>2 ,3’b010=>4 ,3’b011=>8 ,3’b100=>16,3’b101=>32 ,3’b110=>64 ,3’b111=>128
突发类型
- 突发类型
1.FIXED:突发传输过程中地址固定,用于FIFO访问
2.INCR:增量突发,传输过程中,地址递增。增加量取决AxSIZE的值。 使用最多的为INCR类型
3.WRAP:回环突发,和增量突发类似,但会在特定高地址的边界处回到低地址处。回环突发的长度只能是2,4,8,16次传输,传输首地址和每次传输的大小对齐。最低的地址整个传输的数据大小对齐。回环边界等于(AxSIZE*AxLEN)
AXI握手
基于VALID/READY
的握手机制数据传输协议,传输源端(source)使用VALID表明地址/控制信号、数据是有效的,目的端(destination)使用READY表明自己能够接受信息。
只有当 VALID 和 READY 信号都为高电平并且时钟存在上升沿时,才会视为有效传输。
所有的五个通道都是通过相同的VALID/REDAY握手处理来传输地址,数据和控制信息。
双向握手机制意味着主机和从机之间传输数据时,都可以控制传输速率。
握手过程,所谓握手过程就是 source 知道 destination 准备好了,destination 也知道 source 准备好了,具体来说就是通过 VALID 以及 READY 来互相确定。
下图在T1-T3时刻进行了数据传输,但是数据只在T2-T3时刻数据有效,目的端(destination)在T3时刻才能接受数据
下图在T2-T3时刻进行了数据传输,数据在T2-T3时刻数据有效,目的端(destination)在T1-T3时刻能接受数据,传输源端(source)在T2-T3时刻才发送数据
下图在T2-T3时刻进行了数据传输,数据在T1-T2时刻数据有效
AMBA AXI and ACE Protocol Specification AXI3, AXI4, and AXI4-Lite ACE and ACE-Lite文档的A3-37页和文档的A3-38页
AXI写响应
-
RRESP[1:0],读传输
-
BRESP[1:0],写传输
读传输的响应信息是附加在读数据通道上的,写传输的响应在写响应通道。
定义了突发的类型 2’b00=>OKAY ,2’b01=>EXOKAY , 2’b10=>SLVERR,2’b11=>DECERR。
OKAY:正常访问成功,还可以指示独占访问失败。
EXOKAY:指示独占访问的部分已成功。
SLVERR:从机错误。表明访问已经成功到了从机,但从机返回一个错误的情况给主机。
DECERR:主机没找到从机,表明没有对应的从机地址。
- AMBA AXI and ACE Protocol Specification AXI3, AXI4, and AXI4-Lite ACE and ACE-Lite文档的A3-54页
TLAST信号
在具有帧或者包概念的流式传输中,TLAST信号,用来表示一个包的结尾。例如发送大小为32字节的包,在发送第32个字节的时候,可以把TLAST信号拉高,来表示这个包发送完了。时序如下:
AXI读数据通道和写数据通道还包括LAST信号,用来表示最后一个数据的传输
AXI信号时序
AXI有规定信号的时序,就像上面复位的时候部分信号必须为低电平一样
从设备必须等待发出 ARVALID 和 ARREADY 断言后,才能发出 RVALID 断言以指示该有效数据可用
单箭头的指向信号和起始信号没有必须的先后顺序,双箭头的指向信号必须在双箭头的起始信号拉高之后进行拉高
-详细的在 AMBA AXI and ACE Protocol Specification AXI3, AXI4, and AXI4-Lite ACE and ACE-Lite文档的A3.3.1
写数据和读数据
AXI 读数据需要在 2 条读取信道上发生多次传输。
- 首先,主机 (Master)通过 读地址通道 (Address Read Channel) 发送读地址和控制信号到从机 (Slave),
- 然后,此地址的数据通过读数据通道 (Read data channel) 从从机发送到主机。
- 当 RLAST 拉高时,表示此时从机返回的 RDATA 是最后一个数据
根据下图所示,每个地址中可发生多次数据传输。此类型的传输事务称为突发 (burst)。
读数据波形图:
AXI 写数据需要在 3 条读取信道上多次传输。
- 首先,主机 (Master)通过 写地址通道 (Address Write Channel) 发送读地址和控制信号到从机 (Slave),
- 然后,此地址的数据通过写数据通道 (Write data channel) 从主机发射到从机。
- 最后,写入响应通过写响应通道 (Write Response Channel) 从从机发送到主机,以指示传输是否成功。
写数据波形图:
参考资料:
UG1037 Vivado AXI Reference Guide:赛灵思官方文档AXI参考手册UG1037(2017V4),这个是Xilinx官方的文档手册,参考必备。
AMBA AXI and ACE Protocol Specification AXI3, AXI4, and AXI4-Lite ACE and ACE-Lite:这个是ARM的官方手册IHI0022D,对AXI协议有一个更详细的讲解,本文主要也是参考这个文档
AMBA 4 AXI4-Stream Protocol Specification:这个是 ARM 讲解 AXI-Stream 的官方手册,需要注意的是 Xilinx 的 IP 核在 Stream 部分与 AMBA 的协议有一点区别。
AMBA AXI4 接口协议 赛灵思官方对AXI总线的简介,整体的概况了AXI总线的优势和三种类型,可以阅读一下