FPGA教程系列-Vivado AXI4-Lite接口

FPGA教程系列-Vivado AXI4-Lite接口

AXI-Lite

声明:如有雷同,纯属抄袭。

特点

其他的就不赘述了,之前研究过。

AXI4-Lite总线协议的特性如下:

  • 事务传输突发长度为1
  • 每次传输只能传输一个数据
  • 所有访问都是不可修改(Non-modifiable),不可缓冲(Non-bufferable)
  • 不支持专属访问(Exclusive access)

AXI4-Lite比起AXI4-Full总线来说,由于每次只传输一个收据,传输效率低了很多。比较适用的场景是单次访问某个寄存器(地址寻址),类似于IIC总线的单次读写。在SOC系统或者 ZYNQ 中比较常用。

通道

AXI4-Lite定义了 5 条通道:

写操作(3个通道)

  • 写地址通道 (Write Address Channel - AW): 告诉从机(Slave)我要写哪个地址。
  • 写数据通道 (Write Data Channel - W): 发送实际的数据。
  • 写响应通道 (Write Response Channel - B): 从机告诉主机(Master),"我写完了,状态是 OK 还是 Error"。

读操作(2个通道)

  • 读地址通道 (Read Address Channel - AR): 告诉从机我要读哪个地址。
  • 读数据通道 (Read Data Channel - R): 从机把数据和状态返回给主机。

AXI 是基于通道(Channel) 的协议。可以把通道想象成单行道,数据和控制信号在上面流动。

AXI 读取传输 (Read Transaction)流程: "我要读这个地址" -> "给你数据"

  1. 发地址 (M -> S): 主机(Master)通过 读地址通道 (AR) 告诉从机(Slave):"我要读地址 0x1000 开始的数据"。
  2. 收数据 (S -> M): 从机通过 读数据通道 ® 把数据传回给主机。

关于"突发 (Burst)":

  • AXI4-Lite (无突发): 你告诉店员"我要买苹果",店员给你一个苹果。交易结束。如果你还要买,得再喊一次。
  • AXI4-Full (支持突发): 你告诉店员"我要买苹果,来一箱(比如16个)"。你只说了一次地址(请求),店员会连续给你递 16 个苹果。这就是突发。

AXI 写入传输 (Write Transaction)流程: "我要写这个地址" -> "这是数据" -> "写好了"

  1. 发地址 (M -> S): 主机通过 写地址通道 (AW) 告诉从机:"我要往地址 0x2000 写数据"。
  2. 发数据 (M -> S): 主机通过 写数据通道 (W) 把具体的数据发过去。
  3. 收回执 (S -> M): 从机写完后,通过 写响应通道 (B) 告诉主机:"任务完成(OKAY)"或者"出错了(ERROR)"。

为什么写需要 3 条通道,读只要 2 条?效率与带宽利用。

  • 写操作 (Write): 数据是发往从机的。数据发完了,主机怎么知道从机是不是真的写进去了?所以必须有一个专门的通道(写响应通道 B)来回传一个"回执单"。

  • 读操作 (Read): 数据是从从机回来的。

    既然从机已经在发数据了,为什么不顺便把"状态(Status)"贴在数据旁边一起发回来呢? 在读数据通道 ® 中,除了 RDATA​ (数据线),还有一组信号叫 RRESP (读响应)。

握手信号:VALID 和 READY, 这是 AXI 的灵魂,所有通道都有这就两根线。

  • VALID (我好了): 发送方说"我的数据/地址已经准备好了,放在线上了"。
  • READY (我没忙): 接收方说"我有空,可以接收数据了"。
  • 机制: 只有当 VALID=1 且 READY=1 的那个时钟上升沿,数据才算真正传输成功。缺一不可。

握手的时序,与AXI-Stream一致,不再赘述。

写数据通道的"STROBE"信号,也与AXI-Stream一致

假设数据总线是 32位(4个字节,Byte 0 ~ Byte 3),地址是对齐的。

