跳至正文

AXI3和AXI4协议详细说明


摘要

本文详细介绍了AXI3和AXI4协议的读写过程,对比了它们之间的区别,列出了和协议相关的所有信号并加以说明。

关键词:AXI3AXI4读通道写通道握手机制


前言

本文基于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都有效后才置高,也就是说必须在写地址和写数据都确定后,才能发送写响应。

如果本文对你有所帮助,欢迎点赞、转发、收藏、评论让更多人看到,赞赏支持就更好了。

如果对文章内容有疑问,请务必清楚描述问题,留言评论或私信告知我,我看到会回复。


徐晓康的博客持续分享高质量硬件、FPGA与嵌入式知识,软件,工具等内容,欢迎大家关注。

0 0 投票数
文章评分
订阅评论
提醒
0 评论
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x
目录