本文基于ARM官方文档《AMBA AXI and ACE Protocol Specification》

因为AXI3和AXI4协议大部分相同,小部分不同,在官方文档中也是一起介绍的,所以本文将一起说明AXI3和AXI4,在两个协议不同的地方,会突出显示。

AMBA AXI 协议支持高性能高频率系统间主从元件间的通讯。AXI协议特征如下:

  • 适合高带宽、低时延设计
  • 无用复杂即可提供高频操作<
  • 可满足多种组件的接口要求
  • 适用于初始访问时延较高的内存控制器
  • 提供了实施互连架构的灵活性
  • 向后兼容AHB和APB接口

AXI协议的主要特征如下:

  • 地址/控制阶段 与 数据阶段分离
  • 使用字节选通脉冲支持未对齐的数据传输
  • 使用基于突发的事务,仅发布起始地址
  • 独立的读写数据通道,可提供低成本的直接存储器访问(DMA)
  • 支持发布多个未完成的地址
  • 支持无序事务完成
  • 允许轻松添加寄存器级,以提供定时关闭

一. AXI架构

AXI有五个独立的通道:

  1. 写地址通道 Write address AW
  2. 写数据通道 Write data W
  3. 写响应通道 Write response B
  4. 读地址通道 Read address AR
  5. 读数据通道 Read data R

写/读地址通道包含控制信息。

写操作过程:

  1. 主机发送写地址/控制信号
  2. 主机发送要写入的数据
  3. 丛机发送写响应信号

读操作过程:

  1. 主机发送读地址/控制
  2. 丛机发送读数据

二. 各通道信号

2.1 全局信号

信号 描述
ACLK 时钟源 全局时钟信号,所有输入信号均在ACLK上升沿采样,所有输出信号的更改只能在ACLK上升沿之后。主从接口上的所有输入和输出信号间不允许有组合路径
ARESETn 复位源 全局复位信号,为异步复位同步置位信号,即ARESETn在任意时刻变为低电平可立刻生效,但置位为1时只能在ACLK的下一个上升沿生效

协议规定,在ARESETn低电平有效时

  1. 主机必须驱动ARVALID,AWVALID 和 WVALID为低电平
  2. 丛机必须驱动RVALID 和 RVALID为低电平
  3. 其它信号能被驱动为任意值

ARESETn置位为1后,VALID最快能在ARESETn置位后的下一个ACLK时钟上升沿置高,如下图:

2.2 写地址通道信号

信号 必需/可选 位宽 默认值 描述
AWID 可选 可变,协议未定义位宽, Xilinx使用0, 1, 2, … 32,一般为4 全0 写地址识别ID
AWADDR 必需 可变,协议未定义位宽, Xilinx使用12, 13, … 64,一般为32/64 - 要写入数据的内存地址
AWLEN 可选 8(AXI4是8位)
4(AXI3是4位)
8’h00
4’h0
数据是按份传输的,此信号表示接下来要写入的数据份数即数据量,
实际传输数据量 = AWLEN + 1
AWSIZE 可选 3 数据总线宽度 表示每份数据占几个字节,如3‘b000对应1字节,3’b001对应2字节,… ,3‘b111对应2^7=128字节
n对应2^n直接
AWBURST 可选 2 2‘b01, INCR 突发类型,指示在写事务中每次传输之间地址如何变化
AWLOCK 可选 1(AXI4是1位)
2(AXI3是2位)
1’b0
2’b00
0表示Normal access, 定义主机访问丛机的是否是独占的
AWCACHE 可选 4 4’b0000 指示不同的内存类型
AWPROT 必须 3 3’b000 写事务的保护属性:特权,安全级别和访问类型
提供用于禁止非法传输事务的访问权限信号
AWQOS 可选 4 4’b0000 服务质量标识符,在AXI3中未实现
AXI4中未指定AxQOS的确切用途,但建议用做读/写优先级指示符,QOS值越大优先级越高
AWREGION 可选 4 4’b0000 写入事务的区域指示器,在AXI3中未实现
AWUSER 可选 可变,协议未定义位宽,xilinx使用0, 1, 2, … 1024 全0 AXI4一般不建议使用用户字段
在AXI3中未实现
AWVALID 必须 1 - valid
AWREADY 必须 1 - ready

2.2.1 xID

xID包括AWID、WID(仅在AXI3中实现)、BID、ARID、RID。

