FS-C1 — Lockstep 如何兑现 99% SPFM:双核比对的物理、为什么必须延迟 1.5-2 cycle、单核 PMHF 的硬约束

更新

本质与导读

专家养成 · 模块一(功能安全)· C 阶第 1 讲。B 阶收官的 FS-B7 把 SPFM / LFM / PMHF 三个数如何在 GSN 树里组装成"SG 满足"讲透了——那是证明层面的闭合。但整条论证链上有一个数字一直是当作已知量填进 FMEDA 的:诊断覆盖率 。CPU 那一行随手写 ,SPFM 就压线 ASIL D;写 ,直接崩盘。C 阶转入工程实现:这些漂亮的度量数字,到底由什么物理机制兑现?今天拆第一个、也是 ASIL D MCU 绕不过的那个——Lockstep(双核锁步)。核心问题只有一个:为什么一颗单核 MCU 在数学上就是配不出 ASIL D,而两颗同样的核加一个比较器就能?答案要从"检测器和被检对象能不能在同一个故障域里"这条第一性原理推起。

开篇:硬约束——ASIL D 的三个数把单核逼到墙角

回到 FS-A2 立下、FS-B7 闭合的那套定量预算。ASIL D 对随机硬件失效给出三条不可谈判的门槛(ISO 26262-5:2018,SPFM/LFM 属 Clause 8、PMHF 属 Clause 9,已外部核实):

  • SPFM ≥ 99%(单点失效度量,Table 4)
  • LFM ≥ 90%(潜伏失效度量,Table 5)
  • PMHF < 10 FIT (Table 6; 次失效 小时)

问题出在 SPFM 这一条落到 CPU 上。一颗 28 nm 车规 CPU 核,危险随机失效率量级约 (order-of-magnitude,以单粒子翻转 SEU 为主导—— 粒子和大气中子打中 PC / ALU / 寄存器引起 bit-flip;具体值随工艺 / 面积 / 海拔浮动,需按器件 datasheet 核)。SPFM 的定义是被安全机制覆盖掉的单点失效占比,对单个元件近似为

要 SPFM ,就要求 ,反推 于是整个 ASIL D CPU 问题坍缩成一句话:你必须对 SEU 拿到 99% 的诊断覆盖。 而这正是纯软件手段做不到的地方——下一节说清为什么这是物理天花板,不是工程没做够。


中段一:软件冗余为什么对 SEU 有 DC 天花板——检测器不能和被检对象同故障域

工程师的第一反应总是"用软件冗余":算两遍取多数、加 CRC 校验、跑软件自测库 STL。这些对系统性错误或故障有用,但对 SEU 这种翻位故障,诊断覆盖率据文献普遍只到 (建模估计,随实现波动,需按 STL 认证报告核),封顶约 。为什么升不上去?

第一性根因是:软件复算跑在同一颗正在被 SEU 破坏的核上。 检测逻辑(比较两遍结果、算 CRC)本身是指令,由同一个 PC 取指、同一个 ALU 执行、结果存进同一组寄存器。一个 粒子如果恰好翻掉了比较指令的操作数,或翻掉了保存 CRC 的那一位,那么做检测的动作本身也被同一个故障污染了。检测器和被检对象共享故障域,故障可以同时击穿"计算"和"对计算的检查"——这类"检测器自己也中招"的情形,原理上无法被同域的软件捕获。

这不是编程技巧问题,是独立性问题:一个可靠的检测通道,必须在物理上独立于被它监视的对象。软件冗余把检测器塞回被检对象内部,独立性从根上就不成立,所以 DC 有天花板。要突破 ,唯一出路是把比较通道移出 CPU 的故障域——做成一条独立的硬件电路。这就是 Lockstep 的全部动机。


中段二:Lockstep 如何把 DC 顶到 99%——一条独立的硬件比较通道

Lockstep 的结构极简,恰恰因为它只解一件事:提供独立比较。三个部件(详见 Lockstep Core 深度):

  • Master 核——跑 ASIL D 任务,输出对外驱动执行器;
  • Checker 核(镜像)——结构完全相同、执行同一条指令流,但输出不对外,只送去比较;
  • 硬件比较器 CCC——逐 cycle 比对两核的关键信号,不一致立即上报芯片的集中安全裁决单元(AURIX 的 SMU / NXP 的 FCCU / Renesas 的 ECM),裁决切安全态。

关键在 CCC 比什么:它不是只比最终输出,而是逐 cycle 比对 PC(程序计数器)/ 通用寄存器 / ALU 输出 / 总线写地址与数据 / 中断与 Trap 状态这五类内部状态。为什么要比这么细?因为一个 SEU 翻掉任意一位,都会让两核的内部状态在下一个 cycle 就分叉——PC 一旦不一致意味着两核已跑到不同指令,检测概率近 100%。逐 cycle 全状态比对,等于给 CPU 装了一面每个时钟沿都核对的镜子,任何偏离即刻现形。ISO 26262-5 Annex D 因此把"cycle-by-cycle 硬件比较"的 DC 归为最高档 "high" (独立研究实测 DCLS 覆盖率可达 99.6%,与此一致,已核)。

注意这条通道为什么能突破软件的天花板:比较器是独立于两个 CPU 故障域的第三方硬件。打中 Master 的粒子不会同时以相同方式打中比较器,所以"检测器自己中招"的同域问题被消解了——只要打中的是 Master(或 Checker)其中之一,两核状态就分叉,比较器就抓到。这就是 那 39 个点的来源:不是算法更聪明,是检测通道终于独立了。


中段三:为什么必须延迟 1.5-2 cycle——把共因失效物理地转成可检失效

