AHB协议简介
AHB版本历史
| Issue(商用名) | 发布年 | 核心变化/新增信号 | 一句话定位 |
|---|---|---|---|
| AMBA 2 AHB(AHB2) | 1999 | 首代 AHB;引入 突发传输、split/retry、多 Master 仲裁(HBUSREQx/HGRANTx/HSPLITx 等) | 高性能多主总线,用于 ARM7/9 时代 |
| AMBA 3 AHB-Lite | 2006 | 去掉 仲裁器 & split/retry,仅支持 单 Master 多 Slave;信号集大幅精简(移除 HBUSREQx/HGRANTx/HSPLITx),面积↓功耗↓ | Cortex-M 主流选择,至今最常用 |
| AMBA 5 AHB(AHB5) | 2015 | 在 AHB-Lite 基础上 做加法: • HNONSEC — 安全/非安全传输 • HEXCL/HEXOKAY — 独占访问(exclusive) • HPROT[6:4] — 扩展存储类型 • HMASTLOCK 保留并细化锁定规则 • User/Parity — 用户信号 & 奇偶校验 |
支持 TrustZone、原子操作,面向 IoT-M 与小型 SoC |
| AMBA 5 Issue B(2021 更新) | 2021 | 文档层面新增: • 写选通 HSTRB(可选) • Signal Width/Validity 规则细化 • Interface Protection Using Parity 章节 |
与 AHB5 信号兼容,增强验证与工具链支持 |
AHB信号
全局信号
| 信号 | 位宽 | 方向 | 说明 |
|---|---|---|---|
| HCLK | 1 | input | 总线时钟,所有时序参考 |
| HRESETn | 1 | input | 低有效异步复位,系统初始化用 |
Master → 总线(地址/控制/数据)
| 信号 | 方向 | 位宽 | 说明 |
|---|---|---|---|
| HADDR[31:0] | output | 32 | 字节地址(可 64/128…) |
| HTRANS[1:0] | output | 2 | IDLE/BUSY/NONSEQ/SEQ |
| HWRITE | output | 1 | 1=写,0=读;突发期间恒定 |
| HSIZE[2:0] | output | 3 | 传输尺寸:byte~1024-bit |
| HBURST[2:0] | output | 3 | SINGLE/INCR4/WRAP4/INCR8/WRAP8/INCR16/WRAP16/INCR(未定义长度) |
| HPROT[3:0] | output | 4 | 基础保护:cacheable/bufferable/priv/user |
| HPROT[6:4] | output | 3 | AHB5 扩展:扩展存储类型 |
| HNONSEC | output | 1 | AHB5:0=Secure,1=Non-secure |
| HEXCL | output | 1 | AHB5:1=独占访问序列 |
| HMASTLOCK | output | 1 | 1=当前传输为锁定序列 |
| HWDATA[31:0] | output | 32 | 写数据,可扩展至 1024 |
Slave → 响应
| 信号 | 方向 | 位宽 | 说明 |
|---|---|---|---|
| HRDATA[31:0] | input | 32 | 读数据 |
| HREADY | input | 1 | 1=上一拍传输完成;0=插入等待 |
| HRESP[1:0] | input | 2 | OKAY/ERROR(AHB-Lite 仅这两态) |
| HEXOKAY | input | 1 | AHB5:独占成功标志 |
解码器/多路复用器
| 信号 | 方向 | 位宽 | 说明 |
|---|---|---|---|
| HSELx | output | 1×N | 每个 slave 独立的片选 |
| HREADYOUT | output | 1×N | 各 slave 的完成指示,经多路复用后成为 HREADY |
可选旁带(AHB5 属性开关打开时才出现)
| 信号 | 方向 | 位宽 | 说明 |
|---|---|---|---|
| PWAKEUP | output | 1 | 低功耗唤醒请求 |
| PUSER[*] | 双向 | 用户定 | 用户自定义旁带 |
| PPARITY | output | 1 | 地址/控制奇偶校验 |
Transfer
basic transfer




transfer type
| HTRANS[1:0] | 名称 | 含义 | 典型用法 |
|---|---|---|---|
| 00 | IDLE | 当前传输无效,主控空闲 | 未获得总线或突发间填充 |
| 01 | BUSY | 主控忙,本次地址/数据无效,但下一拍继续属于同一突发 | 插入等待周期,保持突发连续性 |
| 10 | NONSEQ | 新突发首拍,地址与上一拍不连续 | 单次传输或突发的第一个 beat |
| 11 | SEQ | 突发后续拍,地址按 HBURST/HSIZE 规则连续递增/回环 | 突发第 2~N 个 beat |

