作者Darren H. Chen方向汽车芯片功能安全分析与故障注入实践DemoD02_input_package标签汽车芯片功能安全输入文件Fault ListAlarm ListVCDFMEDADemo 说明D02_input_package的目标是建立一个标准化的功能安全验证输入包。第一篇文章已经搭好了最小闭环但如果没有清晰的输入文件边界后续 FIT 计算、DC 计算、故障列表生成、VCD 上下文提取和故障注入都会变得不可复现。本 Demo 对应的通用工具名称为safeic-inputcheck它的作用是检查一个功能安全验证项目的输入是否完整、路径是否正确、基础格式是否可读并生成输入检查报告。1. 为什么输入包比工具本身更重要很多工程项目的问题不是算法跑不出来而是输入定义不清楚。功能安全验证尤其如此因为它不是只读一个 RTL 文件就能完成而是要同时连接多类证据设计结构证据 可靠性模型输入 安全机制配置 运行上下文波形 故障模型 alarm / observe point 报告与数据库如果输入文件缺失、路径不统一、命名混乱后续分析会出现三个问题结果不可复现 结果不可解释 结果无法对比因此一个功能安全验证项目首先要定义输入包而不是急着写算法。2. 功能安全验证输入的五大类从工程角度看汽车芯片功能安全分析与故障注入至少需要五类输入。类别代表文件作用设计输入RTL、netlist、filelist、top定义被分析对象时钟与运行输入clkdef、reset、VCD/FSDB定义运行上下文安全分析输入FIT setup、lambda、mission profile、SM library支撑 FIT/DC 和安全机制建模故障注入输入fault.list、alarm.list、observe_points.list支撑 fault campaign项目管理输入manifest、session、config、output path支撑可复现流程这五类输入构成了后续所有 Demo 的基础。3. 设计输入RTL、Netlist、Filelist 和 Top设计输入回答的是我要分析哪个设计 这个设计由哪些 HDL 文件组成 顶层模块是什么 当前阶段是 architecture、RTL 还是 gate-level netlist一个最小设计输入包可以是inputs/ rtl/ toy_counter.v alarm_checker.v filelist.f design.yamlfilelist.f示例./rtl/toy_counter.v ./rtl/alarm_checker.vdesign.yaml示例top:toy_counter_toplanguage:verilogstage:rtl设计输入的关键不是文件多复杂而是能被工具稳定解析并能明确绑定到一个 top module。4. 时钟与运行输入为什么需要 clkdef 和 VCD功能安全故障注入依赖运行上下文。如果不知道时钟、复位和仿真时间窗口就无法判断故障在哪个时间注入 故障是否跨越有效时钟边沿 alarm 是否按时触发 状态是否和 golden trace 不一致因此需要定义时钟和波形输入。clkdef.clk可以简化为clk 10ns rising reset_n active_lowsim.vcd则来自 golden simulationinputs/ sim/ golden.vcd在本系列实践中VCD 会被视为 safety context而不只是波形查看文件。RTL SimulationGolden VCDVCD Context ExtractorState ActivityCompare WindowAlarm Timing5. 安全分析输入FIT setup 与 Safety Mechanism Library安全分析输入回答的是用什么可靠性模型 默认工艺类型是什么 温度与 mission profile 如何设置 有哪些安全机制 每种安全机制覆盖哪些结构区域一个简化的fit_inputs.yaml可以是fit_standard:simplified_iec62380mission_profile:passenger_compartmenttemperature_ja:65manufacturing_year:2026default_process:MOS.ASIC.STDCELL一个简化的sm_library.yaml可以是parity_check:description:endpoint parity checkercoverage:endpoint:0.90startpoint:0.00cone:0.00dup_compare:description:duplicated logic comparatorcoverage:endpoint:0.90startpoint:0.00cone:0.90这类文件不应该隐藏在脚本里。它们应该成为可审查、可版本管理、可对比的工程输入。6. 故障注入输入Fault List、Alarm List 和 Observe Points故障注入至少需要三个核心文件。6.1 Fault Listfault.list定义在哪里注入什么故障。示例top.u_counter.state_reg[0] SA0 100 -1 top.u_counter.state_reg[1] SA1 100 -1 top.u_counter.valid_reg 1 200 5可以约定四列fault_node fault_value inject_time duration其中SA0 / 0stuck-at 0 SA1 / 1stuck-at 1 -1永久故障 正整数 duration瞬态故障持续时间6.2 Alarm Listalarm.list定义哪些信号代表安全机制检测到了故障。示例top.u_checker.alarm_error top.u_checker.parity_error top.u_checker.timeout_error6.3 Observe Pointsobserve_points.list定义额外观察点。示例top.out_valid top.out_data[0] top.u_bus.resp_erroralarm 和 observe point 的区别是alarm安全机制明确报警 observe point故障是否传播到指定可观察位置7. Manifest把输入包变成可复现项目如果只靠命令行参数传递所有文件项目很快会变乱。因此需要一个统一的manifest.yaml。示例project:automotive_safeic_practice_d02demo:D02_input_packagedesign:top:toy_counter_topfilelist:inputs/filelist.fstage:rtlsimulation:clkdef:inputs/clkdef.clkgolden_vcd:inputs/sim/golden.vcdsafety:fit_inputs:inputs/fit_inputs.yamlsm_library:inputs/sm_library.yamlfailure_modes:inputs/failure_modes.yamlfault_campaign:fault_list:inputs/fault.listalarm_list:inputs/alarm.listobserve_points:inputs/observe_points.listoutputs:report_dir:outputssafeic-inputcheck不需要理解所有复杂算法只需要根据 manifest 检查文件是否存在、格式是否基本正确。8. D02 Demo 的工具架构D02_input_package的核心工具是safeic-inputcheck。它的输入是manifest.yaml inputs/*它的输出是outputs/input_check.rpt outputs/input_manifest.normalized.json outputs/missing_files.csv outputs/demo_summary.md架构如下manifest.yamlsafeic-inputcheckfilelist.fclkdef.clkfit_inputs.yamlfault.listalarm.listobserve_points.listgolden.vcdinput_check.rptnormalized_manifest.jsonmissing_files.csvdemo_summary.md检查项可以分为三层层级检查内容L1文件是否存在L2文件是否为空、是否可读L3文件是否包含必要字段或必要列9. 输入检查不是形式主义输入检查看起来简单但它是后续所有分析的基础。例如fault.list 中的节点在设计中不存在 alarm.list 中的信号没有出现在 VCD 中 top module 与 filelist 不匹配 fit_inputs.yaml 缺少 process observe_points.list 中写了 bus vector但工具要求拆 bit这些问题如果等到 fault campaign 阶段才发现调试成本会非常高。因此输入检查应该放在所有工具之前。完整流程是passpasspassfailInput PackageInput CheckDesign StatisticsFIT/DC AnalysisFault CampaignFix Input Package10. 方法论总结一个功能安全验证项目的第一步不是写复杂算法而是建立标准输入包。输入包要做到完整 可读 可检查 可版本管理 可复现 可对比D02_input_package的目标就是把输入包工程化。当输入包统一后后续模块就可以稳定串联safeic-designstats safeic-bfr safeic-structure safeic-dc safeic-faultgen safeic-vcdctx safeic-campaign safeic-classify safeic-report因此D02 的价值不在于算法复杂而在于把项目从“脚本堆叠”变成“工程流程”。