防芯片锁死:面向一次性 eFuse 的高安全等级 RTL 设计

EETOP 2026-06-02 11:24

RTL 中的一个毛刺就可能导致 eFuse 控制器意外编程,从而永久砖掉昂贵的硅芯片。本文深入探讨防御纵深(Defense-in-Depth)的 FSM 设计、冗余看门狗以及形式化 SVA 验证策略。

在 SoC 设计领域,我们习惯了软件的可修改性和寄存器的可复位性——发现 Bug 就能打补丁。然而,电子熔丝(eFuse)却遵循完全不同的原则:永久性

eFuse 是一次性可编程(OTP)元件,用于存储关键且不可更改的数据,例如唯一设备 ID、密码学根密钥,或后硅制造微调值。编程 eFuse 是一个物理破坏性事件,如图 1 所示。

防芯片锁死:面向一次性 eFuse 的高安全等级 RTL 设计图1

 1eFuse 熔断前(左)与熔断后实物示意,图片基于知识共享协议 CC4.0 授权,取自 Rahman 等人文献

如果你的 RTL 控制器出现毛刺,意外触发烧录或使编程电压施加时间过长,你可能会在芯片还没出厂前,就永久砖掉一块价值 500 美元的处理器。

本文将深入讲解如何为 eFuse 控制器设计防砖机(bricking-proof) 的稳健 RTL,包括必要的安全机制、有限状态机(FSM)构建,以及使用 SystemVerilog Assertions(SVA)进行的关键前硅验证策略。

挑战:连接数字逻辑与物理永久性

eFuse 本质上是一个高风险的模数接口。数字控制器必须精确管理涉及高压(VDDQ)和特定时序窗口(TprogT_{prog})的事件序列。

eFuse 通过施加高电流脉冲实现编程,该过程称为电迁移(electromigration)——电流导致导电材料发生迁移,从而将熔丝从低阻态(未烧断)永久变为高阻态(已烧断)。

防芯片锁死:面向一次性 eFuse 的高安全等级 RTL 设计图2
图 2.用于 eFuse 编程的 RTL 控制器系统视图

稳健 RTL 设计:防御纵深

为防止意外编程,我们在 RTL 中采用多层保护逻辑。只有当有意下达命令、经过正确时序且经过数学验证后,才允许“烧录”操作。

第 1 层:双敲门(Double-Knock)解锁序列最关键的保护机制是要求写入特定的多比特“魔术密钥”(Magic Key)。由于噪声或宇宙射线导致的单个比特翻转,绝不能让控制器进入编程状态。系统必须向安全寄存器写入唯一且确定的模式后,才能使能编程。

第 2 层:FSM 状态采用 Hamming / Gray 编码如果 FSM 使用顺序编码(00、01、10、11),单个比特翻转就可能导致状态错误跳转(如从 IDLE 直接跳到 BURN)。我们采用具有更高汉明距离(Hamming distance)的编码或 Gray 码,并设置默认的“Error”安全状态来捕获所有非法跳转。

第 3 层:冗余硬件定时器(Watchdog)编程脉冲宽度(TprogT_{prog})极其关键。若时间过长,熔丝宏可能过热并损坏周边电路。因此,主定时计数器必须辅以一个独立的冗余硬件看门狗,无论 FSM 处于何种状态,一旦超过最大阈值就强制将编程信号拉低。

用 SystemVerilog 实现 FSM

以下是一个 6 状态 FSM 的实现示例,涵盖了“双敲门”解锁(需同时满足 EFUSE_UNLOCK_KEY 和 prog_cmd)、Gray 相邻编码,以及 watchdog_kill 强制跳转到 ERROR_SAFE 状态。

