
1. 从零开始为什么CMOS逆变器的动态功耗这么重要如果你刚开始接触数字电路设计可能会觉得“功耗”这个词有点抽象离自己很远。但说实话无论你是做低功耗的物联网设备还是设计高性能的处理器功耗都是一个绕不开的坎。尤其是动态功耗它直接决定了你的芯片在跑起来的时候有多“费电”电池能撑多久甚至芯片会不会因为过热而罢工。CMOS逆变器也就是我们常说的反相器是数字电路里最基础、也最核心的“细胞”。它的功能很简单就是把输入的逻辑“1”变成“0”把“0”变成“1”。但就是这个简单的“开关”动作每一次翻转都会消耗能量。这个能量主要就花在两件事上一是给电路里各种电容充电放电二是晶体管在开关过程中有那么一瞬间电源和地之间会直接“短路”形成一股不小的电流。我们今天要重点聊的就是第一类——电容充放电带来的功耗也就是开关功耗。你可能会问电路里哪来那么多电容其实在真实的芯片里电容无处不在。晶体管本身的栅极有电容连接各个元件的金属导线之间有寄生电容就连下一级电路的输入端对地也有一个负载电容。每次输出要从低电平跳到高电平电源VDD就得通过PMOS管像给水桶灌水一样把这些电容“灌”满电荷这个过程需要电流也就消耗了能量。反过来输出从高变低时这些电容里储存的电荷又要通过NMOS管“倒”到地GND去同样会消耗能量。这部分能量最终都以热的形式散发了。所以搞清楚动态功耗的特性不仅仅是算个数字那么简单。它直接关系到你如何选择晶体管的尺寸W/L如何优化电路的布局布线来减小寄生电容以及如何设计时钟和信号来控制翻转的频率。这些决策最终都会体现在产品的性能、成本和可靠性上。而LTspice就是我们手里那把非常好用的“放大镜”和“计算器”能让我们在真正流片之前就把这些问题看得清清楚楚算得明明白白。2. 手把手搭建你的第一个LTspice逆变器仿真环境纸上谈兵终觉浅咱们直接上手操作。LTspice是一款免费、强大且对新手非常友好的SPICE仿真软件由Linear Technology现属ADI开发。它的启动速度快模型库丰富特别适合用来做这种基础电路的原理性分析和学习。2.1 创建电路图与选取元件打开LTspice新建一个原理图。我们首先需要两个MOSFET晶体管。在LTspice的元件库中最常用的是nmos4和pmos4它们代表四端栅极、源极、漏极、体端的NMOS和PMOS晶体管。你可以按快捷键F2打开元件选择窗口直接搜索“nmos4”和“pmos4”并放置到原理图中。放置好后我们需要搭建一个标准的CMOS逆变器结构连接电源和地放置一个电压源voltage快捷键F2搜索将其一端接地GND符号快捷键F2搜索gnd另一端连接到PMOS的源极S端。这个电压就是我们的VDD比如先设为3.3V。连接晶体管将PMOS的漏极D端和NMOS的漏极D端连接在一起这个节点就是我们的输出节点Vout。完成回路将NMOS的源极S端连接到地GND。连接栅极将PMOS和NMOS的栅极G端连接在一起这个节点就是我们的输入节点Vin。添加输入信号我们需要一个信号来驱动这个逆变器让它不停地翻转。再放置一个电压源将其正极连接到Vin负极接地。这个电压源我们将设置为一个脉冲信号用来模拟数字输入。现在你的原理图应该看起来像一个倒着的“T”字形PMOS在上NMOS在下输入在左输出在右。别急最关键的一步来了——设置晶体管的尺寸。2.2 设置晶体管尺寸W/L的学问在LTspice中设置MOSFET的尺寸非常直观。用鼠标右键点击NMOS晶体管的符号会弹出一个属性窗口。这里我们需要关注两个关键参数W宽度 Width和L长度 Length。在集成电路中晶体管的驱动能力可以简单理解为导通电阻的大小和速度很大程度上由宽长比W/L决定。W越大L越小晶体管导通时电阻就越小充电放电的能力就越强速度也越快但代价是面积增大栅极电容也变大。为了模拟一个真实的工艺我们采用一个经典的90纳米工艺节点作为参考这只是一个教学示例实际仿真请使用你目标工艺的模型文件。我们可以设置NMOS:L90nW150n。这意味着长度是90纳米宽度是150纳米。PMOS:L90nW375n。这里我故意把PMOS的宽度设成了NMOS的2.5倍。为什么PMOS要更宽这是因为在硅工艺中空穴PMOS中载流子的迁移率通常只有电子NMOS中载流子的1/2到1/3。迁移率低意味着同样的尺寸下PMOS的导通电阻更大速度更慢。为了让逆变器的上升时间由PMOS负责对负载电容充电和下降时间由NMOS负责对负载电容放电大致相等获得对称的驱动能力一个常见的经验法则就是把PMOS做得比NMOS宽2到3倍。我们这里先取2.5倍试试看效果。2.3 添加负载让仿真更贴近现实一个理想的、不带任何负载的逆变器仿真意义不大。在现实中逆变器的输出总要驱动点什么——可能是另一级门的输入也可能是一段导线。这些都会引入电容和电阻负载。我们在输出节点Vout到地之间添加两个元件负载电容 C_load比如1pF。这个电容代表了所有需要被充电放电的电容之和包括下一级门的输入电容、连线之间的寄生电容等。负载电阻 R_load比如1MEG1兆欧。这代表一个高阻抗的负载比如一个MOSFET的栅极。在直流状态下它几乎不消耗电流但它和电容一起决定了电路的某些动态特性。添加完负载的电路才是一个比较完整的、可用于分析动态功耗的测试电路。现在我们可以开始运行第一次仿真了。3. 运行仿真与初窥动态电流的真面目电路搭好了我们来让它动起来看看电流到底是怎么流的。3.1 配置瞬态分析与查看波形首先设置输入信号Vin。右键点击连接Vin的电压源将其设置为脉冲源。一个典型的设置是Vinitial0(初始低电平)Von3.3(脉冲高电平与VDD一致)Tdelay0(延迟时间)Trise1n(上升时间设一个很小的值模拟理想跳变)Tfall1n(下降时间)Ton500n(高电平脉宽)Tperiod1000n(周期即1MHz频率)接下来点击菜单栏的Simulate-Edit Simulation Cmd选择Transient瞬态分析。设置一个合适的仿真时间比如2u2微秒这能让我们看到几个完整的周期。点击运行。仿真结束后你会看到空白的波形查看器。在原理图上用鼠标左键点击你想观察的节点比如Vout它的电压波形就会显示出来。你应该能看到一个漂亮的、与输入反相的方波。但这不是重点重点是电流。3.2 探测神秘的充放电电流LTspice有一个非常酷但很多人不知道的技巧你可以直接测量流过一根导线的电流把鼠标移动到连接PMOS漏极到电容的那根导线上按住键盘上的Alt键Mac上是Cmd键鼠标指针会变成一个电流探针的图标此时点击导线。奇迹发生了波形窗口里自动增加了一条曲线显示的就是流过这根导线的电流我们把它记为I(Vdd)或I(PMOS_drain)。让我们来分析一下这条电流曲线在一个周期内的变化输入为低输出为高稳态此时PMOS导通NMOS截止。Vout约等于3.3V。由于负载电阻R_load非常大1兆欧流过它的稳态电流极小只有大约3.3V / 1MΩ 3.3uA。这个电流是直流电流由电阻负载引起不属于我们讨论的开关动态功耗。而从电源VDD流出的总电流也基本就是这个值因为电容C1两端电压稳定没有充电电流。输入从低跳变到高输出下降沿PMOS迅速截止NMOS迅速导通。输出节点Vout要从3.3V被拉到0V。这时存储在负载电容C_load上的电荷必须通过导通的NMOS管泄放到地。你会在电流波形上看到一个负向的尖峰脉冲这个负脉冲就是放电电流。它的幅度很大但持续时间很短基本上就是输出下降的时间。输入为高输出为低稳态此时NMOS导通PMOS截止。Vout约等于0V。稳态电流又回到了几乎为零的状态忽略NMOS的漏电流。输入从高跳变到低输出上升沿NMOS截止PMOS导通。输出节点Vout要从0V被充电到3.3V。这时电源VDD必须通过导通的PMOS管向负载电容C_load注入电荷。你会在电流波形上看到一个正向的尖峰脉冲这个正脉冲就是充电电流。这两个一正一负的电流尖峰就是造成开关功耗的“元凶”。每一次逻辑翻转都会产生这样一对电流脉冲。它们的能量来自于电源最终在MOS管的导通电阻上以热的形式消耗掉。你可以尝试修改输入信号的频率比如从1MHz提高到10MHz你会发现单位时间内电流尖峰出现的次数变多了虽然每个尖峰的形状差不多但总的平均电流肯定会增大这意味着动态功耗增加了。这直观地验证了动态功耗与开关频率成正比的公式P_dynamic C * VDD^2 * f。4. 深入分析如何从仿真曲线中提取关键参数光看到电流尖峰还不够我们得像做实验一样从波形里读出具体的数据这样才能进行定量分析和优化。4.1 测量上升/下降时间与电流峰值首先我们看看输出的电压波形质量。用鼠标在波形窗口里拖拽可以放大上升沿或下降沿的区域。LTspice自带测量功能。在波形窗口的坐标轴标签上比如“V(vout)”点击右键选择“Attached Cursor” - “Single Cursor”然后再点击右键选择“Attached Cursor” - “Second Cursor”。现在你有两个游标了。把第一个游标放在输出上升沿的10%电压点0.33V第二个游标放在90%电压点2.97V。波形窗口底部会显示两个游标的时间差Δx这个就是上升时间。同理可以测量从90%到10%的下降时间。在我们最初的设置PMOS宽度是NMOS2.5倍下你可能会发现上升时间和下降时间并不完全相等。比如上升时间是390ps下降时间是610ps。这说明我们的PMOS虽然加宽了但驱动能力仍然比NMOS稍弱导致充电比放电慢一点。这就是仿真的价值——经验法则需要实践来检验和微调。接下来测量电流峰值。把游标移动到充电电流尖峰的最高点可以看到峰值电流可能高达几百微安甚至毫安级别。这个峰值电流的大小主要由两个因素决定MOS管的导通电阻和负载电容。导通电阻越小W/L越大峰值电流就越大充电速度也越快。但峰值电流大会带来另一个问题瞬间的电流变化率di/dt很大可能会在电源网络上引起噪声这又是另一个需要权衡的点了。4.2 计算单次翻转能耗与平均动态功耗动态功耗的能量本质上就是电源在给电容充电时提供的能量。根据物理学把一个电容C充电到电压VDD电源需要提供的总能量是C * VDD^2。但其中只有一半的能量储存在了电容里1/2 * C * VDD^2另一半能量则在充电回路PMOS管的导通电阻上以热的形式消耗掉了。放电过程也是类似的储存在电容里的能量在NMOS管的导通电阻上全部转化为热。我们可以用LTspice来验证这个能量值。LTspice可以方便地对波形进行数学运算。首先我们需要得到从电源流出的瞬时功率P_instant V(vdd) * I(Vdd)。注意这里的I(Vdd)是我们之前探测的从电源流经PMOS到输出节点的电流。在波形窗口你可以直接输入公式V(vdd)*I(R1)如果你在电源和PMOS源极之间串联了一个小电阻R1来测电流或者使用更精确的方法。然后LTspice可以对这个瞬时功率波形进行积分得到能量。在一个完整的充电或放电事件期间对瞬时功率曲线进行积分得到的面积就是该次翻转消耗的能量。你可以通过放置两个游标限定一次充电过程的起止时间然后查看∫ V(vdd)*I(Vdd) dt的数值。这个值应该接近0.5 * C_load * VDD^2。多次仿真取平均或者计算一段时间内的总能量再除以翻转次数就能得到单次翻转的平均能耗。有了单次翻转能耗E_per_switch再乘以翻转频率f就得到了平均动态功耗P_avg E_per_switch * f。你可以尝试改变输入信号的频率然后测量一段时间内的总电流平均值LTspice也能直接显示波形的平均值会发现P_avg确实与频率f成线性关系。5. 设计优化实战调整尺寸与负载如何影响功耗仿真分析最大的乐趣和用处就是可以让我们像做实验一样快速尝试各种“如果”找到最优解。5.1 调整晶体管宽长比W/L还记得我们一开始设的PMOS宽度是NMOS的2.5倍吗现在我们来做个参数扫描。在LTspice中这非常容易。我们可以用一个.step指令。在原理图空白处右键选择 “.op” 那个对话框其实可以直接在原理图上添加文本按T键输入.step param Wp list 300n 400n 500n然后把PMOS的宽度属性从固定的375n改为变量{Wp}。这样LTspice就会自动运行三次仿真分别对应PMOS宽度为300n 400n 500n的情况。重新运行瞬态分析然后在波形查看器中同时显示三种情况下的输出电压Vout波形。把它们叠加在一起你就能清晰地看到随着PMOS宽度增加上升时间明显缩短因为更宽的PMOS导通电阻更小对电容的充电能力更强。下降时间几乎不变或略有增加下降时间主要由NMOS决定PMOS变宽对其影响很小但PMOS变宽会增大其本身的寄生电容可能会略微增加NMOS的放电负担。充电电流峰值增大导通电阻小瞬间能提供的电流更大。单次翻转能耗变化这里有个有趣的权衡。一方面充电速度更快意味着电流尖峰更窄但峰值更高另一方面更宽的PMOS其栅电容也更大驱动它本身需要的能量也增加了。总能耗可能先减小后增大存在一个最优值。你需要通过仿真积分能量来找到这个点。这个实验告诉我们盲目增大晶体管尺寸并不能无限降低功耗。你需要找到一个平衡点在满足速度上升/下降时间要求的前提下使功耗最小。5.2 探讨负载电容的影响负载电容C_load是动态功耗公式中的核心变量。我们同样可以用.step指令来扫描它.step param Cload list 0.5p 1p 2p把负载电容的值改为{Cload}然后重新仿真。观察结果上升/下降时间线性增加电容越大充放电需要移动的电荷量越多在相同驱动电流下时间自然变长。波形会变得“圆滑”。电流峰值几乎不变但脉宽增加电流峰值主要由MOS管的驱动能力和电源电压决定与电容关系不大。但电容大了充放电过程变长电流尖峰的宽度会同比增加。单次翻转能耗线性增加根据公式E 0.5 * C * VDD^2能量与电容成正比。仿真积分的结果会明确显示这一点。平均动态功耗线性增加在固定频率下P_avg正比于C。这个实验强化了一个非常重要的设计准则要想降低动态功耗必须千方百计减少负载电容。这包括使用更小的晶体管减小栅电容、优化版图布局减小连线寄生电容、以及合理设计电路结构减少扇出即一个门驱动的下级门数量。5.3 电源电压VDD的威力最后我们来看看大BOSS——电源电压VDD。动态功耗与VDD的平方成正比因此降低电压是降低功耗最有效的手段没有之一。我们扫描一下VDD.step param Vsupply list 2.5 3.0 3.3把VDD电压源的值改为{Vsupply}同时记得把输入脉冲信号的高电平Von也改为同样的变量。仿真结果会非常震撼上升/下降时间显著增加电压降低意味着MOS管的过驱动电压Vgs-Vth减小其驱动能力电流会急剧下降导致充放电速度大幅变慢。电流峰值大幅下降驱动电流小了峰值电流自然就小了。单次翻转能耗呈平方级下降E ∝ VDD^2效果立竿见影。从3.3V降到2.5V能耗能降低差不多一半。但电路速度也变慢了这是一个典型的性能与功耗的权衡。现代芯片的动态电压频率调节DVFS技术就是根据任务负载实时调节电压和频率在需要性能时提高电压在空闲时降低电压以省电。通过这一系列的仿真实验你不再只是记住书本上的公式而是亲眼看到了每一个参数W, L, C, VDD, f是如何具体地影响电路的波形、时间和能量消耗的。这种直观的理解是成为一名优秀电路设计师的基础。LTspice就像你的私人实验室让你能自由探索CMOS世界的奥秘而这一切都是从分析一个简单的逆变器开始的。下次当你设计更复杂的电路时不妨也先把其中的关键路径或者核心单元拿出来用LTspice这样仿真一番很多设计决策就会清晰得多。