4、系统架构设计:芯片顶层架构(SoC架构)、总线架构(AXI/CHI)、存储层次设计(Cache、SRAM、DDR)

好,我们进入第四讲。这一讲可以说是整个通信芯片设计的骨架。你想想看,算法和协议是灵魂,那系统架构就是支撑灵魂的骨架。骨架搭不好,后面再怎么优化都白搭。

我个人习惯,做系统架构设计时,脑子里先画三张图:一张是SoC顶层框图,一张是总线拓扑图,还有一张是存储层次图。这三张图定下来,芯片的物理轮廓基本就清晰了。

4.1 SoC顶层架构:把功能模块拼起来

SoC架构,说白了就是决定「谁跟谁说话,怎么说话」。通信芯片的SoC,通常包含这几个核心模块:

  • 处理器子系统:ARM Cortex-A系列或RISC-V,负责跑协议栈和控制面。
  • 数字基带处理引擎:专门为物理层算法设计的硬件加速器,比如FFT、LDPC编解码。
  • 模拟前端接口:连接ADC/DAC,处理射频数据。
  • 内存控制器:管理DDR和片上SRAM。
  • 外设接口:PCIe、Ethernet、USB等。

我在项目中遇到过一个问题:处理器和基带引擎抢总线带宽,导致控制面响应延迟飙升。后来怎么解决的?把基带引擎的数据通路和控制通路分开,数据走专用DMA,控制走AXI-lite。嗯,这个经验后面会细说。

关键原则:SoC架构设计要遵循「数据流驱动」原则。先画数据流图,再分配模块位置。别先想着怎么连,先想数据怎么走。

4.2 总线架构:AXI与CHI的选择

总线架构是SoC的血管。选对了,血流顺畅;选错了,到处堵车。

4.2.1 AXI总线:成熟可靠的老将

AXI(Advanced eXtensible Interface)是ARM的AMBA协议家族的一员。它支持独立地址/数据通道、乱序传输、突发传输。对于大多数通信芯片来说,AXI4已经够用。

AXI的几个关键特性:

  • 五个独立通道:读地址、读数据、写地址、写数据、写响应。每个通道都是握手机制。
  • 乱序传输:支持ID标识,不同ID的事务可以乱序完成。
  • 突发长度:最大256拍,适合大数据块搬运。

我曾经踩过一个坑:AXI的写响应通道如果处理不当,会导致死锁。具体来说,如果写数据通道和写响应通道的FIFO深度不匹配,当写数据堆积时,响应通道可能被堵死。解决办法是保证响应通道的深度至少能容纳所有未完成的写事务。

实战技巧:AXI总线设计时,建议把地址通道的FIFO深度设为16,数据通道设为64。这个比例是我在多个项目中验证过的,基本不会丢数据。

4.2.2 CHI总线:高性能场景的利器

CHI(Coherent Hub Interface)是ARM新一代总线协议,专门为多核处理器和一致性设计。它比AXI复杂得多,但性能也强得多。

CHI的核心优势:

  • 全一致性:支持硬件缓存一致性,不需要软件刷cache。
  • 高带宽:每个通道256位数据位宽,频率可以跑到2GHz以上。
  • 低延迟:采用请求-响应-数据的三阶段流水线。

但CHI也有代价:实现复杂度高,面积大,功耗高。我建议,如果你的芯片只有1-2个处理器核,用AXI就够了。如果超过4个核,或者需要硬件一致性,再考虑CHI。

特性 AXI4 CHI
一致性支持 需要外部一致性逻辑 原生支持
最大频率 1GHz左右 2GHz+
实现复杂度
典型应用 中低端SoC 高端多核SoC

4.3 存储层次设计:Cache、SRAM、DDR

存储层次设计,说白了就是「用最快的速度,把数据送到需要的地方」。通信芯片对延迟和带宽极其敏感,存储设计直接决定性能。

4.3.1 Cache:处理器的高速缓存

Cache是处理器的「贴身秘书」。它存储最近使用的数据和指令,减少访问DDR的次数。

Cache设计的关键参数:

  • 大小:32KB到1MB不等。太大浪费面积,太小命中率低。
  • 关联度:直接映射、2路、4路、8路。关联度越高,命中率越高,但延迟也越大。
  • 替换策略:LRU(最近最少使用)最常用,但实现复杂。伪LRU是折中方案。

我记得有一次,一个同事把Cache的line size从64字节改成128字节,结果命中率反而下降了。为什么?因为通信芯片的数据访问模式是「小粒度随机访问」,大line size反而浪费带宽。嗯,这里要注意,Cache参数一定要跟应用场景匹配。

避坑指南:我曾经在L1 Cache上吃过亏。当时为了追求高频率,把Cache的延迟设成了3个周期。结果跑协议栈时,频繁的Cache miss导致性能还不如无Cache的方案。后来改成2个周期,性能才上来。记住:Cache的延迟和大小要平衡。

4.3.2 SRAM:片上快速存储

SRAM是SoC的「工作台」。它速度快(1-2个周期),但面积大、成本高。通信芯片中,SRAM主要用于:

  • 基带处理器的中间结果缓存:比如FFT的蝶形运算结果。
  • FIFO缓冲区:用于跨时钟域的数据同步。
  • 查找表:比如星座映射表、CRC表。

SRAM设计时,我建议采用「多bank」结构。把一个大SRAM拆成多个小bank,每个bank独立访问,可以显著提高带宽。比如,一个256KB的SRAM拆成4个64KB的bank,带宽可以提升4倍。

4.3.3 DDR:大容量外部存储

DDR是SoC的「仓库」。它容量大(GB级别),但延迟高(几十到上百纳秒)。通信芯片中,DDR主要用于:

  • 协议栈代码和数据:操作系统、网络协议栈。
  • 大数据包缓存:比如以太网帧、基带帧。
  • 日志和调试信息:方便后期调试。

DDR控制器设计时,有几个关键点:

  • 调度策略:FR-FCFS(先就绪先服务)是主流,能提高行命中率。
  • 预取:根据访问模式,提前预取数据。
  • 写合并:把多个小写请求合并成一个大写请求,减少DDR的写次数。

我做过一个项目,DDR带宽利用率只有30%。后来发现是调度策略太简单,总是先来先服务。改成FR-FCFS后,利用率提升到70%。你看,一个小小的调度策略改动,效果立竿见影。

核心总结:存储层次设计要遵循「时间局部性」和「空间局部性」原则。Cache利用时间局部性,SRAM利用空间局部性,DDR提供大容量。三者配合,才能发挥最佳性能。

好了,这一讲就到这里。系统架构设计是芯片设计的「顶层设计」,决定了后续所有工作的方向。下一讲,我们会深入硬件模块设计,看看每个模块具体怎么实现。