AMBA 协议之 AXI 总线

一、简介

1、AXI 简介

AXI,全称Advanced Extensible Interface,高级可扩展接口,是ARM在AMBA3中推出的核心成员,是现代SOC中实现高带宽、低延迟设备互联的标准接口。
AXI的核心设计理念是通道分离地址/数据解耦高效握手,能满足从简单寄存器配置到高速DDR存储的各类通信需求,其主要特点如下所示:

  • 分离的地址/控制和数据阶段
  • 通过字节选通方式支持非对齐的数据传输
  • 使用Burst传输,只需发出起始地址
  • 单独的读写数据通道,这可以提供低成本的直接内存访问(DMA)
  • 支持发布多个超前地址(outstanding)
  • 支持完成乱序事务(out-of-order)
  • 易于添加register stage来达到时序收敛
  • AXI协议包含实现功耗操作的可选扩展信号

2、AXI 版本

AXI3:在AMBA3中正式推出,定义了读写5个独立的通道,支持突发长度1~16拍,支持事务ID,支持out-of-order乱序完成,性能够用,但是突发长度受限,不适合超高速外设。

AXI4:是目前最主流、最常用的版本,分为3个子集:

  • AXI4(Full),突发长度扩展到1~256拍,支持更大的带宽,更高效的存储器访问,主要用在高性能通路上,如DDR,GPU,PCIe,DMA等;
  • AXI4-Lite,是一个轻量简化的版本,不支持突发,只能单次读写,接口信号最少,逻辑也最简单,一般用在寄存器配置,UART,I2C等低速外设上;
  • AXI4-Stream,没有地址,纯数据流,只负责传输数据,可以无限突发,用于视频、图像、DSP等高速串行数据的传输。

AXI5:在AXI4的基础上增加了安全特性(TrustZone、权限控制、隔离)、QoS优先级,更强的原子操作,更严格的时序和物理层设计,主要面向车规芯片、高端手机SOC、服务器、AI芯片等。

3、AXI 通道

AXI基于Burst传输,定义了五个独立的事务通道:

  • 读地址通道
  • 读数据通道
  • 写地址通道
  • 写数据通道
  • 写响应通道

五个通道的图示如下:

+--------+                                    +--------+
| Master |                                    | Slave  |
|        |                                    |        |
|        |   写地址通道 (AW)  ---------------> |        |
|        |                                    |        |
|        |   写数据通道 (W)   ---------------> |        |
|        |                                    |        |
|        |   写响应通道 (B)   <--------------- |        |
|        |                                    |        |
|        |   读地址通道 (AR)  ---------------> |        |
|        |                                    |        |
|        |   读数据通道 (R)   <--------------- |        |
+--------+                                    +--------+
SystemVerilog

读/写地址通道携带着控制信息,用于描述传输数据的属性;读数据通道将数据从从机传输到主机;写数据通道将数据从主机传输到从机;并且在写事务中,从机通过写响应通道向主机指示传输完成。五个通道的特点如下所示:

通道特点
读/写地址通道读/写事务都有自己的地址通道,地址通道携带传输事务所需的所有地址和控制信息
读数据通道读数据通道既携带读数据,也携带Slave端到Master端的读响应信息,包括:
读数据总线:可以是8、16、32、64、128、256、512或1024位宽
读响应信号:表示读事务的完成状态
写数据通道写数据通道将写数据Master端传输到Slave端,包括:
写数据总线:可以是8、16、32、64、128、256、512或1024位宽
字节选通信号:每8个数据位对应一个字节通道选通信号,指示数据的哪些字节是有效的
写数据通道的数据信息被认为是缓冲(buffered)了的,“主”无需等待“从”对上次写传输的确认即可发起一次新的写传输。
写响应通道Slave使用写响应通道来响应写事务,所有写事务都需要写响应通道上返回完成信号
对每个突发,完成信号只产生一次,而不是对事务中的每个数据传输都返回一个完成信号
没有读响应通道,因为写地址和写数据方向都是主->从,那么需要额外建立一个从->主的通道来响应写入成功。而读地址方向是主->从,读数据方向是从->主,所以不需要额外的通道。需要注意的是,虽然没有读响应通道,但是有读响应信号。