Locked transfer
- Locked transfer(锁定传输)是 AHB 为了“原子性”而设计的一种传输方式:
- 在锁定序列期间,总线仲裁器禁止把总线让给任何其他主设备,从而保证当前 master 对同一从设备的多次连续访问不被打断
| 规则 | 内容 |
|---|---|
| 不可被 SPLIT/RETRY | Slave 若支持 SPLIT,也不得对锁定序列返回 SPLIT;否则需用 dummy master 填补,浪费带宽 |
| 仲裁器行为 | 整个锁定序列完成前不能撤销 HGRANT;即使另一主控优先级更高,也必须等待当前 master 发出最后一拍的 HMASTLOCK=0 |
| 建议后续 IDLE | 锁定结束后,协议推荐 master 再发 一拍 IDLE(HTRANS=00),让仲裁器有机会切换,避免总线饥饿 |

HSIZE[2:0]
| HSIZE[2:0] | 位宽 | 描述 |
|---|---|---|
| 000 | 8 bit | Byte |
| 001 | 16 bit | Half-word |
| 010 | 32 bit | Word |
| 011 | 64 bit | Double-word |
| 100 | 128 bit | 4-word |
| 101 | 256 bit | 8-word |
| 110 | 512 bit | 16-word |
| 111 | 1024 bit | 32-word |
HBURST[2:0]
| HBURST | 类型 | 长度 | 地址行为 |
|---|---|---|---|
| 000 | SINGLE | 1 beat | 无突发,单传输 |
| 001 | INCR | 未定义 | 增量突发,长度由主控决定(≥1) |
| 010 | WRAP4 | 4 beats | 4-beat 回卷,边界 = 4×HSIZE |
| 011 | INCR4 | 4 beats | 4-beat 增量,不回卷 |
| 100 | WRAP8 | 8 beats | 8-beat 回卷,边界 = 8×HSIZE |
| 101 | INCR8 | 8 beats | 8-beat 增量 |
| 110 | WRAP16 | 16 beats | 16-beat 回卷 |
| 111 | INCR16 | 16 beats | 16-beat 增量 |
- INCR类型中,从机不知道burst的长度,此时需要通过HTRANS来判断,如果HTRANS一直是SEQ,burst就没有结束;
- 当 HTRANS == IDLE 或 BUSY,并且 下一拍不再出现 SEQ,即可判定 “burst 已结束”
- burst请求中,HADDR可以只发起始地址,后续整个burst中都保持不便;也可以由master发送更新地址
HPROT[3:0]
| 位 | 名称 | 含义(1 = 真) | 典型场景 |
|---|---|---|---|
| [0] | data/opcode | 0 = 取指(opcode),1 = 数据访问 | 调试器区分 I/D 口 |
| [1] | privileged | 0 = User,1 = Privileged (PL1/2) | 用户/内核空间过滤 |
| [2] | bufferable | 1 = 写可缓冲(允许中途响应) | 普通 SRAM |
| [3] | cacheable | 1 = 读可缓存(允许 cache lookup) | DDR、Cache-RAM |
| [4] | allocate | 1 = 建议分配 cache line(AHB5 扩展) | 预取或首次访问 |
| [5] | retry-allocate | 1 = 仅当 miss 时分配(AHB5 扩展) | 流式写缓冲 |
| [6] | secure-ns | 0 = Secure,1 = Non-secure(AHB5 新增) | TrustZone 地址过滤 |
HRESP[1:0]
| HRESP | 名称 | 含义 | 主控必须动作 |
|---|---|---|---|
| 00 | OKAY | 成功完成 | 继续正常流程 |
| 01 | ERROR | 传输失败(地址越权、奇偶错等) | 记录错误,可提前终止突发 |
| 10 | RETRY | Slave 忙,立即重试(不改变地址/控制) | 保持当前 HTRANS 不变,继续重试 |
| 11 | SPLIT | Slave 请求“分块”——释放总线,稍后重新仲裁 | 撤销 HBUSREQ,等待仲裁器再次授权 |
问题1:AHB中INCR对总线的影响
INCR虽然也是一种burst,但是由于burst的长度不确定,因此总线crossbar中,只能将其拆分成单个single trans,此时总线的带宽会大大降低
问题2:AHB/AXI中为什么会有WRAP
WRAP一般用在读cacheline时,如果不WRAP,一次burst可能读到下一个cacheline,但是当前的cacheline数据只读到了高位若干byte,此时会对CPU性能造成影响,通过WRAP,可以保证一次burst,不管其他地址是多少,都可以读到完整的一个cacheline数据

浙公网安备 33010602011771号