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

image
image
image
image


transfer type

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

image


Locked transfer

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

image


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数据

posted @ 2025-11-21 17:57  刘朝锋  阅读(153)  评论(0)    收藏  举报