在无人值守的隧道紧急广播系统中,硬件级故障检测的可靠性直接关系到安全运营。本文以 GitHub 项目 amradio 为例,深度剖析形式化验证 FPGA 看门狗在安全关键 AM 广播系统中的工程实现,该项目采用 Red Pitaya STEMlab 125- 平台构建 12 通道 AM 发射系统,并通过 SymbiYosys 与 Z3 完成了 14 项安全属性的形式化证明。
系统背景与安全需求
无人隧道 AM 广播系统的核心功能是在紧急情况下向进入隧道的车辆推送告警信息。与传统商用隧道调频转播系统不同,此类安全关键系统面临一个根本性挑战:当上位机 GUI 或网络链路出现故障时,必须确保 RF 发射输出被可靠切断,而非产生不可控的静默发射或错误发射。系统架构采用 12 个 Numerically Controlled Oscillators(NCO)在 FPGA 内部生成载波并完成 AM 调制,理论上任何软件层面的异常都可能导致不受控的射频输出。
在此背景下,看门狗定时器的角色是:当来自 GUI 的 TCP/SCPI 心跳信号停止超过 5 秒时,立即强制关闭所有 RF 输出并进入闭锁状态,直至运维人员现场手动复位。这一设计符合 IEC 61508 安全完整性等级(SIL)的基本原则 —— 故障时必须进入预定义的安全状态,且不允许自行恢复。
看门狗架构设计
该实现的硬件架构遵循安全关键 FPGA 设计的核心准则:最小化状态空间、完全同步设计、独立时钟域。看门狗运行在 FPGA fabric 时钟域(125 MHz),与软件和网络协议栈完全解耦。这意味着即使主处理器死锁或操作系统崩溃,看门狗仍能独立执行超时检测。
核心状态机包含四个主要状态:IDLE(初始等待)、ARMED(监视中)、WARN(预警)、FAULT(故障闭锁)。当接收到有效的 heartbeat 信号时,计数器复位并返回 ARMED 状态;若心跳缺失,计数器持续累加至预警阈值时进入 WARN 状态,继续累加至超时阈值时进入 FAULT 状态并立即关闭 RF 输出。关键的设计决策是 FAULT 状态的不可逆性 —— 一旦触发,必须执行硬件复位序列才能清除闭锁,这避免了瞬态故障导致的 “抖动” 现象。
参数化设计是该实现的另一个亮点。看门狗的计时阈值、预警时长、计数器位宽等均可通过 Verilog 参数配置,形式化验证环境使用降频时钟进行快速验证,而实际部署时参数化为真实 125 MHz 时钟,这种方法确保了验证结果与实现的一致性。
形式化验证策略
形式化验证在安全关键硬件设计中的地位日益重要,特别是在 IEC 61508 SIL 3/4 或 ISO 26262 ASIL C/D 级别项目中,传统的仿真与测试已难以满足对极端边界条件与状态空间的完整覆盖要求。该项目采用 SymbiYosys 工具链结合 Z3 求解器,通过 k - 归纳与有界模型检查(BMC)两种技术互补完成验证。
十四项安全属性
项目声明已完成 14 项安全属性的形式化证明,这些属性可归纳为以下类别:
时序正确性属性确保看门狗不会提前触发。核心属性表述为:如果没有收到 kick 信号且看门狗已使能,则 FAULT 信号必须在精确的 N 个时钟周期后才会拉高。这一定理排除了计数器提前溢出或状态机误跳转的所有可能路径。
预警先决属性保证故障发生前必有预警。该属性要求 FAULT 状态只能从 WARN 状态进入,WARN 信号必须在 FAULT 之前至少 W 个周期断言。这确保了运维人员有足够的响应窗口。
计数器边界属性通过数学归纳法证明内部计数器永远不会溢出其预定位宽,也不会在下溢方向产生未定义行为。这一属性对避免由于计数器回绕导致的不可预测状态至关重要。
心跳有效性属性形式化定义了何为 “有效的 kick 信号”—— 脉宽、时序与协议符合预期时,计数器必须复位至零。这一属性建立了形式化模型与真实协议行为之间的对应关系。
状态机确定性属性证明在任意时钟周期,给定当前状态与输入组合,状态机的下一状态唯一确定。这消除了由于组合逻辑歧义导致的不稳定行为。
验证环境约束
形式化验证的有效性高度依赖于环境假设的合理性。项目对形式化模型施加了以下约束:时钟信号持续稳定翻转,复位信号在初始阶段完成撤离且不会随机再现,若 kick 信号来自跨时钟域则需经过两级同步器建模。这些约束确保了证明结果不因不现实的假设而失效。
覆盖率验证
除安全属性的形式证明外,项目还声明完成了六项覆盖率场景的形式化验证,包括:正常持续心跳场景(验证无限运行不触发)、单次心跳后停止场景(验证超时路径)、连续快速心跳场景(验证无竞态)、预警触发场景(验证 WARN 状态可达)、故障触发场景(验证 FAULT 状态可达)、手动复位场景(验证闭锁释放)。完整的 FSM 状态与转移覆盖是安全关键系统认证中的重要证据。
工程实践参数与选型建议
对于希望在类似安全关键系统中复用此方案的工程师,以下参数可作为设计参考:
看门狗时钟域应优先选择独立时钟源(如 FPGA 内部 RC 振荡器或专用晶振),避免与被监视系统共享时钟导致共因故障。若必须共享,需在 DFA(依赖失效分析)中明确记录并评估诊断覆盖率。
计数器位宽决定最大超时时长。以 125 MHz 时钟为例,32 位计数器支持约 34 秒的理论超时范围,实际设计需根据安全分析确定合适的位宽与预分频系数。
跨时钟域的 kick 信号建议采用两级触发器同步配合边沿检测,这既满足了 CDC(时钟域交叉)设计要求,又能在形式化模型中准确描述同步延迟。
安全输出应采用直接驱动方式,绕过任何可被软件配置的 GPIO 复用路径,确保看门狗失效时硬件能强制进入安全状态。
故障闭锁的恢复机制应根据系统危害分析确定。自动恢复适用于低危害场景,人工复位适用于涉及人身安全的高危害场景。该 AM 广播系统选择人工复位正是基于对误恢复导致持续错误发射的零容忍。
小结
形式化验证 FPGA 看门狗为安全关键嵌入式系统提供了传统仿真无法达到的数学级保障。通过 SymbiYosys 与 Z3 的 14 项安全属性证明,系统设计者能够自信地宣称看门狗在所有可达状态下的行为均符合规范。对于无人隧道广播、轨道交通控制、工业安全仪表等 SIL 3 以上级别的应用,这种经过形式化验证的硬件监控方案正成为行业最佳实践。
资料来源:GitHub 项目 amradio(park07)提供了完整的 RTL 实现与 SymbiYosys 验证环境,Reddit 讨论帖亦记录了该项目的技术细节与设计决策。