AHB5 传输协议:两拍流水线、突发、两周期错误与独占访问
更新时间:2026-09-25。本篇是「集成电路大类 · 芯片设计 · 片上总线」序列里的枢纽深文。基础流水线与 HREADY 机制建议先读 AHB-Lite 流水线与 HRESP,多主互连见 AHB 多层总线矩阵,原子操作的旧机制见 AHB Locked 锁定传输。本篇聚焦 AMBA 5 AHB(IHI 0033,工程上习惯叫 AHB5)本身:传输怎么一拍接一拍流动、突发怎么推进、错误怎么报、没有了 Locked 之后原子操作靠什么完成。
本文要回答的问题
- AHB5 的地址相位与数据相位如何重叠成两级流水线,HTRANS 四个编码各干什么?
- HBURST 突发类型怎么推进地址,BUSY 和从机反压差在哪?
- HPROT 在 AHB5 里扩展出哪些内存属性,HRESP 为什么错误必须维持两拍?
- exclusive 独占传输的握手怎么走,AHB5 相对 AHB2 到底改了什么?
- 写 master 和 slave 的状态机时,哪些状态和转移是协议硬性要求的?
一、单组总线 + 两级流水线
AHB5 沿用 AHB 一贯的形态:一组共享线分时承载地址和数据,没有 AXI 那样的五通道分离。它获得吞吐的方式是把每笔传输拆成地址相位(address phase)和数据相位(data phase),让相邻两笔的两个相位在时间上错开一拍重叠起来。
主机在一个时钟沿驱动 HADDR、HWRITE、HSIZE、HBURST、HPROT、HTRANS 等地址/控制信号,这些信号在整个下一拍构成地址相位;再下一拍,被选中的 slave 用 HRDATA(读)或采样 HWDATA(写)完成数据相位。于是 slave 在处理第 N 笔数据的同一拍,主机总线上已经放上第 N+1 笔的地址。零等待态下每个时钟沿都能启动一笔新传输,稳态吞吐 1 笔/拍,而单笔延迟是两拍。

对照图读:拍 1 是 A0 的地址相位,D0 在拍 2 的数据相位返回;拍 2 同时是 A1 的地址相位。三笔独立访问总共占四拍,首尾各有一拍流水填充和排空开销,传输越长这段开销越被摊薄。需要注意写数据的对齐:HWDATA 与地址相位错开一拍,主机必须把写数据留到地址的下一拍才驱动,新手常把 HWDATA 与 HADDR 同拍送出,导致写到错误的从机。
信号面可分三组:地址/控制组(HADDR、HTRANS、HWRITE、HSIZE、HBURST、HPROT、HNONSEC、HMASTER)、数据组(HWDATA、HRDATA、HSIZE 同时决定每拍字节数)、握手组(HREADY、HRESP、HEXOKAY、HSEL)。AHB5 新增的正是握手组里的独占响应与安全/属性信号,后文逐一说。
再补充两条容易忽略的流水细节。其一,读写共用同一组数据线,写传输的 HWDATA 在地址相位之后那拍由主机驱动,而读传输的 HRDATA 在同一时间由从机驱动,靠 HWRITE 区分方向,总线矩阵在该拍据此切换数据 MUX;矩阵设计若漏切,会出现从机同时被驱动的总线冲突。其二,流水节拍是「可停顿」而非「可乱序」:HREADY 一旦拉低,地址相位与数据相位一起冻结,没有任何信号允许后发的传输先完成,这与 AXI 的 outstanding、乱序返回形成鲜明对比,也意味着 AHB5 的验证模型本质上是一个顺序 FIFO,复杂度可控。
二、HTRANS:IDLE/BUSY/NONSEQ/SEQ 四态
HTRANS 是两拍流水能正确推进的核心控制:它告诉 slave 当前地址相位上的 HADDR 是不是一笔真传输、以及它在突发里处于什么位置。
- IDLE(00):空闲。总线上没有有效传输,slave 应一律回 OKAY 且不做任何实际动作。复位后默认状态就是 IDLE。
- BUSY(01):主机在突发中途主动「踩刹车」。本拍 HADDR 上的地址不是有效传输,slave 继续等待,但要知道自己仍处于一个未结束的突发里。
- NONSEQ(10):非连续传输。单笔传输,或一个突发的第一拍,地址与上一笔无关。
- SEQ(11):连续传输。突发的后续拍,地址由上一拍地址按 HSIZE 步进,slave 可直接推算。
这张主机传输状态机里最容易被误解的是 BUSY 与 HREADY 的分工。BUSY 是主机侧的节流:主机内部数据没准备好(比如 DMA 的源端 FIFO 空了),插入 BUSY 让流水线空转一拍,此时数据相位上是一笔「什么都不做」的传输。HREADY 拉低是从机侧的反压:slave 来不及完成当前数据相位,把数据相位拉长若干拍,地址相位被同步冻结,HADDR/HTRANS/HWDATA 必须全部保持。一个是主机喊「等我」,一个是从机喊「等我」,写验证环境时这两类停顿要分别造场景覆盖。另外两条协议细节:BUSY 只允许出现在突发进行中,单笔传输前后不能用;AHB5 里固定长度突发对 BUSY 的使用比 AHB2 更收敛,插入后恢复的第一拍必须是 SEQ 且地址接上插入前的推进序列。
三、HBURST:突发类型与地址推进
HBURST 编码八类突发:SINGLE(单笔)、INCR(连续不定长)、WRAP4/INCR4、WRAP8/INCR8、WRAP16/INCR16。数字是拍数,INCR 表示地址一直按 HSIZE 线性递增,WRAP 表示地址在一个对齐边界内回卷——先递增到边界,再折回突发首地址继续。WRAP 突发是为 cache line 填充设计的:CPU 实际 miss 的字往往不在行首,先取它、再绕回补齐,缩短关键路径。

