目录

  • 1. 功能介绍
  • 2. 架构
    • 2.1. 单主单从
    • 2.2. 多主多从
  • 3. 信号描述
    • 3.1. AW
    • 3.2. W
    • 3.3. AR
    • 3.4. R
    • 3.5. B
  • 4. 逻辑设计
    • 4.1. 单通道传输
    • 4.2. 多通道outstanding传输
      • AR 与 R 通道协同
      • AW、W 与 B 通道协同
    • 4.3. 传输配置
      • AWADDR 与 ARADDR
      • AWLEN[7:0] 与 ARLEN[7:0]
      • AWSIZE[2:0] 与 ARSIZE[2:0]
      • AWBURST[1:0] 与 ARBURST[1:0]
      • RRESP[1:0] 与 BRESP[1:0]
  • 5. AXI3与AXI4的区别

《IHI0022H_amba_axi_protocol_spec》
AXI总线 详细整理
AMBA3.0协议——AXI(Advanced eXtensible Interface)总线介绍
AXI_01 《AXI总线系列文章》由来
AXI3与AXI4区别及互联


1. 功能介绍

AMBA中最重要的片内总线,适用于高性能、高带宽、高工作频率、低延迟系统,也是基于多主多从的架构与事务传输。

AXI的特性包括:

● 单通道体系,即控制通道与数据通道相互分离,可分别独立控制和优化。并且各通道传输方向单一,减少延迟。

● 支持字节选通、非对齐数据访问

● 只给出第一地址,亦可完成burst传输

● 基于传输ID实现乱序传输

● 允许电平同步

2. 架构

2.1. 单主单从

先讲一个master、一个slave之间是如何通信的。

AXI将master与slave之间的控制信息和数据信息划分为五个通道进行传输,这五个通道之间是时序独立,这五个通道分别表示:读控制通道AR、读数据通道R、写控制通道AW、写数据通道W、写反馈通道B

每个通道由好几个信号组成
AXI的通道分解架构与APB、AHB不同,APB要求控制信息与数据信息时序对齐,AHB要求控制信息与数据信息差1拍构成流水。

如下图

这五个通道都是基于valid & ready握手信号实现控制信息or数据信息的交互

其实就是标准握手协议中的写时序,只有当valid与ready同时为高时才判定写成功。
此处AXI则是每个通道在valid与ready同时为高时才判定传输成功。

通道 握手 备注
写控制通道AW Master 向 Slave 传输,valid & ready握手
写数据通道W Master 向 Slave 传输,valid & ready握手 具备写数据选通功能。且写数据可通过FIFO缓存,无需等到写反馈到来才发起新一轮写
读控制通道AR Master 向 Slave 传输,valid & ready握手
读数据通道R Slave 向 Master 传输,valid & ready握手 含有读数据,也含有读响应表明读传输的完成情况
写反馈通道B Slave 向 Master 传输,valid & ready握手 需对每个写事务作响应

2.2. 多主多从

AXI也可实现多主多从的结构,类似于Bus Matrix

如下图,Interconnect同时具备AXI master接口与AXI slave接口

实际上大多数系统的控制通道带宽显著小于数据通道带宽,因而对于多主多从系统,通过共享控制通道、独立数据通道实现系统性能和interconnect复杂性的平衡。

3. 信号描述

全局信号

Signal Source Width(bits) Description
ACLK 外部 1
ARESTn 外部 1 低电平复位

3.1. AW

Signal Source Width(bits) Description
AWID Master AWID_WIDTH 写事务ID
AWADDR Master AWADDR_WIDTH burst写事务第一个WDATA的地址
AWLEN Master 8 该数值+1就表示此次写事务的WDATA个数
AWSIZE Master 3 WDATA中有效byte大小
AWBURST Master 2 burst传输类型
AWLOCK Master 2 写事务的原子特性
AWCACHE Master 4 写事务在系统中运行的要求
AWPROT Master 3 写事务的保护属性:特权、安全级别、访问类型
AWQOS Master 4 写事务的服务质量标识符
AWREGION Master 4 写事务的区域指示符
AWUSER Master USER_REQ_WIDTH 自定义
AWVALID Master 1 AW所有控制信息有效
AWREADY Slave 1 AW所有控制信息准备接收
Parameter Units Description
AWID_WIDTH bit AXI AW通道的AWID位宽
AWADDR_WIDTH bit AXI AW通道的AWADDR位宽
USER_REQ_WIDTH bit AXI AW通道的AWUSER和AR通道的ARUSER位宽

