上电复位与掉电检测:让芯片每次都从确定状态起跑
更新时间:2026-09-12。本文是「集成电路大类 · 芯片设计」**入门层(beginner)**数字逻辑基础第八十篇。接上一篇步进电机之后,回到芯片内部:插上电源的头几毫秒里发生了什么?为什么 CPU 总是「知道」从第一条指令开始,而不是从随机状态乱跑?答案是 POR/BOR。它是模拟检测加数字复位展开的混合电路。
本文要回答的问题
- 刚上电时电压、时钟、触发器各是什么状态?为什么必须复位?
- POR 怎么判断「电源真的稳定了」?只用一个 RC 够吗?
- 运行中电压突然跌落,BOR 为什么要立刻把复位拉起来?
- 复位、时钟稳定(PLL lock)、复位释放三者的先后顺序为什么不能错?
- 数字部分怎么把模拟 POR 的短脉冲拉长到几百微秒?
一、上电瞬间:一切都是随机的
电源从 0 向额定电压爬升需要时间(毫秒级),其间所有晶体管都工作在非规定电压下:触发器、寄存器、SRAM 的初值是随机的 0/1,环形振荡器/PLL还没起振或频率不稳。若这时就开始执行,状态机会进入任意状态、CPU 可能从非法地址取指。上电复位 POR 的职责就是:在电源不可靠期间把芯片保持在复位态(所有触发器强制到已知值),等三个条件都满足——电源越过可靠门限、时钟已稳定、维持时间足够——再释放复位。
二、POR 模拟检测:RC + 施密特 + 比较
三、正确的上电时序:电源→时钟→释放复位
VDD ──╱________________________▔▔▔▔▔▔▔▔▔▔▔▔
POR_n ───────────────╱▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ (越过门限+延迟后才拉高)
clk ── 不稳 ──╱▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ (起振/PLL lock 后才稳)
rst_n ──────────────────────╱▔▔▔▔▔▔▔▔▔▔▔▔ (电源好 且 lock 后才释放)先有可靠电源,时钟源起振、PLL 报 lock,再在若干个稳定时钟沿后同步释放复位。若时钟没稳就释放,第一个有效沿可能落在亚稳窗口,复位树本身都可能被错误复位。因此常用「模拟 POR 做异步断言 + 数字计数器同步释放」。
四、数字展开与同步释放
模拟 POR 的脉冲可能很短,数字侧用一个时钟计数器把复位**展开(stretch)**到足够多的稳定周期(几百 µs,覆盖最深的时钟域/上电顺序),并采用异步断言、同步释放:电源一坏立刻无条件复位(不等时钟),释放时则在目标时钟域打两拍同步,避免复位撤离沿与时钟沿竞争导致部分触发器没被释放。
// 概念:外部 por_a 异步断言,数字计数后同步释放
always_ff @(posedge clk or negedge por_a)
if (!por_a) begin cnt <= '0; rst_n <= 1'b0; end
else if (cnt != RELASE_CYC) begin cnt <= cnt + 1'd1; rst_n <= 1'b0; end
else rst_n <= 1'b1; // 计数到,同步释放五、BOR:运行中的「再保险」
上电后电源仍可能因电池电量下降、负载突变、长线压降而瞬间跌落。**BOR(欠压检测)**持续监视 VDD:一旦掉到「逻辑尚在翻转但已不能保证保持/时序」的危险带(通常高于 SRAM 数据丢失点、留裕量),立刻重新断言复位,把芯片按在安全态,避免在半高电平下执行错误指令或写坏数据;电压恢复后走与上电相同的有序重启。BOR 阈值要和 SRAM 保持电压、最小时钟频率、IR-drop 一起留裕量。多电源域还要规定上电/掉电顺序,防止跨域倒灌(back-power)和隔离使能失序。看门狗(WDT)则处理「电源正常但软件跑飞」,二者互补。
与现有篇目的衔接
总结
一句话总结:上电瞬间电压缓慢爬升、时钟未稳、所有触发器和 SRAM 内容随机,必须靠上电复位 POR 在电源不可靠期间强制芯片处于已知状态,其模拟核用 RC 延迟或带隙基准加比较器(普遍加施密特整形和迟滞、毛刺滤波,裸 RC 怕慢上电和温漂)判断 VDD 已越过可靠门限;正确启动顺序是电源先好、时钟源起振并等 PLL lock、最后在稳定时钟域同步释放复位,否则第一个有效沿可能落入亚稳窗导致复位树本身被误复位,工程上采用「模拟信号异步断言以对电源故障即时反应、数字计数器把复位展开到足够长并在目标时钟域打两拍同步释放」;运行中 BOR 欠压检测持续监视电源,一旦跌落到逻辑仍翻转但已无法保证时序和 SRAM 保持的危险带就立即重新断言复位、电压恢复后有序重启,阈值要与 SRAM 保持电压、最小频率和 IR-drop 留裕量,多电源域还需规定上下电顺序防倒灌,它处理「电压不正常」而看门狗处理「电压正常但软件跑飞」,二者共同保证芯片每次都从确定状态起跑。