Lockstep 有一个致命盲区,也是 C 阶最该讲透的物理:共因失效(CCF)。如果一个扰动同时、以完全相同的方式打中两个核,两核会输出同一个错值,比较器一致——看不出任何 mismatch。EMI 尖峰、地弹、电源跌落、共时钟毛刺,都是这类"共模"扰动。两核越是"完全相同、完全同步",越容易被同一个扰动同样地击穿。完美的同步反而是安全的敌人——这是 Lockstep 最反直觉的一点。

主流实现的解法是给 Checker 核延迟 1.5-2 个 clock cycle 再执行同一指令流,再把 Master 的输出缓存等量 cycle 后做"错位对齐"比较(AURIX 官方实测 = 2 cycle)。为什么这个小小的时间错位能防 CCF?因为一个共模扰动到达的是一个确定的物理时刻。如果两核在这一刻处于完全相同的流水线状态,扰动就落在两核同一个逻辑节点上、产生相同污染,比较器失明;而一旦 Checker 落后 个 cycle,同一时刻两核正在执行指令流的不同阶段,同一个物理毛刺落在不同的逻辑节点上,要么只污染一个核、要么在两核产生不同的错误——无论哪种,都表现为 mismatch 被抓住。

时间分集(temporal diversity)的本质,是把一个"共模"扰动,在时间轴上强行错开成两核的"差模"响应,从而把不可检的 CCF 转成可检的 mismatch。 由此也能推出 的设计张力: 必须大于扰动的相关时间(毛刺持续宽度)才有效——若一个扰动持续时间超过 ,它仍能覆盖两核错开后的时间窗、同样打中。这就是为什么 取小的非零值(1.5-2 cycle)还不够,必须叠加空间分集(Checker 核在 die 上镜像 / 旋转布局,降低同一粒子命中两核概率)和独立 clock / power 分区(防共时钟、共电源扰动)。这三条正是 ISO 26262-9 Clause 7 相关失效分析(DFA)要举的独立性硬证据——延续 FS-B5 讲的 β-factor,共因项就是从这里量化进 PMHF 的双点部分的。


中段四:worked example——把 DC 兑现成 SPFM / PMHF 的账

把上面的物理落成 ASIL D CPU 那一行 FMEDA 的数值账。设一颗主控 MCU 的 CPU 计算路径,危险随机失效率 (SEU 主导,order-of-magnitude),安全目标要求 SPFM

反例——只上软件冗余():

单点残余 80 FIT,SPFM 只有 60%,而且这 80 FIT 单独就是 PMHF 门槛(< 10 FIT)的 8 倍——光 CPU 一项就把整个 item 的预算炸穿,方案在数学上不可行。

正解——Lockstep():

单点残余压到 2 FIT,CPU 路径 SPFM 正好压线 ASIL D。PMHF 侧:这 2 FIT 是 CPU 计算路径对 item 单点 PMHF 预算(< 10 FIT)的贡献——约占 。这个占比正提示了单核 PMHF 的硬约束:一颗核的残余就吃掉五分之一预算,留给电源 / 时钟 / 外设 / 模拟前端的余量已经不多,所以真实 ASIL D FMEDA 里 CPU 路径往往还要再细分成更小的失效率切片(个位数 FIT),使残余落到亚 FIT 量级,整片预算才关得住(细分口径见 PMHF 量化深度)。

抬到 ,同一颗 不变的核,残余从 80 FIT 掉到 2 FIT——40 倍的残余削减,全部来自那条独立硬件比较通道。这就是"无 Lockstep 单核凑不齐 ASIL D"的完整量化根因:不是工艺不够好,是软件侦测 SEU 的能力封顶在 ,而这 39 个点的差距,再好的晶体管也补不回来。


落到工程结论:三条准则

把物理与账目拧成可执行的判断:

  1. 独立性是 DC 的物理前提,不是文档措辞。 任何声称高 DC 的安全机制,先问"检测通道和被检对象是否同故障域"。同域(软件复算)必有天花板;高 DC 必然要求一条独立硬件通道。这条判据可迁移到所有 SM(FS-A4 的检测类机制皆然)。

  2. 完美同步是 CCF 的温床,分集才是 Lockstep 的灵魂。 双核一致 双核正确——只有加了时间(1.5-2 cycle 延迟)+ 空间(镜像布局)+ 资源(独立 clock/power)三重分集,"两核一致"才等价于"无故障"。评审 Lockstep 必查这三条 DFA 证据,而非只看"有没有 Checker 核"。

  3. 是两个数,别互相顶替。 Lockstep 比较器给的是即时的 (喂 SPFM);比较器自己会静默损坏(危险潜伏故障),必须另配 LBIST + 后台自检覆盖其 (喂 LFM)。把 99% 拿去填 LFM,FMEDA 直接算错——这正是 FS-A3 讲的"两根时间轴、两把尺"在架构度量上的对应。


承上启下:今天我们看清了 Locks…

承上启下:今天我们看清了 Lockstep 如何用一条独立硬件比较通道,把 SEU 的 DC 从软件封顶的 顶到 99%,从而单靠一个机制就把 CPU 路径钉在 ASIL D 的 SPFM 线上;也理解了那 1.5-2 cycle 延迟是把共因失效物理地转成可检失效的关键。但 Lockstep 抓到不一致之后呢?它只负责报警,真正把系统拽进安全的,是紧接着的安全状态建立——而"安全"到底是主动短路 ASC 还是关断 STO,取决于故障工况的能量与时序。下一讲 FS-C2 拆 Safe State 设计:ASC 与 STO 的物理、时序、能量与适用工况,正是 Lockstep 报警之后 FRTI 段(FS-A3)真正兑现的那一步。预热可读 安全状态管理器深度


延伸阅读