AXI-FULL协议详解

1、概述

  前文对axi_lite协议进行了讲解,并且使用Verilog HDL编写了一个常规数据流接口转axi_lite的模块。本文在此基础上对axi_full协议进行讲解,axi_full协议与axi_lite的主要区别在于支持突发读写(传输指定长度数据只需要发送首地址),从而提高数据读写速率。还支持一些其他功能,但是这些功能对于fpga开发来说一般不会使用,作为了解即可。

  Axi_full的信号也比较多,与axi_lite一样分为5个通道,其中写地址通道和读地址通道的信号含义和时序均一致。

  下图是axi_full写流程图,首先通过写通道发送首地址,然后在通过写数据通道发送数据,数据传输完成后,从机的写应答通道会回复主机此次写过程是否成功。每个通道的数据均需要主机与从机握手,可以保证数据的稳定写入。

在这里插入图片描述

图1 axi_full写流程

  下图是axi_full的读流程图,首先通过读地址通道发送读数据的首地址、突发长度、突发读取数据大小等信息。从机应答之后,会读数据通道输出对应地址的数据,主机通过握手接收数据。

在这里插入图片描述

图2 axi_full读流程

  由此可以,读写数据的流程与axi_lite保持一致,区别在于读写支持突发长度大于1的突发传输。后文将对其每个通道的信号做详细讲解,有部分信号是为了兼容AXI3总线或者给ARM提供的信号,这部分将简要讲解,fpga需要重点关注的信号会重点标出。

2、写地址通道

  Axi_full写地址通道的信号如下表所示,相对axi_lite来说增加了很多信号,但在实际使用时,很多信号都是固定取值,不用过多关注。注意下表中信号的输入、输出方向是以主机位参考对象的。

表1 写地址通道信号
信号方向含义
AWIDO写地址ID,用于对应写地址与写应答。
AWADDRO写地址,突发写的首地址。
AWLENO写突发传输长度,单位字节。
AWSIZEO一次写数据的字节数。
AWBURSTO写突发传输类型,一般取值2’d1。
AWLOCKO锁类型,只为了兼容AXI3协议,取值为0。
AWCACHEO写突发传输的数据存储方式(针对从机怎样存数据)。
AWPROTO写突发的优先级和保护类型,一般取值3’d0。
AWQOSO服务质量,一般取值4’d0。
AWREGIONO区域标识符,允许从机上的单个物理接口用于多个逻辑接口,一般不使用。
AWUSERO用户自定义信号。
AWVALIDO写地址有效指示信号,高电平有效。
AWREADYI写地址应答信号,高电平有效。

  上表对写地址通道信号做了大致说明,下面将对这些信号的取值含义做一些讲解,对于FPGA设计需要注意的点会重点标出。

  AXI4协议的写突发长度AWLEN,如果突发类型为递增突发,那么突发长度可以设置为[1,256]。如果是其他突发类型,那么突发长度只支持[1,16]。

  注意突发长度AWLEN信号位宽为8,且AWLEN的值从0开始,所以实际突发长度等于AWLEN+1。

  AWSIZE表示每次写数据时最大数据位宽对应字节数,即写数据位宽除以8,取值范围如下所示。

表2 awsize取值
写数据(bit)写数据(byte)awsize
10241283’b111
512643’b110
256323’b101
128163’b100
6483’b011
3243’b010
1623’b001
813’b000

  从上表可知,axi_full协议中写数据的最大数据位宽可以支持1024bit。

  突发类型WSTRB一般分为三种,为0时表示固定地址(FIXED)写突发,即向一个地址中写多次数据,最终只会留下最后写入的数据。比较常用的是取值为1的地址递增(INCR)突发传输,当写入一次数据后,地址会自动加1,从而将突发传输数据写入连续地址中。还有一种回绕突发类型(WRAP),与递增突发类似,只不过当地址累加到最大地址后会回到最初的地址,在FPGA中一般不会使用。

  因此FPGA内部一般使用递增突发,WSTRB的值为2’b01。

  AWCACHE一般用于告诉从机,突发传输的数据该以怎样的方式存储,需不需要缓冲等等 ,FPGA进行传输时一般不需要使用缓冲,取值为4’d0或4’d2

  然后就是权限以及保护类型的信号AWPROT,该信号的各位取值及含义如下表所示,bit[0]表示此次突发传输的优先级,bit[1]表示访问类型,bit[2]表示此次传输的是指令还是数据,一般取值为3’b000即可。

表3 AWPROT信号各位含义
awprot位含义
Bit[0]0非特权访问
Bit[0]1特权访问
Bit[1]0安全访问
Bit[1]1非安全访问
Bit[2]0数据访问
Bit[2]1指令访问

  上述就是一些常用信号和部分不常用信号的讲解,对于常规使用,写地址通道只需要关注写地址、写突发长度、写突发类型、写突发大小、写地址有效指示信号、写地址应答信号即可,其余信号均为固定数值,需要使用其余功能时在通过手册去查找具体使用方式即可。

3、写数据通道

  写数据相关信号如下表所示,相关信号都比较简单,相对于axi_lite主要增加了WLAST信号,用于指示写突发传输的最后写入数据。

表4 写数据通道信号
信号I/O含义
WIDO写ID,只在AXI3协议中支持。
WDATAO写数据,数据位宽与AWSIZE信号设置一致。
WSTRBO写数据掩码,低电平有效。
WLASTO指示一次写突发传输的最后写入的一个数据。
WUSERO写数据通道用户自定义信号。
WVALIDO写数据有效指示信号,高电平有效。
WREADYI写数据应答信号,高电平有效。

  写通道的相关信号与axi_lite协议基本一致,此处就不再赘述各个信号的含义和时序了,WVALID与WREADY的握手即可。

