一、片上互连基础:从总线到网络的演进之路
各位同学,咱们今天聊的这块内容,可以说是整个SoC设计的「血管系统」。没有它,CPU再强、内存再大,数据也传不过去。我做了十几年芯片架构,见过太多因为互连设计翻车的案例——嗯,咱们今天就把这些坑一个个说清楚。
1.1 总线架构基础:AHB/APB/AXI
先说说最基础的总线协议。你想想看,一个SoC里几十个模块,怎么让它们规规矩矩地传数据?总线就是干这个的。
APB(高级外设总线)
这玩意儿最简单。我习惯叫它「慢速小老弟」。专门挂那些不着急的外设——UART、GPIO、I2C这些。特点就一个字:省。面积小、功耗低、控制逻辑简单。
- 地址和数据分开传输
- 每次传输至少两个周期
- 不支持流水线
- 最大支持32位数据宽度
AHB(高级高性能总线)
AHB就比APB快多了。它支持流水线操作,说白了就是「一边传数据,一边准备下一次传输」。我在项目中常用它挂SRAM控制器、DMA这类高带宽设备。
// AHB传输时序示意(伪代码)
if (HREADY && HTRANS == NONSEQ) {
// 开始一次新的突发传输
address = HADDR;
data = HWDATA;
// 同时准备下一次传输的地址
next_address = HADDR + 4;
}
| 特性 | APB | AHB | AXI |
|---|---|---|---|
| 流水线 | 不支持 | 支持 | 支持 |
| 数据宽度 | 8/16/32位 | 32/64/128位 | 8~1024位 |
| 突发传输 | 不支持 | 支持 | 支持 |
| 乱序传输 | 不支持 | 不支持 | 支持 |
AXI(高级可扩展接口)
AXI是ARM公司搞出来的「大杀器」。它最大的特点是——地址、数据、控制通道分离。说白了就是「多条高速公路同时跑」。我建议新手特别注意它的乱序传输特性,这个最容易出bug。
1.2 交叉开关(Crossbar)设计
总线搞定了单对单传输,但多主多从怎么办?交叉开关就是干这个的。说白了,它就是一个「智能交换机」。
我设计Crossbar时,最关注三个指标:
- 仲裁策略:固定优先级还是轮询?我一般用加权轮询,公平性和性能都能兼顾
- 数据路径:全交叉还是部分交叉?面积和性能的trade-off
- 流水线深度:太浅频率上不去,太深延迟受不了
核心设计要点:
- 地址解码器:决定数据该走哪条路
- 仲裁器:谁先走?谁等一等?
- 数据多路选择器:把数据送到正确的目的地
1.3 环形总线与Mesh网络
当SoC规模变大,Crossbar就不够用了。为什么?你想想看,16个主设备全交叉,光连线就够你受的。这时候就该上环形总线了。
环形总线(Ring Bus):
- 每个节点只连两个邻居
- 数据沿着环转圈
- 延迟随跳数增加
- 适合中等规模SoC(8-16个节点)
我记得有个项目,用环形总线连接12个CPU核。刚开始觉得挺完美,结果发现两个对角的核通信,延迟大得离谱。后来加了捷径(shortcut),才把延迟降下来。
Mesh网络:
Mesh就更灵活了。每个节点可以往四个方向走,说白了就是「网格状的高速公路」。我建议做大规模众核芯片的同学重点关注这个拓扑。
1.4 NoC(片上网络)基础概念
NoC是当前最热门的互连方案。它借鉴了计算机网络的思想——把数据包化,通过路由节点转发。
NoC的核心组件:
- 路由器(Router):负责数据包的转发和路由
- 网络接口(NI):把总线协议转换成数据包
- 链路(Link):连接路由器的物理通道
NoC的三大优势:
- 可扩展性:加节点就像加积木
- 并行性:多条数据流可以同时走
- 模块化:每个路由器设计可以复用
知识体系总览
下面这张图,是我梳理的本章知识结构。建议你保存下来,后面学完再回来看,会有更深的理解。
这张图把咱们今天讲的内容串起来了。从最基础的APB/AHB/AXI总线,到Crossbar和环形总线,再到NoC。每个层级都有它适用的场景,别搞混了。
好了,第一章的内容就到这儿。记住我今天说的——互连设计没有银弹,关键是根据你的SoC规模和应用场景,选最合适的方案。下一章咱们深入聊聊AXI协议的细节,特别是那些容易踩坑的地方。
公众号:蓝海资料掘金营,微信deep3321