跨越天际:从智能汽车到 eVTOL 的适航与系统级开发44——DAL A 级飞控计算机的非相似硬件与非相似软件设计体系 【摘要】本文探讨了DALA级飞控计算机的非相似冗余设计体系突破传统汽车锁步核架构的局限性。针对eVTOL全权限数字电传系统提出三通道异构方案ARM Cortex-R5F控制通道、RISC-V监视通道和FPGA硬件逻辑通道实现硬件层面的共因失效免疫。软件层面采用多版本编程策略通过独立团队使用不同语言C/C/VHDL和编译器GCC/IAR/Vivado生成异构代码配合形式化验证技术确保数学等价性。这种从芯片微架构到编译链的全生命周期非相似设计可有效防御系统性失效满足DO-178C/DO-254最高安全等级要求为航空器提供数学确定性的安全保障。14.3 DAL A 级飞控计算机的非相似硬件与非相似软件设计体系在智能汽车控制器的开发体系中软件的安全性主要通过 ISO 26262 规范中的“ASIL 等级分拆Decomposition”和“锁步核Lockstep Core”硬件来实现。汽车工程师熟知的英飞凌 Aurix TC3xx/TC4xx 系列芯片其核心逻辑是在同一个硅片Die上封装两个完全相同的 CPU 内核。这两个核执行同一套由同一种编译器编译出来的二进制机器码指令流并在时钟周期级别进行锁步比较Lockstep Compare。如果比较结果不一致则判定硬件发生单粒子翻转。这种主备或锁步的“相似冗余”架构在汽车二维地面环境下能够高效拦截物理层随机失效。然而当面临 eVTOL 的全权限数字电传飞控计算机FCC时这种设计在系统性失效Systematic Failures面前将表现出致命的脆弱性。如果控制软件本身存在一个隐藏的逻辑漏洞或者商用 C/C 编译器在将源代码翻译为机器码时引入了一个偶发的汇编级误译 BUG那么锁步核中的两个相同内核将会以完全相同的节奏、在同一纳秒执行这个错误指令。这意味着相似冗余系统会对该系统性失效表现出 100% 的“完美共识”从而在不触发任何硬件警报的情况下全通道同步跑飞坠毁。为了通过 DO-178C 和 DO-254 体系下最高级别的DAL A 级灾难级适航审定FCC 的软件和硬件架构必须彻底颠覆“锁步相似”的传统思维全面皈依为非相似硬件Dissimilar Hardware与非相似软件Dissimilar Software/N-Version Programming设计体系。本节将深度解构如何从编译器、开发语言、编译基线以及异构微架构Microarchitecture等全生命周期的代码和芯片层面彻底消灭系统性的共因失效CCF, Common Cause Failure。14.3.1 异构微架构的硅片绝缘非相似硬件体系的底层重构非相似硬件设计的核心铁律是并行计算的多个飞控通道绝对不允许使用相同底层晶体管微架构的数字处理器。因为同一种处理器的流水线设计、分支预测单元BPU或浮点运算单元FPU如果存在出厂缺陷例如著名的 Intel 奔腾 FDIV 浮点除法漏洞或现代处理器的 Spectre/Meltdown 漏洞相似冗余将在特定的极端气动边界计算时全盘崩溃。全权限 DAL A 级 FCC 推荐采用三通道完全非相似芯片矩阵通道 A控制通道 - Lane 1采用通用商用成熟COTS的高可靠车规级 ARM Cortex-R5F / R52 双核锁步处理器。利用其确定性中断和紧耦合内存TCM作为一阶计算基线。通道 B监视通道 - Lane 2采用完全开源、自主重构的航天级 RISC-V 架构硬核处理器。其内部寄存器布局和指令解码器与 ARM 存在天然的物理异构性。通道 C异构备用通道 - Lane 3采用全硬件门电路FPGA / Hardwired Logic。该通道内部甚至不运行传统意义上的“取指-译码-执行”CPU 软件而是直接通过高可靠的门阵列逻辑将第 14.2 节所述的控制律Control Law固化为确定性的数字硬件状态机。这种将“冯·诺依曼架构ARM/RISC-V”与“现场可编程门阵列FPGA”进行混叠的拓扑在物理层和体系结构层提供了绝对的“ CCF 共因失效免疫力”。14.3.2 消灭编译器的幽灵多版本编程N-Version Programming与编译基线异构在软件工程中编译器如 GCC、LLVM/Clang、IAR是一个极为庞大且复杂的系统。适航研究表明当高级语言C/C代码中包含多层嵌套的分支控制或复杂的数学多项式展开时编译器为了追求极端代码体积或执行效率而执行的“高阶优化O2/O3 优化”有极低概率导致生成的汇编机器码改变了源代码的原意。为了在代码执行层面消灭编译器的系统性缺陷DAL A 级软件开发必须强力推行多版本编程N-Version Programming与编译链断裂策略。┌───────────────────────────────────┐ │ 控制律原始数学模型 (Simulink) │ └─────────────────┬─────────────────┘ │ ┌───────────────────────────┼───────────────────────────┐ ▼ (自动代码生成器 1) ▼ (独立人工团队手动编写) ▼ (自动代码生成器 2) ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ 版本 A (C 语言) │ │ 版本 B (C 语言) │ │ 版本 C (VHDL 语言)│ └────────┬────────┘ └────────┬────────┘ └────────┬────────┘ │ │ │ ▼ (商用编译器 GCC) ▼ (航天级专用编译器 IAR) ▼ (硬件综合工具 Vivado) ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ 机器码 A (ARM) │ │ 机器码 B (RISC-V) │ │ 门级网表 C (FPGA) │ └────────┬────────┘ └────────┬────────┘ └────────┬────────┘ │ │ │ └───────────────────┬───────┴───────────────────────────┘ ▼ [ 跨通道多模态实时一致性互监表决 ]1. 软件开发团队与语言的绝对非相似软件 AC 版本由团队 A 依据系统需求文档采用完全基于规则Rule-based的MISRA C:2012规范编写严禁使用任何高级面向对象特性运行于 ARM 控制通道。软件 BC 版本由完全隔离的团队 B两团队在物理和行政上禁止交流防止思维共因引导依据同一份需求文档采用AUTOSAR C14规范在非相似的操作系统环境如基于 ARINC 653 的微内核下独立编写运行于 RISC-V 监视通道。2. 编译链与工具链的物理断裂Tool Chain Dissimilarity软件 A 使用GCC 编译器进行交叉编译并开启特定的安全裁剪标志如-fstack-protector-all其生成的机器码二进制序列具有特定编译器的行为特征。软件 B 则强制使用完全不同代码分支的Green Hills / IAR 编译器进行编译并施加不同的优化策略等级如选择无优化或仅作静态死代码清除-O1。在运行时两个通道各自执行不同编译器洗礼过的机器码。如果其中一个编译器在执行if(x 0.001)的边界转换时产生了寄存器溢出错误其错误的二进制表现形式绝不可能在另一个通道的机器码中复现。通过第 14.1 节所述的跨通道中值表决器这一“编译幽灵”会被瞬间拦截在输出总线之前。14.3.3 形式化验证与基于数学证明的确定性防御除了采用非相似的多版本设计外由于 DAL A 级要求对代码进行 100% 的语句覆盖、分支覆盖和 MCDC修正条件/判定覆盖传统的软件黑盒/白盒测试已经无法完全穷举超维控制律输入下的长尾状态。因此必须引入形式化验证Formal Verification。代码级抽象解释与边界证明利用基于数学语义Polyspace / Astrée 等工具的源代码静态形式化分析对飞控中的核心算法如卡尔曼滤波器、PID 积分项进行“全值域数学断言Assertions”。证明代码在 $[-\infty, \infty]$ 的全输入区间内绝对不存在“除以零Division by Zero”、“数组越界Out of Bounds”以及“有符号整数溢出Signed Overflow”。机器码与源代码的等价性形式化校验利用形式化定理证明器Theorem Prover直接对编译出来的机器码反汇编序列与控制律的原始物理数学方程进行数理逻辑等价性证明。从数学定理的维度直接宣告任何由于编译器优化错误、内存对齐瑕疵引发的二进制偏离在出厂前即被“彻底绝育”。 本节核心总结汽车思维局限依靠同构的锁步核Lockstep来防御随机硬件失效应用层代码多采用单一语言C/C和单一编译器如 Tasking 或 GCC一键生成对编译器误译、软件逻辑共因失效缺乏防御手段。适航升维重构电传飞控的代码差错即意味着航空器坠毁。必须重构为由 ARM、RISC-V 和 FPGA 组成的非相似硬件微架构体系全面推行开发团队、编程语言及编译链完全断裂的多版本编程N-Version Programming并辅以底层机器码的形式化数学等价性证明从根本上消灭导致系统级全盘覆灭的共因失效风险。