4. 电压域与电平转换:多电压域设计概念、电平转换器工作原理、隔离单元使用
各位同学,今天我们来聊聊低功耗设计里一个绕不开的话题——电压域。说实话,我刚入行那会儿,觉得这玩意儿就是个麻烦。不就是电压高一点低一点嘛,能有多大区别?直到我第一次流片回来,芯片在某个模式下死活不工作,查了三天三夜,最后发现是跨电压域的信号没处理好。嗯,从那以后,我再也不敢小看它了。
4.1 多电压域设计概念
什么叫多电压域?说白了,就是芯片里不同的模块,用不同的电压供电。比如CPU核心跑0.9V,I/O接口跑1.8V,SRAM可能跑1.0V。为什么要这么折腾?你想想看,功耗和电压的平方成正比。把电压从1.2V降到0.9V,动态功耗直接降了将近一半。我做过一个项目,光是把一个视频编解码模块从1.1V降到0.8V,整颗芯片的功耗就降了35%。
但问题来了——不同电压域之间怎么通信?这就引出了我们今天的主角:电平转换器和隔离单元。
核心原则:跨电压域的信号,必须经过电平转换。否则,高电压域的信号直接灌到低电压域,轻则逻辑错误,重则烧管子。我在项目中见过有人偷懒没加电平转换器,结果低电压域的MOS管栅氧化层直接被击穿,整批芯片报废。
4.2 电平转换器工作原理
电平转换器,英文叫Level Shifter。它的任务很简单:把输入端的电压摆幅,转换成输出端需要的电压摆幅。比如输入是0.9V/0V,输出要变成1.8V/0V。
常见的电平转换器结构有两种:
- 单端结构:结构简单,但速度慢,适合低频信号。我一般只在控制信号上用。
- 差分结构:速度快,抗干扰能力强,适合高速数据总线。但面积大,功耗也高。
这里给一个典型的差分电平转换器电路结构,你们感受一下:
// 差分电平转换器核心结构(示意)
// VDDL = 0.9V, VDDH = 1.8V
// 输入:IN_L (0.9V域)
// 输出:OUT_H (1.8V域)
// 交叉耦合PMOS对
M1: PMOS, drain=OUT_H, gate=OUT_H_BAR, source=VDDH
M2: PMOS, drain=OUT_H_BAR, gate=OUT_H, source=VDDH
// 输入NMOS对
M3: NMOS, drain=OUT_H, gate=IN_L, source=GND
M4: NMOS, drain=OUT_H_BAR, gate=IN_L_BAR, source=GND
// 工作原理:
// 当IN_L=0.9V时,M3导通,OUT_H被拉低
// 交叉耦合结构使OUT_H_BAR被拉高到VDDH
// 完成从0.9V到1.8V的电平转换
这个结构的关键在于交叉耦合的PMOS对。它们形成正反馈,加速了电平转换的过程。我记得有一次调试一个高速接口,发现电平转换器的上升沿特别慢,后来发现是PMOS的尺寸配比不对。调了三天,最后把PMOS的宽长比从3:1改到5:1,问题就解决了。
个人经验:电平转换器的尺寸设计,一定要考虑负载电容。我曾经在一个项目中,电平转换器后面接了很长的走线,结果信号边沿变得很缓,导致后级电路误触发。后来我在输出端加了一级缓冲器,问题才解决。
4.3 隔离单元使用
隔离单元,Isolation Cell,它的作用是在某个电压域断电时,把输出信号钳位到一个确定的状态。为什么要这么做?你想想看,如果A域断电了,它的输出变成了高阻态或者不定态,B域还在正常工作,那B域接收到的信号就是乱七八糟的,整个芯片的逻辑就乱了。
隔离单元通常有两种工作模式:
- 钳位到0:输出固定为0,适合低电平有效的控制信号。
- 钳位到1:输出固定为1,适合高电平有效的控制信号。
- 保持模式:输出保持断电前的最后一个有效状态,适合数据总线。
这里给一个隔离单元的Verilog代码示例:
// 隔离单元 - 钳位到0模式
module iso_cell (
input wire data_in, // 来自可断电域的数据
input wire iso_en, // 隔离使能信号,高电平有效
output wire data_out // 输出到常开域
);
assign data_out = iso_en ? 1'b0 : data_in;
endmodule
// 使用示例
// 当VDD_A域断电时,iso_en拉高,data_out输出0
// 当VDD_A域正常工作时,iso_en拉低,data_out等于data_in
避坑指南:我曾经在一个项目中,隔离单元的使能信号和断电时序没配合好。断电信号先来了,隔离使能还没拉高,结果输出端出现了毛刺,导致后级电路误锁存。正确的做法是:先拉高隔离使能,再断电;上电时,先上电,再拉低隔离使能。这个顺序千万不能搞反。
4.4 实际设计中的注意事项
在实际项目中,电压域的设计远不止这些。我总结了几点经验:
- 电平转换器的位置:尽量放在接收端,也就是高电压域那一侧。这样可以减少高电压域走线的长度,降低动态功耗。
- 隔离单元的布局:尽量靠近可断电域的边界。这样断电域内部的走线不会影响到常开域。
- 电源域划分:不要划分得太细。我见过一个项目,分了十几个电压域,结果光电平转换器就占了芯片面积的15%,功耗反而没降多少。一般来说,3-5个电压域是比较合理的。
- 仿真验证:跨电压域的时序分析一定要做。我记得有一次,电平转换器的延迟在低电压下增加了50%,导致时序违例。后来我们在所有工艺角下都做了仿真,才把问题找出来。
总结一下:多电压域设计是低功耗芯片的必修课。电平转换器解决的是信号摆幅的问题,隔离单元解决的是断电后信号状态的问题。两者缺一不可。我建议你们在做设计时,先把电压域划分图画清楚,再逐个域去加电平转换器和隔离单元。这样思路清晰,不容易出错。
好了,这一章就讲到这里。下一章我们聊聊时钟门控和电源门控,这两个也是低功耗设计里的重头戏。有什么问题,欢迎课后交流。