系统架构设计:硬件系统框图设计,模块划分与接口定义,电源树与时钟树规划

系统架构设计,说白了就是给硬件画骨架。很多工程师一上来就画原理图,结果画到一半发现接口不够用,电源带不动,时钟抖得厉害。我见过太多这样的返工案例了。

我个人习惯,拿到需求后先花两天时间做架构设计。这步省了,后面全是坑。

硬件系统框图设计

框图是硬件的顶层视图。它不关心具体电阻电容,只关心模块间怎么连。

画框图时,我一般遵循三个原则:

  • 从左到右的信号流向:输入在左,输出在右,控制在上,电源在下
  • 模块粒度适中:一个芯片一个框,不要拆到寄存器级
  • 接口标注清晰:总线类型、位宽、速率,能写就写

举个例子,一个典型的嵌入式系统框图:

核心思路:框图不是装饰品,它是团队沟通的通用语言。软件看它知道驱动写什么,结构看它知道板卡怎么摆,测试看它知道从哪里下手。

下面是我用 SVG 画的一个通用硬件系统框图,你可以参考这个结构去画自己的方案。

硬件系统框图(通用嵌入式架构) 电源管理 PMIC / LDO / DCDC 主控 MCU/MPU ARM Cortex-M/A SPI / I2C / UART / USB 存储系统 DDR / Flash / eMMC 通信模块 WiFi / BLE / ETH 传感器接口 I2C / SPI / ADC 人机交互 LCD / Touch / LED 框图设计要点 1. 每个模块框内写清楚芯片型号或功能,不要只写"CPU" 2. 接口线上标注协议类型和位宽,比如"SPI@10MHz"、"I2C@400kHz" 3. 电源和时钟单独画线,不要和数据总线混在一起 4. 预留扩展接口,用虚线框表示"可选模块" 5. 版本号和日期写在右下角,方便追溯

模块划分与接口定义

框图画完了,接下来就是切模块。模块划分的粗细,直接决定了后续工作量。

我习惯按功能域来切:

  • 计算域:主控、协处理器、FPGA
  • 存储域:DDR、Flash、SD卡
  • 通信域:有线(ETH、CAN)、无线(WiFi、BLE)
  • 感知域:传感器、ADC、摄像头
  • 执行域:电机驱动、继电器、DAC
  • 电源域:PMIC、LDO、DCDC、电池管理

每个域内部再细分到芯片级。接口定义要精确到引脚级。

我的习惯:接口定义表里至少包含信号名、方向、电平标准、最大速率、备注。这个表后面会直接用来画原理图符号和做 PCB 扇出。

接口定义表示例:

接口名称 信号 方向 电平 速率 备注
SPI0 SCLK/MOSI/MISO/CS 主→从 3.3V 10MHz 接 Flash
I2C0 SCL/SDA 双向 3.3V 400kHz 接传感器
UART0 TX/RX 双向 3.3V 115200bps 调试口
USB_OTG D+/D-/ID/VBUS 双向 5V/3.3V 480Mbps Type-C

注意:接口电平不匹配是硬件设计中最常见的低级错误。我曾经在一个项目里把 1.8V 的传感器直接连到 3.3V 的主控上,结果烧了三个样片才找到原因。接口定义表里一定要写清楚电平标准。

电源树规划

电源树是硬件的血管系统。规划不好,轻则系统不稳定,重则芯片冒烟。

我画电源树时,会按这个步骤来:

  1. 列出所有电压需求:每个芯片需要几路电,电压多少,电流多少
  2. 确定上电时序:谁先上电,谁后上电,间隔多少
  3. 选择电源方案:DCDC 效率高但纹波大,LDO 纹波小但效率低
  4. 计算总功耗:所有负载加起来,再留 30% 余量
  5. 画电源树图:从输入到输出,每一级标注电压和最大电流

电源树规划示例:

电源轨 电压 最大电流 来源 负载
VIN 12V 3A 外部适配器 —
V5V 5V 2A DCDC (12V→5V) USB、电机
V3V3 3.3V 1.5A DCDC (5V→3.3V) 主控、Flash、传感器
V1V8 1.8V 500mA LDO (3.3V→1.8V) DDR、PLL
V1V2 1.2V 300mA LDO (1.8V→1.2V) 内核电压

避坑指南:我曾经在一个项目里把 DCDC 的输出直接给模拟电路供电,结果 ADC 采样值跳得像心电图。后来换成 LDO 加 π 型滤波,问题才解决。数字电路用 DCDC,模拟电路用 LDO,这是铁律。

时钟树规划

时钟是系统的心跳。时钟树规划不好,时序收敛就是噩梦。

时钟树规划的核心要点:

  • 时钟源选择:晶振、振荡器、PLL、外部时钟输入
  • 时钟分配:一路时钟分给多个设备时,要考虑扇出和驱动能力
  • 时钟抖动:高速接口对抖动敏感,要加时钟缓冲器
  • 时钟域划分:不同频率的时钟域之间要做异步处理

时钟树规划示例:

时钟名 频率 来源 用途 抖动要求
CLK_MAIN 25MHz 晶振 主控系统时钟 <50ps
CLK_DDR 400MHz PLL (25MHz×16) DDR 控制器 <20ps
CLK_USB 48MHz PLL (25MHz×1.92) USB PHY <100ps
CLK_ETH 125MHz 独立振荡器 以太网 PHY <50ps

注意:时钟抖动是高速设计的隐形杀手。我记得有一次调试千兆以太网,死活不通,用示波器一看,时钟抖动 200ps,远超 PHY 芯片的容忍范围。换了个低抖动晶振,问题秒解。时钟源的钱不能省。

嗯,到这里系统架构设计的基本框架就搭完了。框图、模块划分、接口定义、电源树、时钟树,这五样东西齐了,原理图设计才能有条不紊地推进。你想想看,如果连系统有几个电源域、时钟从哪里来都没想清楚,就开始画原理图,那不是给自己挖坑吗?