模拟CMOS集成电路设计中的电流镜及用Cadence Virtuoso IC617设计并仿真有关电路

前言

本文为我自己的学习笔记,属于Cadence Virtuoso系列的进阶部分,采用的软件版本是Cadence Virtuoso IC617。其他文章请点击上方,看我制作的Cadence Virtuoso专栏内容。

在前面的两篇文章中,分别记录了如何用工艺参数或gm/id去设计一个运放,但在其中还有一个问题需要解决,那就是电流源。在前面的设计中,着重研究的是运放本身,而对于电流源的处理,要么给定一个晶体管,在G极加上恒定的直流值,要么是直接使用器件库中的理想电流源。但在实际工程项目中,是不可以这样做的,我们需要自己设计电流源。

本文记录了常见的电流镜的设计过程。在学习的过程中,我们要循序渐进,先要学习电流镜,再去学习电流基准源。

电流镜

原理比较简单,就不细说了,直接上原理图。其中,引入了一个参考电流源Iref,而晶体管的L是一样大小的,用于减小误差。

电路原理

左边是用N-MOS实现的电流镜,M2的W是M1的K倍,所以将M2作为电流源时,输出的电流也是K倍的Iref,此时电流就被“复制”了,这就是电流镜中的“镜子”的由来。由这个电路,我们就可以产生任意值的电流了,不再像前面一样对MOS的G极施加直流偏置或使用理想电流源了。

右边用P-MOS实现的电流镜也是同理的。它们分别用于,电流源接GND或VDD的两种情况。
在这里插入图片描述

也就是说,这个电路的输出有以下关系式。

I O U T = K ∗ I R E F I_{OUT}=K*I_{REF} IOUT=KIREF

在实际的设计中,需要知道的是,集成电路的制造是存在一定的误差的,设计是K倍的W,由于刻蚀误差,同时存在栅的“拐角效应”,使得出来的实际KW不是精确的,存在较大的误差。所以,需要将晶体管拆分成“单位”晶体管。

以N-MOS举例,将左边的晶体管M1当作单位晶体管,右边的晶体管原本是2W的宽度,被拆分成了两个W宽度的晶体管,将它们的G极连接在一起,两边晶体管完全一致,只不过是数量上的差别。此时,右边的电路产生的电流也将是2Iref。
在这里插入图片描述

P-MOS同理,直接看下面的原理图就能明白了。
在这里插入图片描述

但是有一个问题,这个电路会受到沟道长度调制效应的影响,对于基准源的晶体管和复制端的晶体管,若它们的沟道长度L相等,Iout并不完全等于K*Iref,而是有以下公式。

I O U T = K ∗ I R E F ∗ 1 + λ V D S − O U T 1 + λ V D S − R E F I_{OUT}=K*I_{REF}*{ 1+\lambda V_{DS-OUT} \over 1+\lambda V_{DS-REF}} IOUT=KIREF1+λVDSREF1+λVDSOUT

在实际应用中,两只晶体管的VDS并不一定相等,所以,沟道长度调制效应对电流精度会产生一定影响。我们虽然可以通过增加沟道长度L来减轻它,但不能完全消除它。

电路设计

我们在前面仿真中使用的五管OTA中引入这个电路,来替换其中的电流源。
在这里插入图片描述

替换后的电路如下。每一条支路的电流是I,电流源的电流是2I,这个I在前面的计算中是0.523mA。
在这里插入图片描述

计算过程

gm/id计算法

使用前面提到的gm/id的设计方法,从P-MOS的曲线中得出我们所需要的数据,来确定晶体管的尺寸。为了降低沟道长度调制效应,同时使得W不至于太大,选择L为1um。

注意,这里的W参数是我事先计算好的,大约为40um,因为不同的W,出来的id/W是稍微有些差别的。在实际设计时,我们通过计算得到W后,应该再重新仿真一次id/W曲线,用这个新得到的id/W数值再重新计算一遍,得到的结果才比较准确。

在这里插入图片描述

兼顾噪声的影响,选择gm/id=8,得到电流密度id/W=13.316。
在这里插入图片描述

自己手动计算也行,使用我自己开发的gmoverid计算器也行(目前基本功能已经实现,在测试阶段),计算得到W的数值为39.30um。
在这里插入图片描述

直接引入法

直接引入法,是一个非常偷懒的方法,但是十分简单高效,其基本思想还是使用了gm/id方法,因为每一个支路的电流都是一致的,所以在保证了对应晶体管的gm/id值是一致的情况下,就能产生对应的电流。

直接引入现有晶体管的尺寸,例如设计P-MOS电流镜时,引入五管OTA的输入管的尺寸,同时将L增大至大于等于五倍最小栅长以抑制沟道长度调制效应。而基准源晶体管的Multiplier取最小是1即可。当需要两倍电流时,复制晶体管的Multiplier取2。例如下面的例子。
在这里插入图片描述

仿真结果

设计一个P-MOS电流镜,将得到的参数填入电路中,得到参考源电流是0.523mA,而电流源电流约是两倍的参考电流,达到了设计目的。