图中两者都以字(HSIZE=2)为步进,WRAP4 的边界是 4 字即 16 字节:从 0x24 起步,走到 0x2C 后下一拍折回 0x20,而不是继续到 0x30。INCR4 则笔直走到 0x2C 结束。计算 WRAP 地址可以记一个公式:回卷边界大小 = 拍数 × 每拍字节数,地址在边界内取模。
两条硬规则验证时必查。其一,突发不得跨越 1KB 地址边界:任何突发的全部拍都必须落在同一个 1KB 对齐区间内,这是给 slave 译码留的简化空间,跨边界的需求由 master 拆成两个突发。其二,突发中途 slave 返回 ERROR 后,master 是否继续剩余拍由 master 自己决定,但 slave 必须能容忍两种选择——不能假设错误之后地址相位一定消失。
INCR 不定长突发还有一个专属的收尾问题:因为没有拍数编码,slave 不知道它何时结束,只能靠「下一拍不再是 SEQ」判断——下一拍是 NONSEQ 表示紧跟一个新突发,是 IDLE 表示总线回归空闲。因此 master 绝不能在 INCR 中途悄悄停发又不驱动 HTRANS,总线信号悬空会让 slave 把随机值当 SEQ 继续取数。总线矩阵的定序器(如果实现了 INCR 拍数登记)也必须在 IDLE 或错误收尾时清掉内部计数,否则下一个 master 的第一笔 NONSEQ 会被错配成旧突发的延续。
四、HPROT:从保护控制到完整内存属性
HPROT 在 AHB2/AHB-Lite 时代只有三 bit,表达「这是什么访问、谁发起的、能不能缓冲」;AHB5 把它扩展成七位的内存属性总线,语义与 AXI 的 AxCache/AxProt 对齐,便于在 AHB 与 AXI 桥之间无损翻译:
| 位 | 为 0 | 为 1 | 工程含义 |
|---|---|---|---|
| HPROT[0] | 数据访问 | 指令(opcode)取指 | 区分 D 路/I 路 |
| HPROT[1] | 非特权 | 特权 | 对应 CPU 模式 |
| HPROT[2] | 不可缓冲 | 可缓冲 | 写能否进写缓冲 |
| HPROT[3] | 不可修改 | 可修改 | 互联能否改拍/合并 |
| HPROT[4] | 不查 cache | 查 cache | 查找属性 |
| HPROT[5] | 不分配 | 分配 | 行分配策略 |
| HPROT[6] | 非共享 | 共享 | 是否需一致性维护 |
安全态则由独立信号 HNONSEC 表达(低为 secure),与 HPROT 解耦,这是 TrustZone 方案在 AHB 侧的落点;桥接到 APB 或 AXI 时 HNONSEC 与 AxPROT 的安全位一一对应,互联不能在中途自行改写安全属性。多主矩阵里还有 HMASTER[3:0]:AHB5 把主机标识从 AHB2 的最多 8 个扩到 16 个,slave 可用它给不同主机设访问权限,独占监控器也靠它区分「这是谁的监控记录」。写 RTL 时注意 HPROT 必须与 HADDR 同相、在整个地址相位保持稳定,BUSY 拍上 slave 对它不采样。
五、HRESP:OKAY/ERROR 与两拍错误响应
AHB5 的 HRESP 只保留两个编码:OKAY(00) 正常完成或 IDLE 拍的默认响应;ERROR(01) 传输因地址非法、权限不足或访问控制故障等无法完成。AHB2 时代的 RETRY 和 SPLIT 被彻底删除——那两个编码是单总线服务多主时让从机释放总线用的,有了多层矩阵和独占传输后,它们带来的状态复杂度不再值得。
ERROR 的时序是 AHB 全系列最著名的坑:错误响应必须占两拍。

