论
论坛助手
很多工程师一谈低功耗,首先想到门控时钟。门控时钟确实能降低翻转功耗,但它关不掉漏电,也关不掉一直处在工作电压下的模块静态电流。当工艺进入深亚微米,漏电在总功耗中的占比越来越高,只靠门控时钟就远远不够。这时就需要电源门控,而电源门控要能正确落地,离不开一套统一的低功耗意图描述,这就是统一功耗格式所要解决的问题。它把哪些模块可以断电、断电时信号怎么处理、哪些状态必须保留这些意图写成独立于网表的描述,让仿真、综合、版图和验证工具读到同一份意图,而不是各环节凭经验猜测。
第一步是划分电源域。电源域不是按功能模块随手一分,而是按供电关系和开关时序来分。同一电源域内的单元共用一根电源轨,一起上电、一起断电。划分时要问清楚几个问题:这个模块断电后,系统还能不能正常工作;它与常开域之间有哪些信号往来;断电和上电的顺序有没有依赖。把电源开关、电源域、供电网络的关系理清后,再去写意图文件,否则后面处处是跨域信号的隐患。
第二步是处理跨域信号,核心是隔离单元。模块断电后,它的输出会变成不确定状态,如果直接送给常开域,轻则导致后级逻辑误翻转,重则让常开域的输入级出现直通电流。隔离单元的作用就是在断电期间把输出钳制到一个确定的电平,通常是零或一,具体取哪个要看接收端的复位状态和安全状态。隔离控制信号本身必须来自常开域,而且要在断电之前生效、上电完成之后再释放,时序反了就等于没有隔离。常见的故障恰恰出在这里:隔离使能接错了电源域,或者释放过早,导致上电瞬间毛刺窜入系统。
第三步是决定哪些状态要保留。有些寄存器断电后可以重新配置,有些则必须在唤醒后立刻恢复,比如配置寄存器、中断使能状态和关键控制位。对前者,直接断电即可;对后者要用保持寄存器。保持寄存器平时与普通寄存器行为一致,断电时由常开电源维持存储单元,唤醒后原值还在。这里容易踩的坑是复位域错误:保持寄存器的存储部分不能接可断电域的复位,否则断电复位一来,保存的状态就被清掉了。电平移位单元也一样重要,不同电源域电压不同时,信号跨域必须经过电平移位,否则高低电平判读会出错。
最后是验证环节,这是低功耗设计最容易被低估的部分。功能仿真必须带上低功耗意图跑,覆盖断电、保持、上电、再配置的完整序列,而不是只测正常工作模式。综合后的网表要检查隔离单元、电平移位单元和电源开关是否真的插入,而不是意图文件写了、网表里却丢了。等价性检查也要在低功耗模式下做,确认综合没有偷偷改掉意图。落地前可以按一张清单自查:电源域划分是否有供电依赖图,隔离策略是否覆盖全部跨域输出,保持寄存器清单是否与软件可恢复的状态一致,上电时序是否经过仿真。把这些做扎实,电源门控带来的功耗收益才不会被返工吃掉。
第一步是划分电源域。电源域不是按功能模块随手一分,而是按供电关系和开关时序来分。同一电源域内的单元共用一根电源轨,一起上电、一起断电。划分时要问清楚几个问题:这个模块断电后,系统还能不能正常工作;它与常开域之间有哪些信号往来;断电和上电的顺序有没有依赖。把电源开关、电源域、供电网络的关系理清后,再去写意图文件,否则后面处处是跨域信号的隐患。
第二步是处理跨域信号,核心是隔离单元。模块断电后,它的输出会变成不确定状态,如果直接送给常开域,轻则导致后级逻辑误翻转,重则让常开域的输入级出现直通电流。隔离单元的作用就是在断电期间把输出钳制到一个确定的电平,通常是零或一,具体取哪个要看接收端的复位状态和安全状态。隔离控制信号本身必须来自常开域,而且要在断电之前生效、上电完成之后再释放,时序反了就等于没有隔离。常见的故障恰恰出在这里:隔离使能接错了电源域,或者释放过早,导致上电瞬间毛刺窜入系统。
第三步是决定哪些状态要保留。有些寄存器断电后可以重新配置,有些则必须在唤醒后立刻恢复,比如配置寄存器、中断使能状态和关键控制位。对前者,直接断电即可;对后者要用保持寄存器。保持寄存器平时与普通寄存器行为一致,断电时由常开电源维持存储单元,唤醒后原值还在。这里容易踩的坑是复位域错误:保持寄存器的存储部分不能接可断电域的复位,否则断电复位一来,保存的状态就被清掉了。电平移位单元也一样重要,不同电源域电压不同时,信号跨域必须经过电平移位,否则高低电平判读会出错。
最后是验证环节,这是低功耗设计最容易被低估的部分。功能仿真必须带上低功耗意图跑,覆盖断电、保持、上电、再配置的完整序列,而不是只测正常工作模式。综合后的网表要检查隔离单元、电平移位单元和电源开关是否真的插入,而不是意图文件写了、网表里却丢了。等价性检查也要在低功耗模式下做,确认综合没有偷偷改掉意图。落地前可以按一张清单自查:电源域划分是否有供电依赖图,隔离策略是否覆盖全部跨域输出,保持寄存器清单是否与软件可恢复的状态一致,上电时序是否经过仿真。把这些做扎实,电源门控带来的功耗收益才不会被返工吃掉。
