STL / BIST — 运行时自测体系(LBIST / MBIST / ABIST / STL)

功能安全L3别名 STL · LBIST · MBIST · ABIST · Self-Test Library · Built-In Self-Test · March C- · Memory Scrubbing · Runtime Self-Test

本质与导读

本质:把"系统能在运行中自己发现自己坏了"做成可量化的机制堆叠。LBIST 是数字逻辑启动自测;MBIST 是 RAM 启动 + 周期自测;ABIST 是 ADC/Reg 周期自测;STL 是 CPU 软件运行时自测。单层都不够 ASIL D,必须三层叠加:基线(启动)+ 运行时(STL/ABIST/Scrub)+ 实时(Lockstep)。STL 单独 DC ≤ 95 %,Lockstep 单独 DC ≥ 99 % 但漏 aging,所以互相补、不互相替代

主线坐标:横轨 · 诊断 / 通信(跨站) · ↑ 全景主线

1. 4 类自测的分类

BIST(Built-In Self-Test)是芯片内置的自测能力,STL(Self-Test Library)是芯片厂提供给客户的软件自测包。两类合起来覆盖启动 / 运行时 / 实时 3 个时间维度数字逻辑 / RAM / 模拟 / CPU 4 个对象维度。

BIST / STL 4 类自测分类

类型全称触发时长覆盖DC 贡献
LBISTLogic BISTPower-on数十 ms-数 s数字逻辑 stuck-atDC_LFM 高(开机 latent 清零)
MBISTMemory BISTPower-on + Scrub启动 80 ms / scrub 1-100 msSRAM / Cache 故障DC_LFM 高;Scrub 防 SBE 累积
ABISTAnalog BIST周期 100 ms 类1 ms 类ADC offset/gain、Reg driftDC_SPF 中(对 drift)
STLSelf-Test Library运行时切片1 ms slot × 6-10 段CPU ALU/MAC/MMU/FPUDC_SPF 中(60-95 %,库覆盖率)

口诀:LBIST/MBIST 是芯片厂的 DFT 设计,客户没法改;ABIST 由 SBC 集成商配合时间(MC33907 / TLF35584 内置);STL 是客户必须配置和验证的(扫描周期、调度、coverage 都是客户责任)。

2. LBIST + MBIST 启动期 — 把 latent 清零

开机时一次性跑完 LBIST + MBIST,等于"出厂状态自检"。LBIST 用 LFSR 生成 pseudo-random 向量喂入数字逻辑,用 MISR 压缩响应签名,对比 golden ROM 中的预期值。MBIST 用专用硬件 controller 跑 March 算法扫 SRAM/Cache。

启动期 BIST 的关键工程约束是开机时间 — 实时 ECU 通常要求 < 200 ms 完成 boot + 进入功能态,留给 BIST 的预算只有 50-150 ms。芯片厂在 SoP 前会调 LBIST/MBIST 长度做权衡:跑久一点覆盖率高 0.5 %,但 boot 慢 50 ms。

2.1 March C- 6 步算法

MBIST 最常用的算法是 March C-(De Goor, 1991):

↕ (w0);       ⇑ (r0, w1);   ⇑ (r1, w0);
⇓ (r0, w1);   ⇓ (r1, w0);   ↕ (r0)

w0 = 写 0;r1 = 读期望 1; = 地址递增扫; = 地址递减; = 任意方向。6 步用 10 N 次读写(N = 字数),时间复杂度 O(N)。

MBIST March Patterns + 4 类故障覆盖

March C- 覆盖的 RAM 故障:

  • SAF — Stuck-at Fault:某 cell 永远 0 或 1;每步 r-after-w 即检
  • TF — Transition Fault:0→1 或 1→0 跳变失败;w1 + r1 即检
  • CF — Coupling Fault:两 cell 互相影响;多方向扫即检
  • AF — Address Decoder Fault:地址译码错;March C- 漏,需要 March G 或 SS 算法补

实战中 SEooC 芯片(AURIX、MPC57xx)会在启动期跑 March C- + March G 组合,确保 AF 也被检测。

2.2 SECDED ECC 接力运行时

