3、常见总线协议概览:APB、AHB、AXI、Wishbone、OCP 的基本特征对比

做网表逆向这么多年,我见过最多的就是这五种总线。说实话,它们就像芯片界的「方言」—— 虽然都在说「数据搬运」这件事,但语法和习惯完全不同。今天我就带你逐个过一遍,顺便聊聊我在逆向中遇到的坑。

3.1 APB:最省资源的「慢速通道」

APB(Advanced Peripheral Bus)是 ARM 公司推出的低速总线。我个人习惯把它叫做「小推车」—— 运力不大,但胜在简单可靠。

核心特征:

  • 只有 1 个主设备(通常是总线桥)
  • 状态机只有 3 个状态:IDLE、SETUP、ACCESS
  • 所有传输需要 2 个时钟周期
  • 无流水线,无突发传输

逆向识别技巧: 在网表中找 PADDR、PWDATA、PRDATA、PENABLE、PSEL 这五个信号。如果看到 PSEL 和 PENABLE 交替拉高,基本就是 APB 没跑了。

💡 我在项目中遇到过:某次逆向一个低功耗 IoT 芯片,发现所有外设寄存器都挂在 APB 上。当时我还在想「怎么这么慢」,后来才意识到——人家根本不需要快,省电才是王道。

3.2 AHB:高性能的「单车道高速路」

AHB(Advanced High-performance Bus)是 ARM 的中间方案。你想想看,APB 太慢,AXI 又太复杂,AHB 正好卡在中间。我经常跟新人说:如果你不确定用啥,先试试 AHB。

核心特征:

  • 支持多个主设备(通过仲裁器)
  • 流水线传输:地址阶段和数据阶段重叠
  • 支持突发传输(4、8、16 拍)
  • 单周期数据传输(无等待时)
信号 方向 说明
HADDR 主→从 地址总线
HWDATA 主→从 写数据总线
HRDATA 从→主 读数据总线
HTRANS 主→从 传输类型(IDLE/BUSY/NONSEQ/SEQ)
HREADY 从→主 从设备就绪信号

⚠️ 我曾经在逆向一个 AHB 总线矩阵时,被 HREADY 信号坑惨了。当时以为 HREADY 拉低就是传输结束,结果发现它只是「暂停」—— 数据还在总线上悬着。嗯,这里要注意:HREADY 低电平时,地址和数据必须保持稳定。

3.3 AXI:复杂但强大的「多车道立交桥」

AXI(Advanced eXtensible Interface)是 ARM 的旗舰总线。说白了,它就是为高性能 SoC 量身定做的。为什么?因为它有 5 个独立的通道,可以同时读写。

核心特征:

  • 5 个独立通道:读地址、读数据、写地址、写数据、写响应
  • 支持乱序传输(通过 ID 标签)
  • 支持非对齐传输
  • 支持独占访问(Exclusive Access)
  • 支持原子操作

逆向识别技巧: 在网表中找 AWADDR、ARADDR、WDATA、RDATA、BVALID 这些信号。如果看到 AWVALID 和 AWREADY 的握手逻辑,基本就是 AXI。

我记得有一次逆向一个 AI 加速芯片,发现它的内存控制器用的是 AXI4。当时我还在想「为什么不用 AHB?」,后来一看带宽需求—— 256 位数据总线,每秒几十 GB 的吞吐量。嗯,AHB 确实扛不住。

3.4 Wishbone:开源界的「瑞士军刀」

Wishbone 是 Silicore 公司(后来被 OpenCores 采用)推出的开源总线。我个人很喜欢它—— 因为它简单、灵活,而且完全免费。你想想看,ARM 的总线要授权费,Wishbone 不用。

核心特征:

  • 支持点对点、共享总线、交叉开关等多种拓扑
  • 两种操作模式:标准模式和流水线模式
  • 支持字节、半字、字等多种数据宽度
  • 信号命名灵活(不同实现可能不同)

💡 我在项目中遇到过:某次逆向一个开源 RISC-V 芯片,发现它的外设总线全是 Wishbone。当时我还在想「这信号命名怎么这么乱」,后来才发现—— Wishbone 允许用户自定义信号名,只要符合协议规范就行。

3.5 OCP:接口标准化的「通用插座」

OCP(Open Core Protocol)是 OCP-IP 组织推出的标准。说白了,它不定义总线结构,只定义接口协议。你可以把它想象成一个「通用插座」—— 不管后面接的是什么总线,接口都是一样的。

核心特征:

  • 完全可配置:数据宽度、地址宽度、突发长度都可调
  • 支持多种传输模式:单次、突发、流水线、乱序
  • 支持线程和标签(用于乱序传输)
  • 支持 sideband 信号(带外控制)

⚠️ 我曾经在逆向一个 OCP 接口时,被它的可配置性搞晕了。同一个 IP 核,在不同 SoC 中可能配置完全不同。所以我的建议是:先找到配置寄存器,搞清楚数据宽度和地址宽度,再开始分析协议。

3.6 五种总线对比总结

下面这张表是我自己整理的,每次做逆向时都会拿出来对照一下:

特性 APB AHB AXI Wishbone OCP
复杂度 极低 中等 低-中 可配置
流水线 地址/数据 5通道独立 可选 可选
突发传输 支持 支持 支持 支持
乱序传输 支持 支持
典型应用 外设寄存器 片上内存 DDR控制器 开源SoC IP复用
逆向难度 ★☆☆☆☆ ★★★☆☆ ★★★★★ ★★☆☆☆ ★★★★☆

3.7 总线协议选择逻辑图

下面这张 SVG 图是我根据多年逆向经验总结的「总线选择决策树」。当你拿到一个芯片网表时,可以按这个逻辑快速判断它用的是哪种总线:

总线协议快速识别决策树 开始分析网表 是否有 AW/AR/W/R/B 五组信号? AXI 总线 有 HADDR/HWDATA? AHB 总线 有 PADDR/PENABLE? APB 总线 有 STB/ACK 握手? Wishbone 总线 OCP 总线 注:本决策树基于常见信号命名惯例,实际网表中可能存在自定义命名 建议结合时钟域、数据宽度、传输模式综合判断

💡 我个人习惯:拿到网表后,先看有没有 AXI 的五组信号。如果没有,再看 AHB 的 HADDR/HWDATA。如果也没有,大概率是 APB 或 Wishbone。至于 OCP,说实话我遇到的比较少,但一旦遇到,就得花时间慢慢啃配置寄存器。

好了,这五种总线的基本特征就讲到这里。每种总线都有自己的「脾气」,逆向时多留个心眼,别被信号命名给骗了。下一节我们会深入 AHB 的协议细节,到时候我会拿一个真实的网表案例来拆解。


公众号:蓝海资料掘金营,微信deep3321