AXI4-lite与AXI4-stream协议
上篇博文《AMBA3.0 AXI总线入门》浅要介绍AXI4总线协议,AXI总线作为一种总线,可以挂载多个主设备(master)和从设备(slave),AXI总线协议定义了主设备和从设备之间如何进行通信。主设备可以向从设备发起读事务(Read Transaction)和写事务(Write Transaction),从设备只能被动接受主设备发起的请求并作出响应。一般来说,所有的设备共享总线的控制总线、地址总线和数据总线,但是同一时间只能有一对主从设备通过总线进行通信。由于可能会有多个主设备同时访问总线,因此必须要有个控制器选择哪个主设备优先进行通信,这便是总线仲裁;此外主设备可能会访问不同的从设备,此时控制器需要对主设备访问的地址进行译码,选择对应的从设备来和主设备进行通信。
AXI4总线协议支持以下三种类型的接口(Interface):
AXI4(有时候也叫AXI4-full):高性能存储映射接口;
AXI4-Lite:简化版的AXI4接口,用于较少数据量的存储映射通信;
AXI4-Steam:用于高速数据流传输,非存储映射接口。
所谓存储映射,即主设备访问从设备时需要给出访问的地址,即从设备是对应一段内存空间地址的,data && address!
这三种类型的接口应用场景也有所区别。AXI4-full接口支持突发传输,主要用于处理器访问存储器等需要指定地址的高速数据传输场景。AXI4-Lite接口为外设提供单个数据传输,数据总线只能是32位或者64位,每次传输只能传输一个数据。主要用于访问一些低速外设中的寄存器。而AXI-Steam接口则向FIFO一样,数据传输时不需要地址,在主从设备之间直接连续读写数据,主要用于如视频、高速AD、PCIe、DMA接口等需要高速数据传输的场合。
AXI4-full接口支持突发传输,所谓突发传输,就是给一个地址,可以对从这个地址开始的若干个地址处的值都进行读写,至于这若干个地址分别是什么,需要根据写/读地址通道 Master 给出的控制信号来决定。
AXI4-Lite接口为外设提供单个数据传输,所谓单个数据传输,就是给一个地址,就只能读写这一个地址处的值。
AXI4-Lite接口
AXI4-Lite接口由五个独立的通道构成:读地址;读数据;写地址;写数据;写响应。
在一次读事务(Read Transaction)的过程中,主机首先在读地址通道给出读地址和控制信号,然后从机由读数据通道返回读出的数据。
在一次写事务(Write Transaction)的过程中,主机在写地址通道给出写地址和控制信号,然后在写数据通道发送要写的数据。从机在接收数据之后,在写响应通道给出响应信号。
对于AXI4-Lite接口,一次读/写事务只能读取/写入一个地址处的数据,但是对于AXI4-Full接口,一次读/写事务中,Master发出一个地址,而Slave可以从该地址开始连续读出、写入多个地址处的数据,并发送到读/写数据通道,这便是所谓的突发传输。
每个通道都包含了一组信号,尤其需要注意的是 VALID 和 READY 信号。VALID 信号由源端(source)产生,表示当前地址或者数据线上的信息是有效的;而 READY 信号由目的端(destination)产生,则表示已经准备好接收地址、数据以及控制信息。对于读数据通道,Slave需要将数据发送给Master,所以Slave是源端,也就是Slave负责产生 VALID 信号,Master负责产生READY信号
对于写数据通道,Master需要将数据发送给Slave,所以Master是源端,也就是Master负责产生 VALID 信号,Slave负责产生READY信号。
在由通道传输信息的时候,需要通过 VALID 和 READY 信号进行握手,如下图所示,图片中的 INFORMATION 是指通过通道传输的某种信息,可以是地址、数据、控制信号等等。在由通道传输信息的时候,需要通过 VALID 和 READY 信号进行握手,如下图所示,图片中的 INFORMATION 是指通过通道传输的某种信息,可以是地址、数据、控制信号等等。
在 AXI 协议中,所有的输入信号都在是 ACLK 的上升沿采样,所有的输出信号必须在 ACLK 的上升沿之后才能改变。在 T1 之后,源端将 VALID 拉高,表明 INFORMATION 信号线上传输的是有效的地址、数据或者控制信息。目的端在 T2 之后将 READY 拉高,表明它已经准备好接收数据,此时源端必须保持 INFORMATION 数据稳定不变,直到 T3 时刻进行数据传输。
为了防止死锁,VALID信号和READY必须遵守以下的约定:
VALID信号的拉高不能依赖于 READY 信号,也就是说源端不允许等目的端的 READY 信号拉高之后,才将 VALID 信号拉高。而且, 一旦 VALID 拉高,源端必须保持其处于拉高状态,直至成功握手(在时钟上升沿检测到 VALID 和 READY 均为高电平)后才能拉低 VALID,目的端可以等检测到 VALID 信号拉高后,才将READY信号拉高;也可以不等。
到这里,已经简单介绍了 AXI4-Lite 接口的读写过程,以及握手协议。
AXI-Stream接口
AXI-Stream(以下简称AXIS)是AMBA协议的AXI协议中最简单的一个协议;是AXI4中定义的面向数据流的协议,常用于对数据流的处理,如:摄像头(视频信号);高速AD;Xilinx的AXI-DMA模块;在进行SOC设计中需要高速数据传输处理的场合,常常使用AXIS协议。
AXI4-Stream用于数据交换的几个概念:
Transfer:AXI4-Stream接口的一次数据传输。单个传输由单个TVALID、TREADY握手定义。
Packet:通过AXI4-Stream接口一起传输的一组字节。数据包类似于AXI4突发传输。一个包可以由单个传输或多个传输组成。实现时可以使用包来更有效地处理包大小的组中的流。
Frame :AXI4-Stream中最高级别的字节分组。一帧包含整数个数的报文。一个帧可以是一个非常大的字节数,例如整个视频帧缓冲区。
AXIS数据流有多种形式:
1、Byte流 2、连续对齐流 3、连续非对齐流 4、稀疏流
AXIS与AXI-FULL的区别:
取消了Address Write/Address Read通道;
取消了反馈响应信号Bresp和Rresp;
半双工,仅能读或者写;
不允许乱序;
无最大突发传输长度;
包含TID信号指示源,TDEST指示目的地;
包括一个用于插入和溢出空字节的TKEEP信号;
AXI-Stream端口信号(Master)
ACLK | 输入信号,系统时钟 |
ARESETN | 输入信号,系统复位 |
TVALID | 输出信号,数据有效信号,握手信号 |
TREADY | 输入信号,准备接收信号,握手信号 |
TDATA | 输出信号,数据线,数据传输 |
TSTRB | 输出信号,用于流格式 |
TKEEP | 输出信号,主机数据有效信号,高电平表示有效,低电平表示无效 |
TLAST | 输出信号,表示最后一个字节,下一个时钟周期的数据将无效 |
TID | 输出信号,用于源地址,用于多机通信 |
TDEST | 输出信号,用于目的地址,用于多机通信 |
TUSER | 输出信号,用户自定义,用于多机通信 |
AXIS的所有信号都在ACLK的上升沿被采样;这里讲解下几个比较重要的信号:
TVALID:TVALID是数据有效信号,若TVALID为高电平,标志着TDATA数据线上的数据是有效的,能够被取走,TVALID信号与TREADY信号是一组握手信号;
TREADY:TREADY是指从机是否准备好接收数据,若TREADY为高电平,则标志着从机此时已经准备好接收数据,TREADY信号与TVALID信号是一组握手信号;
TDATA:数据通道,位宽可以是8、16、32;当TVALID与TREADY均为高电平(有效)时,TDATA数据被传递;
TLAST:数据流结束信号,当TLAST为高电平时,说明此时传输的数据为数据流的最后一个数据;在Xilinx的AXI-DMA中,TLAST信号可以控制整个数据流传输的结束(当传输过程中TLAST为高,则结束一次DMA传输);
本质上AXIS协议也就是握手协议,只不过增加了一个TLAST信号,和一些其他的附带指示其他信息的信号;如TID、TDEST、TUSER等都是用于多级通讯的,在单一数据流方向的系统中,我们只需要关注上述几个重要的信号即可。TLAST:常为1或0;TKEEP和TSTRB:全部为1或0;TREADY:时刻准备接收,数据反压问题。
数据反压
所谓数据反压,即AXIS的master端数据流源源不断涌入,但从机处理数据能力有限,导致输入数据量大于输出数据量。发送端:当保留TREADY信号时,从机若处理不了数据时,可以将数据缓存。若去掉TREADY信号,则处理不了的数据只能溢出。
接收端:若去除TREADY信号,则说明接收端的处理数据速度大于发送端,数据可以持续输入。
浅要讲一下当前的对AXI-lite 和AXI-stream的理解,参考了以下文章,欢迎大家探讨。
AXI4协议之AXI4-Lite接口详解及实战-CSDN博客
AXI Reference Guide (UG761) • 查看器 • AMD 技术信息门户网站