4、AXI 信号

AXI各版本的信号总结如下表:

通道来源AXI3AXI4AXI5解释
GlobalGlobalACLK* 全局时钟信号,所有信号都在全局时钟的上升沿被采样
GlobalARESETn* 全局时钟信号,所有信号都在全局时钟的上升沿被采样
Write addrMasterAWID[3:0]* 写地址ID
MasterAWADDR[31:0]* 写地址,写地址通道在写突发事务中给出第一次传输的地址
MasterAWLEN[3:0]AWLEN[7:0]* 突发长度,即写事务中数据传输的确切数量。此信息确定与该地址相关的数据传输的数量
* 突发长度AWLEN+1
* AXI3:所有类型支持1~16的突发长度
* AXI4/5:INCR类型支持1~256的突发长度、其他类型还是只支持1~16的突发长度
MasterAWSIZE[2:0]* 突发大小,即在突发中每次数据传输的byte数
000:1、001:2 、010:4、011:8、100:16、101:32、110:64、111:128
MasterAWBURST[1:0]*突发类型,加上突发大小,即可计算突发内每个传输的地址
00:FIXED、01:INCR、10:WRAP、11:Reserved
MasterAWLOCK[1:0]AWLOCK* 锁定类型,提供关于传输的原子特性的附加信息
* AXI3:00:normal、01:Exclusive、10:Locked、11:Reserved
* AXI4/5:0:normal、1:Exclusive
MasterAWCACHE[3:0]* 内存类型,指示事务的bufferable、cacheable、write-through、write-back和allocate属性
MasterAWPROT[2:0]* 保护类型,指示事务的特权和安全级别,以及该事务是数据访问还是指令访问
* AWPROT[0]:0-Unprivileged、1-Privileged
* AWPROT[1]:0-Secure、1-Non-Secure
* AWPROT[2]:0-Data、1-Instruction
MasterAWVALID* Master发出,表示Master发出的写地址/控制信息是有效的
* 地址/控制信息需要保持稳定,直到AWREADY信号变为1
SlaveAWREADY*Slave发出,表示Slave已经准备好接受一个地址和相关的控制信号
Master/AWQOS[3:0]* 服务质量,每个写事务发送的QoS标识符,即优先级
Master/AWREGION* 区域标识符,允许Slave的单个物理接口用于多个逻辑接口
Master/AWUSER* 用户信号,可选的写地址通道中的用户自定义信号
Write
data
MasterWID[3:0]/* 写数据ID
MasterWDATA[$:0]* 写数据,宽度为8*2^n,最高可配置为1024
MasterWSTRB[$:0]* 写选通,指示内存中要更新的字节通道
* 写数据总线的每8位有1个写选通,因此WSTRB[n]对应于WDATA[8n+:8]
MasterWLAST* 写突发中的最后一次传输
MasterWVALID* Master发出,表示Master发出的写数据/选通是有效的
SlaveWREADY* Slave发出,表示Slave可以接受写数据
Master/WUSER* 用户信号,可选的写数据通道中的用户自定义信号
Write responseSlaveBID[3:0]* 写响应ID
SlaveBRESP[1:0]* 写响应,指示写传输的状态:
00:OKAY、01:EXOKAY、10:SLVERR、11:DECERR
SlaveBVALID* Slave发出,表示Slave发出的写响应是有效的
MasterBREADY* Master发出,表示Master可以接受写响应
SlaveBUSER* 用户信号,可选的写响应通道中的用户自定义信号
Read addrMasterARID[3:0]* 读地址ID
MasterARADDR[31:0]* 读地址,读地址总线在读突发事务中给出第一次传输的地址
MasterARLEN[3:0]ARLEN7:0]* 突发长度,即读事务中数据传输的确切数量。此信息确定与该地址相关的数据传输的数量
* 突发长度ARLEN+1
* AXI3:所有类型支持1~16
* AXI4/5:INCR类型支持1~128、其他类型还是只支持1~16
MasterARSIZE[2:0]* 突发大小,即在突发中每次数据传输的byte数
000:1、001:2 、010:4、011:8、100:16、101:32、110:64、111:128
MasterARBURST[1:0]*突发类型,加上突发大小,即可计算突发内每个传输的地址
00:FIXED、01:INCR、10:WRAP、11:Reserved
MasterARLOCK[1:0]ARLOCK* 锁定类型,提供关于传输的原子特性的附加信息
* AXI3:00:normal、01:Exclusive、10:Locked、11:Reserved
* AXI4/5:0:normal、1:Exclusive
MasterARCACHE[3:0]* 内存类型,指示事务的bufferable、cacheable、write-through、write-back和allocate属性
MasterARPROT[2:0]* 保护类型,指示事务的特权和安全级别,以及该事务是数据访问还是指令访问
* ARPROT[0]:0-Unprivileged、1-Privileged
* ARPROT[1]:0-Secure、1-Non-Secure
* ARPROT[2]:0-Data、1-Instruction
MasterARVALID* Master发出,表示Master发出的读地址/控制信息是有效的
* 地址/控制信息需要保持稳定,直到ARREADY信号变为1
SlaveARREADY* Slave发出,表示Slave已经准备好接受一个地址和相关的控制信号
Master/ARQOS[3:0]* 服务质量,每个读事务发送的QoS标识符,即优先级
Master/ARREGION* 区域标识符,允许Slave的单个物理接口用于多个逻辑接口
Master/ARUSER* 用户信号,可选的写地址通道中的用户自定义信号
Read
data
SlaveRID[3:0]* 读数据ID
SlaveRDATA[$:0]* 读数据,宽度为8*2^n,最高可配置为1024
SlaveRRESP[1:0]* 读响应,指示读传输的状态:
00:OKAY、01:EXOKAY、10:SLVERR、11:DECERR
SlaveRLAST* 读突发中的最后一次传输
SlaveRVALID* Slave发出,表示Slave发出的读数据是有效的
MasterRREADY* Master发出,表示Master可以接受读数据和响应信息
Slave/RUSER* 用户信号,可选的读响应通道中的用户自定义信号
Low
Power
CLK_CtrICSYSREQ/* 0:时钟控制器发出请求,表示外设需要进入低功耗状态
* 1:时钟控制器发出请求,表示外设需要退出低功耗状态
Devi ceCSYSACK/* 0:外设响应时钟控制器发出的CSYSREQ=0的请求,即同意进入低功耗状态
* 1:外设响应时钟控制器发出的CSYSREQ=1的请求,即同意推出低功耗状态
DeviceCACTIVE/* 时钟活跃指示信号,表明外设需要时钟
* 0:外设不再需要时钟,系统时钟控制器可以禁用时钟,但不是必须这样做
* 1:外设需要启用时钟,系统时钟控制器必须立即启用时钟
Master/AWAKEUP* Master发出,为1表示读写请求通道上可能有活动

5、AXI 架构

一个典型的AXI系统由许多Master和Slave组成,通过某种形式的互联连接在一起,如下图所示:

6、术语说明

  • Transaction(事务):AXI总线上所需的信息交换的完整集合构成了AXI Transaction。一个主机发起一个Transaction来与一个从机通信。通常事务需要在多个通道上的主机和从机之间交换信息。
  • Burst(突发):任何传输所需的有效载荷数据都作为AXI Burst传输。在AXI事务中,有效负载数据在单个Burst中传输,该Burst可以包含多个Beats(拍),或者单独的数据传输。
  • Beats(拍):一个 Burst 可以包含多个数据传输,或称为AXI Beats(拍),一拍也就是AXI Burst中的单个数据的传输。

二、AXI 握手机制

AXI的所有五个事务通道,都使用相同的 “VALID/READY”握手过程来传输地址、数据和控制信息。这种双向流控机制意味着Master和Slave都可以控制信息的移动速率。

  • 源端产生VALID=1信号:表示地址、数据或控制信息可用;
  • 目的端生成READY=1信号:表示可以接受该信息;
  • 传输只发生在VALID和READY信号都是1的时候。

1、握手过程

AXI的握手过程有如下三种:

1)VALID先来,READY后来

  • T1时刻之后,目的端先将READY拉高,表明其可以接收信息,此时源端的地址、数据和控制信息还未有效;
  • T2时刻之后,源端将VALID拉高,表明信息有效;
  • T3时刻,VALID与READY同时为高,握手成功,完成传输;
  • 这种情况下,对源端来说传输在单个周期内完成。

2)READY先来,VALID后来

  • T1时刻之后,目的端先将READY拉高,表明其可以接收信息,此时源端的地址、数据和控制信息还未有效;
  • T2时刻之后,源端将VALID拉高,表明信息有效;
  • T3时刻,VALID与READY同时为高,握手成功,完成传输;
  • 这种情况下,对源端来说传输在单个周期内完成。

3)VALID和READY同时来

图中,源端和目的端恰好都在时T1时刻之后表明可以进行地址、数据或控制信息的传输。
在这种情况下,传输发生在能够识别到VALID与READY同时为高的那个时钟上升沿,也就是T2时刻。

注:
1. VALID信号一旦被拉高,就必须保持有效,直到READY拉高完成握手;
2. 在VALID未拉高之前,READY可以拉高后再拉低,可以随便跳,但是一旦VALID拉高,READY就必须拉高,配合VALID完成握手。

2、 握手依赖

握手依赖包括不同通道之间的依赖关系、以及同一通道中不同信号之间的依赖关系。下面给出握手依赖关系,单箭头表示信号间不依赖,双箭头表示后者必须依赖前者

1)AXI读事务

  • 读地址通道的ARVALID和ARREADY之间没有依赖关系,谁先谁后都可以;
  • 读数据通道的RVALID和RREADY之间没有依赖关系,谁先谁后都可以;
  • 从机必须等待主机发出的ARVALID和ARREADY同时有效,才能拉高RVALID,也就是要先等读地址传输完,再给出读数据。

2)AXI3写事务

  • 写地址通道的AWVALID和AWREADY之间没有依赖关系,谁先谁后都可以;
  • 写数据通道的WVALID和WREADY之间没有依赖关系,谁先谁后都可以;
  • 写响应通道的BVALID和BREADY之间没有依赖关系,谁先谁后都可以;
  • 写地址通道的握手信号和写数据通道的握手信号之间没有依赖关系,谁先谁后都可以;
  • 从机必须等待主机发出的WVALID和WREADY同时有效,才能拉高BVALID,也就是要先等写数据传输完,才能给出写响应;
  • 从机还必须等待WLAST拉高之后,才能拉高BVALID。

3)AXI4写事务

  • 写地址通道的AWVALID和AWREADY之间没有依赖关系,谁先谁后都可以;
  • 写数据通道的WVALID和WREADY之间没有依赖关系,谁先谁后都可以;
  • 写响应通道的BVALID和BREADY之间没有依赖关系,谁先谁后都可以;
  • 写地址通道的握手信号和写数据通道的握手信号之间没有依赖关系,谁先谁后都可以;
  • 从机必须等待写地址通道和写数据通道的握手信号都同时有效,才能拉高BVALID,也就是要等写地址和写数据都传输完,才能给出写响应;(与AXI3不同)
  • 从机还必须等待WLAST拉高之后,才能拉高BVALID。

3、版本兼容问题

如果某个AXI3从机在接收地址之前就接收完所有写数据并返回写响应,那么该从机不符合AXI4规范。将旧版本的AXI3从机迁移到AXI4时,需要增加一层封装添(Wrapper),以确保从机只有在正确接收地址之后,才返回写响应。

1丶强烈建议所有新设计的AXI3从机都实现这个额外的依赖项。
2丶所有AXI3主机都符合AXI4的写响应要求。

三、AXI 传输特性

AXI 传输基于Burst,主机通过驱动第一个字节的地址来开始每个Burst,后续的地址由从机来计算得出。传输特性如下:

1、突发长度 AxLEN

1) 突发长度即读写事务中数据传输的确切数量,由以下信号指定,spec中统一使用AxLEN来表示:

  • ARLEN[7:0]:读传输突发长度
  • AWLEN[7:0]:写传输突发长度

2) 突发长度的计算公式是:突发长度=AxLEN+1。AXI3和AXI4/5的突发长度最大值略有不同,如下所示:

  • AXI3:所有突发类型都支持1~16的突发长度;
  • AXI4/5:INCR突发类型支持1~256的突发长度,其他类型还是只支持1~16的突发长度。

3)AXI有以下规则来管理突发的使用:

  • 对于WRAP类型突发,突发长度必须为2、4、8或16;
  • 突发不能跨越4KB地址边界;(page大小为4K,4KB 边界即addr[11:0]=0的地址)
  • 不支持提前终止突发。
注:
1丶没有任何组件可以提前终止突发,然而为了减少写突发中的数据传输数量,Master可以通过取消所有WSTRB来禁用进一步的写。这种情况下Master必须在突发中完成剩余的传输(但是写的数据无效)。在读突发中,Master可以丢弃读取的数据,但它也必须完成突发中的所有传输。
2丶丢弃不需要的读数据可能导致访问读敏感设备(如FIFO)时丢失数据。当访问这样的设备时,Master必须使用与所需数据传输的大小完全匹配的突发长度。

4) 在AXI4/5中,具有INCR突发类型和长度大于16的事务可以转换为多个较小的突发,即使事务属性表明该事务是不可修改的。(请参阅关于CACHE内存属性的更改。)这种情况下,生成的突发必须保留与原始交易相同的事务特征,但是注意这些事务的突发长度被减少了,突发地址也被适当地调整了。为了实现AXI3兼容性或者保证QoS性能,需要能够将较长的突发分解为多个较短的突发。

3、突发类型 AxBURST

AXI的突发类型由信号AxBURST[1:0]来表示:

  • b00:FIXED,定址突发
  • b01:INCR,递增突发
  • b10:WRAP,回环突发
  • b11:Reserved,不支持

1)FIXED

  • 地址在每次传输中都是相同的;
  • 有效的字节通道对于突发中的所有节拍(beat)都是恒定的。然而在这些字节通道中,对于突发中的每一拍,断言了WSTRB的实际字节可能是不同的;
  • 这种突发类型用于重复访问同一位置,例如在加载或清空FIFO时。

2)INCR

  • 突发中每次传输的地址都是前一次传输地址的增量;
  • 增量值取决于传输的大小。例如在一个大小为4Byte的突发中,每个传输的地址是前一个地址加4;
  • 这种突发类型用于访问普通顺序内存。

    3)WRAP

    • WRAP突发类似于INCR突发,不同之处在于如果达到了地址上限,地址就会回环到较小的地址;
    • 起始地址必须与2^AxSIZE(单拍字节数)对齐;
    • 突发的长度必须为2、4、8或16次传输;
    • 这种突发类型用于cache line访问。
    • 例:AxADDR=0x04,AxSIZE=2(4B/拍),AxLEN=3(4拍),则访问为:0x04 → 0x08 → 0x0C → 0x00(第4拍回绕)。

    4、传输响应 xRESP

    xRESP[1:0]响应描述
    00OKAY可以表示以下情况:
    * 正常访问成功
    * 独占访问失败
    * 对不支持独占访问的Slave进行了独占访问
    01EXOKAY独占访问成功
    10SLVERR表示一个不成功的传输事务。可能是如下情况:
    * FIF0或buffer溢出或欠运行状态
    * 尝试不支持的传输大小
    * 试图对只读位置进行写访问
    * Slave的超时条件
    * 试图访问已禁用或已关闭的功能
    11DECERR表示互连不能成功解码S1ave访问,即事务地址上没有Slave。
    * 建议互连路由出到一个Default Slave,由它返回DECERR响应
    * AXI协议要求即使发生错误情况,给出DECERR响应的组件也要完成满足事务的所有数据传输

    1)对于读事务

    • Slave可以在一次突发中对不同拍的传输发出不同的响应信号。例如在16次读传输的突发事务中,Slave可能会为其中15次传输返回OKAY响应,并为其中1次传输返回SLVERR响应。

    2)对于写事务

    • Slave为整个突发事务发出单个响应信号,而不是为突发事务中的每拍数据传输发出响应。
    注:
    协议规定即使报告了错误,也必须执行所需数量的数据传输。例如Slave要求了8个读传输,但Slave有错误情况,也必须执行8个数据传输,每个都有一个错误响应。如果Slave给出一个错误响应,不会取消突发的剩余部分。

    5、保护类型 AxPROT

    AXI提供如下的保护类型,可用于防止非法访问:

    信号类型
    AxPROT [0]0非特权访问
    1特权访问
    AxPROT[1]0安全访问
    1非安全访问
    AxPROT[2]0数据访问
    1指令访问

    1)Master可能支持多个级别的操作特权,并将这个特权概念扩展到内存访问。有些处理器支持多级特权,请参阅所选处理器的文档以确定到AXI特权级别的映射。AXI能提供的唯一区别是特权访问和非特权访问。

    2)Master可能支持安全和非安全操作状态,并将这种安全概念扩展到内存访问。AxPROT[1]是为了在断言该事务时将其标识为非安全,这与ARM安全扩展实现中的其他信号一致。

    3)AxPROT[2]指示该事务是指令访问还是数据访问。这种指示并非都准确,例如当一个事务包含指令和数据项的混合时。建议Master设置AxPROT[2]为0以指示数据访问,除非该访问是明确已知的指令访问。

    6、原子访问 AxLOCK

    AxLOCK信号涉及到原子访问的相关特性,AxLOCK代表的事务类型有Exclusive独占访问和Locked锁定访问。AXI4/5不再支持锁定访问,因为大多数组件不需要锁定事务,且这对互连复杂性和QoS都有影响。

    1)AXI3原子访问

    信号AxLOCK[1:0]

    • b00:Normal access,正常访问
    • b01:Exclusive access,独占访问
    • b10:Locked access,锁定访问
    • b11:Reserved,不支持

    2)AXI4/5原子访问

    信号AxLOCK

    • b0:Normal access,正常访问
    • b1:Exclusive access,独占访问

    3)版本问题

    AXI3的锁定事务转换到AXI4时,按照以下方式进行转换:
    AxLOCK[1:0] = 2’b10转换为普通事务,即AxLOCK= 1’b0。

    注:
    1丶建议任何执行这种转换的组件(通常是互连),要包含一个可选的机制来检测和标记这种转换已经发生;
    2丶如果执行这种转换,任何不能正确操作的组件都不能在AXI4/5环境中使用;
    3丶对于许多使用锁定事务的遗留情况,例如执行SwP指令,可能需要对软件进行更改,以防止使用任何强制锁定事务的指令。

    暂无评论

    发送评论 编辑评论

    
    				
    |´・ω・)ノ
    ヾ(≧∇≦*)ゝ
    (☆ω☆)
    (╯‵□′)╯︵┴─┴
     ̄﹃ ̄
    (/ω\)
    ∠( ᐛ 」∠)_
    (๑•̀ㅁ•́ฅ)
    →_→
    ୧(๑•̀⌄•́๑)૭
    ٩(ˊᗜˋ*)و
    (ノ°ο°)ノ
    (´இ皿இ`)
    ⌇●﹏●⌇
    (ฅ´ω`ฅ)
    (╯°A°)╯︵○○○
    φ( ̄∇ ̄o)
    ヾ(´・ ・`。)ノ"
    ( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
    (ó﹏ò。)
    Σ(っ °Д °;)っ
    ( ,,´・ω・)ノ"(´っω・`。)
    ╮(╯▽╰)╭
    o(*////▽////*)q
    >﹏<
    ( ๑´•ω•) "(ㆆᴗㆆ)
    😂
    😀
    😅
    😊
    🙂
    🙃
    😌
    😍
    😘
    😜
    😝
    😏
    😒
    🙄
    😳
    😡
    😔
    😫
    😱
    😭
    💩
    👻
    🙌
    🖕
    👍
    👫
    👬
    👭
    🌚
    🌝
    🙈
    💊
    😶
    🙏
    🍦
    🍉
    😣
    Source: github.com/k4yt3x/flowerhd
    颜文字
    Emoji
    小恐龙
    花!
    上一篇
    下一篇