片上总线 AMBA 入门:AXI、AHB、APB 一句话区别,为什么模块间要靠总线
更新时间:2026-09-05。本文是「集成电路大类 · 芯片设计」入门层(beginner)第二十一篇新正文。IP 核是什么 说买来的 IP 要靠「片上总线」接进 SoC。一颗 SoC 里有 CPU、存储控制器、几十个外设,它们之间要传数据、CPU 要配置外设——如果两两拉线会乱成蜘蛛网。标准做法是用一套片上总线协议,最主流的就是 Arm 定义的 AMBA(AXI/AHB/APB)。实战细节见 片上总线 AMBA 实战。
本文要回答的问题
- 模块之间为什么不能直接连线,非要一套「总线」?
- master(主设备)和 slave(从设备)是什么角色?
- AXI、AHB、APB 三个名字总一起出现,分别用在哪?
- CPU 是怎么「读写」一个外设寄存器的?
一、为什么需要片上总线
SoC 里模块众多:CPU 要读 DDR、要配置 UART/USB/各种控制器,DMA 要搬数据,多个主设备还可能同时想访问同一资源。如果每个模块对每个模块单独拉线,连线数量爆炸、也没法扩展。
总线/互连的作用就是提供一套标准化的「通信规则」:规定地址、数据、读写控制、响应怎么传,谁发起、谁响应、冲突怎么仲裁。这样任何模块只要实现了标准总线接口,就能像「标准 USB 设备」一样即插即用地挂上去(见 IP 核是什么)。
二、主设备 master 与从设备 slave
- 主设备(master):主动发起读写传输的一方,如 CPU、DMA、GPU;
- 从设备(slave):被动响应、被访问的一方,如 UART/GPIO 等外设、存储器、配置寄存器;
- 互连(interconnect):在多个 master 和多个 slave 之间做路由和仲裁(多个 master 同时请求时决定谁先用),见 三个最常见基础模块(仲裁器/握手)。
一个典型场景:CPU 想往 UART 发一个字节,就在总线上发起一次「写」,地址指向 UART 的发送寄存器、数据是那个字节;UART 这个 slave 收到后把数据发出。这就是内存映射 I/O(memory-mapped I/O)——外设寄存器被编进统一地址空间,CPU 用和访问内存一样的 load/store 指令访问它们(见 寄存器表与地址解码)。
三、AXI / AHB / APB 一句话区别
AMBA 家族按「性能高低、复杂度」分工,一张表看清:
| 总线 | 定位 | 特点 | 连什么 |
|---|---|---|---|
| AXI(AXI4/AXI4-Lite/AXI-Stream) | 高性能主干 | 读/写各有独立通道(共五个通道)、支持突发 burst、可多笔 outstanding、甚至乱序返回;AXI-Lite 是简化的寄存器配置版,AXI-Stream 是流式数据版 | CPU↔DDR、GPU/NPU、高速 IP |
| AHB | 上一代高性能总线 | 单时钟沿、共享总线、性能不错但不如 AXI 灵活;老设计/子系统常用 | 中等带宽模块(现多被 AXI 取代) |
| APB | 低速、简单、低功耗 | 协议简单、无突发、接口少、面积小,通常不追求高性能 | UART、I2C、SPI、GPIO、定时器等配置型外设 |
记忆法:又快又复杂的大块头走 AXI,一大堆慢吞吞的小外设走 APB。
四、桥(bridge)与现代互连
高性能主干(AXI)和低速外设总线(APB)速度、协议都不同,中间用一个 AXI-to-APB 桥(bridge) 做协议转换:CPU 通过 AXI 发访问,桥把它翻译成 APB 时序去配外设。这样既给了高速路径带宽,又让成百个慢外设共享简单省电的 APB。
随着 SoC 规模变大,单一共享总线变成瓶颈,现代芯片多用片上网络(NoC,Network on Chip)——把数据打成包、在芯片里像网络一样路由,支持多对多并行通信;但对外暴露的接口仍是 AMBA AXI 这类标准协议。
五、两类通信:内存映射 vs 数据流
片上通信其实有两种典型模式,AMBA 都覆盖:
- 内存映射传输(AXI/AHB/APB):带地址的读写,CPU 配置寄存器、访问存储器——有「地址」概念;
- 数据流传输(AXI-Stream / valid-ready 握手):大批量数据持续流动(如视频像素、网络包),不需要地址,靠 valid/ready 两根握手信号实现「发送方说数据有效、接收方说我准备好」,天然支持反压(接收方来不及就让发送方停)。这是 FIFO、DMA、流水线之间传数据的基础(见 三个最常见基础模块)。
六、这一篇在知识体系里的位置
- 想看 AXI 五通道、APB 时序、桥怎么设计 → 片上总线 AMBA 实战;
- 想理解 CPU 怎么靠一组寄存器驱动外设 → 寄存器表与地址解码、怎么读芯片手册;
- 想看模块间数据流的 valid/ready、FIFO、仲裁 → 三个最常见基础模块、中断与 DMA;
- 想知道这些总线接口 IP 从哪来 → IP 核是什么。
总结
一句话总结:片上总线是 SoC 里模块互连和 CPU 配置外设的标准通道,避免两两拉线的爆炸并让带标准接口的 IP 即插即用,Arm 的 AMBA 是事实标准——其中 master(CPU/DMA 等主动发起者)通过互连(含仲裁/路由)访问 slave(外设/存储器),外设寄存器被编进统一地址空间、用内存映射 I/O 像访问内存一样读写;三种总线按性能分工:AXI 是高性能主干(读写五通道、支持突发 burst 与多笔 outstanding,连 CPU/DDR/高速 IP,AXI-Lite 用于寄存器配置、AXI-Stream 用于流式数据),AHB 是上一代高性能总线,APB 则简单低速省电、专门挂 UART/I2C/GPIO 等配置型小外设,中间用 AXI-to-APB 桥转换,超大规模再演进为片上网络 NoC;通信上除了带地址的内存映射读写,还有基于 valid/ready 握手、支持反压的数据流传输,是 FIFO/DMA/流水线传数的基础。