AXI是一个接口规范,定义IP的接口,而不是互联本身。
只有两种AXI接口类型,主机(Manager)和从机(Subordinate),接口类型对称,所有的AXI连接都在主机接口和从机接口之间。
AXI互联接口包含相同的信号,使得不同IP集成相对简单。上图直接连接主机和从机,没有额外的逻辑,提供了最大的带宽。
AXI是点对点结构,而不是总线结构。 如果需要多个主机和从机,则需要axi_interconnect,也是axi接口。
写操作需要下列通道:
读操作需要下列通道:
每个通道都是单向的
AXI协议有几个关键特性,旨在提高数据传输及事务的带宽和延迟。
所有的通道都是使用基于valid和ready的握手机制。valid从源端到目的端,ready从目的端到源端。
源端和目的端并不是主机和从机。
传输指单次的信息交换,伴有一次的握手。
当valid和ready在时钟上升沿同时有效时,数据在通道上传输。读写握手必须遵守以下原则:
事务指一次完整的突发传输,包括地址传输,多次或单次数据传输,如果是写,还包括响应传输。
读写事务有一个区别:读事务对于每一次传输都有相应。在写事务中,从机需要在B通道上发送单独的相应。
未完成事务也叫活动事务(active)
未完成的读事务:读地址已经传输,但是最后一个读数据还未传输完成。数据必须在地址之后。
未完成的写事务:地址或者首位数据已经传输,但是写相应还未传输完成。数据可以在地址之前,也可以在地址之后。
AW channel signal | 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 |
W channel signal | 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 |
B channel signal | AXI version |
BWVALID | AXI3 and AXI4 |
BREADY | AXI3 and AXI4 |
BRESP[1:0] | AXI3 and AXI4 |
BID[X:0] | AXI3 and AXI4 |
BUSER[X:0] | AXI4 only |
AXI3和AXI4写通道的不同:
AR channel signal | 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 |
ARLOCK[1:0] ARLOCK |
AXI3 only AXI4 only |
ARQOS[3:0] | AXI4 only |
ARREGION[3:0] | AXI4 only |
ARUSER[X:0] | AXI4 only |
R channel signal | AXI version |
RVALID | AXI3 and AXI4 |
RREADY | 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 |
AXI3和AXI4读通道的不同:
访问权限信号AWPROT和ARPROT,可以防止非法访问系统中的下游事务。
这个对于Arm TrustZone的保护解决方案是有效的,其中的处理器有安全和非安全两种状态。
为了支持不同缓存策略的系统,AWCACHE和ARCACHE信号指示如何要求事务在系统中进行。
AXI对于读写事务都提供了响应信号。对于读事务,从机的响应信号是读数据通道上的RRESP。
对于写事务,响应信号是写响应通道的BRESP。
RRESP和BRESP都是两个bit的信号,可以表示四种响应:
00-OKAY | 正常访问成功或者独占访问失败 OKAY是用于大多数事务的响应。OKAY表示正常访问已经成功。 这个响应还可以表示独占访问失败。独占访问是指多个主机可以访问一个从机,但是这些主机不能访问相同的内存范围。 |
01-EXOKAY | 独占访问成功 EXOKAY表示独占访问的读或写部分已经成功。 |
10-SLVERR | 从机错误 当访问已经成功到达从机,但从机想要返回错误条件给主机时,便用SLVERR。 表示事务的失败。例如,当试图进行不受支持的传输大小或写入操作试图访问只读位置。 |
11-DECERR | 解码错误 DECERR通常由互联组件生成,以表明在事务地址上没有从属关系。 |
写数据选通信号是主机用于高速从机哪个字节的数据是有效的。写数据选通信号对于稀疏数据移动中的缓存访问非常有用。除了使用写数据选通外,还可以使用非对齐的起始地址优化数据传输。
写数据通道上WSTRB每一位表示数据的每个字节,为1时表示数据有效。例如:64位的写数据总线,WSTRB有8位。
假如我们希望有效数据为高6个字节,对应为字节7-2,主机则需要控制WSTRB为0xFC。相似的,字节2,3,4,5为0x3C。 字节7,2为0x81。 字节7,6,5,3 为0xE8。
选通信号提供了稀疏数据阵列的高效移动。使用这种方法,写事务可以通过设置传输字节选通为0提前终止。尽管其余的传输仍要完成,WSTRB可以在事务的传输之间改变。
读数据通道没有选通信号,因为主机明确传输需要而且可以屏蔽从机传输过来的不需要的字节。
AxLOCK信号用于指示何时执行原子访问。
AXI协议提供了两种机制支持原子操作
AXI3中,AxLOCK信号又2bits组成:
00 | Normal |
01 | Exclusive |
10 | Locked |
11 | Reserved |
AXI4,AxLOCK由1bit组成:
0 | Normal |
1 | Exclusive |
AXI4协议引入了额外的信号来支持服务质量(QoS)。
服务质量允许优先处理事务,允许改进系统性能,通过将更重要的事务以更高的优先级处理。
有两个服务质量信号AWQOS,ARQOS分别在写和读地址通道对每次读写事务设置。
两个信号都是4bits位宽,0x0表示最低优先级,0xF表示最高优先级
在实际中,像CPU,GPU,VPU等组件,CPU对于内存的访问要远高于其他组件。当事务被分配了适当的QoS值时,互联可以仲裁更高优先级事务,DMC将事务重新排序确保给予正确的优先级。
区域信号是AXI4中的一个可选特性。
当使用区域标识符时,意味着从机上单个物理接口可以提供多个逻辑接口。每个逻辑接口位置不同。且从机不需要在不同的逻辑接口间进行地址解码。
区域信号使用4位的区域标识符。AWREGION和ARREGION,最多可以标识16个不同的区域。
AXI4接口信号可以选择一组用户定义信号。
用户信号可以用于各个通道传输额外的主从机之间的自定义控制信息,如果使用这些信号,不同通道的位宽也可以不同。
因为AXI协议没有定义这些信号的功能,如果两个组件在使用中使用相同的用户信号,则可能会出现互操作性问题,这是不相容的。
三个主要的依赖性:
原子访问是对于一个内存区域的一系列访问的术语。当主机想要对一个特定的内存区域进行一系列的访问时,便会使用原子访问,同时确保该该区域中的原始数据不会被其他主机的写操作破坏。
原子访问有两种类型:
锁定访问只用于遗留设备legacy devices。AXI4不支持锁定事务,但是AXI3支持。
在主机启动锁定的事务序列之前,必须确保没有其他事务等待完成。
设置了AxLOCK信号的事务表示一个锁定的事务,一个事务的锁定序列,强制互联拒绝其他主机对该从机的访问。
一个锁定序列的完成必须在最后一个事务中没有对AxLOCK的设置。最后一个事务仍然在锁定序列中,但是移除了锁定,允许其他主机访问该从机。
因为锁定访问需要互联在访问时去阻止其他事务的发生,对于互联的性能有着重要的影响。
当M0对于一个事务使用锁定信号,表明这是一次锁定事务,之后互联使用一个仲裁器确保只有M0可以访问目标从机。互联会阻塞所有的来自M1的访问直到M0完成一个解锁的事务。
对事务序列锁定访问的步骤如下:
在AXI4中,独占访问比锁定访问更加高效。因为独占访问更加高效的使用了互联带宽。
在一个独占访问序列中,其他主机可以同时访问从机,但是只有一个主机被授予内存范围的访问权。
独占访问的这个机制可以提供信号量类型semaphore-type的操作而不需要在操作过程中总线保持专用特定主机。这意味着总线接入延迟和最大可实现带宽不受影响。
独占访问可以由不止一个数据传输组成,但所有的事务必须有相同的地址通道属性。
从机需要一个硬件独占访问监视器记录独占事务的序列信息,以便知道正在访问的内存范围和正在访问的主机。
如果直到独占访问完成,没有其他主机访问监视范围。则访问是原子的。
从机可以向其他主机敞开访问权限,从而整体上提高系统的带宽利用率。
独占访问的基本机制是由独占访问监视器控制的。
独占访问监视器的响应是以下之一:
在稍后的一段时间,如果独占读期间收到了EXOKAY。M0会去完成独占序列通过对同一个地址进行独占写操作。独占写使用和独占读相同的事务ID。
独占访问监视器的响应是以下之一:
一些从机需要额外的逻辑支持独占访问。独占访问监控只监控每个事务ID的一个地址。需要实现去监控所有可以看到的可能的独占ID。
从机接口包括独占传输监视器,可以保存每次事务的ID和访问地址。
下表描述了举例序列不同的事务,所有表中事务都是独占传输:
事务序列按照表中的顺序进行,步骤如下:
从机接口包括独占传输监视器,可以保存每次事务的ID和访问地址。
下表描述了举例序列不同的事务,所有表中事务都是独占传输:
事务序列按照表中的顺序进行,步骤如下:
这个例子演示了独占访问如何实现非阻塞行为。正是这种行为相比于锁定访问提供了更大的系统吞吐量。
简单事务举例解释了不同AXI通道间的关系。下图显示了AXI3或AXI4接口中五个通道几个有效事务的时间表示。
例子中的不同事务如下:
下图显示了相同的有效读写事务中的不同点
在此例中,主机在完成事务A之前就开始了事务B。
主机在完成事务A在W通道上的数据传输之前,便通过AW通道传输新的地址B开始了新的事务。
当所有事务A的数据传输完成时,事务B的传输给到了从机。在主机传输事务B的数据之前,它不需要等待事务A在B通道上的响应。
同时,主机使用AR通道传输给从机地址C和D。从机按顺序对两个读请求回应。
这个例子显示了读和写事务在不同通道上不同的有效组合。这显示了AXI协议的灵活性和优化互联性能的可能性。
AXI协议为每个通道定义了一个ID信号总线。将每个事务用ID标记,使乱序完成事务有了可能。这意味着快速内存区域的事务不需要等待前面慢速内存区域的事务完成。传输ID的使用可以实现高性能互联,最大化的数据吞吐量和系统效率。也可以改进系统性能,因为减少了事务延迟的影响。
ID信号包括如下:
通过允许每个接口充当多序接口,AXI支持乱序事务。根据AXI协议规范,所有有ID的事务必须有序,然而,对于不同的ID的事务排序没有限制。
当使用传输ID时,遵循以下规定:
同样要谨记ID信号在AXI中的两个重要参数
写事务在AXI顺序中有三条规定
在图中,主机先发地址A再发地址B,所以数据必须A0在B0前。
在图中,事务B在事务A之前完成,即使事务A先开始。
在图中,事务B和其他事务有不同的ID,所以它可以任意时刻完成。然而,事务A和C有相同的ID,所以他们必须顺序完成,先A后C。
读事务在AXI顺序中有三条规定
读写通道之间没有相互关联的排序规则。这意味着他们可以任意顺序完成。所以如果主机要求对特定的读写序列排序,主机必须在发起新的事务之前,通过明显的等待事务完成确保事务顺序一致。
序列操作顺序如下:
AXI协议支持非对齐的首地址事务,它只会影响事务的第一次传输,第一次传输之后,其他的传输都是对齐的。
非对齐传输是AxADDR值没有与事务的宽度对齐,比如,32位的数据包,起始地址为0x1002,与自然的32位地址边界没有对齐,因为0x1002不能被0x20整除。
下面的例子显示了5次32位宽的传输,非对齐起始地址为0x01。
如果事务按照起始地址0x00对齐,结果应该是五次4字节的burst,实现最大数据传输20字节。然而,起始地址0x01非对齐,这减少了传输的总数据量,但是这不意味着最后的传输为了弥补数据量是非对齐的。这个例子中,首次传输起始地址是0x01,包括三个字节。所有后面的突发传输都是与总线宽度对齐的,且由四个字节组成。
下面的例子显示了5次16位的事务,起始地址为0x03。
如果事务与起始地址0x00对齐,结果将是5次2字节burst,实现最大数据传输10字节。在本例中,首次传输是从非对齐地址0x03开始,包括1字节,所有之后的burst传输都与总线地址对齐,由2字节组成。
AXI协议通过使用大端(BE-8)模式支持相同内存空间的混合端结构。相比于小端模式,BE-8使用相同的字节通道模式,但是字节顺序颠倒了。
使用BE-32的混合端结构比BE-8更复杂,因为字节通道与小端模式不同。
下图显示了相同的四字节数据大端和小段表示:
对于四字节的小端模式,最高有效字节使用最高通道位3。在BE-8模式,最高有效字节在最低通道位0。
下图显示了相同的两字节数据大端和小段表示:
对于两个字节的半字,小端模式下,高位在通道1,低位在通道0。大端BE-8模式,高位在通道0,低位在通道0。
最后,下图显示了单个字节的大小端模式,没有区别:
字节都在通道0。
在可配置的端序列组件(Arm内核)中,支持BE-8,字节的重新排序应该在内部执行,这样互联上就什么都不用做。另一方面,连接到AXI互联中的定制设备,是BE-8,已经是正确的字节顺序。使用BE-8可以减轻对动态端序列转换的支持。
本节重点介绍配置AXI读写通道的重要属性
写接口属性包括:
读接口属性包括:
an_introduction_to_amba_axi