1、概述
Zynq 将 ARM 和 FPGA 整合到了一个芯片上,它的过人之处不仅是功耗、面积、成本的优化,更多的是将二者之间原本极为受限的数据交互方式转移到芯片内部完成,4 条 AXI GP通道(2 个从机、2 个主机)和 4 条 AXI HP 通道(均为从机)能够大大提升系统数据交互带宽,使得软硬协同设计变得更为灵活。AXI HP 总线是专为大吞吐量数据传输设定的,AXI GP则更多的是为了方便 ARM 侧对 PL(FPGA 逻辑)进行常规的数据寄存器读写控制或状态监控。在实际项目中,AXI GP 常常不可或缺。
AMBA AXI(Advanced eXtensible Interface)协议是一种面向高性能、高带宽系统设计的总线协议,能够满足各种高速系统的总线互联。
AXI 协议的主要特点有:
● 独立的地址、控制和数据接口
● 支持使用字节选通的不对齐数据的传输
● 基于特定地址进行的突发传输
● 通过独立的读和写通道实现低成本直接内存访问(DMA)
● 支持无序数据传输
● 提供多级寄存器锁存的支持,实现更好的时序收敛
2、AXI 版本介绍
AXI 协议是 Xilinx 从 6 系列的 FPGA 开始引入的一个接口协议(AXI3)。在 ZYNQ 中继续使用,版本是 AXI4,ZYNQ 内部设备都有 AXI 接口。AXI4-Lite 则是 AXI4 的一个简化版本,实现 AXI4 运行起来的最少接口信号,对于传输控制要求不高的应用,方便实用。
3、基本结构
AXI 协议是基于突发传输的。每一次传输,地址通道上有地址和控制信息,描述了被传输数据的特性。数据将在主机和从机之间传输,数据传输的方向则是从写数据通道到从机或从读数据通道到主机。在写传输中,主机到从机发送数据流。额外的写响应通道,反馈从机信号的状态,完成写传输。
AXI 协议可以实现以下功能:
● 在有效数据传输前提供地址信息
● 支持多个数据的传输
● 支持无序传输
如图所示,显示了一个读传输如何使用读地址和读数据通道。
如图所示,显示了一个写传输如何使用写地址、写数据和写响应通道。
AXI 协议一共定义了 5 个独立的通道,每一个通道都是由一组控制和响应信号组成的,使用双向的有效(VALID)信号和准备好(READY)信号实现握手机制。
发送端使用有效信号来指示何时有效数据或者控制信息在通道中是有效的。接收端使用准备好信号来指示何时可以接收数据。读数据通道和写数据通道都包含一个结束(LAST)信号来指示何时一个传输中的最后一个数据出现。
读和写地址通道:
每一个读和写传输都有独立的地址通道。地址通道上有一个传输所需要的全部的地址和控制信息。AXI 协议支持以下地址传输机制:
● 1~16 个可变数据个数的突发传输
● 8~1024bits 可变数据位宽的突发传输
● 跳变、递增和非递增的突发传输
● 专用的或锁定的传输控制
● 系统级的缓存、缓冲控制
● 安全的、专有的传输控制
读数据通道:
读数据通道包含读数据和从从机返回给主机的全部读响应信息。读数据通道包含:
● 读数据总线,总线宽度可以是 8、16、32、64、128、256、512 或者 1024bits
● 用于指示读传输完成状态的一个读响应信号
写数据通道:
写数据通道实现从主机到从机的写数据。写数据通道包含:
● 写数据总线,总线宽度可以是 8、16、32、64、128、256、512 或者 1024bits
● 为每 8bits 数据提供一个有效标识位,标示数据总线的每个 byte 是否有效
写数据通道信息会被接收端缓存,因此主机在进行写传输时,无需确认上一次写传输的状态。
写响应通道:
写响应通道提供了一种让从机对写传输作出响应的机制。所有的写传输都必须基于完成信号的状态确认传输是否成功。每次突发传输都有一次传输完成的信号响应,注意完成信号只在一次突发传输完成后才产生,而不是为一次突发传输中的每个独立的数据产生。
4、接口和互联
一个典型的系统包含数个主机和从机设备,这些设备通过互联总线的形式连接在一起,
如图所示。
AXI 协议提供单一接口定义的形式来描述这种互联:
● 在主机与互联总线之间
● 在从机与互联总线之间
● 在主机与从机之间
大多数系统使用以下三种互联方式中的一种:
● 地址和数据总线共享
● 地址共享,有多个数据总线
● 多层互联,即有多个地址和数据总线
在大多数系统中,对地址通道的带宽的需求是明显低于数据通道的带宽的。此类系统能够在系统性能与互联复杂性之间达成很好的平衡,通过共享的地址总线与多个数据总线来达成平行数据传输。
5、插入寄存器
每个 AXI 通道只会单向传输信息,无需在不同通道间固定关系。这一点很重要,因为这确保了在任意通道间插入寄存器成为可能,虽然这样可能会产生一拍或多拍的时钟延时,但这可以确保在时钟延时和更高的时钟频率实现间做一些灵活的调整,以最大程度的实现系统的优化。
也可以在互联中的任何必要的地方插入寄存器,使用简单的寄存器隔离关键的时序路径,以实现处理器和高性能存储器间的直接、快速的连接。
6、基本传输
每个传输实例都有 VALID 和 READY 信号的握手机制。不论是地址或者数据的传输都在VALID 和 READY 信号为高电平的时候发生。
★读突发脉冲的例程:
如图所示,这是一个 4 个数据的突发读操作。在这个实例中,主机发送地址信息,然后从机在一个时钟周期之后接收到地址信息。地址信号出现在地址总线后,数据传输则在读数据通道实现。从机保持 RVALID 信号为低电平,一直到读数据总线 RDATA 是有效的,则拉高。
RVALID 信号。对于突发传输的最后一个读数据,从机通过 RLAST 信号的拉高,指示此时数据总线 RDATA 上传输的是最后一个读数据。主机可以通过拉低 RREADY 信号来减慢从机送数据的速度。在 RVALID 为高电平时,从机会判断此时 RREADY 信号是否也为高,若为高,表明此次传输的 RDATA 数据已经被接收;若为低,则继续保持 RVALID 为高,并且保持当前的读数据 RDATA 不变,直到 RREADY 拉高为止,接着才会送下一个有效数据。
★重叠读突发传输实例:
如图所示,在从机接收第一个地址后(ARVALID 和 ARREADY 都为高电平),主机可以接着发起第二个地址。读数据通道送出的数据会遵循突发传输地址写入的先后,即“先来后到”的原则。
★写突发脉冲实例:
如图所示,这是一次突发写传输的例子。写操作开始于主机在写地址通道发送一个地址和控制信息。然后主机在写数据通道上发送所有的有效写数据。在主机发送最后一个写入数据时,WLAST 信号变成高电平。当从机接收好所有的数据后,从机通过写响应通道将信息反馈给主机,指示写数据已经被接收,写传输完成。
7、信号描述
全局信号:
写地址通道信号:
注:对于一般的应用,AWBURST、AWLOCK、AWCACHE 和 AWPROT 通常赋一个特定的值,
即设定为固定的工作模式即可。
写数据通道信号:
写响应通道信号:
读地址通道信号:
读数据通道信号:
8、握手过程
全部 5 个通道使用同样的 VALID 和 READY 握手机制来实现数据和控制信息的传输。这个双向的流控制机制使主机和从机能控制数据和控制信息的传输速度。发送端产生 VALID 信号指示数据或控制信息有效,接收端产生 READY 信号表明它可以或已经接收数据或控制信息。只有在 VALID 和 READY 信号都为高电平的时候才能进行有效的传输。
如图所示,这是一个握手的实例。发送端送出数据或控制信息(INFORMATION),并将
VALID 信号拉高。来自发送端的数据或控制信息保持稳定直到接收端将 READY 信号拉高,指明接收端已经接收数据或控制信息。箭头表明了传输实际发生的时机。
必须注意,若发送端要发起一次传输,不允许 VALID 信号一直等待 READY 变为高电平才执行拉高操作。正确的操作应该是,将 VALID 拉高,一直保持高电平直到 READY 拉高,完成一个完整的握手操作。
如图所示,接收端在 VALID 信号拉高之后,才将 READY 信号拉高,表示发送端发出的数据或控制信息被接收。这意味着,接收端若在 VALID 信号拉高之前就已经将 READY 拉高表示准备好,那么只需要 1 个时钟周期就可以完成一次数据或控制信息的有效传输。箭头表明传输发生的时机。
接收端送出的 READY 信号在 VALID 拉高之后才拉高,在这个握手机制中是允许的。如果 READY 为高电平,在 VALID 拉高之前将 READY 拉低也是允许的。如图所示,在这个实例中,VALID 和 READY 信号同一个时钟周期拉高了,那么这正好是一次有效的数据或控制信息的传输。