目录
1.AXI 协议概述
AXI(高级可扩展接口)协议是一种广泛应用于高性能、低延迟的通信协议,常用于复杂的片上系统(SoC)设计中。AXI协议支持高性能、高频率的系统设计,主要用于管理器(Manager)和从属设备(Subordinate)之间的通信(例如,处理器和外设或内存之间的通信)。
AXI4.0-lite主要用于内核和外设寄存器之间的通信。
AXI4.0-full主要用于往DDR或者OCM中写入大量数据时使用。
AXI_stream主要用于往FIFO等没有地址的数据缓冲区传送大量数据时使用。
具有各种处理器和功能块的 SoC 的示例:
上图显示了使用 AXI 的所有连接,可以看到 AXI3 和 AXI4 在同一个 SoC 中使用,这是常见的做法,在这种情况下,互连执行不同 AXI 接口之间的协议转换。
1.1 AXI协议特性
特性 | 描述 |
---|---|
高带宽与低延迟 | AXI协议设计用于高带宽和低延迟的应用,适合实时应用和内存密集型操作。 |
高频率操作 | 支持高频率操作,无需复杂的桥接器,简化设计并减少延迟。 |
接口兼容性 | 适用于各种设备的接口需求,包括高性能和低功耗设备。 |
适用于内存控制器 | 特别适合用于具有高初始访问延迟的内存控制器,如DRAM控制器。 |
灵活的互联架构 | 允许设计灵活的互联架构,适应不同的系统需求。 |
向后兼容性 | 向后兼容旧的AMBA接口(如AHB和APB),便于与传统系统集成。 |
1.2 AXI协议的关键特性
特性 | 描述 |
---|---|
地址/控制和数据阶段分离 | 将地址/控制阶段和数据阶段分开,提高数据事务管理效率,减少潜在冲突。 |
支持非对齐数据传输 | 通过字节使能(Byte Strobes)支持非对齐数据传输,能高效处理数据未对齐的情况。 |
基于突发(Burst)事务 | 使用突发事务,只发出起始地址,系统自动处理剩余传输,减少重复的地址信号传输,提高效率。 |
分离的读写数据通道 | 独立的读写数据通道,支持直接内存访问(DMA) |
支持多地址发出 | 允许同时发出多个地址,提升总线利用率。 |
支持乱序事务完成 | 支持乱序事务完成,事务可以按任意顺序完成,提供灵活性和效率。 |
易于增加寄存器阶段以实现时序收敛 | 允许通过增加寄存器阶段来优化时序,帮助设计收敛,确保系统稳定性。 |
AXI协议特别适用于高性能和低延迟的系统设计,具有良好的扩展性和兼容性。
2.AXI 架构概述
AXI协议定义了5个独立的通道,每个通道用于不同的数据传输和控制信息传递。这些通道分别用于写请求、写数据、写响应、读请求和读数据。
2.1 AXI协议的5个独立通道
通道 | 信号名称的前缀 | 作用 |
---|---|---|
写请求通道 | AW | 传递控制信息,描述待传输数据的性质。 |
写数据通道 | W | 从管理器(Manager)向从属设备(Subordinate)传输数据。 |
写响应通道 | B | 从属设备信号表示写操作完成,告知管理器(Manager)。 |
读请求通道 | AR | 传递读请求,包括地址信息。 |
读数据通道 | R | 从属设备向管理器返回数据。 |
AXI协议中的数据传输由请求通道(Request Channel)和数据通道(Data Channel)组成:
-
请求通道:携带控制信息,描述数据传输的性质。请求通道用于定义事务的基本结构,如地址、类型(读或写)和其它控制信息。
-
数据通道:用于实际的数据传输,分为写数据通道和读数据通道:
- 写数据通道(W):用于将数据从管理器传输到从属设备。在写事务中,从属设备使用写响应通道(B)向管理器指示数据传输是否完成。
- 读数据通道(R):用于将数据从从属设备传输到管理器。
2.2 传输特性
-
地址优先:AXI允许地址信息可以先于实际数据传输。这意味着,管理器可以提前向从属设备提供地址信息,而数据传输可以在稍后进行,从而提高系统的灵活性和效率。
-
支持多个待处理事务:AXI协议支持多个事务同时进行,即使它们尚未完成。这对于需要高并发和高吞吐量的系统非常重要。
-
支持乱序完成:AXI协议允许事务的乱序完成。这意味着事务不必按照发起的顺序完成,系统可以根据各个事务的准备情况来完成它们。这种机制提高了系统的灵活性和效率,尤其在处理多个并发事务时。
2.3 写数据示例
在一个写事务中,AXI协议使用以下三个通道:
- 写请求通道(AW):发送写请求并传递地址、控制信息等。
- 写数据通道(W):传输写数据,从管理器到从属设备。
- 写响应通道(B):从属设备发送响应信号,告知管理器写操作是否成功完成。
图A1.1展示了写事务如何使用写请求、写数据和写响应通道。
图A1.2展示了读事务如何使用读请求和读数据通道。
2.4 通道定义
每个独立的通道由一组信息信号以及 VALID 和 READY 信号组成,这些信号提供了一个双向握手机制。
- 信息源使用 VALID 信号来表示何时有效的地址、数据或控制信息可用。
- 目标使用 READY 信号来表示何时可以接收信息。
读数据通道和写数据通道都包括一个 LAST 信号,用于指示事务中最后一个数据项的传输。
AXI协议数据传输相关信号:
信号 | 来源 | 介绍 |
---|---|---|
ACLK | System | 时钟信号 |
ARESETn | System | 复位信号 |
写地址通道:载事务所需的所有地址和控制信息。 | ||
AWID | Master | 写地址ID |
AWADDR | Master | 写地址,突发首地址 |
AWLEN[7:0] | Master | 写突发次数 |
AWSIZE[2:0] | Master | 写突发单次字节数(0~7分别表示8bits, 16bits, 32bits, 64bits, 128bits, 256bits, 512bits, 1024bits) |
AWBURST[1:0] | Master | 写突发类型 |
AWVALID | Master | 写突发有效信号 |
AWREADY | Slave | 从机是否准备好 |
写数据通道 | ||
WID | Master | 写数据ID |
WDATA | Master | 写数据(可以是 8、16、32、64、128、256、512 或 1024 位宽) |
WSTRB | Master | 写数据有效的字节,掩码作用 |
WLAST | Master | 表示写的最后一个数据 |
WVALID | Master | 写数据有效 |
WREADY | Slave | 从机是否准备好 |
写响应通道 | ||
BID | Slave | 写响应ID |
BVALID | Slave | 写响应有效 |
BRESP | Slave | 写响应,表明写事务的状态(OKAY, EXOKAY, SLVERR, DECERR) |
BREADY | Master | 主机是否准备接收写响应 |
读地址通道:载事务所需的所有地址和控制信息。 | ||
ARID | Master | 读地址ID |
ARADDR | Master | 读地址,突发首地址 |
ARLEN[7:0] | Master | 读突发次数 |
ARSIZE[2:0] | Master | 读突发单次字节数(0~7分别表示8bits, 16bits, 32bits, 64bits, 128bits, 256bits, 512bits, 1024bits) |
ARBURST[1:0] | Master | 读突发类型 |
ARVALID | Master | 读突发有效信号 |
ARREADY | Slave | 从机是否准备好 |
读数据通道 | ||
RID | Master | 读地址ID |
RDATA | Master | 读数据(可以是 8、16、32、64、128、256、512 或 1024 位宽) |
RRESP | Master | 读响应 |
RLAST | Slave | 表示读的最后一个数据 |
RVALID | Slave | 读数据有效 |
RREADY | Master | 主机是否准备接收读数据 |
备注说明:
- 握手信号:所有通道都有一个VALID和READY信号,形成双向握手机制,确保数据传输有效且同步。
- BRESP信号:用于表示写事务的响应状态。常见响应:
- OKAY:操作成功。
- EXOKAY:扩展成功,表示操作完成并且附加条件满足。
- SLVERR:从设备错误,表示发生了从设备错误。
- DECERR:解码错误,表示地址无法解析或其他解码问题。
写数据通道:
写数据通道承载从管理器到从属设备的写数据,并包括:字节线时钟信号:每 8 位数据对应一个字节线时钟信号,指示哪些字节的数据有效。
写数据通道的信息始终被视为缓冲的,这样管理器可以执行写事务,而无需从属设备确认之前的写事务。
写响应通道:
从属设备使用写响应通道来响应写事务。所有写事务都需要在写响应通道上进行完成信号的传输。如图 A1.1 所示,完成信号仅针对完整事务发出,而不是每个数据传输。
2.5 接口与互连
一个典型的系统由多个管理器(Manager)和从属设备(Subordinate)组成,这些设备通过某种形式的互连连接在一起,如图A1.3所示。
3.信道数据传输
3.1 AXI握手原理
AXI4 协议定义了五个不同的信道,所有这些信道都共享相同的握手机制,基于 VALID 和 READY 信号,这种握手机制不是异步的,它要求在时钟的上升沿完成握手。
- VALID 信号由源端传输到目的端,表示信息有效并已准备好。
- READY 信号由目的端传输到源端,表示目的端已经准备好接受信息。
源端和目的端的角色根据所使用的通道而定。对于 Read Address 信道,Manager 是源端,而对于 Read Data 信道,Manager 是目的端。
- 源端 使用 VALID 信号来表示信息何时有效。当源端传输有效信息时,VALID 信号会被激活并保持高电平,直到目的端接受该信息为止。一直保持激活的信号称为粘滞信号(sticky signal)。
- 目的端 使用 READY 信号来表示它何时能够接受信息,READY 信号从目的端传回源端。
传输与事务的区别,AXI 协议区分了传输和事务:
- 传输(Transfer):是单一的信息交换,涉及一个 VALID 和 READY 的握手。
- 事务(Transaction):是一个完整的传输序列,包含一个地址传输、一个或多个数据传输,对于写事务,还包括一个响应传输。
通道握手示例
示例 1
此示例的事件序列如下:
- 在时钟周期 2,VALID 信号被激活,表示信息通道上的数据有效。
- 在时钟周期 3,READY 信号被激活。
- 握手在时钟周期 4 的上升沿完成,因为此时 VALID 和 READY 信号都已激活。
示例 2
此示例的事件序列如下:
- 在时钟周期 1,READY 信号被激活。
- 在时钟周期 3,VALID 信号才被激活。
- 握手在时钟周期 4 的上升沿完成,因为此时 VALID 和 READY 信号都已激活。
示例 3
此示例的事件序列如下:
- 在时钟周期 3,VALID 和 READY 信号都被激活。
- 握手在时钟周期 4 的上升沿完成,因为此时 VALID 和 READY 信号都已激活。
在这三个示例中,信息在 VALID 和 READY 信号在时钟上升沿激活时通过信道传递。
读写握手规则
读和写的握手必须遵守以下规则:
- 源端 在断言 VALID 信号之前,不能等待 READY 信号被激活。
- 目的端 可以等待 VALID 信号被激活后再激活 READY 信号。
这些规则意味着 READY 信号可以在 VALID 信号之前、之后,或与 VALID 信号同时激活。
3.2 数据写入(单个、多个)
单个数据写入
单个数据写入涉及以下通道:写地址(AW)、写数据(W)、写响应(B)
a、首先,写地址(AW)通道进行握手,如下图所示,这个握手过程是管理器将写地址传递给从属设备的过程。握手的事件顺序如下:
- 管理器在第2个时钟周期将地址放置到 AWADDR 上,并激活 AWVALID。
- 从属设备在第3个时钟周期断言 AWREADY,表示它能够接收地址值。
- 握手在第4个时钟周期的上升沿完成。
b、在完成第一次握手后,管理器通过写数据(W)通道将数据传输给从属设备。
- 从属设备在第n个时钟周期等待数据,并将 WREADY 设置为高电平。
- 管理器在第n+2个时钟周期将数据放置到 WDATA 总线上,并激活 WVALID。
- 握手在第n+3个时钟周期的上升沿完成。
c、最后,从属设备使用写响应(B)通道来确认写事务完成,一旦所有 WDATA 数据被接收,事务就完成了。写响应的事件顺序如下:
- 管理器激活 BREADY 信号。
- 从属设备驱动 BRESP 信号,以指示写事务的成功或失败,并激活 BVALID 信号。
多个数据写入
AXI 是一个基于突发的协议,这意味着在单个事务中可以传输多个数据。我们可以通过 AW 通道传输一个地址,以传输多个数据,同时还包含突发宽度和长度信息。
以下图示展示了多个数据传输的示例:
在这种情况下,AW 通道表示三次传输的序列,而在 W 通道上,我们看到三次数据传输。
- 管理器将 WLAST 置高,表示最终的 WDATA。这意味着从属设备可以通过计算数据传输的次数或直接监控 WLAST 来判断最后一项数据。
- 一旦所有的 WDATA 数据传输都完成,从属设备会在 B 通道上给出一个单一的 BRESP 值。一个 BRESP 覆盖整个突发传输。如果从属设备认为某些数据传输中出现错误,它必须等到整个突发完成后,才会通知管理器发生了错误。
3.3 数据读取(单个、多个)
单个数据读取
读取单个数据涉及以下通道:读地址(AR)、读数据(R)
读地址(AR)通道上的握手过程顺序如下:
- 管理器在第2个时钟周期通过 ARADDR 向从属设备传送读地址,并断言 ARVALID。
- 从属设备在第3个时钟周期断言 ARREADY,表示它已准备好接收地址值。
- 握手在第4个时钟周期的上升沿完成。
接下来,在 R 通道上,从属设备将数据传输给管理器,数据传输的握手过程如下:
- 管理器在第n个时钟周期通过激活 RREADY 表示它准备好接收数据。
- 从属设备在第n+2个时钟周期获取数据并将其放置在 RDATA 上。因为这是单次数据事务,从属设备还会将 RLAST 信号置高。同时,从属设备使用 RRRESP 来指示读事务的成功或失败,并激活 RVALID。
- 由于 RREADY 已经由管理器激活,握手在第n+3个时钟周期的上升沿完成。
多个数据读取
AXI 协议还允许在同一事务中进行多数据传输的读突发。这类似于在写事务:多个数据项 中描述的写突发。
以下图示展示了一个突发读传输的示例:
在此示例中,在 AR 通道上传输一个地址来传输多个数据项,并附带了突发宽度和长度信息。这里,AR 通道表示一个三次传输的序列,因此在 R 通道上,我们看到从属设备向管理器传送三次数据传输。
在 R 通道上,从属设备将数据传输给管理器。在这个例子中,管理器通过将 RREADY 设置为高电平来表示它正在等待数据。从属设备则对每次传输驱动有效的 RDATA,并断言 RVALID。
3.4 读事务与写事务的区别
一个区别在于,对于读事务,每次传输都会有一个 RRRESP 响应。这是因为在写事务中,从属设备必须通过 B 通道作为单独的传输发送响应,而在读事务中,从属设备使用相同的通道将数据返回给管理器,并指示读操作的状态。
如果事务中的任何传输发生错误,必须完成整个事务的指示长度。没有所谓的提前结束突发的机制。
活动事务
活动事务,也称为未完成事务,是指尚未完全完成的数据传输事务。活动读事务是指已经传输了读地址,但当前时刻最后一个读数据尚未传输的事务。
对于读事务,数据必须在地址之后传输,因此可以简单地通过地址的传输作为事务开始的参考点。如下图所示:
对于写事务,数据可以在地址之后传输,但也允许先传输写数据。以下图所示为活动写事务的两种情况:
- 写地址已传输,但写响应尚未传输:
- 先行写数据已传输,但写响应尚未传输: