第3章 AXI总线协议介绍 3.1AXI协议简介 AMBA AXI(Advanced eXtensible Interface)协议是一种面向高性能、高带宽系统设计的总线协议,能够满足各种高速系统的总线互连。 AXI协议的主要特点有:  独立的地址、控制和数据接口;  支持使用字节选通的不对齐数据的传输;  基于特定地址进行的突发传输;  通过独立的读和写通道实现低成本直接内存访问(DMA);  支持无序数据传输;  提供多级寄存器锁存的支持,实现更好的时序收敛。 3.1.1AXI版本介绍 AXI协议是Xilinx从6系列的FPGA开始引入的一个接口协议(AXI3),且在很多Xilinx提供的IP核中都有使用,目前很多都支持更高的版本AXI4。AXI4Lite是AXI4的一个简化版本,实现AXI4运行起来的最少接口信号,适用于对传输控制要求不高的应用。 3.1.2基本结构 AXI协议是基于突发传输的。每一次传输时,地址通道上有地址和控制信息,描述了被传输数据的特性。数据将在主机和从机之间传输,数据传输的方向是从写数据通道到从机或从读数据通道到主机。在写传输中,主机向从机发送数据流。写响应通道是从机给主机的反馈信号,指示当前写传输的状态,完成写传输。 AXI协议可以实现以下功能:  在有效数据传输前提供地址信息;  支持多个数据的传输;  支持无序传输。 主机到从机的读数据传输如图3.1所示。主机先发起一次地址的传输,随后从机将待读取的数据逐个送往主机。主机的地址发送由读地址通道实现,从机的数据发送由读数据通道实现。 图3.1AXI的读操作 主机到从机的写数据传输如图3.2所示。主机先发起一次地址的传输,随后主机将待写入的数据逐个送往从机,从机在完成一次完整的地址和数据接收后,发出一个写响应反馈给主机。主机的地址发送由写地址通道(Write address channel)实现,主机的数据发送由写数据通道(Write data channel)实现,从机的响应信号由写响应通道(Write response channel)实现。 图3.2AXI的写操作 1. 通道定义 AXI协议一共定义了5个独立的通道,每一个通道都是由一组控制和响应信号组成的,使用双向的有效(VALID)信号和准备好(READY)信号实现握手机制。 发送端使用VALID信号指示何时通道中的数据或控制信号是有效的,接收端使用READY信号指示何时可以接收数据。读数据通道和写数据通道都包含一个结束(LAST)信号指示一个传输中的最后一个数据何时出现。 1) 读或写地址通道 读或写传输都有独立的地址通道。地址通道包含一次传输所需要的全部地址和控制信息。AXI协议支持以下地址传输机制:  1~16个可变数据个数的突发传输;  8~1024位可变数据位宽的突发传输;  跳变、递增和非递增的突发传输;  专用的或锁定的传输控制;  系统级的缓存、缓冲控制;  安全的、专有的传输控制。 2) 读数据通道 读数据通道包含读数据和从机反馈给主机的读响应信息。读数据通道包含:  读数据总线,总线宽度可以是8、16、32、64、128、256、512或1024位;  用于指示读传输完成状态的一个读响应信号。 3) 写数据通道 写数据通道实现主机向从机的数据写入传输。写数据通道包含:  写数据总线,总线宽度可以是8、16、32、64、128、256、512或1024位;  为每8位数据提供一个有效标识位,标示数据总线的每个字节(8位)是否有效。 写数据通道信息会被接收端缓存,因此主机在进行写传输时,无须确认上一次写传输的状态。 4) 写响应通道 写响应通道提供了一种从机对写传输作出响应的机制。所有的写传输都必须基于完成信号的状态确认传输是否成功。每次突发传输都有一次传输完成的信号响应,注意完成信号只在一次突发传输完成后才产生,而不是对突发传输中的每个独立的数据做出响应。 2. 接口和互连 如图3.3所示,一个典型的系统包含数个主机和从机设备,这些设备通过互连总线的形式连接在一起。 图3.3主机和从机互联 AXI协议提供单一接口定义的形式来描述这种互连:  在主机与互连总线之间;  在从机与互连总线之间;  在主机与从机之间。 大多数系统使用以下三种互连方式中的一种:  地址和数据总线共享;  地址共享,有多个数据总线;  多层互连,即有多个地址和数据总线。 在大多数系统中,对地址通道的带宽需求要明显低于数据通道的带宽。此类系统能够在系统性能与互连复杂性之间达成很好的平衡,通过共享的地址总线与多个数据总线来达成平行数据传输。 3. 插入寄存器 每个AXI通道都只支持单向传输,因此无须考虑不同通道复用的影响。这也使得在任意通道间插入寄存器成为可能,虽然这样可能会产生一拍或多拍的时钟延时,但这可以确保在时钟延时和更高的时钟频率实现之间做一些灵活的调整,以实现系统设计的最优化。 也可以在互连中的任何必要的地方插入寄存器。若使用简单的寄存器隔离时序设计中的关键路径,便可以更好地实现处理器和高性能存储器间直接、快速的连接。 3.1.3基本传输 下面对AXI协议的每个基本传输一一做介绍。每个传输实例都有VALID和READY信号的握手机制。不论是地址或是数据的传输都在VALID和READY信号为高电平时发生。 1. 突发读传输实例 如图3.4所示,这是一次4个数据的突发读操作。在这个传输中,主机首先在读地址通道上发送地址信息(ARVALID拉高时ARADDR有效),然后从机在一个时钟周期之后接收到地址信息(ARREADY和ARVALID同时为高电平时,表示从机接收到了ARADDR)。完成地址传输后,数据传输则在读数据通道实现。从机保持RVALID信号为低电平,一直到读数据总线RDATA是有效的,则拉高RVALID信号,向主机发送有效的数据RDATA。对于突发传输的最后一个读数据,从机通过将RLAST信号拉高,指示此时数据总线RDATA上传输的是最后一个读数据。 图3.4突发读操作 主机可以通过拉低RREADY信号来减慢从机送数据的速度。在RVALID为高电平时,从机会判断此时RREADY信号是否也为高,若为高,表明此次传输的RDATA数据已经被接收; 若为低,则继续保持RVALID为高,并且保持当前的读数据RDATA不变,直到RREADY拉高为止,接着才会传送下一个有效数据。 2. 连续突发读传输实例 如图3.5所示,在从机接收第一个地址后(ARVALID和ARREADY都为高电平),主机可以接着发起第二个地址,实现连续的突发读操作。读数据通道送出的数据会遵循突发传输地址写入的先后,即“先来后到”的原则顺序传输。 图3.5连续突发读操作 3. 突发写传输实例 如图3.6所示,这是一次4个数据的突发写操作。在这个传输中,主机首先在写地址通道上发送地址信息(AWVALID拉高时AWADDR有效),然后从机在一个时钟周期之后接收到地址信息(AWREADY和AWVALID同时为高电平时,表示从机接收到了AWADDR)。完成地址传输后,主机接着在写数据通道实现写入数据的传输。主机拉高WVALID的同时,数据WDATA有效。在从机输出的WREADY为高电平且WVALID也为高电平时,表示当前数据WDATA已经被从机正确接收到了。在主机传输突发写入的最后一个数据(第4个数据)时,WLAST信号需要同时拉高。当从机接收好所有的数据后,从机通过写响应通道将信息(BVALID拉高时,BRESP指示OKAY表示传输正常)反馈给主机,指示写数据已经被接收,写传输完成。 图3.6突发写传输操作 3.2信号描述 1. 全局信号 全局信号及描述如表3.1所示。 表3.1全局信号及描述 信号 发送端 描述 ACLK 时钟源 全局时钟信号。所有的信号都在全局时钟的上升沿采样 ARESETn 复位源 全局复位信号。低电平有效 2. 写地址通道信号 写地址通道信号及描述如表3.2所示。 表3.2写地址通道信号及描述 信号 发送端 描述 AWID[3:0] 主机 写地址ID。该信号是写地址传输的唯一标识 AWADDR[31:0] 主机 写地址。写地址总线为突发写传输的第一个有效数据传输提供地址。相关控制信号决定了后续传输的有效数据相对于第一个地址的关系 AWLEN[3:0] 主机 突发长度。突发长度提供突发传输的数据长度 AWSIZE[2:0] 主机 突发位宽。突发位宽提供突发传输中每个有效数据的位宽 AWBURST[1:0] 主机 突发类型续表 信号 发送端 描述 AWLOCK[1:0] 主机 锁定类型 AWCACHE[3:0] 主机 缓存类型 AWPROT[2:0] 主机 保护类型 AWVALID 主机 写地址有效。该信号指示此时传输的是否为有效的写地址和控制信息: 1=地址和控制信息是有效的; 0=地址和控制信息无效。地址和控制信息保持稳定直到地址响应信号AWREADY为高电平 AWREADY 从机 写地址准备好。这个信号指示从机是否已经准备好接收地址和相关的控制信号: 1=从机准备好; 0=从机未准备好 注: 对于一般的应用,AWBURST、AWLOCK、AWCACHE和AWPROT通常赋一个特定的值,即设定为固定的工作模式即可。 3. 写数据通道信号 写数据通道信号及描述如表3.3所示。 表3.3写数据通道信号及描述 信号 发送端 描述 WID[3:0] 主机 写ID。这个信号是写数据传输的唯一表识。WID值必须与写传输的AWID值匹配 WDATA[31:0] 主机 写数据。写数据总线可以是8、16、32、64、128、256、512或1024位带宽 WSTRB[3:0] 主机 写数据有效字节数。这个信号指明写数据的每个字节数据是否写入最终的地址中。在写数据总线中每8位有一个WSTRB位相对应,指示该信号写入的数据字节是否更新到最终的写地址中 WLAST 主机 最后一个数据写入指示信号。这个信号高电平时,表明一次突发写传输的最后一个数据正在传输 WVALID 主机 写有效信号。这个信号指明写数据是否有效: 1=写数据有效; 0=写数据无效 WREADY 从机 写准备好。这个信号指明从机是否可以接收写数据: 1=从机准备好; 0=从机未准备好 4. 写响应通道信号 写响应通道信号及描述如表3.4所示。 表3.4写响应通道信号及描述 信号 来源 描述 BID[3:0] 从机 响应ID。这是写响应的唯一标识。BID值必须与写传输的AWID值匹配 BRESP[1:0] 从机 写响应。这个信号表明写传输的状态。可用的状态是OKAY、EXOKAY、SLVERR和DECERR 续表 信号 来源 描述 BVALID 从机 写响应有效信号。这个信号表明写响应是否有效: 1=写响应有效; 0=写响应无效 BREADY 主机 响应准备好。这个信号表明主机是否可以接收响应信息: 1=主机是准备好的; 0=主机未准备好 5. 读地址通道信号 读地址通道信号及描述如表3.5所示。 表3.5读地址通道信号及描述 信号 来源 描述 ARID[3:0] 主机 读地址ID。该信号是读地址信号的唯一标识 ARADDR[31:0] 主机 读地址。读地址总线提供一个突发读传输的初始地址。只提供了突发读传输的起始地址,其余读数据的地址通过控制信号可以计算出来 ARLEN[3:0] 主机 突发长度。突发长度提供了突发读传输的数据个数 ARSIZE[2:0] 主机 突发位宽。这个信号指示了突发传输的数据位宽 ARBURST[1:0] 主机 突发类型 ARLOCK[1:0] 主机 锁定类型 ARCACHE[3:0] 主机 缓存类型 ARPROT[2:0] 主机 保护类型 ARVALID 主机 写地址有效。该信号为高电平时,写地址和控制信息有效,并将保持稳定,直到地址响应信号ARREADY拉高。1=地址和控制信息有效; 0=地址和控制信息无效 ARREADY 从机 写地址准备好。该信号表明从机是否准备好接收地址和相关的控制信号: 1=从机准备好; 0=从机未准备好 6. 读数据通道信号 读数据通道信号及描述如表3.6所示。 表3.6读数据通道信号及描述 信号 来源 描述 RID[3:0] 从机 读ID标签。该信号是读数据的唯一标识。RID值是由从机产生的,必须与读地址通道传输的ARID值相匹配 RDATA[31:0] 从机 读数据。读数据总线可以是8、16、32、64、128、256、512或1024位带宽 RRESP[1:0] 从机 读响应。这个信号表明读传输的状态。可用的反馈状态是OKAY、EXOKAY、SLVERR和DECERR RLAST 从机 最后一个读数据有效标志位。这个信号表明一次突发读传输的最后一个数据正在传输 续表 信号 来源 描述 RVALID 从机 读有效信号。这个信号表明读数据是否有效: 1=读数据有效; 0=读数据无效 RREADY 主机 读数据准备好。这个信号表明主机是否可以接收从机送出的读数据: 1=主机是准备好的; 0=主机未准备好 3.3握手过程 全部5个通道使用同样的VALID和READY握手机制来实现数据和控制信息的传输。这个双向的流控制机制确保主机和从机能有效地把控好数据和控制信息的传输速度。发送端产生VALID信号指示数据或控制信息有效,接收端产生READY信号表明它可以或已经接收数据或控制信息。只有在VALID和READY信号都为高电平的时候才能进行有效的传输。 如图3.7所示,这是一个握手的实例。发送端送出数据或控制信息(INFORMATION),并将VALID信号拉高。来自发送端的数据或控制信息保持稳定直到接收端将READY信号拉高,指明接收端已经接收数据或控制信息。箭头表明了传输实际发生的时机。 图3.7VALID信号早于READY信号的握手操作 必须注意,若发送端要发起一次传输,不允许VALID信号一直等待READY变为高电平才执行拉高操作。正确的操作: 将VALID拉高,一直保持高电平直到READY拉高,完成一个完整的握手操作。 如图3.8所示,接收端在VALID信号拉高之前,已经将READY信号拉高,那么数据或控制信息(INFORMATION)的传输在1个时钟周期就完成了。箭头表明传输发生的时机。 图3.8READY信号早于VALID信号的握手操作 接收端送出的READY信号在VALID拉高之后才拉高,在这个握手机制中是允许的。如果READY为高电平,在VALID拉高之前将READY拉低也是允许的。如图3.9所示,在这个实例中,VALID和READY信号同一个时钟周期拉高了,那么这正好是一次有效的数据或控制信息的传输。 图3.9READY和VALID信号同时拉高的握手操作