第三篇:AXI4传输机制
AXI4协议的核心在于其高效的传输机制,包括基本握手规则、突发传输模式、原子操作以及乱序完成支持。本篇将深入解析这些机制的设计原理和实际应用。
1. 基本传输流程
AXI4通过独立的通道实现读/写操作,所有传输均遵循 VALID/READY握手协议 。
1.1 读操作流程
读地址阶段 :
- 主设备置
ARVALID=1
,发送地址(ARADDR
)、突发长度(ARLEN
)、突发类型(ARBURST
)等信号。 - 从设备在准备好接收地址后置
ARREADY=1
,完成地址握手(ARVALID & ARREADY
同时为高)。
读数据阶段 :
- 从设备返回数据时置
RVALID=1
,主设备在准备好接收数据时置RREADY=1
。 - 每个数据拍需满足
RVALID & RREADY
握手,RLAST=1
表示突发传输结束。
示例时序 (4拍突发读):
Cycle | ARADDR | ARVALID | ARREADY | RDATA | RVALID | RREADY | RLAST
---------------------------------------------------------------
1 | 0x1000 | 1 | 0 | - | 0 | 1 | 0
2 | 0x1000 | 1 | 1 | - | 0 | 1 | 0
3 | - | 0 | 0 | D0 | 1 | 1 | 0
4 | - | 0 | 0 | D1 | 1 | 1 | 0
5 | - | 0 | 0 | D2 | 1 | 1 | 0
6 | - | 0 | 0 | D3 | 1 | 1 | 1
1.2 写操作流程
写地址阶段 :
- 主设备置
AWVALID=1
,发送写地址(AWADDR
)及相关属性。 - 从设备通过
AWREADY=1
确认地址接收。
写数据阶段 :
- 主设备发送数据(
WDATA
)和字节使能(WSTRB
),WLAST=1
标记最后一拍。 - 每次数据传输需满足
WVALID & WREADY
握手。
写响应阶段 :
- 从设备完成数据写入后,返回
BRESP
响应(BVALID=1
)。 - 主设备通过
BREADY=1
确认响应接收。
关键规则 :
- 地址和数据通道可并行操作(例如,地址通道未完成时,数据通道可提前发送数据)。
- 写响应必须在所有数据传输完成后返回。
2. 突发传输(Burst Transfer)
突发传输是AXI4提升带宽的关键机制,单次事务可传输多拍数据。
2.1 突发类型
类型 | 描述 | 应用场景 |
---|---|---|
INCR | 地址按数据宽度递增(线性传输) | 访问连续内存(如数组、DMA) |
WRAP | 地址递增,到达边界后回绕到起始地址 | 缓存行填充(Cache Line Fill) |
FIXED | 地址固定不变 | 重复写入同一寄存器或FIFO |
2.2 突发参数配置
- 突发长度(Burst Length,
AxLEN
) :
定义传输的数据拍数,AXI4支持1256拍(AXI3仅支持116)。 - 数据宽度(
AxSIZE
) :
每拍数据的字节数(如AxSIZE=2
表示4字节)。
必须小于或等于总线宽度(例如,64位总线最大支持AxSIZE=3
,即8字节)。
2.3 地址计算示例
- INCR突发(4拍,数据宽度4字节) :
起始地址:0x1000
地址序列:0x1000 → 0x1004 → 0x1008 → 0x100C
- WRAP突发(4拍,数据宽度4字节,边界16字节) :
起始地址:0x100C
地址序列:0x100C → 0x1010 → 0x1000 → 0x1004
3. 原子操作与乱序传输
3.1 原子操作(Atomic Operations)
AXI4通过 独占访问(Exclusive Access) 实现原子读-修改-写操作,用于多核同步。
- 独占读 :主设备发送
AxLOCK=1
标记独占读请求,从设备记录该地址的访问状态。 - 独占写 :主设备在独占读后发起独占写,从设备检查地址是否未被修改。
若成功:返回EXOKAY
响应。
若失败:返回SLVERR
,表示其他设备已修改数据。
应用场景 :
实现自旋锁(Spinlock)、信号量(Semaphore)等多核共享资源保护。
3.2 乱序传输(Out-of-Order Completion)
- 事务ID(
AxID
) :
主设备为每个事务分配唯一ID,从设备可乱序返回响应,但同一ID的事务需按顺序完成。 - 示例 :
主设备发送事务ID=1(地址A)和ID=2(地址B)。
从设备可能先完成ID=2的事务,再完成ID=1的事务。
4. 传输机制优化技巧
4.1 提升吞吐量
- 流水线化 :地址通道和数据通道并行操作,减少等待时间。
- 多未完成事务(Multiple Outstanding Transactions) :
主设备在等待响应时继续发起新事务,充分利用总线带宽。
4.2 避免死锁
- 依赖关系管理 :
若事务B依赖事务A的结果,需保证事务A先完成(通过相同ID或软件同步)。 - 超时机制 :
设计硬件监控响应超时,防止因从设备故障导致系统挂起。
5. 实际案例分析
5.1 缓存行填充(Cache Line Fill)
- 场景 :CPU缓存未命中时,通过AXI4突发读(WRAP类型)从DDR读取64字节缓存行。
- 配置 :
ARBURST=WRAP
,ARLEN=7
(8拍突发),ARSIZE=3
(8字节/拍)。
地址从0x1000
开始,回绕边界为64字节(0x1000 ~ 0x103F
)。
5.2 DMA数据传输
- 场景 :DMA控制器通过AXI4突发写(INCR类型)将数据从外设搬运到内存。
- 优化 :
设置较大突发长度(如AWLEN=255
)减少地址握手次数。
使用多未完成事务实现“乒乓缓冲”(Ping-Pong Buffer)连续传输。
6. 总结
- 总结 :AXI4通过突发传输、原子操作和乱序完成机制,显著提升了总线效率,适用于高性能计算场景。
附录:突发传输配置速查表
参数 | INCR突发 | WRAP突发 | FIXED突发 |
---|---|---|---|
地址变化 | 线性递增 | 递增并回绕 | 固定不变 |
典型应用 | 内存连续访问 | 缓存行填充 | FIFO/寄存器写入 |
突发长度 | 1~256 | 2、4、8、16(2^n) | 任意 |