module efuse_ctrl_fsm (    input  logic        clk,    input  logic        rst_n,    input  logic [31:0] magic_key_in,   // APB/SPI input    input  logic        prog_cmd,    input  logic        timer_done,    output logic        burn_en,        // To fuse macro    output logic        timer_start,    output logic [2:0]  fsm_status);    // ----------------------------    // Safety-Critical FSM Encoding    // (Hamming-distance-2 one-hot-like encoding)    // ----------------------------    typedef enum logic [2:0] {        IDLE       = 3'b000,        UNLOCK     = 3'b011,        SETUP      = 3'b110,        BURN       = 3'b101,    // Critical programming state        VERIFY     = 3'b111,        ERROR_SAFE = 3'b001    } efuse_state_e;    efuse_state_e state, next_state;    logic watchdog_kill;    // Unlock key (0xACE0FACE)    localparam logic [31:0] EFUSE_UNLOCK_KEY = 32'hACE0FACE;    // ----------------------------    // State Register    // ----------------------------    always_ff @(posedge clk or negedge rst_n) begin        if (!rst_n)            state <= IDLE;        elseif (watchdog_kill)            state <= ERROR_SAFE;    // Watchdog override        else            state <= next_state;    end    // ----------------------------    // Next-State & Output Logic    // ----------------------------    always_comb begin        next_state  = state;        burn_en     = 1'b0;        timer_start = 1'b0;        fsm_status  = state;        case (state)            IDLE: begin                // Advance only on valid unlock key                if (magic_key_in == EFUSE_UNLOCK_KEY)                    next_state = UNLOCK;            end            UNLOCK: begin                // Explicit program command required after unlock                if (prog_cmd)                    next_state = SETUP;            end            SETUP: begin                timer_start = 1'b1;         // Allow VDDQ to settle                if (timer_done)                    next_state = BURN;            end            BURN: begin                burn_en     = 1'b1;         // Trigger analog burn                timer_start = 1'b1;                if (timer_done)                    next_state = VERIFY;            end            VERIFY: begin                // Post-burn settling; return to IDLE when done                if (timer_done)                    next_state = IDLE;            end            ERROR_SAFE: begin                // Trap state — requires full hardware reset to exit                next_state = ERROR_SAFE;            end            // Catch-all: any illegal encoding goes to safe state            default: next_state = ERROR_SAFE;        endcase    end    // ----------------------------    // Simplified Redundant Watchdog    // In production this is a separate counter module; watchdog_kill asserts    // if burn_en stays high longer than the permitted burn window.    // ----------------------------endmodule

验证策略:验证“不可测试”的部分

由于熔丝一旦烧断就无法复位,前硅验证必须极其严谨。

熔丝宏的行为模型验证环境中的关键部分是一个 Verilog 行为级熔丝阵列模型。该模型需在多次仿真之间保持状态(已烧/未烧),并记录每个比特的累积编程时间。若检测到同一比特被重复编程,或累积 TprogT_{prog} 超过规格,应立即报错。

动态验证(UVM Sequences)在 UVM 环境中,测试序列需超越常规寄存器访问,必须注入错误情况:

  1. 毛刺注入
    在 prog_cmd 或 magic_key_in 信号上引入单周期毛刺,FSM 必须保持在 IDLE 状态不动。
  2. 烧录中复位
    在 burn_en 为高期间强制系统复位。行为模型需验证熔丝状态变为“不确定”,但控制器逻辑能安全复位。

使用 SVA 形式化验证安全性

形式验证(Formal Verification)特别适合 eFuse 控制器这类安全关键逻辑。SVA 可以数学证明在设计约束下,危险情况不可能发生。

关键 SVA 示例:

burn_en 必须经过解锁

必须保证编程使能信号(burn_en)只有在 FSM 经过特定解锁状态后才能置高。
// Interface signal to detect when the unlock sequence was validlogic unlock_sequence_complete;assign unlock_sequence_complete = (state == UNLOCK) && (magic_key_in == EFUSE_UNLOCK_KEY);// ASSERTION 1: No burn without prior unlock// If burn_en is high, then unlock_sequence_complete MUST have been true// at some point in the previous 'N' cycles.property p_no_burn_without_unlock;  @(posedge clk) disable iff (!rst_n)  burn_en |-> $past(unlock_sequence_complete, 2); // Example delay for setupendpropertyassert_no_unlocked_burn: assert property (p_no_burn_without_unlock)  else $error("CRITICAL SAFETY VIOLATION: burn_en asserted without prior valid unlock sequence!");
T_prog 最大时序限制
必须保证burn_en 信号高电平持续时间绝不超过物理规格允许的最大值。
localparam T_PROG_MAX_CYCLES = 1000// Example spec limit// ASSERTION 2: Maximum programming duration limit// Once burn_en is high, it MUST return low within T_PROG_MAX_CYCLES.property p_burn_duration_limit;  @(posedge clk) disable iff (!rst_n)  $rose(burn_en) |-> strong(##[1:T_PROG_MAX_CYCLES] !burn_en);endpropertyassert_burn_duration_limit: assert property (p_burn_duration_limit)  else $error("MAX TIMING VIOLATION: burn_en exceeded T_PROG_MAX_CYCLES! The fuse is bricked.");

总结

eFuse 设计是数字 SoC 中集成模拟功能时复杂度与风险并存的典型代表。我们必须在 RTL 中应用防御纵深原则,包括严格的解锁序列、安全的 FSM 编码以及冗余看门狗。

遵循这些指南,我们能将一个本质上高风险的过程转化为确定性、安全的操作。结合行为级宏模型和形式化验证,我们可以自信地交付强大、安全、且真正防砖机 的最终硅芯片。

原文:

https://www.allaboutcircuits.com/technical-articles/bricking-proof-designing-safety-critical-rtl-for-efuse-controllers/

半导体/AI 技术大会

(报名通过 可享免费午餐)

防芯片锁死:面向一次性 eFuse 的高安全等级 RTL 设计图3

声明:内容取材于网络,仅代表作者观点,如有内容违规问题,请联系处理。 
安全 芯片
more
钠离子电池内短路研究获突破 集流体创新升级筑牢安全防线
Perplexity“个人电脑”全面开放:Mac用户可本地部署AI代理,直面OpenClaw安全挑战
OpenClaw爆火,暴露12类致命隐患!MCP协议安全基准发布 | ICLR
Claude Code Routines公测、Spot装Gemini1.6、Anthropic派AI研究AI安全
AI算力下半场,“内生安全”是一块芯片的入场券
Anthropic限制发布超强AI模型Mythos,安全与商业考量并存
中石油专家谈能源(石油)安全与汽车消费
全隐藏式门把手退潮,2026北京车展见证安全回归
印度以“安全”为由全面替换中国产监控设备,大华回应影响有限
3月汽车销量汇总:比亚迪、奇瑞、吉利领跑市场;曝国内所有安卓大厂本月都会涨价;微信初代测试机现身;我国首部移动电源安全国标出台...
Copyright © 2025 成都区角科技有限公司
蜀ICP备2025143415号-1
  
川公网安备51015602001305号