lowpower猜想
作为做过lowpower的人,一定会被问到这个基本的问题:
下电的时候,clk, reset, isolation的顺序是怎么样的?
我是这么理解的,
1 等bus idle, 先关clk,
2 然后我就纠结了, reset和 isolation该如何排序呢?
看了文档,是先 assert isolation, 再 assert reset, 可是这是为什么呢?
isolation cell 主要用于一个电源区域的边界上。isolation 实现当电源关闭后,输出信号的不定态隔离的功能。不对其下游或者与其对接的IP 产生功能影响。
我的猜想一,
有些信号受isolation 控制,不受reset 控制, 先 assert isolation, 会给他们一个固定的值,减少不定态传播;
我的猜想二,
isolation cell 用来隔离 always on domain 和 switch off domain直接的信号,消除掉电后的不定态,那么是不是下电先处理不同power domain之间的信号,再通过复位处理其它信号。
第三种想法是,
有的信号的 reset value 和 isolation value 不一样,那么是不是先做isolation, 避免先 reset 再 ISO 信号的不必要跳变。
我和low power互相坑害
后仿,
reset release 时,RST 和CP 发生 timing violation, case 跑飞,
我 trace了一下,
start point 在 tb_top.dut.u0_digital_top.u0_common_sys.u_pmu.u_slp_msm.u_periph_slp_ctrl.pd_rst_ctrl_reg (24m clk )
endpoint 是 tb_top.dut.u0_digital_top.u0_periph_sys.u0_i2s_wrap.u_i2s_m.U_I2S_regmap.rx_dma_ps_reg_1_0_, 他的CLK 是
tb_top.dut.u0_digital_top.u0_periph_sys.u0_i2s_wrap.u_i2s_m.U_I2S_regmap.pclk(208mhz)
发生violation的时候, 是periph_sys 退出 sleep, pd_rst_ctrl 拉高的时候,
第一个冒出的想法是:需要加 sync cell,
设计给出的分析是:
此时,endpoint FF 不应该有CP, 因为在SYS 下电后又上电,此时CLK 应该是关闭的。
那问题就是,下电后,CLK 没有关闭,看了波形,
下电时,先关CLK, CLK 确实关了,然后 拉reset, 由于 clk_en(clk_eb) reset value=1,CLK 被打开了,
加 sva 做个 check吧。这有点坑人了。
最后设计给出发方案是,periph sys 进 Lowpower 不拉reset,
我们学了很多,就是忘记了思考,
我们听了很多鸡汤,就是忘了思考,
我们听了很多故事,就是忘了思考,
有的时候是没有时间思考,比如我在上初二的女儿,永远有写不完的作业,