要确保SRAM(静态随机存储器)在芯片复位时保持原有状态而不被初始化,需要结合硬件设计、电源管理和控制逻辑的综合方案。以下是具体实现方法:
独立的供电电源域(Always-On Power Domain)
// 电源切换逻辑(伪代码)
assign V_SRAM = (VDD >= 2.7V) ? VDD : VBAT;复位信号隔离
retain_en 决定是否屏蔽复位。wire sram_rst_n = sys_rst_n & retain_en; // retain_en=0时屏蔽复位retain_en 由用户固件或硬件事件(如低电中断)控制。使用具有复位使能的SRAM宏
RETAIN)的SRAM编译器(如TSMC 28nm库)。RETAIN=1 时,复位信号无效。sram_1rw #(.SIZE(1024)) u_sram (
.clk(clk),
.rst_n(sram_rst_n), // 受控复位
.retain(1'b1), // 强制保持状态
.we(we),
.addr(addr),
.data(data)
);数据保持模式(低功耗设计)
VDDM 引脚降低供电电压至数据保持电压(如0.7V)。// 固件控制(示例)
PWR->CTRL |= SRAM_RETAIN_MODE; // 进入保持模式
NVIC_SystemReset(); // 触发复位(SRAM内容不变)非易失性存储备份
void Voltage_Fault_ISR() {
backup_to_flash(sram_data, SRAM_SIZE);
while(1); // 等待复位
}+----------------+ +-------------------+
| Main Power | | Backup Battery |
| (VDD) +-----+ (VBAT) |
+-------+--------+ +---------+---------+
| |
| +------------+ |
+----> | Power MUX |<---+
+-----+------+
|
+------+-----+
| SRAM |
| (Always-On)|
+------+-----+
|
+------+------+
| Reset Logic |<-- sys_rst_n
| (Gate Ctrl) |<-- retain_en (from CPU/GPIO)
+-------------+
注意:具体实现需根据工艺库(如台积电/三星)的SRAM规格调整。通常90nm以下工艺的SRAM IP可直接支持复位隔离功能。
举报
更多回帖