3.2. W

Signal Source Width(bits) Description
WID Master AWID_WIDTH 写事务ID,注意该信号AXI3具备,AXI4不具备
WDATA Master WDATA_WIDTH 写数据
WSTRB Master WDATA_WIDTH/8 写选通
WLAST Master 1 写事务中的最后一个写数据
WUSER Master USER_REQ_WIDTH 自定义
WVALID Master 1 W通道所有数据信息有效
WREADY Slave 1 W通道所有数据信息准备接收
Parameter Units Description
WID_WIDTH bit AXI W通道的WID位宽
WDATA_WIDTH bit AXI W通道的WDATA位宽
USER_REQ_WIDTH bit AXI W通道的WUSER位宽

3.3. AR

Signal Source Width(bits) Description
ARID Master ARID_WIDTH 读事务ID
ARADDR Master ARADDR_WIDTH burst读事务第一个读传输地址
ARLEN Master 8 该数值+1就表示此次读事务的RDATA个数
ARSIZE Master 3 RDATA中有效byte大小
ARBURST Master 2 burst传输类型
ARLOCK Master 2 读事务的原子特性
ARCACHE Master 4 读事务在系统中运行的要求
ARPROT Master 3 读事务的保护属性:特权、安全级别、访问类型
ARQOS Master 4 读事务的服务质量标识符
ARREGION Master 4 读事务的区域指示符
ARUSER Master USER_REQ_WIDTH 自定义
ARVALID Master 1 AR通道所有控制信息有效
ARREADY Slave 1 AR通道所有控制信息准备接收
Parameter Units Description
ARID_WIDTH bit AXI AR通道的ARID位宽
ARADDR_WIDTH bit AXI AR通道的ARADDR位宽
USER_REQ_WIDTH bit AXI AR通道的ARUSER位宽

3.4. R

Signal Source Width(bits) Description
RID Slave RID_WIDTH 读事务ID
RDATA Slave RDATA_WIDTH 读数据
RRESP Slave 2 读反馈,表明读传输的状态
RLAST Slave 1 读事务中的最后一个读数据
RUSER Slave USER_REQ_WIDTH 自定义
RVALID Slave 1 R通道所有数据信息有效
RREADY Master 1 R通道所有数据信息准备接收
Parameter Units Description
RID_WIDTH bit AXI R通道的RID位宽
RDATA_WIDTH bit AXI R通道的RDATA位宽
USER_REQ_WIDTH bit AXI R通道的RUSER位宽

3.5. B

Signal Source Width(bits) Description
BID Slave BID_WIDTH 写事务ID
BRESP Slave 2 写响应
BUSER Slave USER_REQ_WIDTH 自定义
BVALID Slave 1 B通道所有写反馈信息有效
BREADY Master 1 B通道所有写反馈信息准备接收
Parameter Units Description
WID_WIDTH bit AXI B通道的BID位宽
USER_REQ_WIDTH bit AXI B通道的BUSER位宽

4. 逻辑设计

4.1. 单通道传输

前面提到过对于每个通道而言,都是基于valid & ready实现握手,即valid拉高表示传输有效,必须等到ready也为高时才能拉低,表示完成传输


那么各通道之间是如何协同实现读写握手呢?见下

4.2. 多通道outstanding传输

outstanding意思是未完成的、未解决的。此处意思是读写握手中,上一次握手还未完成就可以发送下一次握手的信息,这样依旧能保证正确的读写。这是AXI的一大特点,能够提高工作效率。

例如先发写数据再发写地址、先发很多个写数据再发其对应的写地址。

以写为例,APB中pwdata和paddr是时序对齐的,而且必须完成一次握手才能进行下一次。AHB的读写握手也是必须完成之后再来下一次,所以他俩都不是outstanding。而AXI的AW通道和W通道的控制信号可以一次性发送多个。

outstanding传输的实现机制是基于burst传输中的ID号。核心思想如下

多个控制信息burst通过ID相互区分,多个数据信息burst通过ID相互区分

