AHB2 与 AHB5 差异:SPLIT/RETRY 移除、HMASTLOCK 退役、exclusive 新增与迁移清单
更新时间:2026-09-25。本文是「集成电路大类 · 芯片设计」片上总线主题簇里的一篇长尾文。AHB5 传输协议 系统讲过两拍流水与突发,AHB-Lite 流水线与 HRESP 讲过等待态,AHB Locked 锁定传输 讲过旧原子机制。本篇只解决一件事:手里有一套 AHB2(AMBA 2/3 完整版 AHB)RTL,要挂到 AHB5 矩阵上,到底哪些信号和状态机必须改。
本文要回答的问题
- AHB2 的 HRESP 四种编码到 AHB5 为什么少了一半,RETRY/SPLIT 的功能由谁接管?
- HMASTLOCK 在 AHB5 里还是不是合法信号,旧的读改写临界区怎么改?
- exclusive 独占传输新增了哪些信号,主机和监控器怎么握手?
- HPROT 从 3 bit 扩到 7 bit,旧设计直接 tie 0 会有什么后果?迁移时按什么清单逐项验收?
一、HRESP:四种响应砍到两种
AHB2 的 HRESP[1:0] 有四个编码:OKAY(00)、ERROR(01)、RETRY(10)、SPLIT(11)。后两者是单总线多主时代的产物:慢速 slave 可以用 RETRY 让主机先释放总线、稍后重发;SPLIT 更进一步,slave 记住是哪个主机的事务、数据备好后由仲裁器单独唤回该主机。AHB5 把这两个编码彻底删除,只保留 OKAY 和 ERROR。
理解这次删除,要先看清旧机制给系统添了多少负担。主机收到 RETRY 后必须释放总线、重新参与仲裁,再把完全相同的地址相位原封不动驱动一遍;SPLIT 更重:仲裁器要为被拆分的主机屏蔽正常授权轮换,slave 数据备妥后通过 HSPLIT 位图点名唤回,主机、仲裁器、slave 三处各维护一张事务身份表,任何一处失配就是丢事务或总线挂死。在只有单层共享总线的年代这是必要的妥协,多层矩阵普及后,每个主机拥有独立的地址/数据通路,慢速从机卡住的只是它自己那一层,其他主机的流量根本不受影响,这套三端配合的身份机制就失去了存在理由。
功能并没有消失,而是换了承载者:slave 需要时间时直接拉低 HREADY 把数据相位拉长,不必释放总线;多主并发则交给 AHB 多层总线矩阵,每个主机有自己的地址通路,谁也不必为谁让路。迁移时旧 slave 里驱动 RETRY/SPLIT 的分支必须删净——AHB5 主机不译码这两个值,2'b10/2'b11 会被当作非法编码,形式验证和总线监控 SVA 都会报错。ERROR 的两拍时序(先 HREADY=0、再 HREADY=1,HRESP 两拍均为 ERROR)两个版本一致,无需改动。
二、HMASTLOCK 退役:从冻结总线到独占判决
第二个必改项是原子操作。AHB2 master 靠 HMASTLOCK 拉高一段连续序列,仲裁器在该窗口内冻结 HGRANT、不切换主人,典型的读改写(RMW)信号量由此得到总线级原子性。AHB5 里 HMASTLOCK 不再属于协议信号,LockED 传输整体被 AXI 风格的 exclusive 独占取代。注意一个常见误解:某些 AHB5 IP 仍保留一根同名引脚做内部用途,但它在总线级没有任何仲裁语义,不能当作迁移成功的依据。
新增两根信号:master 在地址相位拉高 HEXCL 声明独占;slave 或互联侧的独占监控器用 HEXOKAY 判决——独占读返回 1 表示已开始监控,独占写返回 1 表示监控期间无他人写入、数据真正落盘,返回 0 表示冲突、存储不变,软件重跑整个序列。旧代码的改法是把「锁定读—锁内计算—锁定写」拆成「独占读—锁外计算—独占写」,中间不再占用总线。还要改软件认知:HEXOKAY=0 是「没抢到」而不是 ERROR,中断上报路径不能接错;不支持独占的 slave 恒回 0,此时应回退到关中断的软件临界区。两种哲学的完整对比见 AHB Locked 锁定传输,AXI 侧同款机制见 AXI4 独占与原子访问。
三、HPROT 扩展:3 bit 属性变 7 bit,tie 0 会性能塌方
AHB2 的 HPROT[2:0] 只表达数据/取指、非特权/特权、不可缓冲/可缓冲。AHB5 扩展为 HPROT[6:0],低三位语义保留,新增可修改(modify)、查 cache(lookup)、分配(allocate)、共享(shareable)四位,与 AXI 的 AxCache/AxProt 对齐,桥接时可无损翻译。安全态则交给独立信号 HNONSEC,不再塞进保护属性。
| 信号/维度 | AHB2 | AHB5 | 迁移动作 |
|---|---|---|---|
| HRESP | OKAY/ERROR/RETRY/SPLIT | 仅 OKAY/ERROR | 删除 RETRY/SPLIT 驱动与译码分支 |
| 原子操作 | HMASTLOCK 冻结仲裁 | HEXCL/HEXOKAY 独占两段式 | 重写 RMW 序列,例化独占监控器 |
| HPROT | [2:0] 保护控制 | [6:0] 内存属性 | 按 master 真实属性驱动高位,勿 tie 0 |
| HMASTER | 3 bit,最多 8 主 | 4 bit,最多 16 主 | 扩宽位宽,更新权限译码 |
| 安全扩展 | 无 | HNONSEC + HMASTER 安全扩展 | TrustZone 系统补接安全信号 |
| slave 等待 | HREADY 或 RETRY/SPLIT | 仅 HREADY | 慢设备改为 HREADY 保持 |
HPROT 最大的坑是迁移时图省事把高位全部 tie 0:协议上完全合法,但语义是「不可缓存、不可修改、不分配、非共享」,挂到带 cache 的 AHB5 系统后,每次访问都穿透到总线,功能不误但性能塌方,且这种问题很难在不带流量模型的仿真里暴露。正确做法是让 master 按其真实身份驱动全部七位,取指与数据、特权与非特权至少要分开。
四、迁移检查清单
把改动收束成一份可逐项打勾的验收单:
| 检查项 | 通过判据 |
|---|---|
| slave HRESP 编码 | 全设计 grep 不到 RETRY/SPLIT 编码值,非法值有 default 分支 |
| ERROR 时序 | SVA:ERROR 连续两拍,第一拍 HREADY=0、第二拍 HREADY=1 |
| HMASTLOCK 残留 | master 无该输出;如有同名内部信号,确认未接仲裁器 |
| 独占序列 | 独占读后必有同地址独占写;HEXOKAY=0 时有界重试,不当 ERROR |
| 独占监控器 | 按 word 粒度失效,等待拍不丢记录,带超时清理 |
| HPROT | 七位全部按属性驱动;cache 主流量行带 cacheable/allocate 编码 |
| HMASTER/HNONSEC | 位宽扩到 4 bit;安全属性与 AXI 桥 AxPROT 一一对应 |
| default slave | 空地址区间两拍回 ERROR,HREADY 不会无人驱动 |
仲裁器一侧还要复查:AHB2 仲裁逻辑里读 HMASTLOCK、处理 SPLIT 唤回表( HSPLIT x)的整段电路在 AHB5 矩阵中都是死逻辑,保留不仅浪费面积,还可能在配置错误时重新生效,应连同相关寄存器一起删除。AHB/APB 桥 转发时也要确认不会把旧的锁定序列语义带进外设侧。
这一篇在知识体系里的位置
AHB5 全协议见 AHB5 传输协议,两拍流水与等待态见 AHB-Lite 流水线与 HRESP,旧锁定机制的时序细节见 AHB Locked 锁定传输,多主并发承载者见 AHB 多层总线矩阵,总线选型全景见 AMBA 总线选型。
总结
AHB2 迁移 AHB5 有四处硬改动:HRESP 删除 RETRY/SPLIT、只留 OKAY/ERROR,等待归还 HREADY、并发归还多层矩阵;HMASTLOCK 锁定传输退役,临界区改写成 HEXCL/HEXOKAY 的独占读—计算—独占写,HEXOKAY=0 是冲突重试而非错误;HPROT 从 3 bit 扩为 7 bit 内存属性,高位 tie 0 合法但会导致全系统缓存失效、性能塌方,HMASTER 同步扩到 4 bit 并新增 HNONSEC 安全信号;验收时按编码删除、两拍错误、独占握手、属性驱动、default slave 五类检查逐项过 SVA,旧仲裁器里的 SPLIT 唤回逻辑必须作为死逻辑整体清除。