AXI3和AXI4协议详细说明
本文基于ARM官方文档《AMBA AXI and ACE Protocol Specification》
因为AXI3和AXI4协议大部分相同,小部分不同,在官方文档中也是一起介绍的,所以本文将一起说明AXI3和AXI4,在两个协议不同的地方,会突出显示。
AMBA AXI 协议支持高性能高频率系统间主从元件间的通讯。AXI协议特征如下:
- 适合高带宽、低时延设计
- 无用复杂即可提供高频操作<
- 可满足多种组件的接口要求
- 适用于初始访问时延较高的内存控制器
- 提供了实施互连架构的灵活性
- 向后兼容AHB和APB接口
AXI协议的主要特征如下:
- 地址/控制阶段 与 数据阶段分离
- 使用字节选通脉冲支持未对齐的数据传输
- 使用基于突发的事务,仅发布起始地址
- 独立的读写数据通道,可提供低成本的直接存储器访问(DMA)
- 支持发布多个未完成的地址
- 支持无序事务完成
- 允许轻松添加寄存器级,以提供定时关闭
一. AXI架构
AXI有五个独立的通道:
- 写地址通道 Write address AW
- 写数据通道 Write data W
- 写响应通道 Write response B
- 读地址通道 Read address AR
- 读数据通道 Read data R
写/读地址通道包含控制信息。
写操作过程:
- 主机发送写地址/控制信号
- 主机发送要写入的数据
- 丛机发送写响应信号
读操作过程:
- 主机发送读地址/控制
- 丛机发送读数据
二. 各通道信号
2.1 全局信号
信号 | 源 | 描述 |
---|---|---|
ACLK | 时钟源 | 全局时钟信号,所有输入信号均在ACLK上升沿采样,所有输出信号的更改只能在ACLK上升沿之后。主从接口上的所有输入和输出信号间不允许有组合路径 |
ARESETn | 复位源 | 全局复位信号,为异步复位同步置位信号,即ARESETn在任意时刻变为低电平可立刻生效,但置位为1时只能在ACLK的下一个上升沿生效 |
协议规定,在ARESETn低电平有效时
- 主机必须驱动ARVALID,AWVALID 和 WVALID为低电平
- 丛机必须驱动RVALID 和 RVALID为低电平
- 其它信号能被驱动为任意值
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协议详细说明相关推荐
- AXI3和AXI4的接口信号区别
axi3协议和axi4协议在信号接口上是有变动的,下面列出了axi4独有的信号. 一.写通道 1.axi4的AWLEN位宽更大.axi3的AWLEN是4bit,axi4的AWLEN是8bit.因此AX ...
- AXI4协议详解(二)
写在前面:上一篇文章我们介绍了AXI4协议各通道的信号构成与握手机制,之后我们将在解析读写过程的同时,手把手教你实现一个从机的读写过程.由于今天的篇幅所限,本篇文章将实现一个从机的写过程,作为协议解析 ...
- 【转】运输层TCP协议详细介绍
[转]运输层TCP协议详细介绍 TCP是TCP/IP协议族中非常复杂的一个协议.它具有以下特点: 1:面向连接的运输层协议.在使用TCP协议之前,首先需要建立TCP连接.传送数据完毕后,必须释放已经建 ...
- 编写AXI4协议读写BRAM并仿真验证
前篇博文我们试验了AXI4-Lite协议读写BRAM,这里我们试验一下完整的AXI4协议.流程跟AXI4-Lite是一样的.省略的部分请参考:编写AXI4-Lite协议读写BRAM并仿真验证 一. 建 ...
- 一起来用Websocket(二):Websocket协议详细分析
一起来用Websocket(二):Websocket协议详细分析 前言 本节主要翻译一下websocket的协议.其中,socket通信开发,最重要的就是协议了.通信软件(QQ.MSN).杀毒软件(3 ...
- RDP协议详细解析(一)
RDP协议详细解析 一 前言 二 概述 三 同络层次 四 各连接模块说明 五 各功能模块说明 六 rdpwin结构.数据流说明 七 总结 一.前言 windows从NT开始提供终端服务,它是微软买 ...
- 协议:Modbus通讯协议详细
1.Modbus通讯协议详细解释 https://blog.csdn.net/rxiang12/article/details/79125813 2.Modbus通信协议详解 https://blog ...
- TFTP协议详细分析
TFTP协议详细分析 1. 目的 TFTP是一个传输文件的简单协议,它其于UDP协议而实现,但是我们也不能确定有些TFTP协议是基于其它传输协议完成的.此协议设计的时候是进行小文件传输的.因此它不具备 ...
- UPP协议转AXI4协议的burst读写FPGA实现
UPP协议转AXI4协议的burst读写FPGA实现 名字是按标准协议命名的,细节都在图里,有兴趣的朋友自己看下,或者私信我,欢迎批评指正! Burst 读和写 写数据 读数据
最新文章
- 少走弯路的10条忠告
- 浏览器前进后退对下拉框数据的丢失(省市联动实现和例子)
- 工资8000以下的程序员注意了:《零coding数据大屏实战宝典.pdf》
- 推荐8个超实用的神级工具,值得收藏起来!
- 排序算法---希尔排序(java版)
- 数据类型长度、原反补码及移位
- 【Android 进程保活】提升进程优先级 ( 1 像素 Activity 提高进程优先级 | taskAffinity 亲和性说明 | 运行效果 | 源码资源 )
- 华为p40鸿蒙系统价格有好高,鸿蒙系统版本华为P50新机的曝光,华为P40处境悲惨价格骤降...
- Vue 路由知识三(过渡动画及路由钩子函数)
- delphi 如何判断编码格式,解决乱码问题
- 强大的日志分析工具AWStats
- python多个矩阵横向连接
- 超英文邮件50%!Flink 中文邮件列表必须有姓名
- 在线购物网站-实验4
- PyQt上位机软件开发简介
- quartus如何生成sof_JIC文件生成和固化详细步骤
- 主磁盘分区和逻辑磁盘分区的区别是什么?
- wx.downloadFile坑点
- 赵小楼《天道》深度解析(75)客观是对现有事实的认可,嘴上认可可不行,得心里认,否则就是自欺
- 角度转度分秒lisp函数_自改小程序,提示错误,运行另一个lisp后就不会出错,求帮忙!...
热门文章
- AAAI 2019 《LiveBot: Generating Live Video Comments Based on Visual and Textual Contexts》论文笔记
- 正则表达式删除文件中某些列
- LOJ #2731 [JOI2016春季合宿]Solitaire (DP、组合计数)
- Atcoder AGC031B Reversi (DP计数)
- mysql insert报错_mysql数据库使用insert语句插入中文数据报错
- adsl服务器客户端配置cisco_windows下,Kiwi_Syslog日志服务器的搭建
- swagger报错No handler found for GET /swagger-ui.html
- 激活Win Server 2008 R2 Datacenter
- 【软件需求工程与建模 - 小组项目】阶段性汇报-软件设计规格说明书3.0
- Scala sbt 添加国内镜像