4. 系统级设计:技术安全概念、系统架构设计、安全机制分配

系统级设计,说白了就是把上一阶段定义的安全目标,落地成具体的技术方案。我个人习惯把这个阶段叫做「从需求到实现的桥梁」。你想想看,安全目标再完美,如果落不了地,那就是空中楼阁。

我在项目中遇到过不少团队,安全目标写得漂漂亮亮,一到系统设计就卡壳。为什么?因为这里需要同时考虑功能、安全、成本、性能,四个维度互相拉扯。嗯,咱们今天就把这个坎迈过去。

4.1 技术安全概念(TSC)的构建

技术安全概念,是安全需求在技术层面的具体化。它回答一个问题:系统到底怎么做,才能满足安全目标?

我建议把TSC拆成三个层次来看:

  • 系统级TSC:定义系统层面的安全行为,比如故障检测、降级策略
  • 硬件级TSC:具体到芯片、传感器、执行器的安全机制
  • 软件级TSC:软件层面的故障响应、诊断、冗余逻辑

关键点:每个TSC必须追溯到至少一个安全目标。如果某个TSC找不到对应的安全目标,要么是需求冗余,要么是安全目标遗漏了。我曾经在一个项目中,发现团队写了8个TSC,结果有3个找不到源头——后来一查,是安全目标分析时漏了两个场景。

构建TSC时,我常用的模板包含以下要素:

要素 说明 示例
TSC ID 唯一标识,便于追溯 TSC-ACC-001
关联安全目标 指向SG编号 SG-ACC-01
功能描述 系统在正常/故障时的行为 当车速传感器故障时,ACC自动退出并提示驾驶员接管
故障检测机制 如何发现故障 传感器信号合理性检查,超时监控
故障响应时间 从故障发生到安全状态的时间 ≤ 100ms
安全状态 系统进入何种安全模式 ACC禁用,转向手动控制

4.2 系统架构设计:安全视角的考量

系统架构设计,不只是画几个方框连几条线。从功能安全的角度看,架构决定了故障传播路径和安全机制的覆盖范围。

我个人的经验是,架构设计阶段要问自己三个问题:

  1. 故障会不会扩散?——一个模块挂了,会不会带崩一片?
  2. 安全机制能不能覆盖?——每个关键故障,有没有对应的检测和响应?
  3. 独立性够不够?——安全相关功能和非安全功能之间,有没有足够的隔离?

下面这张图展示了系统级安全架构的核心逻辑:

系统级安全架构设计核心逻辑 安全目标(SG) 技术安全概念(TSC) 系统架构设计 安全机制分配 ASIL分解与分配 模块划分 / 接口定义 检测 / 响应 / 容错机制 ASIL等级 / 独立性要求 系统级安全设计规格 架构设计决定安全机制的有效性

我的经验:架构设计时,一定要画故障传播图。别只画功能框图。我曾经在一个EPS项目中,发现转向扭矩传感器的故障会通过CAN总线污染到其他节点——这就是架构设计时没考虑故障隔离的后果。

4.3 安全机制分配

安全机制分配,就是把TSC中定义的检测和响应行为,落实到具体的硬件或软件模块上。说白了,就是谁负责检测,谁负责响应,谁负责容错。

我建议按以下步骤进行分配:

  1. 列出所有故障模式——从FMEA或FTA中提取
  2. 确定检测机制——用什么方法发现故障(自检、互检、监控狗等)
  3. 确定响应机制——发现故障后怎么做(报警、降级、停机)
  4. 分配责任人——哪个模块/软件组件负责执行
  5. 验证覆盖度——每个故障是否都有机制覆盖

下面是一个安全机制分配的示例表格:

故障模式 检测机制 响应机制 分配模块 覆盖度
车速传感器信号丢失 信号超时监控 ACC退出,提示接管 ACC控制器软件 高
制动踏板位置传感器漂移 合理性检查(与主缸压力对比) 制动辅助降级,点亮警告灯 ESC控制单元 中
CAN总线通信中断 心跳监控 + 超时检测 进入安全状态,存储故障码 网关 + 各ECU 高
微处理器内核自检失败 LBIST(上电自检) 禁止启动,记录故障 硬件安全模块 高

注意:安全机制分配时,最容易犯的错误是过度依赖单一机制。比如,只靠软件自检来检测传感器故障,但软件本身也可能出问题。我建议至少要有两级独立机制:一级在功能模块内部,一级在系统层面。

4.4 ASIL分解与独立性要求

ASIL分解,是系统级设计中一个非常实用的技巧。说白了,就是把一个高ASIL等级的需求,拆成两个低ASIL等级的需求,前提是它们相互独立。

举个例子:一个ASIL D的需求,可以分解为:

  • ASIL C(模块A)+ ASIL C(模块B),且A和B相互独立
  • ASIL D(模块A)+ QM(模块B),但B不能影响A的安全功能

我在项目中用过ASIL分解来降低成本。有一次,一个ASIL D的制动需求,我们把它分解成ASIL B(硬件冗余路径)+ ASIL B(软件诊断路径),两个路径独立开发,最后通过了审核。嗯,这里的关键是独立性证明——你得拿出证据,证明两条路径不会共因失效。

独立性评估清单:

  • 供电是否独立?
  • 时钟是否独立?
  • 通信路径是否独立?
  • 软件是否运行在不同内核或不同分区?
  • 开发团队是否有足够的隔离?

4.5 系统设计评审要点

系统设计完成后,我建议做一次结构化评审。评审时重点关注:

  • 完整性:每个安全目标是否都有对应的TSC?
  • 一致性:TSC之间是否有冲突?(比如一个要求立即停机,另一个要求延迟降级)
  • 可实现性:安全机制在当前硬件/软件平台上能否实现?
  • 可验证性:每个安全机制是否都有明确的测试方法?

我曾经在一个项目中,评审时发现一个TSC要求「在10ms内检测到故障」,但实际硬件采样周期是20ms——这就是典型的可实现性问题。所以,系统设计阶段一定要拉上硬件和软件工程师一起过,别自己闷头画图。

一个小技巧:用安全机制覆盖矩阵来检查遗漏。行是故障模式,列是安全机制,交叉点打勾。哪个格子空着,哪个地方就有风险。