当AXI Master连接到AXI Interconnect IP或是AXI SmartConnect IP时,Connect IP会将一个附加位加到该主机侧的ARID,AWID和WID上。这有两个效果:

  • 主机不必知道其他主机使用哪些ID值,因为Connect IP通过将主机号附加到原始标识符上,使每个主机使用的ID值唯一

  • 从接口上的ID标识符比主接口上的ID标识符宽

对于写响应,Connect IP使用BID的附加位来确定写响应所针对的主端口。在将BID值传递到正确的主端口之前,互连模块会删除BID的附加位。

对于读取数据,Connect IP使用RID的附加位来确定读取数据的目标主机端口。在将RID值传递到正确的主端口之前,互连模块会删除RID的附加位。

所以,当Master连接了Connect IP后(几乎是必连的,主从AXI接口间都必须加Connect IP),Master不需要关心其它Master的ID值,即使多个使用相同ID值的Master通过Connect IP连到Slave也不会造成错乱,因为Connect IP会使用附加位来唯一标识每个Master的ID。

2.2.2 AxBURST

描述
2’b00 FIXED 在固定突发中,
1. 每次传输的地址都相同。
2. 有每份数据的有效字节通道是固定的,但与已声明WSTRB的实际字节可能不同。
此突发类型用于重复访问同一位置,例如在加载或清空FIFO时。
2‘b01 INCR 递增。在递增突发中,突发中每次传输的地址都是前一次传输的地址的增量。增量值取决于传输的大小。例如,对于对齐的起始地址,突发大小为4字节的每次传输的地址为前一个地址加4。此突发类型用于访问常规顺序存储器
2’b10 WRAP 包装,包装突发与增量突发类似,不同之处在于,如果达到地址上限,地址会绕到一个较低的地址。
以下限制适用于包装突发:
• 起始地址必须与每次传输的大小对齐。
• 突发长度必须为2、4、8或16,即AWLEN必须为1、3、7或者15
2’b11 保留 -

2.2.3 AxSIZE

AWSIZE不能超过整数据传输路径中任意一条总线的宽度。如果AWSIZE对应的数据宽度比AXI数据总线宽度小,则称这样的传输是窄传输,显然,窄传输需要约定数据总线的哪些位是有效数据位。

当主机产生比其数据总线窄的传输时,AWBURST的值将确定传输使用的字节通道:

  • 在增加或包装突发时,在突发传输中每份数据使用不同的字节通道。
  • 在固定的脉冲串中,每份数据使用相同的字节通道。

下图展示了窄传输中8位数据在32位总线中INCR传输的过程,可以看到实际数据的位序和在数据总线中所处的位序始终是一样的,即字节不变序。8位为1字节,低字节在总线的低位,高字节在总线的高位。

2.2.4 AxLOCK

AxLOCK Access type
1‘b0 Normal access 正常访问
1’b1 Exclusive access 独占访问

AXI3定义的AxLOCK[1:0],比AXI4定义的多了一个Locked access锁定访问, 如下表。AXI3只推荐用于旧设备之中。

AxLOCK(AXI3) Access type2
2‘b00 Normal access 正常访问
2’b01 Exclusive access 独占访问
2’b10 Locked access 锁定访问
2’b11 保留

2.2.5 AxCACHE

AxCAHCE表明访问的内存类型,AXI3与AXI4不同的编码不同,括号()内是AXI3编码。

2.2.6 AxPORT

AxPORT共3位,每一位的值代表不同的意义。一般可设置为3‘b000,表示非特权且安全的数据访问。

AxPROT 功能 描述
[0] 0 Unprivileged access 非特权访问 AXI主站可能支持多个级别的操作特权,并将这种特权概念扩展到内存访问。 AxPROT [0]将访问标识为非特权或特权
[0] 1 Privileged access 特权访问 -
[1] 0 Secure access 安全访问 AXI主站可能支持安全和非安全操作状态,并将这种安全性概念扩展到内存访问。 AxPROT [1]将访问标识为安全或不安全。 AxPROT [1]可以视为定义了两个地址空间,一个安全地址空间和一个非安全地址空间。该信号可被视为附加地址位。安全和非安全地址空间之间的任何别名都必须正确处理。
[1] 1 Non-secure access 非安全访问 -
[2] 0 Data access 数据访问 该位指示事务是指令访问还是数据访问。 AXI协议将此指示定义为提示。并非在所有情况下都是准确的,例如,当事务包含指令和数据项的混合时。本规范建议主机将AxPROT [2]设置为LOW,以指示数据访问,除非已知该访问是指令访问。
[2] 1 Instruction access 指令访问 -