每个控制信息burst在时间上的先后顺序,必须与相应的数据信息burst在时间上的先后顺序一致

相同的控制信息ID与数据信息ID相匹配,以实现一次访问

以写为例,先在AW通道发送3包写控制信息,AWID分别为0、1、2,然后在W通道发送3包写数据信息。即使写控制和写数据时序上不是对齐的,AXI slave依然可以根据AWID正确地将数据写入地址中。同理,AXI slave在B通道作写反馈时BID为0、1、2且BRESP都是OKAY,AXI master也能够根据BID认为这3次写成功了。

当写访问次数过多时,可能AXI master在AW通道发送了3包awaddr不同的写控制信息,且AWID都是10,然后在W通道也发送了3包wdata不同的写数据信息,WID也都是10。那么axi master必须保证这3包ID相同的写控制和写数据在时间上先后顺序必须是相互对应的。

● 乱序传输(AXI3特有):不同ID的多个控制信息burst在时间上的先后顺序可任意。不同ID的多个数据信息burst在时间上的先后顺序可任意,如下图

如果要实现乱序传输,显然必须根据ID号缓存不同的控制信息,这样一个FIFO就无法解决问题了,必须是带有特定地址信息的RAM存储控制信息,这样的话就占用角度的资源,所以AXI4就砍掉了这个功能。

其实outstanding传输的本质就是如此,下面针对不同情景分别详细阐述。

AR 与 R 通道协同

完成burst读操作,需要满足以下条件:

● 接受读控制信息之后才能读反馈,即在ARVALID与ARREADY同时为高之后,RVALID才能拉高

● AXI Slave要反馈的RID必须与AXI Slave收到的ARID匹配。相同的ARID要在时间上与相同的RID相匹配

● interconnect中,为每个AXI Master的ARID添加额外的位,以表明该包数据来自于哪个AXI Master,如下图

就是你必须确定Slave收到了读控制信息,才能返回读数据
协议原文如下

Single-headed arrows point to signals that can be asserted before or after the signal at the start of the arrow.
Double-headed arrows point to signals that must be asserted only after assertion of the signal at the start of the arrow.

AW、W 与 B 通道协同

完成burst写操作,必须满足以下条件:

● 必须收到写控制信息和写数据信息,才能完成写反馈,即在AWVALID与AWREADY同时为高、以及WVALID与WREADY同时为高之后,BVALID才能拉高

● AXI Master AW通道的写控制信息发送顺序要与W通道的写数据信息发送顺序一致,AWID顺序要与BID顺序一致

● interconnect中,为每个AXI Master的AWID、WID添加额外的位,以表明该包数据来自于哪个AXI Master

AXI4没有WID所以不支持乱序传输


Single-headed arrows point to signals that can be asserted before or after the signal at the start of the arrow.
Double-headed arrows point to signals that must be asserted only after assertion of the signal at the start of the arrow.

4.3. 传输配置

下面对各传输信号的功能作介绍

AWADDR 与 ARADDR

表示burst传输第一个byte的地址,且Master只需提供第一个byte的地址。后续地址需要Slave来计算。

并且一次burst传输地址变化不可超过4KB,即’h8000

AWLEN[7:0] 与 ARLEN[7:0]

加1之后就分别表示burst写数据长度和burst读数据长度,同时规定了

● INCR类burst传输,AxLEN可为8’d0~8’d255

● WRAP类burst传输,burst长度只能为2、4、8、16之一,因此AxLEN取值必须为8’d1、8’d3、8’d7、8’d15 之一

● 一次burst传输地址变化不可超过4KB,即’h8000

AWSIZE[2:0] 与 ARSIZE[2:0]

这个与AHB中的HSIZE含义相同,表示burst传输中各数据有效byte数目

满足公式Number_Bytes = 2 ^ AxSIZE;

AxSIZE[2:0] Transfer Data Size = 2^(AxSIZE) byte Description
3'b000 8 bits = 1 Byte 数据传输有效大小为1 Byte
3'b001 16 bits = 2 Byte 数据传输有效大小为1 Half Word
3'b010 32 bits = 4 Byte 数据传输有效大小为1 Word
3'b011 64 bits = 8 Byte 数据传输有效大小为1 DoubleWord
3'b100 128 bits = 16 Byte 数据传输有效大小为4 Word
3'b101 256 bits = 32 Byte 数据传输有效大小为8 Word
3'b110 512 bits = 64 Byte 数据传输有效大小为16 Word
3'b111 1024 bits = 128 Byte 数据传输有效大小为32 Word

