AXI总线简介
AXI属于AMBA(The ARM Advanced Microcontroller Bus Architecture)家族的一员,AXI协议在AMBA3.0版本中开始出现,并在后续的AMBA4.0,AMBA5.0中持续更新,对应为 AXI3,AXI4,AXI5。
下面是AMBA家族发展简介图。
AXI,全名Advanced eXtensible Interface。AXI有以下优势,
-
适合高带宽,低延迟应用,尤其为目前的高速存储外设设计,如DDR4
-
可灵活扩展总线位宽以及拓扑连接
-
标准化,通用总线,Xilinx在几乎所有自家的IP中支持甚至只支持AXI
axi的协议文档中提出它有如下特点:
- 适用于高带宽和低延时的设计
- 提供不带复杂桥的高频率操作
- 满足多种组件的接口要求
- 适用于具有高初始访问延迟的内存控制器
- 提供了实现互连架构的灵活性
- 向后兼容现有的AHB和APB接口。
axi协议的关键特点:
-
单独的地址/控制 和 数据阶段
-
使用字节控制来支持非对齐的数据传输
-
使用只发出起始地址的突发burst传输
-
单独的读写数据通道,可以提供低成本的直接内存访问(DMA,Direct Memory Access)
-
支持发送多个outstanding addresses
-
支持无序传输
-
允许方便地添加寄存器阶段,以提供定时关闭。
这里,先介绍两个概念。
outstanding —— 可以连续执行某个操作,而不用等待前面的操作完成的 执行次数,有点绕。举个例子,master 执行读操作的行为是:发送读地址 -> 等待数据返回 -> 发送读地址 -> 等待数据返回 -> …,这种outstanding就为1,它必须等待上一次的操作完成后,才可以执行下一次操作;如果outstanding能力为N>1的话,则读操作时,可以连续发N个读地址命令,在这期间如果读数据没有返回,则需要等待读数据返回,如果有读数据返回,则返回了几个,那么仍然可以接着发几个。也就是说,“在路上” 的读命令(或者读数据)最多可以是N。对于写操作,可以连续发出N组写地址(写数据)命令,这期间如果写响应没有返回,则必须等待写响应返回才能接着发写地址(写数据)命令,如果有写响应返回,则返回了几个,那么仍然可以接着发几组。也就是说,“在路上” 的写响应最多可以是N。(参考链接:https://aijishu.com/a/1060000000210706)
burst —— burst传输就是通过发送一次地址,来读写多个地址的数据,这样可以提高传输效率。burst传输需要指定burst len和burst size,burst len表示一次操作会执行的次数,burst size表示每次执行处理数据的宽度,如果是地址递增模式的话,递增的步长一般是burst size的大小。
burst传输有应用限制,不是所有传输类型都适合burst传输,一般busrt传输应用在下面三种场景: -
Flash应用类型
只发送一次地址,之后地址自动累加,直到所有数据发送完成。 -
Cache应用类型
只发送一次地址,之后地址自动累加,累加到一定值后地址又自动回到初始地址。数据传输在一段地址范围内,循环传输。 -
FIFO应用类型
只发送一次地址,之后地址不变,所有数据都是传送到此地址。
(参考链接:https://blog.csdn.net/phenixyf/article/details/106387066)
AXI拓扑结构
AXI使用主从机制,由主机master发起请求,从机slave对请求进行响应。
AXI支持一对一的连接,(参考链接:https://aijishu.com/a/1060000000108507)
也可以通过连接器IP支持一对多,多对一以及N对N连接,连接器相当于一个多路开关,通过轮询或者基于优先级的策略进行开关切换。
AXI接口
AXI定义了5个独立的通道:
-
read address - 读地址通道,传输读操作的地址和控制信息
-
read data - 读数据通道,传输slave发到master的读数据
-
write address - 写地址通道,传输写操作的地址和控制信息
-
write data - 写数据通道,传输master发到slave的写数据
-
write response - 写响应通道,传输slave发回master的写响应
AXI握手机制
在具体讲每个信号之前,先讲一下AXI的握手机制,上面提出的5个channel中都有用到 VALID / READY 握手机制。
VALID / READY 握手机制是一种双向流控制机制,发送方和接收方都可以控制信息传输的速率。发送方拉高VALID表示地址、数据和控制信号已经准备好,接收方拉高READY表示已准备好接收数据,只有当VALID和READY都拉高的时候,传输