4、写应答通道

  写应答通道的相关信号如下表所示,与axi_lite协议写应答通道的信号基本一致,多了个ID信号,这是因为axi_full支持乱序传输、交织传输等等,需要通过ID来确定本次应答的是哪次写突发。

表5 写应答通道信号
信号I/O含义
BIDI写响应ID,必须与AWID的数值匹配。
BRESPI写响应,为0表示从机正确接收写入数据。
BUSERI写响应通道用户自定义数据。
BVALIDI写通道数据有效指示信号,高电平有效。
BREADYO写通道数据应答信号,高电平有效。

  突发写状态信号BRESP为0表示突发写正常,为1表示独占写入成功,为2表示从机错误,为3表示解码器解码错误。可以根据此信号的数值判断与BID相等的AWID写突发是否正确写入从机。

5、读地址通道

  读地址通道的信号与写地址通道的信号完全一致,取值也可以保持一致,对应信号如下表所示。

表6 读地址通道信号
信号方向含义
ARIDO读地址ID,与读数据的ID对应。
ARADDRO读地址,突发读的首地址。
ARLENO读突发传输长度,单位字节。
ARSIZEO一次读数据的字节数。
ARBURSTO读突发传输类型,一般取值2’d1。
ARLOCKO锁类型,只为了兼容AXI3协议,取值为0。
ARCACHEO读突发传输的数据存储方式(针对从机怎样存数据)。
ARPROTO读突发的优先级和保护类型,一般取值3’d0。
ARQOSO服务质量,一般取值4’d0。
ARREGIONO区域标识符,允许从机上的单个物理接口用于多个逻辑接口,一般不使用。
ARUSERO用户自定义信号。
ARVALIDO读地址有效指示信号,高电平有效。
ARREADYI读地址应答信号,高电平有效。

  写地址通道信号以AW开头,而读地址通道信号以AR开头,其余一致,各个信号的含义与时序不再赘述。

6、读数据通道

  读状态信号RRESP也在读数据通道中,该信号的含义与WRESP一致,为0表示读数据正常。其余信号与写数据通道的含义一致。

表7 读数据通道信号
信号I/O含义
RIDI读ID,必须与ARID保持一致。
RDATAI读数据,数据位宽与AWSIZE信号设置一致。
RRESPI读应答信号,为0表示读数据正常。
RLASTI指示一次读突发传输的最后写入的一个数据。
RUSERI读数据通道用户自定义信号。
RVALIDI读数据有效指示信号,高电平有效。
RREADYO读数据应答信号,高电平有效。

7、总结

  Axi_full协议相关信号的简要介绍完毕,从上面可知,大部分信号与axi_lite还是一样的,因为支持突发传输,读写数据位宽可变,因此多了突发长度,读写数据大小,突发结束等信号。

  而对于服务质量、区域标识符、用户自定义等信号,大多时候要么为固定数值,要么就没有这些信号。

  由于axi_full支持乱序传输,所以在实际使用时,需要判断ID是否对应,从而进行响应操作,如果ID保持为常数,那可以忽略。

  关于axi_full协议的详细情况,还是推荐查看ARM公司提供的手册,可以在ARM官网下载,也可以在公众号后台回复”AXI手册”(不包括引号)获取。

  后文将通过两个实例在FPGA中实现axi_full协议,进一步掌握该协议。


  如果对文章内容理解有疑惑或者对代码不理解,可以在评论区或者后台留言,看到后均会回复!

  如果本文对您有帮助,还请多多点赞👍、评论💬和收藏⭐!您的支持是我更新的最大动力!将持续更新工程!

### AXI Full 协议详解 #### 特点概述 AXI (Advanced eXtensible Interface) 是一种由 ARM 推出的高频率、高带宽、低延迟的总线协议,适用于突发传输模式下的数据交换[^1]。该协议属于 AMBA (Advanced Microcontroller Bus Architecture, 高级微控制器总线架构) 的一部分,在2010年发布的 AXI4 中得到了进一步的发展和完善。 #### 类型区分 AXI 主要存在三个变种:AXI_FULL(全功能版)、AXI_LITE(精简版)以及 AXI_STREAM(流式接口)。其中 AXI_FULL 提供最完整的特性集和支持最高的性能指标;而其他两个版本则是基于 FULL 型进行了不同程度的功能裁剪以适应不同应用场景的需求[^2]。 #### 数据传输机制 对于 AXI_FULL 来说,其支持复杂的读写操作流程,并通过多个信号来协调这些过程中的各个阶段。具体而言: - **地址相位**:发起者发送目标设备地址给接收方; - **数据相位**:一旦接收到有效的响应,则开始实际的数据传送动作; - **应答相位**:完成一次事务处理之后,接收方向发起者反馈确认信息。 这种多阶段的设计使得 AXI 能够实现高效可靠的大规模并行计算环境内的资源访问管理。 #### 应用场景 由于具备出色的吞吐能力和灵活性,AXI_FULL 广泛应用于需要频繁且大量内存交互的操作场合,比如图形处理器 GPU 或者网络加速卡等硬件组件内部互联方案的选择上。 ```python def axi_full_transaction(address, data): """ Simulate an AXI-FULL transaction. :param address: The target memory or register address to access. :param data: Data payload for write operations; None for reads. :return: Result of the operation if it's a read request. """ # Address phase simulation send_address_to_target(address) if data is not None: # Write operation including both data and response phases transmit_data(data) receive_acknowledgement() else: # Read operation with only response phase after addressing result = get_response_from_target() return result ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

电路_fpga

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值