2.3 写数据通道信号

信号 必需/可选 位宽 默认值 描述
WID 可选 可变,协议未定义位宽 - 写数据识别ID, 仅在AXI3中实现
通过AWID,WID与BID一致来对应地址和数据,故AXI3可支持乱序传输,而AXI4去除了WID信号,故AXI4只能顺序传输,数据紧跟地址,或者地址紧跟数据。
WDATA 必需 与AWSIZE指定的数据位宽保持一致 = 2^AWSIZE * 8 - 要写入的数据
WSTRB 可选 数据总线位宽 / 8 = 2^AWSIZE 全0 写选通,指示哪些字节通道保存有效数据
WSTRB为高表示数据总线的哪一/几字节是有效数据,
具体的WSTRB [n]为高对应于WDATA [(8n+7:8n]这一字节的数据有效
WLAST 必需 1 - 指示写事务中的最后一次数据传输
WLAST置1表明此时刻的数据是最后一份数据
WUSER 可选 可变,协议未定义位宽,xilinx使用0, 1, 2, … 1024 - 一般不建议使用用户字段
在AXI3中未实现
WVALID 必需 1 - valid
WREADY 必需 1 - ready

2.4 写响应通道信号

信号 必需/可选 位宽 默认值 描述
BID 可选 可变,协议未定义位宽 - 写响应ID,与AWID保持一致
BRESP 可选 2 2‘b00 写响应,指示写事务状态
BUSER 可选 可变,协议未定义位宽,xilinx使用0, 1, 2, … 1024 全0 一般不建议使用用户字段
在AXI3中未实现
BVALID 必需 1 - valid
BREADY 必需 1 - ready

2.4.1 BRESP 与 RRESP

写响应和读响应功能是一样的,都是指示写/读交易是否成功,

BRESP[1:0]
RRESP[1:0]
Response 描述
2’b00 OKAY 下面三种情况,丛机将回应OKAY:
1. 正常访问成功
2. 独占访问失败
3. AxLOCK为1表明独占访问,但丛机不支持独占访问
2’b01 EXOKAY 独占访问成功
2’b10 SLVERR 丛机反映错误,协议建议此信号只用于出现错误的情况而不用于正常情况
例如以下情况:
1. FIFO或缓存区溢出
2. 不支持的AxSIZE,数据位宽大于总线位宽
3. 对只读区域发出写请求
4. 丛机响应超时
5. 尝试访问被禁用的或低功耗模式下的功能
2’b11 DECERR DECERR指示互连模块无法成功解码从属访问。
如果互连无法成功解码从属访问,则它必须返回DECERR响应。规范建议互连将访问路由到默认从站,并且默认从站返回DECERR响应。
即使发生了错误情况,AXI协议也要求完成事务的所有数据传输。任何提供DECERR响应的组件都必须满足此要求。

注意:AXI协议要求无论是否出现错误,主从机都必须把一次写/读交易走完。对于写交易,是在最后数据全部传输完成后才通过写应答知道传输是否有错误,所以无论错误与否,写交易总是能走完;而对于读交易,读应答位于每份读数据的后面,所以可能第一份数据传到主机,主机就知道交易错误了,但是下面的数据主机要继续读完,丛机也要继续发完。

2.5 读地址通道信号

信号 必需/可选 位宽 默认值 描述
ARID 可选 可变,协议未定义位宽, Xilinx使用0, 1, 2, … 32,一般为4 全0 写地址识别ID
ARADDR 必需 可变,协议未定义位宽, Xilinx使用12, 13, … 64,一般为32/64 - 读数据地址,同AWADDR
ARLEN 可选 8(AXI4是8位)
4(AXI3是4位)
8’h00
4‘h0
实际传输数据量 = ARLEN + 1,同AWLEN
ARSIZE 可选 3 数据总线宽度 表示每份数据占几个字节,同AWSIZE
ARBURST 可选 2 2‘b01, INCR 突发类型,指示在写事务中每次传输之间地址如何变化, 同AWBURST
ARLOCK 可选 1(AXI4是1位)
2(AXI3是2位)
1’b0,
2’b00
见 2.2.4 AxLock
ARCACHE 可选 4 4’b0000 指示不同的内存类型,同AWCHACE
ARPROT 必须 3 - 写事务的保护属性:特权,安全级别和访问类型
提供用于禁止非法传输事务的访问权限信号,同AWPROT
ARQOS 可选 4 4’b0000 服务质量标识符,AXI4中未指定AxQOS的确切用途,但建议用做读/写优先级指示符,QOS值越大优先级越高,同AWQOS
在AXI3中未实现
ARREGION 可选 4 4’b0000 写入事务的区域指示器,同AWREGION
在AXI3中未实现
ARUSER 可选 可变,协议未定义位宽,xilinx使用0, 1, 2, … 1024 全0 一般不建议使用用户字段,同AWUSER
在AXI3中未实现
ARVALID 必须 1 - valid
ARREADY 必须 1 - ready

2.6 读数据通道信号

信号 必需/可选 位宽 默认值 描述
RID 可选 可变,协议未定义位宽 - 写数据识别ID, 与ARID保持一致用来对应地址和数据
RDATA 必需 可变,协议未定义位宽, Xilinx使用12, 13, … 64,一般为32/64 - 读数据
RRESP 可选 2 2’b00 读响应,指示读事务状态,同BRESP
RLAST 必需 1 - 指示读事务中的最后一次数据传输
RLAST置1表明此时刻的数据是最后一份数据,同WLAST
RUSER 可选 可变,协议未定义位宽,xilinx使用0, 1, 2, … 1024 全0 一般不建议使用用户字段
在AXI3中未实现
RVALID 必需 1 - valid
RREADY 必需 1 - ready

三. AXI协议其它关键点

3.1 通道间的时序关系

AXI协议规定各通道间需要保证以下三种关系:

  • 写回复必须在最后一个写数据完成后
  • 读数据必须在接收到读地址信号后产生
  • 通道间的握手需要满足通道间的依存关系

除了这三种联系外,协议未定义通道间的任何其它关系。这意味着写数据可在写地址之前位于数据总线上,或者写数据与写地址也可出现在相同的周期中,等等这些情况都是合乎协议的。

前两种联系很好理解,接下来我们讨论第三种情况:通道间的握手信号依赖。

3.2 VALID与READY的握手机制

AXI协议的五个通道都通过VALID和READY进行握手。VALID由数据发送端驱动,VALID置1表示发送数据有效,接收端可以接收了;READY由数据接收端驱动,READY置1表示接收端已准备好接收数据。数据总在VALID与READY同时为高的时钟信号的上升沿完成传输,同时为高持续一个时钟周期,数据就传输一次。

为避免出现死锁的情况,VALID与READY需要满足以下条件:

  • 发送信息的AXI接口的VALID信号不得依赖于接收该信息的AXI接口的READY信号。
  • 接收信息的AXI接口应该可以等待,直到检测到VALID信号后再声明其对应的READY信号。当然接收端也可以不等待VALID有效,而根据自身情况置高READY。

可见,READY信号的置高是灵活的,可以在检测到VALID有效后再置高,也可以在自身准备好接收信息后置高而不依赖于VALID信号。即READY允许依赖VALID。VALID则不允许依赖READY。

握手信号之间的先后顺序:

  • 在读交易时,RVALID必须在ARVALID与ARREADY有效后才置高,也就是说必须在读地址确定后,才能发送要读的数据。

  • 在写交易中,BVALID必须在AWVALID与AWREADY,WVALID与WREADY都有效后才置高,也就是说必须在写地址和写数据都确定后,才能发送写响应。

AXI3和AXI4协议详细说明相关推荐

  1. AXI3和AXI4的接口信号区别

    axi3协议和axi4协议在信号接口上是有变动的,下面列出了axi4独有的信号. 一.写通道 1.axi4的AWLEN位宽更大.axi3的AWLEN是4bit,axi4的AWLEN是8bit.因此AX ...

  2. AXI4协议详解(二)

    写在前面:上一篇文章我们介绍了AXI4协议各通道的信号构成与握手机制,之后我们将在解析读写过程的同时,手把手教你实现一个从机的读写过程.由于今天的篇幅所限,本篇文章将实现一个从机的写过程,作为协议解析 ...

  3. 【转】运输层TCP协议详细介绍

    [转]运输层TCP协议详细介绍 TCP是TCP/IP协议族中非常复杂的一个协议.它具有以下特点: 1:面向连接的运输层协议.在使用TCP协议之前,首先需要建立TCP连接.传送数据完毕后,必须释放已经建 ...

  4. 编写AXI4协议读写BRAM并仿真验证

    前篇博文我们试验了AXI4-Lite协议读写BRAM,这里我们试验一下完整的AXI4协议.流程跟AXI4-Lite是一样的.省略的部分请参考:编写AXI4-Lite协议读写BRAM并仿真验证 一. 建 ...

  5. 一起来用Websocket(二):Websocket协议详细分析

    一起来用Websocket(二):Websocket协议详细分析 前言 本节主要翻译一下websocket的协议.其中,socket通信开发,最重要的就是协议了.通信软件(QQ.MSN).杀毒软件(3 ...

  6. RDP协议详细解析(一)

    RDP协议详细解析   一 前言 二 概述 三 同络层次 四 各连接模块说明 五 各功能模块说明 六 rdpwin结构.数据流说明 七 总结 一.前言 windows从NT开始提供终端服务,它是微软买 ...

  7. 协议:Modbus通讯协议详细

    1.Modbus通讯协议详细解释 https://blog.csdn.net/rxiang12/article/details/79125813 2.Modbus通信协议详解 https://blog ...

  8. TFTP协议详细分析

    TFTP协议详细分析 1. 目的 TFTP是一个传输文件的简单协议,它其于UDP协议而实现,但是我们也不能确定有些TFTP协议是基于其它传输协议完成的.此协议设计的时候是进行小文件传输的.因此它不具备 ...

  9. UPP协议转AXI4协议的burst读写FPGA实现

    UPP协议转AXI4协议的burst读写FPGA实现 名字是按标准协议命名的,细节都在图里,有兴趣的朋友自己看下,或者私信我,欢迎批评指正! Burst 读和写 写数据 读数据

最新文章

  1. 少走弯路的10条忠告
  2. 浏览器前进后退对下拉框数据的丢失(省市联动实现和例子)
  3. 工资8000以下的程序员注意了:《零coding数据大屏实战宝典.pdf》
  4. 推荐8个超实用的神级工具,值得收藏起来!
  5. 排序算法---希尔排序(java版)
  6. 数据类型长度、原反补码及移位
  7. 【Android 进程保活】提升进程优先级 ( 1 像素 Activity 提高进程优先级 | taskAffinity 亲和性说明 | 运行效果 | 源码资源 )
  8. 华为p40鸿蒙系统价格有好高,鸿蒙系统版本华为P50新机的曝光,华为P40处境悲惨价格骤降...
  9. Vue 路由知识三(过渡动画及路由钩子函数)
  10. delphi 如何判断编码格式,解决乱码问题
  11. 强大的日志分析工具AWStats
  12. python多个矩阵横向连接
  13. 超英文邮件50%!Flink 中文邮件列表必须有姓名
  14. 在线购物网站-实验4
  15. PyQt上位机软件开发简介
  16. quartus如何生成sof_JIC文件生成和固化详细步骤
  17. 主磁盘分区和逻辑磁盘分区的区别是什么?
  18. wx.downloadFile坑点
  19. 赵小楼《天道》深度解析(75)客观是对现有事实的认可,嘴上认可可不行,得心里认,否则就是自欺
  20. 角度转度分秒lisp函数_自改小程序,提示错误,运行另一个lisp后就不会出错,求帮忙!...

热门文章

  1. AAAI 2019 《LiveBot: Generating Live Video Comments Based on Visual and Textual Contexts》论文笔记
  2. 正则表达式删除文件中某些列
  3. LOJ #2731 [JOI2016春季合宿]Solitaire (DP、组合计数)
  4. Atcoder AGC031B Reversi (DP计数)
  5. mysql insert报错_mysql数据库使用insert语句插入中文数据报错
  6. adsl服务器客户端配置cisco_windows下,Kiwi_Syslog日志服务器的搭建
  7. swagger报错No handler found for GET /swagger-ui.html
  8. 激活Win Server 2008 R2 Datacenter
  9. 【软件需求工程与建模 - 小组项目】阶段性汇报-软件设计规格说明书3.0
  10. Scala sbt 添加国内镜像