启动期 MBIST 跑完只能保证开机时 RAM 健康;后续 SEU(Single Event Upset)、aging 都不在 MBIST 视野里。SECDED ECC(Single Error Correct, Double Error Detect)= 每 8 bit 加 1 bit Hamming + 1 bit overall parity,共 9 个校验 bit 覆盖 64 数据 bit;能纠 1 bit、检 2 bit。

但 ECC 单独不够 — 单 bit 错(SBE)会累积:今天纠了一个,明天再来一个 SEU,可能就在同一字里变成 DBE(double error,无法纠正)。

解决:周期 Scrubbing。后台 controller 每 1-100 ms 读一遍 RAM,有 SBE 自动 ECC 纠正写回,把"错误"擦掉。Scrub 间隔决定 DC_LFM:

  • Scrub 1 ms / FTTI 100 ms → DC_LFM ≈ 99 %
  • Scrub 100 ms / FTTI 100 ms → DC_LFM ≈ 80 %

3. STL 运行时自测 — Time-Slicing

CPU 是单层 BIST 漏洞最多的元件 — Lockstep 检瞬时故障非常好(DC_SPF ≥ 99 %),但漏 aging / dormant 死角(某些指令组合永远没跑过,看不出问题)。STL 把这块补上。

STL 是芯片厂提供的软件包,内含针对该 MCU 的指令序列,跑一遍能覆盖 60-95 % 的 CPU stuck-at 故障。客户负责调用并安排扫描周期。

STL Time-Slicing — 10 ms 控制周期内 1 ms STL

3.1 Time-Slicing 设计原则

STL 不能一次全跑(可能 10 ms 占住 CPU,主控律 deadline 错过)。所以切片:6-10 段,每段 ≤ 1 ms,放在每个 10 ms 控制 tick 的固定 slot 里。跑完一遍 STL 的时间 = 段数 × tick 周期 = 扫描周期

关键约束:扫描周期 ≤ FTTI / 2。原因:

  • STL 检出故障后,系统要在 FTTI 内进入 Safe State
  • 检出延迟最多 = 扫描周期(故障可能刚跑完它的段时发生)
  • 留给"反应"的时间 ≥ FTTI - 扫描周期
  • 若反应时间 ≥ 扫描周期(保守 1:1 预算),则 扫描周期 ≤ FTTI / 2

举例:FTTI = 100 ms,扫描周期 ≤ 50 ms。STL 6 段 × 10 ms tick = 60 ms 不行,要么加段数(每段更小)、要么减 tick 周期(5 ms),或加 Lockstep 把 STL 的 DC 需求降下来。

3.2 STL 覆盖率(库 coverage)

STL 库的 coverage 由芯片厂在硅前用 fault simulation 估出(stuck-at fault model),典型值 60-95 %。客户直接引用是弱证据;过 ASIL D 评估要做硅后 Fault Injection 验证(参见 topic-diagnostic-coverage-categories)。

不同芯片厂的 STL 命名:

  • Infineon — CPU Self-Test(集成在 SafetyOS / SafeT 服务)
  • NXP — Self-Test Library(STL)(单独发布)
  • ST — Self-Test Library for SPC5(SPC5-Studio 集成)

4. ABIST — 模拟链周期自测

ADC + Regulator 链是 sensor 安全的核心,但模拟器件不能跑数字 BIST。ABIST 的思路是注入已知参考 → 读出 → 比对:

  • ADC ABIST:SBC 内部有 ref voltage(1.2 V / 2.5 V 类),周期切到 ref → ADC 采样 → 偏差超限即报错
  • Regulator ABIST:周期读 VOUT,与命令对比;偏差超限即降级
  • Bandgap ABIST:温度补偿曲线的 self-check

ABIST 触发周期通常和 ADC 采样率耦合 — 例 ADC 1 kHz 采样、ABIST 每 100 ms 抢 1 个 sample 做 ref → 1 % overhead。

SBC(NXP MC33907、Infineon TLF35584)集成 ABIST 是 ASIL D 的隐性必需 — 不集成只能客户在外面加 ref voltage IC,BOM 上多一颗、DC 还低。

5. 三层 BIST 堆叠 — DC High 的现实路径