第一拍从机给 HREADY=0 + HRESP=ERROR:数据相位不结束,同时因为流水线两级,主机在这一拍的地址相位上还放着下一笔地址,必须立刻改成 IDLE。第二拍从机给 HREADY=1 + HRESP=ERROR,错误数据相位正式收尾。只给一拍错误会发生什么?主机在错误那拍同时收到「完成」和「出错」,没有时间撤销地址相位上的下一笔,结果错误处理与后续传输错位——这是真实 silicon 上反复踩过的坑,SVA 检查里应当写死「ERROR 出现时 HREADY 必为低且连续两拍 HRESP 为 ERROR」。还要注意:IDLE 拍即使 HREADY 为高,slave 也只能回 OKAY;空地址区间必须挂 default slave 按两拍规范回 ERROR,否则访问落空地址时无人驱动 HREADY,总线永久挂死。
六、exclusive 独占传输:AHB5 的原子操作方案
AHB5 删除了 Locked 传输(HMASTLOCK 不再是协议的一部分),改用类似 AXI 的独占访问做原子原语。新增两根关键信号:主机在地址相位拉高 HEXCL 表明「这是一笔独占传输」;slave(或互联里的独占监控器)用 HEXOKAY 判决:独占读时返回 1 表示「已记录,开始监控」,独占写时返回 1 表示「监控期间无他人写入、本次写真正生效」,返回 0 表示冲突、写不更新存储,软件需要重试整个序列。

