
声明:如有雷同,纯属抄袭。
其他的就不赘述了,之前研究过。
AXI4-Lite总线协议的特性如下:
- 事务传输突发长度为1
- 每次传输只能传输一个数据
- 所有访问都是不可修改(Non-modifiable),不可缓冲(Non-bufferable)
- 不支持专属访问(Exclusive access)
AXI4-Lite比起AXI4-Full总线来说,由于每次只传输一个收据,传输效率低了很多。比较适用的场景是单次访问某个寄存器(地址寻址),类似于IIC总线的单次读写。在SOC系统或者 ZYNQ 中比较常用。
AXI4-Lite定义了 5 条通道:
写操作(3个通道)
读操作(2个通道)

AXI 是基于通道(Channel) 的协议。可以把通道想象成单行道,数据和控制信号在上面流动。
AXI 读取传输 (Read Transaction)流程: “我要读这个地址” -> “给你数据”
0x1000 开始的数据”。关于“突发 (Burst)”:
AXI 写入传输 (Write Transaction)流程: “我要写这个地址” -> “这是数据” -> “写好了”
0x2000 写数据”。为什么写需要 3 条通道,读只要 2 条?效率与带宽利用。
写操作 (Write): 数据是发往从机的。数据发完了,主机怎么知道从机是不是真的写进去了?所以必须有一个专门的通道(写响应通道 B)来回传一个“回执单”。
读操作 (Read): 数据是从从机回来的。
既然从机已经在发数据了,为什么不顺便把“状态(Status)”贴在数据旁边一起发回来呢? 在读数据通道 ® 中,除了 RDATA (数据线),还有一组信号叫 RRESP (读响应)。
握手信号:VALID 和 READY, 这是 AXI 的灵魂,所有通道都有这就两根线。
握手的时序,与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 个字节,其他字节不管”。假设数据位宽为 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)。