AWBURST[1:0] 与 ARBURST[1:0]

表示burst传输的类型,包括三种

HBRUST[1:0] Type Description
2'b00 FIXED 一次burst传输中地址和数据都不改变(写burst各数据的WSTRB可各不相同)
2'b01 INCR 递增burst传输。AxADDR为起始地址,1<<AxSIZE(Byte)为地址递增公差,AxLEN+1为burst传输的数据个数
2'b10 WRAP 回环burst传输,AxADDR以1<<AxSIZE(Byte)公差回环递增AxLEN+1次
2'b11 保留

INCR模式的burst传输好说,地址是以AxSIZE(Byte)不断递增,每次burst传输是传AxLEN+1个数据,于是就递增AxLEN+1次。

但是WRAP是回环模式,意思是burst读写地址必须在一个离散范围的内递增,若到达了该范围最大值,读写地址就返回到该范围的最小值

而这个最小值就叫作回环边界,Wrap Boundary,而这个范围的最大值就是下一个回环边界。

那么这个回环边界怎么算呢?

WrapBoundary=int(AxADDR(AxLEN+1)⋅2AxSIZE[2:0])⋅(AxLEN+1)⋅2AxSIZE[2:0]Wrap Boundary = int(\frac{AxADDR}{(AxLEN+1)·2^{AxSIZE[2:0]}})·(AxLEN+1)·2^{AxSIZE[2:0]}WrapBoundary=int((AxLEN+1)⋅2AxSIZE[2:0]AxADDR​)⋅(AxLEN+1)⋅2AxSIZE[2:0]

上述回环不等式的意思就是burst读写地址在[′h0,′h8000]['h0,'h8000][′h0,′h8000]内按照公差2AxSIZE[2:0]2^{AxSIZE[2:0]}2AxSIZE[2:0] byte构成的等差数列中,每(AxLEN+1)个地址构成一个回环
所以说回环边界一定是(AxLEN+1)⋅2AxSIZE[2:0]{(AxLEN+1)·2^{AxSIZE[2:0]}}(AxLEN+1)⋅2AxSIZE[2:0]的整数倍。那么对于任意一个读写地址,它所在的回环边界一定是起始地址AxADDR除以(AxLEN+1)⋅2AxSIZE[2:0]{(AxLEN+1)·2^{AxSIZE[2:0]}}(AxLEN+1)⋅2AxSIZE[2:0]的商部分乘以(AxLEN+1)⋅2AxSIZE[2:0]{(AxLEN+1)·2^{AxSIZE[2:0]}}(AxLEN+1)⋅2AxSIZE[2:0]

如下图,红框表示回环的范围

RRESP[1:0] 与 BRESP[1:0]

分别表示读响应和写响应,注意BRESP用于对一个burst的整个数据包传输做出响应,RRESP可用于对一个burst中的某一个data传输做出响应

个人认为这样的协定可以更改,让二者均表示一次burst的整个传输是否出现错误
原文如下:
For a write transaction, a single response is signaled for the entire burst, and not for each data transfer within the burst.
In a read transaction, the slave can signal different responses for different transfers in a burst. For example, in a burst of 16 read transfers the slave might return an OKAY response for 15 of the transfers and a SLVERR response for one of the transfers.

含义如下

RRESP[1:0] 与 BRESP[1:0] Type Description
2'b00 OKAY 访问成功
2'b01 EXOKAY 独占访问成功
2'b10 SLVERR 传输失败
2'b11 DECERR 表示interconnect无法解码出AXI MASTER的片选信号。AXI协议建议设定一个default axi slave,用于反馈DECERR信号

5. AXI3与AXI4的区别