ASIL D 单元件 DC ≥ 99 % 不是单层能达到的。只有把启动 + 运行时 + 实时三层叠加,每个失效模式都找到主诊断 + 辅诊断对子,DC 才真到 99 %

3 层 BIST 堆叠 + 失效模式 → 诊断分配

失效模式主诊断(DC ≥ 99 %)辅诊断(补 latent)
CPU stuck-atDual-Core LockstepSTL(aging 死角)
SRAM SBE/DBESECDED ECCMBIST Scrub(防累积)
ADC drift双路采样ABIST 周期注入 ref
总线 bit errorCRC + E2EHeartbeat 监控
译码 / DFT 死角LBIST + March G(启动)

主诊断 + 辅诊断这对工程实践极其重要:

  • 主诊断负责瞬时故障(SPFM)
  • 辅诊断负责长期 / latent 故障(LFM)
  • 两者机制必须不同,否则共因失效(辅诊断和主诊断一起坏)
  • DFA(Dependent Failure Analysis)就是来验证两者独立性的

6. 实战配置案例 — AURIX TC3xx + ASIL D Motor Control

典型 ASIL D 电机控制项目的 BIST/STL 配置:

元件启动运行时实时综合 DC
CPU Core × 3LBIST 100 msSTL 60 ms 周期Core 1+2 Lockstep≥ 99 %
SRAM 4 MBMarch C- 80 msScrub 10 msSECDED ECC≥ 99 %
Flash 16 MBMarch G 200 msCRC 校验(boot 后)SECDED ECC≥ 99 %
ADC × 6ABIST 5 msABIST 周期 100 ms双路采样≥ 99 %
CAN-FD自检 50 msE2E counterCRC-32≥ 99 %
SBC(TLF35584)LBIST + ABISTQ&A WatchdogFCCU 直连≥ 99 %

boot 时间预算:LBIST 100 + MBIST 80 + March G 200 + 应用启动 50 = 430 ms。已超 200 ms 类常见要求 — 因此 TC3xx 设计成渐进 boot:LBIST 必须完成才进功能态;Flash March G 可以延迟到 functional 启动后并行跑;ABIST 在每个采样周期补一小段。

7. 常见误区

实战 BIST/STL 最常犯的错都源于"只看单层覆盖率",忽略叠加结构。下面 5 条是评估员最常打回的点。

  • STL 覆盖率写"90 %"= 弱证据。除非有 Fault Injection 数据,评估员砍 20-30 %。Safety Manual 必须给 stuck-at coverage 报告。
  • MBIST 启动跑过了就 OK。错 — 启动期只清开机时的 latent,SEU 还要 ECC + Scrubber 接力。
  • Lockstep 万能,STL 多余。错 — Lockstep 漏 aging 和 dormant 死角(某指令组合从来没跑过),STL 必须补这块。
  • 扫描周期可以等于 FTTI。错 — 检出后还要进 Safe State,所以扫描 ≤ FTTI/2 是工程下限。
  • ABIST 不用做,反正 ADC 有 sensor plausibility。错 — Plausibility 检"输入合理性",ABIST 检"采样链本身偏差";两者机制不同,FMEDA 不能合算 DC。

核心要点

  • 4 类自测:LBIST(逻辑启动)+ MBIST(RAM 启动 + Scrub)+ ABIST(模拟周期)+ STL(CPU 运行时)。
  • March C- 6 步覆盖 SAF/TF/CF,漏 AF;需 March G 补。
  • SECDED ECC 实时纠 SBE,但需要 Scrubber 防 SBE 累积成 DBE。
  • STL Time-Slicing:扫描周期 ≤ FTTI / 2,留反应时间。
  • 三层 BIST 堆叠才到 DC High:基线(启动)+ 运行时(STL/ABIST/Scrub)+ 实时(Lockstep)。
  • 每个失效模式需要主诊断 + 辅诊断,机制要不同(DFA 独立性)。
  • STL 库 coverage 弱证据 20-30 % 折扣,要用 Fault Injection 升强。
  • boot 时间预算紧:LBIST + MBIST + March G 累积可达 400 ms,要分阶段跑。

Cross-references