实际上,在绘制原理图时,对于2Iref的那个P-MOS,不必绘制两只晶体管,只需要绘制一只,然后把电流源晶体管(右边那两个)的 Multipler 改成基准晶体管(左边)的两倍即可。

在这里插入图片描述

再来看看电流和电源电压VDD的关系。可以看到,受到沟道长度调制效应的影响,随着VDD的上升,电流也跟着上升,最大值和最小值偏差率约3.6%。当电路对电流要求精度要求很高时,这是我们不希望看到的。
在这里插入图片描述

共源共栅电流镜(Cascode)

前面的电流镜效果还算不错,就是有一个问题,由于沟道长度调制效应,在VDD增大时,复制出来的电流也会随之增大。在2.5V-6V的VDD范围内,最大值和最小值偏差率约3.6%,精度稍差。所以,引入共源共栅结构,来抑制沟道长度调制效应,提高电流复制精度。

电路原理

在前面的电流镜基础上,多增加了两只晶体管,同时,它们的W也是成倍数增长的,电流也就是相应的K倍。
在这里插入图片描述

电路设计

这里直接引入晶体管的尺寸,也就是上一节中的尺寸,不用再做计算了。

仿真结果

这里还是以P-MOS电流镜举例,直接来观察输出电流和电源电压VDD的关系。可以看出,电流精度有了很大的提高,最大值和最小值偏差率约0.65%。
在这里插入图片描述

再来对比一下和前面普通电流镜的曲线,将曲线Y轴拉开,可以看出,沟道长度调制效应得到了很好的抑制。
在这里插入图片描述

低压共源共栅电流镜

上面一节提到的共源共栅电流镜,在Iout一端支持的最小电压比较大,损失了一个Vth的裕度。那么如何将这类电流镜应用于低电压场景?这就是低压共源共栅电流镜的由来。

电路原理

将M2用单独的电压Vb去控制,而M1的栅端直接接到X点,这样就降低了电源电压裕度。那么Vb如何实现?
在这里插入图片描述

实用的Vb的实现方法有两种,一种是使用一个晶体管。其中M5这只晶体管是可以视情况而省略的。
在这里插入图片描述

还有一种方法是用一个电阻去实现自偏置。这种方法也比较简单,但是在集成电路制造过程中,电阻的工艺波动会比较大,导致电阻的精度较差。
在这里插入图片描述

以上两个电路我都没有仿真,但是电阻的那个低压共源共栅电流镜在后面讲电流基准的时候会涉及到,只不过是换成了P-MOS。

### 关于IntelliJ IDEA中`throw`关键字代码标红的问题 在Java开发过程中,当遇到IDEA中标红的情况时,通常表示存在潜在的语法错误或未遵循某些编程规范。然而,在特定情况下(如`finally`块中的操作),这种标红可能非真正的逻辑错误。 #### 问题分析 如果`throw`语句出现在`finally`块中导致标红,则可能是由于以下原因引起的: 1. **控制流冲突**:`finally`块的设计初衷是为了确保无论是否发生异常都会被执行。但如果其中包含可能导致程序提前终止的操作(如`return`或`throw`),可能会干扰正常的控制流程[^3]。 2. **编译器提示**:即使代码可以正常运行,IDEA仍会标记此类情况作为潜在风险,提醒开发者注意其影响。 #### 解决方案 以下是几种常见的解决方案来消除此问题: 1. **调整代码结构** 将可能导致中断的行为移出`finally`块,从而保持清晰的控制流。例如: ```java public class Main { static String test() throws Exception { try { System.out.println("Inside try"); throw new Exception("An exception occurred!"); } catch (Exception e) { System.out.println("Caught an exception: " + e.getMessage()); throw e; // Re-throw the caught exception outside of finally block. } finally { System.out.println("Finally executed."); } } public static void main(String[] args) { try { test(); } catch (Exception e) { System.out.println("Main method handles: " + e.getMessage()); } } } ``` 2. **抑制不必要的警告** 如果确认当前实现方式合理且不会引发实际问题,可以通过添加注解的方式忽略相关警告: ```java @SuppressWarnings("unchecked") // 或其他适用的警告类型 public class Main { ... } ``` 需要注意的是,这种方法仅适用于确实无害的情况下使用,不应滥用以免掩盖真正的问题[^2]。 3. **修改IDE设置** 用户也可以通过自定义IDE配置减少部分严格性的检查项。具体路径为 `File -> Settings -> Editor -> Inspections` 中找到对应选项关闭即可。 以上方法均能有效应对因`throw`引起红色标注的现象,但需依据项目需求权衡利弊后再做决定。 ### 总结 对于`intellij idea`中出现的关于`throw`的关键字标红现象,主要是因为违反了一定程度上的最佳实践或者触碰到了静态分析工具设定的标准所致。采取重构代码逻辑、适当地压制告警以及灵活运用环境偏好调节三者相结合的办法往往能够妥善处理这类状况。
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值