高级可拓展接口(Advanced eXtensible Interface, AXI)相关推荐

  1. AXI(Advanced eXtensible Interface)协议规范

    AXI(Advanced eXtensible Interface)协议规范 参考:ARM (IHI 0022H.c) AMBA AXI and ACE Protocol Specification ...

  2. AMBA3.0协议——AXI(Advanced eXtensible Interface)总线介绍

    AXI(Advanced eXtensible Interface)是一种总线协议,该协议是ARM公司提出的AMBA(Advanced Microcontroller Bus Architecture ...

  3. java拓展接口_Java拓展接口-default关键词

    Java接口在使用过程中有两点规定: 1.接口中只能有定义方法名.方法返回类型,不能有方法的实现. 2.实现接口的类,必须实现接口中所有的方法. 例如下面的例子: //定义接口 public inte ...

  4. Python 高级网络操作 - Python Advanced Network Operations

    1 Python 高级网络操作 - Python Advanced Network Operations 2 3 Half Open Socket, 4 一个单向的 socket 被称为 half o ...

  5. 软件设计原则(五)接口隔离原则 -Interface Segregation Principle

    在讲接口隔离原则之前,先明确一下我们的主角--接口.接口分为两种: ◇ 实例接口(Object Interface),在Java中声明一个类,然后用new关键字产生的一个实例,它是对一个类型的事物的描 ...

  6. 静态,关键字:static 接口,IUSB , API 接口关键字:interface

    //静态 //普通成员 //普通成员是属于对象的//静态成员 //静态成员属于类的//关键字:static //self关键字:在类里面代表该类 //在静态方法里面不能调用普通成员 //在普通方法里面 ...

  7. 环回接口(loopback interface)

    环回接口(loopback interface) 当我们使用环回接口(IPv4的127.0.0.1或者IPv6的: : 1),数据不会离开本机或传到外部网络. 应用可以使用环回接口来跟本机的其他进程进 ...

  8. AXI接口协议详解-AXI总线、接口、协议

    转自:https://cloud.tencent.com/developer/article/1695010 AXI接口协议详解-AXI总线.接口.协议 AXI 总线 上面介绍了AMBA总线中的两种, ...

  9. java的接口简单使用---interface

    package hanjia; //接口的使用 interface Runner{ //接口1public void run(); } interface Swimmer{//接口2,在接口中方法可以 ...

最新文章

  1. 编程入门python语言是多大孩子学的-什么是少儿Python编程?这一篇就够啦!
  2. (转载)Struts2源码粗略分析四:理解xwork工作原理
  3. crossvalind函数 (交叉验证函数)
  4. python求解方程组_python如何解方程组
  5. Winform中怎样获取项目图片资源并转换为Image对象
  6. c语言开发 .c .h,求助C语言大佬 , 只会写到一个.c文件里 ,不会用.h头文件
  7. 基于CSE的微服务架构实践-Spring Cloud技术栈选型
  8. 【转】Java学习---内存溢出的排查经历
  9. quatus ii 常见错误及其改正方法
  10. SurfaceView 实现 转盘抽奖
  11. Photoshop 2021(Ps)下载安装及详细安装教程
  12. linux内核堆栈空间设置,linux内核堆栈设置过程
  13. Q8四元数群的正规子群
  14. java中线程池的实现原理:七参、四策
  15. Linux查看程序端口占用情况 netstat -apn | grep 8080
  16. 如何关闭伽卡他卡的开机自启
  17. 磁盘管理以及文件系统管理
  18. C# 反射类Assembly用法举例
  19. vue实现限制input只能输入中文
  20. 一些常见warning的原因和解决方法

热门文章

  1. 花了30天才肝出来,史上最全面Java设计模式总结,看完再也不会忘
  2. 一个非常好用的文件解锁工具
  3. libra区块链技术白皮书-中文部分翻译版
  4. jwt私钥和公钥怎么获取_公钥与私钥
  5. GPS_GPS基本原理和常识
  6. 工具使用 | 世界上最快最顶级的密码破解工具Hashcat入门指南
  7. 求赌王的密码 【问题描述】 赌王喜欢“A”,密码由6行6列扑克牌中每行“A”的位置数字组合而成。扑克牌点数由1~9,J,Q,K,A组成,每行的扑克牌中最多只能出现一次“A”;也可能没有“A”,
  8. 《乐高EV3机器人搭建与编程》一2.8 拓展配件箱
  9. 乾元通多链路通信设备保障高铁网络稳定
  10. HTML(二)语义化、核心常用元素