3. 系统架构设计:从需求到实现的桥梁

系统架构设计,说白了就是把上一阶段定义的系统需求,拆解成一个个可实现的模块。我经常跟团队讲,这一步要是走歪了,后面代码写得再漂亮也白搭。

3.1 架构设计的目标:分解与分配

架构设计的核心目标就两个词:分解和分配。

  • 功能分解:把整车级功能拆成子系统功能。比如“自动紧急制动”,拆成感知、决策、执行三个子系统。
  • 技术分配:把功能分配给具体的硬件和软件。哪个跑在MCU上,哪个跑在SoC上,哪个用AUTOSAR SWC实现。

关键原则:分解要彻底,分配要明确。每个功能最终都要落到一个具体的“责任人”(硬件或软件组件)。

我在项目中遇到过最典型的问题:需求分解到第三层就乱了,有些功能没人认领,有些功能多个模块都在做。嗯,这就是典型的“分解不彻底,分配不清晰”。

3.2 架构设计原则:高内聚低耦合与模块化

这两个原则,我建议你刻在工位上。

高内聚低耦合

说白了就是:内部拧成一股绳,对外只留一个接口。

  • 高内聚:一个模块只做一件事,并且把它做好。比如“车速计算模块”只负责算车速,别掺和转向控制。
  • 低耦合:模块之间通过定义好的接口通信,别直接访问对方的内部变量。

我的经验:判断耦合度有个土办法——改一个模块的代码,需要改几个其他模块?超过2个,耦合就高了。

模块化

模块化是架构设计的落地手段。每个模块要有清晰的边界、明确的职责、标准的接口。

模块化要素 说明 反面案例
边界清晰 模块范围不重叠 两个模块都管“车门状态”
职责单一 一个模块只做一类事 “通用处理模块”啥都干
接口标准 使用AUTOSAR RTE或DDS 自定义私有协议满天飞

3.3 常用架构模式

你想想看,汽车电子发展了这么多年,沉淀下来几种成熟的架构模式。我重点讲两个:

分层架构

这是最经典的架构模式。从上到下分三层:

  • 应用层:业务逻辑,比如ACC、LKA这些功能算法。
  • 中间件层:通信、诊断、网络管理。AUTOSAR RTE就是典型。
  • 基础软件层:MCAL、OS、Bootloader。

分层的好处是:上层不关心底层怎么实现。我换一个MCU,只要中间件接口不变,应用层代码一行都不用改。

微服务架构在域控中的应用

这个比较新,但在域控制器上越来越流行。把每个功能做成独立的“服务”,通过轻量级通信协议(比如DDS)互相调用。

注意:微服务不是银弹。我曾经在一个项目里过度拆分,结果服务间通信开销占了30%的CPU。域控上资源有限,别为了“时髦”而滥用。

什么时候用微服务?我建议满足以下条件再考虑:

  • 功能之间确实需要独立部署和升级
  • 有足够的硬件资源(多核SoC)
  • 团队有能力管理分布式系统的复杂度

3.4 架构设计工具

工具选对了,事半功倍。我主要用这两个:

PREEvision

Vector家的老牌工具。适合做整车级架构,从需求到线束都能覆盖。优点是一站式,缺点是贵、学习曲线陡。

SystemWeaver

SystemWeaver更灵活,适合做系统级和软件级架构。我比较喜欢它的元模型定制能力,可以按项目需要定义自己的数据模型。

对比项 PREEvision SystemWeaver
适用阶段 整车架构 系统/软件架构
定制性 低(固定流程) 高(可定义元模型)
团队规模 大团队(50人+) 中小团队
学习成本 高 中

我的建议:如果公司已经有PREEvision的license,就用它。如果从零开始,SystemWeaver更灵活,也更容易上手。

3.5 架构设计核心逻辑

下面这张图,是我自己总结的架构设计核心逻辑。每次做新项目,我都会先画一遍这个图。

系统架构设计核心逻辑 系统需求 功能分解 技术分配 硬件架构 软件架构 接口定义 核心原则 高内聚低耦合 模块化 接口标准化

这张图的核心逻辑是:从需求出发,逐层分解,最终落到硬件和软件上,再通过接口定义把它们串起来。每一步都离不开高内聚低耦合和模块化这两个原则。

总结一下:系统架构设计不是画几张框图就完事了。它需要你真正理解需求、懂得分解、会分配、能选型。我见过太多项目,架构图画得漂漂亮亮,一到实现就漏洞百出。为什么?因为分解没做透,分配没想清楚。

嗯,这一章的内容就到这里。记住:架构设计是技术活,更是思考活。多问自己几个“为什么”,比多画几张图更有用。