1. 总线基础:SoC总线概述、总线架构演进、AMBA总线家族介绍

1.1 什么是SoC总线?

说白了,SoC总线就是芯片内部的一条「高速公路」。

你想想看,一个SoC里面塞了多少东西?CPU、GPU、DSP、内存控制器、各种外设……这些模块之间要交换数据,总得有个通道吧?这个通道就是总线。

我刚开始做SoC那会儿,有个老工程师跟我说过一句话,我一直记着:「没有总线,SoC就是一盘散沙。」这话一点不夸张。

总线的作用,简单来说就三件事:

  • 传输数据——把数据从A点搬到B点
  • 地址译码——告诉数据该去哪
  • 协议控制——保证大家按规矩来,别抢道

核心要点:总线是SoC的「骨架」和「血管」。骨架把各个模块连起来,血管让数据流动起来。没有总线,SoC就是个摆设。

1.2 总线架构的演进之路

总线架构不是一天建成的。我入行十几年,亲眼看着它从简单到复杂,从低速到高速。咱们捋一捋这个过程。

1.2.1 单总线架构——最原始的样子

最早的SoC,所有模块都挂在一根总线上。谁想通信,谁就申请占用总线。

听起来挺公平对吧?但问题来了——同一时间只能有一个模块在说话

我在一个老项目里见过这种设计。CPU要读数据,DMA要搬数据,外设要发中断……全挤在一根线上。结果呢?CPU经常等得干着急,性能惨不忍睹。

避坑指南:单总线架构只适合模块少、数据量小的场景。如果你要做高性能SoC,千万别用这种方案。我曾经在一个IoT项目里试过,结果总线带宽成了瓶颈,最后不得不重新设计。

1.2.2 多总线架构——分而治之

后来大家学聪明了:把总线拆开,各走各的道。

比如:

  • CPU和内存走一条高速总线
  • 低速外设走另一条总线
  • 中间用桥接器连接

这样一来,高速模块不堵车,低速模块也不拖后腿。我参与的第一个量产SoC就是这种架构,效果立竿见影。

1.2.3 分层总线与交叉开关——现代SoC的标配

再往后发展,大家发现多总线还是不够灵活。于是出现了分层总线和交叉开关。

分层总线:把总线分成系统总线和外设总线两层。系统总线跑高速,外设总线跑低速,中间用桥接器隔开。

交叉开关:更狠一点——让多个主设备可以同时访问不同的从设备。就像立交桥,各走各的路,互不干扰。

嗯,这里要注意:交叉开关虽然性能好,但面积和功耗也大。选不选它,得看你的项目需求。

1.3 AMBA总线家族介绍

说到SoC总线,绕不开AMBA。这是ARM公司搞的一套总线标准,现在基本是行业标配了。

我这些年做过的SoC,十有八九用的都是AMBA。为什么?因为生态好、工具链成熟、IP多。你想想看,随便找个第三方IP,基本都支持AMBA接口,省了多少事。

1.3.1 AMBA家族成员一览

总线协议 全称 主要用途 特点
AHB Advanced High-performance Bus 高性能模块互联(CPU、内存、DMA) 高带宽、流水线操作、突发传输
APB Advanced Peripheral Bus 低速外设(UART、GPIO、I2C) 简单、低功耗、无流水线
AXI Advanced eXtensible Interface 高性能、高复杂度互联 独立地址/数据通道、乱序传输、支持多主多从
ACE AXI Coherency Extensions 多核缓存一致性 在AXI基础上增加一致性协议
CHI Coherent Hub Interface 大规模多核系统 高带宽、低延迟、网状拓扑

1.3.2 AHB——老当益壮

AHB是AMBA 2.0时代的主力。我最早接触AMBA就是从AHB开始的。

它的特点:

  • 流水线操作:地址阶段和数据阶段可以重叠
  • 突发传输:一次发起,连续传多个数据
  • 多主设备:通过仲裁器决定谁用总线

我记得有个项目,CPU和DMA都挂在AHB上。一开始没注意仲裁优先级,结果DMA频繁抢总线,CPU被饿死了。后来调整了仲裁策略,问题才解决。

小技巧:AHB的仲裁器默认是固定优先级。如果你有多个主设备,建议用轮询仲裁,避免某个设备被饿死。

1.3.3 APB——简单就是美

APB是给低速外设用的。它简单到什么程度?

  • 没有流水线
  • 没有突发传输
  • 只有一个主设备(通常是桥接器)

我刚开始做SoC时,觉得APB太「简陋」了。后来才明白,简单意味着低功耗、小面积。对于UART、GPIO这种慢速设备,APB完全够用,何必用AXI杀鸡用牛刀?

1.3.4 AXI——现代SoC的王者

AXI是AMBA 3.0推出的,现在基本是高性能SoC的首选。

它最牛的地方:

  • 独立通道:读地址、读数据、写地址、写数据、写响应,五个通道各走各的
  • 乱序传输:后面的请求可以先完成,前面的请求可以后完成
  • 多主多从:通过互联矩阵,任意主设备可以访问任意从设备

我在一个AI芯片项目里用过AXI。CPU、GPU、NPU三个主设备同时访问DDR,用AXI的乱序传输,效率比AHB高了不止一倍。

个人经验:AXI虽然强大,但协议复杂。新手容易在「写响应」和「读数据」的顺序上踩坑。我的建议是:先画时序图,再写代码。别问我怎么知道的……

1.3.5 ACE和CHI——多核时代的产物

多核SoC有个头疼的问题:缓存一致性。

比如CPU0改了某个数据,CPU1的缓存里还是旧数据。怎么办?

ACE就是在AXI基础上加了缓存一致性协议。它让多个CPU共享数据时,自动保持缓存同步。

CHI更猛,是ARM最新的总线协议。它支持网状拓扑,适合大规模多核系统。我还没在项目里用过CHI,但看过一些资料,复杂度比AXI高了一个数量级。

1.4 总线选型建议

说了这么多,到底怎么选?

我个人习惯这样判断:

  • 低速外设(UART、GPIO、I2C、SPI)→ APB
  • 中速模块(DMA、以太网、USB)→ AHB
  • 高性能模块(CPU、GPU、DDR控制器)→ AXI
  • 多核系统(需要缓存一致性)→ ACE或CHI

注意:不要为了「炫技」用AXI。如果你的外设只需要APB,就别硬上AXI。面积和功耗都是成本。

1.5 本章知识体系

下面这张图,是我自己总结的总线知识体系。你看一眼,心里就有数了。

SoC总线知识体系 总线概述 架构演进 AMBA家族 • 数据传输 • 地址译码 • 协议控制 • 单总线架构 • 多总线架构 • 分层/交叉开关 • AHB • APB • AXI / ACE / CHI 选型建议:低速→APB | 中速→AHB | 高速→AXI | 多核→ACE/CHI 图1:SoC总线知识体系总览

1.6 本章小结

这一章咱们聊了:

  • 总线是什么——SoC的「高速公路」
  • 总线怎么演进的——从单总线到交叉开关
  • AMBA家族有哪些成员——AHB、APB、AXI、ACE、CHI

我个人觉得,学总线最重要的是理解「为什么」。为什么要有AXI?为什么APB这么简单?想通了这些,你自然就知道怎么选了。

好了,这一章就到这儿。下一章咱们深入AHB,看看它到底怎么工作的。


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