如果你只想修改这个 32位整数中的第 3 个字节,而保持其他 3 个字节不变,该怎么办?

  • 没有 Strobe: 你必须先读出这 32位,修改第 3 个字节,然后再把 32位全写回去(读-改-写),效率很低。

  • 有 Strobe (WSTRB):

    • WSTRB 是一个 4位的信号(对应 4个字节)。
    • 如果你设 WSTRB = 4'b0100,表示"只写第 3 个字节,其他字节不管"。
    • 从机收到后,就只会更新那一个字节。这就是掩码(Mask) 功能。

信号列表详解

假设数据位宽为 32位,地址位宽为 32位,以下是标准信号:

全局信号

  • ACLK: 时钟信号,所有信号在上升沿采样。
  • ARESETN: 复位信号,低电平有效。

写地址 (Write Address - AW)

信号名 方向 (M->S) 描述
AWVALID M -> S 主机:地址有效
AWREADY S -> M 从机:准备好接收地址了
AWADDR M -> S 写入的目标地址 (例如 0x4000_0000)
AWPROT M -> S 保护类型(通常接 0 或忽略)

写数据 (Write Data - W)

信号名 方向 (M->S) 描述
WVALID M -> S 主机:数据有效
WREADY S -> M 从机:准备好接收数据了
WDATA M -> S 实际数据 (例如 0x0000_0001)
WSTRB M -> S 写选通 (Write Strobe) :字节有效位。对于 32位数据,4bit 宽。4'b1111​ 表示全写,4'b0001 表示只写最低字节。

写响应 (Write Response - B)

信号名 方向 (M->S) 描述
BVALID S -> M 从机:响应有效
BREADY M -> S 主机:准备好接收响应了
BRESP S -> M 响应状态(00​=OKAY, 10​=SLVERR, 11=DECERR)

读地址 (Read Address - AR)

信号名 方向 (M->S) 描述
ARVALID M -> S 主机:读地址有效
ARREADY S -> M 从机:准备好接收读地址了
ARADDR M -> S 读取的源地址
ARPROT M -> S 保护类型

读数据 (Read Data - R)

信号名 方向 (M->S) 描述
RVALID S -> M 从机:读数据有效
RREADY M -> S 主机:准备好接收读数据了
RDATA S -> M 读到的数据
RRESP S -> M 读响应状态(数据是否读成功)

在 Zynq 里,用 AXI-Lite 让 ARM 指挥 FPGA (改参数),用 AXI-Stream 让 FPGA 处理数据 (FFT),用 AXI-Full 让 FPGA 存取内存 (DMA)。

相关推荐
民乐团扒谱机3 天前
【微实验】仿AU音频编辑器开发实践:从零构建音频可视化工具
算法·c#·仿真·audio·fft·频谱
Wishell20153 天前
FPGA教程系列-Vivado AXI4-Stream Data FIFO核解读测试
仿真
Wishell20156 天前
FPGA教程系列-Vivado AXI4-Stream接口解读
仿真
民乐团扒谱机7 天前
十字路口交通信号灯控制器设计(Multisim 电路 + Vivado 仿真)
单片机·fpga开发·verilog·状态机·仿真·时序逻辑·multism
Wishell20157 天前
FPGA教程系列-Vivado AXI4-Stream自定义IP核
仿真
智行众维9 天前
【用户心得】SCANeR™Studio学习笔记(六):人因工程Pack——一站式搞定驾驶模拟的多模态数据同步
笔记·学习·自动驾驶·汽车·仿真·scaner·人因工程
世冠科技9 天前
建模仿真技术成为汽车产教融合新引擎,世冠科技董事长李京燕发表主题报告
仿真·国产软件
Wishell201510 天前
FPGA教程系列-Vivado Aurora 8B/10B 例程解读
仿真
Wishell201511 天前
FPGA教程系列-Vivado Aurora 8B/10B IP核设置
仿真