跳转到主要内容

为什么 DO-254 不是技术手册,而是设计保证指南

judy 提交于
文章来源:FPGA技术联盟 很多工程师第一次真正去看 DO-254 时,都会有一种很自然的期待: • 它应该告诉我硬件应该怎么设计; • 它应该告诉我 FPGA 开发到底该怎么做; • 它最好能像一本“航空电子硬件开发手册”一样,把方法、动作、模板都规定清楚。 如果带着这种期待去看 DO-254,往往很快就会失望。 因为你会发现,它既没有告诉你状态机该怎么编码,也没有规定你必须用哪种 RTL 风格,甚至连很多工程师最关心的“到底做到什么程度才算够”,它都不会用一本技术手册的写法直接告诉你。 于是很多人就会得出两个错误结论中的一个: 1. DO-254 太虚了,没什么可执行性; 2. DO-254 只是个合规文件,重点就是交文档。 这两个理解都不对。 先说结论 DO-254 不是技术手册,因为它要解决的问题,本来就不是“教你怎么设计硬件”,而是“要求你如何建立对硬件正确性的可信证据”。 换句话说: DO-254 真正关心的,不是你用了什么技术路线,而是你能不能证明,这条技术路线在受控过程下产出了满足要求的硬件。 所以它是设计保证指南,而不是“设计方法大全”。 这里有一个非常值得反复记住的观点: The goal is not to produce hardware, but to produce evidence that the hardware is correct. 翻成更工程化的话就是: DO-254 的目标不是把硬件做出来,而是把“这个硬件是对的”这件事证明出来。 这就是“设计正确”和“设计保证”之间最核心的差异。 一、为什么工程师总想把 DO-254 当成技术手册? 这个误解其实很正常,因为大多数工程师受训练和日常工作方式影响,天然会从“怎么做”去理解一切标准。 比如 FPGA 工程师平时接触最多的是: • 架构怎么划分 • RTL 怎么写 • 时钟域怎么处理 • 约束怎么收敛 • 仿真怎么搭 • 板级联调怎么推进 这套思维是典型的实现导向。 它关注的是: 怎么把功能做出来。 而 DO-254 关注的是另一层: 怎么把“做出来的东西是对的”这件事,用过程和证据说清楚。 所以很多人会觉得 DO-254 “不接地气”,其实不是它脱离工程,而是它站得比实现层更高。 DO-254 把复杂机载电子硬件开发中几个原本很难自然做好、也很难天然闭环的方面,系统地绑在了一起,包括: • 设计保证 • requirements 的使用 • 基于 requirements 的 verification • review、analysis、test 的协同 • 生命周期数据 • 配置管理和过程保证 也就是说,DO-254 本来就不是为了解答“你该怎么写逻辑”,而是为了解答: • 需求从哪里来 • 设计如何承接需求 • 验证如何基于需求展开 • 证据如何形成闭环 • 项目如何在审查视角下站得住 这不是一本技术手册能解决的问题。 二、技术路线开放,不等于流程可以跳过 这是理解 DO-254 的第一道坎。 很多人看到 DO-254 不强规定技术细节,就会产生一种误判: “既然它不规定具体技术路线,那是不是说明我们可以自己决定怎么做,流程上灵活一点也没关系?” 这个逻辑在普通研发项目里也许还能讨论,但在 DO-254 语境下是很危险的。 为什么? 因为技术路线开放,只是意味着: • 你可以根据项目特点选择架构方案; • 你可以根据器件和团队能力选择实现方式; • 你可以定义适合自己的工程标准、编码规范、验证方法。 但这不意味着: • 需求可以不清楚; • 追踪关系可以不建立; • review 可以省; • verification 可以靠“仿真差不多就行”; • 配置管理可以只管源码不管工具链; • 过程保证可以最后再补。 换句话说: DO-254 给你的是技术自由,不是过程豁免。 这点特别像搭桥。 DO-254 不要求你所有桥都用同一套结构设计,但它要求你必须证明: • 设计输入是明确的; • 设计计算是合理的; • 审查过程是存在的; • 风险控制是有效的; • 最终结果是可验证的。 桥可以有不同方案,但不能没有证明。 放到 FPGA 项目里也是一样。 你可以用不同的设计风格做一个接口控制模块,但 DO-254 仍然会问: • 这个模块的功能需求明确吗? • reset、power-on、异常输入行为定义了吗? • 设计中的关键决策有没有记录? • 仿真、分析、评审是不是都覆盖到了? • 最终 bitstream 是否来自受控版本? 所以,技术路线的开放性,恰恰意味着你更需要用流程和证据把自己的方案站住,而不是反过来把流程做轻。 三、Design Assurance 不是“设计要正确”,而是“要有证据证明设计正确” 这个概念如果不讲透,后面很多 DO-254 动作都会显得像“形式”。 很多工程师理解的正确性,是这种意思: • 功能跑通了; • 仿真通过了; • 板上看起来也对; • timing 没红; • 回归没报错。 这些当然都重要,但它们只能说明一件事: 你目前看到的结果,暂时没有暴露明显问题。 而 DO-254 所说的 Design Assurance,要求更高一层。 它不是单纯问你“结果对不对”,而是问你: • 这个结果是怎么来的? • 它是否建立在高质量 requirements 上? • 设计和 requirements 之间是否可追踪? • verification 是否基于 requirements,而不是凭经验补测试? • review、analysis、test 是否共同构成证据链? • 配置、问题报告、过程保证是否支持结果可信? 所以更准确地说: Design correctness 是结果层面的判断; Design assurance 是对这个结果“为何可信”的系统性证明。 这就是为什么很多团队会觉得 DO-254 特别“重”。 因为它要求的不只是一个设计结果,而是一整套支持这个结果的可信链条。 DO-254 的大量目标,并不直接落在“设计硬件”本身,而是落在计划、管理、标准化、验证、确认、配置管理、过程保证这些活动上。 如果用非常直白的话说: 在 DO-254 里,真正难的往往不是“把逻辑写出来”,而是“把这套逻辑为什么可信说清楚”。 四、最常见的误操作:用“功能仿真成功”掩盖过程缺失 这在 FPGA 项目里太常见了,而且很有迷惑性。 一个典型场景 某个控制模块已经完成了: • RTL 编写 • testbench 搭建 • 主要功能点仿真通过 • 波形看起来都正常 • 板级联调也没发现异常 团队这时很容易形成一个判断: “这个模块基本没问题,后面补补文档就行。” 但 DO-254 真正会问的问题,可能完全不一样: • 这些 test case 是从 requirements 推导出来的吗? • requirements 本身是否完整、可验证? • reset 行为是否在需求里定义过,还是设计自己补的? • invalid input 时输出行为是否明确? • 有没有 derived requirement 没被识别? • review 是否真正做过,还是只是看了下代码? • analysis 做了什么,还是全部寄希望于仿真? • 当前通过的结果对应哪个版本的约束、工具、netlist、bitstream? 这时你会发现: 仿真成功,可以证明“你测到的这些场景目前没问题”; 但它不能自动证明“整个设计保证闭环已经成立”。 这也是 DO-254 为什么强调 verification 不是只有 test。 它需要的是: • Review:尽早发现需求、设计、验证数据中的问题 • Analysis:用分析手段证明某些特性成立 • Test:通过仿真、硬件测试等手段验证行为 如果一个团队把 verification 简化成“testbench 做得强”,那往往只是把一部分验证做强了,而不是把设计保证做完整了。 这也是很多审查场景里最容易被问住的地方: “你证明了这个功能在某些测试下成立,但你怎么证明你验证的是对的需求、完整的需求、受控的设计版本?” 这不是 testbench 能单独回答的问题。 五、为什么 DO-254 必须是 guidance,而不能是一本“固定做法手册”? 这个问题值得反过来想一下。 如果 DO-254 真写成一本技术手册,会发生什么? 它就必须明确规定: • 设计必须按什么模式分层; • 状态机用什么编码方式; • 异步复位和同步复位怎么选; • 验证必须达到什么统一覆盖率; • 各类 PLD、FPGA、板卡、离散逻辑该用同一套实现规则。 但现实是,不同项目差异太大了: • 器件差异大 • 复杂度差异大 • DAL 不同 • 系统安全背景不同 • 设计团队能力不同 • 工具链环境不同 • 验证资源不同 如果它把技术路径写死,反而会降低工程适用性。 所以 DO-254 选择了另一条路线: 不替你做技术决策,但要求你把技术决策纳入受控过程,并形成证据。 这才是 guidance 的价值。 也正因为它是 guidance,很多新人会抓住“不是强制条文”这一点,试图把它当成“建议参考”。 很多团队总想找绕开的方法,结果最后发现,绕开 DO-254 往往比接受 DO-254 还更费时间、费成本。 因为你最终还是要回答同样的问题: • 你的硬件凭什么可信? • 你的过程凭什么可靠? • 你的结果凭什么能被接受? DO-254 给的,不是唯一理论路径,但通常是最成熟、最现实的路径。 六、DO-254 的真实价值,在于把“高完整性工程习惯”制度化 如果只把 DO-254 理解成“认证项目才需要”,其实会低估它。 从工程角度看,DO-254 里很多内容,本质上都是高完整性项目本来就应该具备的好习惯,只不过它把这些习惯变成了系统性的框架。 那些高完整性开发特征,本质上就是: • 项目前期认真做 plans、requirements、analysis • 用书面 requirements 驱动设计 • 用 independent reviews 尽早发现问题 • 从上往下分解功能,并保留 traceability • 建立高完整性的 validation 和 verification 活动 • 建立配置管理、问题报告和过程保证基础设施 这些事情,单独拿出来看,没有哪一项是“神秘的航空黑科技”。 真正难的是:大多数团队不会在项目压力下长期、稳定、系统地把这些都做好。 而 DO-254 的价值就在这里: 它不是发明了很多新动作,而是把复杂硬件开发中真正有效的工程最佳实践,组织成了一套可执行、可审查、可证明的设计保证体系。 对 FPGA 团队来说,这个价值尤其明显。 因为 FPGA 项目很容易落入一种“先实现、后解释”的节奏: • 先把逻辑做出来 • 先把问题修掉 • 先把功能跑通 • 后面再整理依据 短期看效率高,长期看风险大。 DO-254 本质上是在反这个惯性。 【FPGA项目里的典型场景】 下面这几个场景,很能说明“把 DO-254 当技术手册”为什么会出问题。 场景 1:把编码规范当成 DO-254 的主体 有些团队会把大量精力放在 RTL 编码规范、命名规则、注释格式上,然后觉得“我们已经很规范了”。 这些当然重要,但它们更多是工程质量控制的一部分,不是设计保证的全部。 如果 requirements 质量差、traceability 断裂、verification 不是基于 requirements 展开的,光靠代码规范撑不起 DO-254。 场景 2:仿真平台很强,但证据链很弱 testbench 很完整,回归也自动化了,覆盖率报表看起来很好。 但一问到: • test case 和 requirement ID 怎么对应? • 哪些行为是 derived requirement? • review 发现的问题如何闭环? • 当前结果和哪个基线绑定? 团队就开始补材料。 这就是典型的“验证动作强,设计保证链弱”。 场景 3:工具链变化没有纳入控制 某次时序收敛困难,团队升级了综合版本、调整了实现策略,结果 bitstream 变了,但大家只关心功能还对不对。 在普通项目里也许就过去了; 但在 DO-254 语境里,这些变化会直接影响: • 配置管理 • 结果可重建性 • 验证结果适用性 • 审查可信度 场景 4:跨时钟域问题只靠经验看代码 CDC 问题在 FPGA 项目里非常典型。很多时候团队觉得“老工程师看一眼就知道有没有问题”。 经验当然重要,但如果项目要求高完整性,CDC 这类问题更适合进入体系化验证和分析。 这也是为什么像 VIGIL-CDC 这类跨时钟域设计验证平台,在某些项目阶段会很契合 DO-254 的思路——它不是替代工程判断,而是帮助团队把 CDC 风险识别和分析做得更系统、更可留痕。 同样,如果团队已经开始重视代码规则一致性和前期静态问题收敛,那么像 VIGIL-Lint 这样的规则检查平台,也更适合作为设计质量和前端问题发现的辅助工具。 它本身不等于 DO-254 合规,但如果使用得当,确实可以帮助团队把 review 和前期缺陷发现做得更扎实。 这里要特别强调一句: 工具可以增强过程,但工具本身不是过程。 这恰恰也是 DO-254 的思路。 七、如果只把 DO-254 看成“文档要求”,最后一定会走偏 理解到这里,其实可以顺手把另一个常见误解一起纠正掉。 很多人一听“设计保证”,马上联想到的不是工程,而是文档: • 要写很多计划 • 要写很多报告 • 要留很多记录 • 要维护很多追踪关系 于是就会产生一种反感: “DO-254 不就是多写文档吗?” 这个理解的问题在于,它把载体当成了目的。 文档、记录、报告、矩阵,当然都是 DO-254 需要的。 但它们之所以存在,不是为了堆材料,而是为了回答几个关键问题: • 你做了什么? • 为什么这么做? • 你怎么证明这样做是对的? • 这个结果和需求、设计、验证、配置之间是什么关系? • 这个项目现在是否处于一个已知、受控、可审查的状态? 如果这些问题没有工程活动支撑,再漂亮的文档都没有意义。 反过来,如果工程活动做了,但没有留下足够证据,那么从设计保证视角看,它仍然不完整。 所以真正应该记住的是: DO-254 不是文档导向,也不是技术导向,它是证据导向。 而证据,必须来自受控过程。 小结 这一篇如果只保留一句核心判断,那就是: DO-254 不是技术手册,因为它不负责告诉你“硬件该怎么设计”;它是设计保证指南,因为它负责要求你“如何证明这个硬件被正确地设计出来了”。 围绕这个结论,可以再展开成四个要点: 1. 技术路线开放,不等于流程可以跳过。 你可以自由选择方案,但不能跳过需求、验证、追踪、配置管理和过程保证。 2. Design assurance 不等于 design correctness。 前者不是“你觉得设计对了”,而是“你能用证据链证明设计对了”。 3. “功能仿真成功”远远不够。 仿真只是 verification 的一部分,不能替代 requirements、review、analysis、traceability 和 configuration control。 4. DO-254 的价值,不在于规定技术细节,而在于制度化高完整性工程实践。 它不是替你做设计,而是防止团队只剩“把功能做出来”这一个目标。 如果 FPGA 工程师能够把这个认知建立起来,后面再去看 planning、requirements、validation、verification、CM、PA,很多原本看起来“很重”的动作,就会开始变得有逻辑。 下篇预告 前两篇我们都在做一件事:先把 DO-254 的底层认知搭起来。 • DO-254 到底是什么 • 为什么它不是技术手册,而是设计保证指南 那接下来,就该进入一个所有人都会遇到、但经常一开始就理解不透的核心概念了: DAL 是什么?为什么 Level A 和 Level C 的开发方式差别这么大 下一篇我们会重点讲清楚: • DAL 到底来自哪里 • 它为什么不是“项目难度等级” • 为什么同样是 FPGA,DAL 不同,过程强度会差很多 • Level 越高,为什么验证、独立性、证据要求都会明显加严 这篇开始,系列就会真正进入 DO-254 的骨架部分。 DVS‑254|面向 DO‑254 的 FPGA 自动化物理测试平台 DVS‑254 是一套面向 DO‑254 / ED‑80 适航项目的 FPGA 自动化物理测试与验证平台,专为 DAL‑A / DAL‑B 等高完整性等级项目设计。平台以“仿真与物理验证等效”为核心理念,将仿真阶段已验证的 Testbench 直接复用到 FPGA 板级物理测试中,帮助工程团队高效形成审查可接受的验证证据。 核心能力包括: • 重用 Simulation Testbench 进行 FPGA 物理测试 • 仿真验证与硬件物理验证采用统一测试平台 • 支持鲁棒性测试与 worst‑case 场景系统化覆盖 • 支持高速接口测试(DDR3 / PCIe 等) • 自动生成基于需求的测试记录、测量数据与代码覆盖率报告 • 满足 DO‑254 DAL‑A 等级的验证流程与交付要求 DVS‑254 已在多个 DO‑254 项目中应用,致力于将 FPGA 的真实物理行为,转化为可复查、可追溯、可取证的审查证据。