赞
踩
本文参考
ARM文档“Introduction to AMBA AXI4 - Arm Developer”
手册可以在ARM官方文档中下载ARM.con,也可以访问我的百度网盘资源 提取码:1234
1、下图显示了一个SoC系统的简化示例,它由主、从和连接它们的互连组成。
上图显示,每个AXI主接口连接到单个AXI从接口。当涉及多个主从时,需要一个互连结构(如上图中的深蓝色Inter-connection archtecture)。这种互连结构还实现了从接口和主接口,其中实现了AXI协议。AXI协议定义了主从之间点对点连接的信号和定时。
AXI协议是点对点规范,而不是总线规范。因此,它只描述接口之间的信号和时序。
2、多Master多Slave的Sample总线传输模型
下图显示的是一个较为复杂的互连,它需要自己的AXI主接口和从接口与外部功能块通信:
下图显示了一个具有各种处理器和功能块的SoC示例(是【ARM架构(三)——AMBA和总线①】2.1中的那个示例图):
这个图显示了使用AXI的所有连接。在同一个SoC中使用了AXI3和AXI4,这是比较常见的做法。在这种情况下,互连执行不同AXI接口之间的协议转换。
AXI规范描述了两个接口之间的点对点协议:主接口和从接口。下图显示了每个AXI接口用于通信的五个主要通道:
每个通道都是单向的,因此需要一个单独的写响应通道来将响应传递回主机。但是,不需要读取响应通道,因为读取响应是作为读取数据通道的一部分传递的。
使用单独的地址和数据通道进行读写传输有助于最大限度地利用接口带宽。读写通道组之间没有时序关系。这意味着读序列可以与写序列同时发生。
这五个通道中的每一个都包含几个信号,每个通道中所有这些信号的前缀如下:
前缀 | 含义 |
---|---|
AW | 表示 Write Address写地址通道的信号; |
AR | 表示 Read Address读地址通道的信号; |
W | 表示 Write Data写数据通道的信号; |
R | 表示Read Data 读数据通道的信号; |
B | 表示Write Response写响应通道的信号 |
B代表缓冲的,因为从服务器的响应发生在所有写操作完成之后 |
AXI协议有几个关键特性,旨在改善数据传输和事务的带宽和延迟,如下所示:
transfer对应一次传输,transaction是对应一次或多次传输操作,或者说一个传输包。通常一个transaction由一个或者多个transfer组成。
AXI4协议定义了五个不同的通道,AXI总线的五个通道各自独立,每个通道都有自己的双向握手机制。所有这些通道都共享基于VALID和READY信号的相同握手机制,如下图所示。
VALID信号 从【源】发送到【目的】,【源】使用VALID信号来指示信息有效。VALID信号必须保持断言状态,即设置为高电平,直到【目的】接收该信息。以这种方式保持断言的信号称为sticky signals(粘性信号)。
READY信号 从【目的】发送到【源】。 【目的】指示何时可以使用READY信号接受信息。
源端或目的端是主端还是从端取决于使用的是哪个通道。例如,主机是读地址通道的源端,但却是读数据通道的目的端。
用Valid信号表示主设备准备好发送,用Ready信号表示从设备准备好接收。一般Valid信号拉高时表示要发送数据的那一方当前的地址或者数据通道里对应的信息有效,接收的那一方拉高Ready表示已经准备好接收相应的信号。读写通道传输数据结束时,会拉高last信号以表示该数据是最后一个数据。
- transfers通道传输是一次信息交换,只有一次VALID和READY握手。下图显示了一个传输transfers:
2.事务transactions是一连串的传输,包括一次地址传输、一次或多次数据传输,对于写序列,还包括一次响应传输。下图显示了一个事务transactions:
一个transactions是一个完整的突发传输
例子都是先是一个时钟信号,然后是一个信息总线,然后是VALID和READY信号
例1
(1)在时钟周期2中,VALID信号上升高电平,表明信息通道上的数据是有效的。
(2)在时钟周期3中,READY信号上身高电平,表明READY信号有效。
(3)握手在时钟周期4的上升沿完成,因为READY和VALID信号都被断言。
文档中总是提到这个断言,我目前理解的断言就是上升高电平
例2
(1)在时钟周期1,READY信号被断言。
(2)在时钟周期3,VALID信号被断言。
(3)当VALID和READY都被断言时,在时钟周期4的上升沿完成握手。
例3
(1)在时钟周期3,READY信号被断言。
(2)在时钟周期3,VALID信号被断言。
(3)当VALID和READY都被断言时,在时钟周期4的上升沿完成握手。
小结:在所有三个示例中,当时钟信号的上升沿上断言READY和VALID时,信息将沿着通道传递
READY可以在VALID之前或之后断言,并且可以同时断言
本小节描述:单个数据项的写事务的过程,以及用于完成该事务的不同通道。
此写事务涉及以下通道:写地址(AW)、写(W)、写响应(B)
- 首先,在写地址(AW)通道上有一个握手,如下图所示:
这个握手是主向从发送写地址。握手的事件顺序如下:
主将地址发送在AWADDR上,并在时钟周期2中断言AWVALID,从在时钟周期3中断言AWREADY,表示它有能力接收地址值。 握手在时钟周期4的上升沿完成。
- 其次,在第一次握手之后,主通过写(W)通道将数据传输到从,如下图所示:
数据传输的事件顺序如下:从在时钟周期n中等待WREADY设置为高电平的数据。 主将数据放在WDATA总线上,并在时钟周期n+2中断言WVALID。 握手在时钟周期n+3的上升沿完成
- 最后,从使用写响应(Write Response, B)通道,在接收到所有WDATA后确认写事务已经完成。该响应如下图所示:
写响应的事件顺序如下:主断言BREADY。 从驱动BRESP来指示写事务的成功或失败,并断言BVALID。在时钟周期n+3的上升沿完成握手。
AXI是一种基于突发的协议,这意味着可以在单个事务中传输多个数据。我们可以在AW信道上传输一个地址,然后在这个地址传输多个数据,并带有相关的突发宽度和长度信息。
一个多数据传输的例子如下所示:
(1)AW通道传输一个地址,但是会在这个地址上进行三次数据传输。
(2)W通道上,我们可以看到有三个数据传输。从端驱动WLAST信号为高电平来表示最后的WDATA信号。所以从端可以计算数据传输次数,或者说可以监视WLAST信号(就是通过监视到WLAST信号为高的时候,表明是最后一个数据传输)。
(3)B通道上,一旦从端接收到所有WDATA传输,从端给出一个BRESP值(图中是Okey)。这一个单一的BRESP值覆盖了整个突发传输。如果从端发现传输中包含错误,它也必须等到整个突发事件完成后才能通知主端发生了传输错误。
本小节将详细介绍单个数据项的读事务处理过程。此写事务涉及以下通道:读地址(AR)和读( R )
- 首先,在读地址(AR)通道上进行握手,如下图所示:
握手的事件顺序如下:(1)在时钟周期2中,主通过ARADDR向从服务器发送读数据的地址并断言ARVALID。(2) 在时钟周期3中,从断言ARREADY,表示它已准备好接收地址值。(3)在时钟周期4的上升沿完成握手。
- 接下来,在读( R )通道上,从将数据传输到主。数据传输过程如下图所示:
数据传输握手的事件顺序如下:
(1)在时钟周期n中,主断言RREADY信号,表示它准备好了,正在等待接收数据。
(2)在时钟周期n+2,从断言RVALID(表示我将发送有效数据),同时将要发送的数据放在RDATA上。由于这是单个数据事务,所以从也将RLAST信号设置为高(第一个数据就是最后一个数据)。并使用RRESP信号向主端表明读事务的成功或失败(图中是Okey)
(3)在时钟周期n+3的上升沿完成握手。
AXI协议允许在同一事务中读取多个数据传输。这类似于写事务中描述的写突发。
下图显示了一个突发读传输的例子:
- AR通道上传输一个地址,在这个地址传输3个数据项,并附带相关的突发宽度和长度信息。
- 在R通道上,从向主传输三个数据。
(1)主将RREADY信号设置为高电平,表示主准备好了,正在等待接收从的数据。
(2)从在每次传输数据之前断言RVALID(表示我接下来要传输数据了),之后通过RDATA通道将数据传输给主,且在每次数据传输完的同时通过RRESP通道将Okay信息传回给主,在第三次数据传输时候断言RLAST信号表示这是最后一次数据传输,完成三次数据传输。
图中是在第一次传输前两个Data之前断言一次RVALID,然后在第二次传输Data之前断言了一次RVALID,并且每次数据传输完成之后会跟上一个Okay
小结:
1. 读事务和写事务之间区别:对于读事务,事务中的每个传输都带有一个RRESP响应。在读事务中,从服务器使用相同的通道将数据发送回主服务器,并指示读操作的状态。在写事务中,从服务器必须在B通道上作为单独的传输发送响应。
2. 如果事务中的任何传输显示错误,必须完成事务的全部指定长度之后才能反馈,并不能提前终止信号传输。
AXI协议定义了五个通道:三个用于写信号,两个用于读信号。
用于写事务的通道有:写地址、写数据、写响应
下表显示了写地址通道信号:
Write Address (AW) channel signals | AXI version |
---|---|
AWVALID | AXI3 and AXI4 |
AWREADY | AXI3 and AXI4 |
AWADDR[31:0] | AXI3 and AXI4 |
AWSIZE[2:0] | AXI3 and AXI4 |
AWBURST[1:0] | AXI3 and AXI4 |
AWCACHE[3:0] | AXI3 and AXI4 |
AWPROT[2:0] | AXI3 and AXI4 |
AWID[x:0] | AXI3 and AXI4 |
AWLEN[3:0] - AWLEN[7:0] | AXI3 only - AXI4 only |
AWLOCK[1:0] - AWLOCK | AXI3 only - AXI4 only |
AWQOS[3:0] | AXI4 only |
AWREGION[3:0] | AXI4 only |
AWUSER[x:0] | AXI4 only |
Write Data通道信号如下表所示:
Write Data (W) channel signals | AXI version |
---|---|
WVALID | AXI3 and AXI4 |
WREADY | AXI3 and AXI4 |
WLAST | AXI3 and AXI4 |
WDATA[x:0] | AXI3 and AXI4 |
WSTRB[x:0] | AXI3 and AXI4 |
WID[x:0] | AXI3 only |
WUSER[x:0] | AXI4 only |
下表显示了Write Response通道信号:
Write Response (B) channel signals | AXI version |
---|---|
BVALID | AXI3 and AXI4 |
BREADY | AXI3 and AXI4 |
BRESP[1:0] | AXI3 and AXI4 |
BID[x:0] | AXI3 and AXI4 |
BUSER[x:0] | AXI4 only |
用于读事务的通道有:读地址和读数据
读地址通道信号如下表所示:
Read Address (AR) channel signals | AXI version |
---|---|
ARVALID | AXI3 and AXI4 |
AREADY | AXI3 and AXI4 |
ARADDR[31:0] | AXI3 and AXI4 |
ARSIZE[2:0] | AXI3 and AXI4 |
ARBURST[1:0] | AXI3 and AXI4 |
ARCACHE[3:0] | AXI3 and AXI4 |
ARPROT[2:0] | AXI3 and AXI4 |
ARID[x:0] | AXI3 and AXI4 |
ARLEN[3:0] - ARLEN[7:0] | AXI3 only - AXI4 only |
RLOCK[1:0] - ARLOCK | AXI3 only - AXI4 only |
ARQOS[3:0] | AXI4 only |
ARREGION[3:0] | AXI4 only |
ARUSER[x:0] | AXI4 only |
读数据通道信号如下表所示:
Read Data ( R) channel signals | AXI version |
---|---|
RVALID | AXI3 and AXI4 |
READY | AXI3 and AXI4 |
RLAST | AXI3 and AXI4 |
RDATA[x:0] | AXI3 and AXI4 |
RRESP[1:0] | AXI3 and AXI4 |
RID[x:0] | AXI3 and AXI4 |
RUSER[x:0] | AXI4 only |
每个读写事务都可以指定该事务的数据长度、大小和突发信号属性。在下面的属性列表中,x代表写和读,它们既适用于写地址通道,也适用于读地址通道:
AxLEN
AxLEN用传输数描述事务的长度。表示在一次transation中,有多少次transfers。
对于AXI3,AxLEN[3:0]有4bit位,它指定了一个事务中可以传输1-16次数据传输。
对于AXI4,AxLEN[7:0]有8bit位,它指定了一个事务中可以传输1-256次数据传输。
AxSize
AxSize[2:0] 描述每次数据传输中要传输的最大字节数。
3个bit位可以表示每次传输1、2、4、8、16、32、64或128字节。
AXI突发传输AxBURST
在 AXI 总线中的突发传输是指,在地址总线上进行一次地址传输后,在这个地址进行多次数据传输。
AXBURST[1:0]描述事务的突发类型 fixed, incrementing, wrapping
下表显示了这些突发类型的不同属性:
值 | 突发类型 | 使用说明 | 长度(传输次数) | 对齐 |
---|---|---|---|---|
0x00 | FIXED | 重复读取相同的地址。对fifo很有用。 | 1-16 | 固定字节通道仅由起始地址和大小定义 |
0x01 | INCR | Incrementing burst.。前一次传输的地址为每次传输增加地址。增量值取决于传输的大小,由AxSIZE属性定义。用于块传输 | AXI3: 1-16/AXI4: 1-256 | 支持未对齐传输。 |
0x10 | WRAP | Wrapping burst.类似于一个递增的突发,如果达到一个上限地址限制,地址包装到一个较低的地址。通常用于缓存线路访问 | 2, 4, 8, or 16 | 起始地址必须与传输大小对齐 |
0x11 | RESERVED | Not for use. | - | - |
AXI提供访问权限信号,AWPROT和ARPROT,可以防止系统非法访问。例如,如果事务没有正确的保护级别,内存控制器可以通过使用这些信号拒绝读或写访问。
这对于像Arm TrustZone这样的安全解决方案很有用,其中处理器有两个独立的状态,安全和非安全。
AxPROT定义了三个级别的访问保护,如下图所示:
AxPROT位属性如下表所示:
AxPROT | Function |
---|---|
[0] | AxPROT[0] (P )将访问标识为非特权或特权:1 indicates privileged access;0表示非特权访问 |
[1] | AxPROT[1] (NS)将访问标识为安全或非安全:1表示非安全事务;0表示安全事务。 |
[2] | AxPROT[2] (I)表示该事务是指令访问还是数据访问:1表示指令访问;0表示数据访问 |
现代SoC系统通常包含放置在系统几个点上的缓存。例如,2级缓存可能位于处理器外部,或者3级缓存可能位于内存控制器里面。为了支持使用不同缓存策略的系统AWCACHE和ARCACHE信号指示事务如何在系统中进行。
下图显示了AxCACHE位分配:
AxCACHE位属性如下表所示:
AxCACHE | Function |
---|---|
AxCACHE [0] | AxCACHE [0] (B)是可缓冲位。 表示这是可以delay的transaction,transaction可能是没有到达最终的目的地的。 |
AxCACHE [1] | AxCACHE[1]是AX13中的可缓存位,或者是AX14中的可修改位modifiable。如果是modifiable,那么表示多个不同的写可以合并到同一个transactions中,读也是如此。 |
AxCACHE [2] | AxCACHE[2]是RA位 。 读分配cache |
AxCACHE [3] | AxCACHE[3]是WA位。写分配cache |
小结:如果没有断言可缓存位AxCACHE[1],则不能断言AxCACHE[2]和AxCACHE [3]
AXI为读和写事务提供响应信号。
对于读事务,从的响应信息使用RRESP在读数据通道上发出信号。
对于写事务,响应信息使用BRESP在写响应通道上发出信号。
RRESP和BRESP都是由两位组成的,对这两种信号的编码可以传递四种响应,如下表所示:
响应码 | 说明 |
---|---|
00 - OKAY | 正常访问成功或独占访问失败。 |
01 - EXOKAY | OKAY是用于大多数事务的响应。OKAY表示正常访问已经成功 ;此响应还可以指示排他性访问失败。独占访问是指多个主服务器可以同时访问一个从服务器,但这些主服务器不能访问相同的内存范围。 |
10 - SLVERR | 独占访问,成功;EXOKAY表示独占访问的读或写部分已经成功。当访问成功到达从,但从想要返回一个错误条件给始发主时,使用SLVERR。这表示一个不成功的事务。例如,当尝试不支持的传输大小时,或者尝试对只读位置进行写访问时。 |
11 - DECERR | 解码错误。DECERR通常由互连组件生成,表示在事务地址处没有找到从。 |
OKEY: 表示访问成功,或表示独占访问失败。
EXOKEY: 表示独占访问成功
SLVERR: 表示slave返回了错误,如错误的transfer size或去写了一个只读的地址。
DECERR:去访问了一个不存在的slave
WSTRB表示写的哪些字节是有效的。 例如,考虑一个64位写数据总线。WSTRB信号有8位,每个字节一个。下图显示了示例WSTRB值如何指定哪些字节通道是有效的:
假设有效数据仅位于数据总线的前六个有效字节中,从字节7到字节2。主需要用十六进制值0xFC来控制WSTRB信号。
eg:
仅在数据总线的字节2,3,4,5中有效的数据需要WSTRB信号值为0x3C。
仅在数据总线的字节0和7中的有效数据需要WSTRB信号值为0x81。
仅在数据总线的字节3,5,6,7中有效的数据需要WSTRB信号值0xE8。
AxLOCK信号用于指示何时执行原子访问。
AXI协议提供了两种机制来支持原子性:
锁定访问
锁定的传输将通道锁定,该通道将保持锁定状态,直到生成未锁定的传输。
锁定事务应该只用于遗留设备。只有AXI3支持锁定访问。AXI4不支持锁定访问。
独占访问
独占访问比锁定事务更有效,并且它们允许多个主服务器同时访问一个从服务器
在AXI3中,AxLOCK信号由两个位组成,其值如下
0b00 - Normal
0b01 - Exclusive
0b10 - Locked
0b11 - Reserved
在 AXI4中,AxLOCK信号由1位组成,其值如下:
0b0 - Normal
0b1 - Exclusive
服务质量就是对优先级进行排序,通过确保更重要的事务得到更高的优先级来提高系统性能。
服务质量信号有两种:
两个信号都是4位宽,其中0x0表示最低优先级,0xF表示最高优先级。
下图显示了一个带有直接内存控制器(DMC)的示例系统,下图是DMC-400。这个控制器管理到DRAM的事务:
实际应用中,CPU需要内存访问远比其他组件(如GPU或VPU)多,DMC重新排序事务以确保给出正确的优先级。
这个是AXI4中的新特性。
使用区域标识符时,表示从端上的单个物理接口可以提供多个逻辑接口。每个逻辑接口在系统地址映射中可以有不同的位置。
当使用区域标识符时,从端可以不支持不同逻辑接口之间的地址解码。
区域信号使用两个4位区域标识符,AWREGION和ARREGION。这些区域标识符可以唯一地标识最多16个不同的区域。
AXI4接口信号集可以选择包含一组用户定义的信号,称为User信号。用户信号可以在每个通道上用于在主从组件之间传输额外的自定义控制信息。这些信号是可选的,不必在所有通道上都支持。如果使用它们,则User信号的宽度由用户自己实现定义。
AXI协议定义了不同通道之间的依赖关系。
三个主要依赖项如下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。