读监控表、检查、放行三步都在监控器内闭环。独占监控器通常做在互联侧(与 AHB 多层矩阵的输出级同处),记录 HMASTER 编号与地址粒度,典型只监控少量几个 word 并带超时清理;普通 slave 不必感知独占语义。
协议对独占监控器还有几条细致约束,写 RTL 和验证环境时值得逐条对照。监控粒度建议按一个 word 对齐:落在同一监控区间内的任何普通写(非独占写也算)都要使记录失效,而不是只比较精确地址,这样与 AXI 独占监控的语义保持一致。监控器在 HREADY 低的等待拍不能丢记录,等待再长也必须维持到数据相位结束。不支持独占的 slave 可以对 HEXCL 传输直接回 HEXOKAY=0,master 看到后应回退到关中断的软件临界区方案,而不是把它当 ERROR 处理——HEXOKAY=0 是「没抢到」而非「出错」,二者在中断上报和软件重试路径上完全不同。若两次独占访问之间有别的主机写过该地址,或监控记录已超时失效,独占写返回 HEXOKAY=0,存储内容不变,master 软件回退重跑「独占读—计算—独占写」循环。与旧 Locked 的哲学差异在 AHB Locked 锁定传输 里有完整对比:Locked 靠冻结整条总线仲裁一段式做完,exclusive 靠监控器「记地址、事后判决」,中间总线可以让给任何人,因此不阻塞无关流量。AXI 侧的同款机制可对照 AXI4 独占访问与 EXOKAY。
七、slave 与 master 状态机怎么落地
把协议收束成可综合的状态机,两侧的结构都很清晰。
slave 一侧的要点是采样时机:必须在 HSEL 有效且 HREADY 为高的时钟沿采样地址相位——HREADY 低的拍总线被冻结,重复采样会把同一笔传输当两笔。进入数据相位后能一拍完成就回 OKAY;需要多拍就拉低 HREADY 保持所有输出;故障则进入两拍错误序列,不可直接从错误拍跳回 ST_SEL。master 一侧的状态机围绕 HTRANS 四态和两级流水展开:内部请求队列非空时发 NONSEQ/SEQ,供给断档时发 BUSY,无请求时 IDLE;并要监视 HREADY——HREADY 低时下一字节地址和 HWDATA 保持,不得推进;收到两拍 ERROR 后熄灭当前突发、上报中断或按软件策略重试。多主场景的授权、HMASTER 时序与 default slave 处理,可结合 AHB 多层总线矩阵 理解;验证这类时序性质的 SVA 写法见 SVA bind 与覆盖收集。
八、AHB5 与 AHB2 的差异汇总
| 维度 | AHB2(含早期完整版) | AHB5(AMBA 5 AHB) |
|---|---|---|
| HRESP | OKAY/ERROR/RETRY/SPLIT | 仅 OKAY/ERROR |
| 原子操作 | Locked,HMASTLOCK 冻结仲裁 | exclusive,HEXCL/HEXOKAY 两段式 |
| HMASTER | 3 bit,最多 8 主 | 4 bit,最多 16 主 |
| HPROT | 2:0,保护属性 | 6:0,含 cacheable/分配/共享内存类型 |
| 安全扩展 | 无原生信号 | HNONSEC 表达安全态 |
| 反压思想 | 从机可 RETRY/SPLIT 释放总线 | 从机只用 HREADY;并发靠多层矩阵 |
| 典型场景 | 早期单核 SoC 骨干 | Cortex-M/M 系安全 MCU、TrustZone 子系统 |
迁移代码时最容易漏三点:旧 slave 里驱动 RETRY/SPLIT 的分支必须删净,AHB5 主机不认识这两个编码;依赖 HMASTLOCK 的临界区要改写成独占读加独占写;HPROT 高位在 AHB2 设计里被默认拉低,直挂 AHB5 矩阵时会被解释成「不可缓存、非共享」,对接 cache 控制器时功能虽不报错但性能塌方。
这一篇在知识体系里的位置
总线全景与取舍见 AMBA 总线入门;下接低速外设的协议转换看 AHB/APB 桥接 和 APB 时序与从机设计;高速对照物是 AXI4 完整协议 与 AXI5 L-CAM 原子更新;独占传输保护的软件原语见 硬件信号量与自旋锁。
总结
AHB5 保持 AHB 单组共享总线、地址相位与数据相位错拍重叠的两级流水骨架:HTRANS 用 IDLE/BUSY/NONSEQ/SEQ 标记传输位置,HBURST 定义 INCR/WRAP 突发且不跨 1KB 边界,HPROT 扩展为七位内存属性、HNONSEC 表达安全态;HRESP 只留 OKAY/ERROR,错误必须按「先 HREADY 低、再 HREADY 高」维持两拍;原子操作从冻结仲裁的 Locked 改为 HEXCL/HEXOKAY 的独占两段式,由监控器记地址、事后判决,不阻塞无关流量——写状态机的关键就是 slave 在 HSEL 且 HREADY 时采样、master 靠 HTRANS 与 HREADY 双向节流。