IC设计:CMOS器件及其电路
作为一个微电子专业的IC learner,这个学期也有一门课:《微电子器件》,今天我就来聊聊基本的器件:CMOS器件及其电路。在后面会聊聊锁存器和触发器。
·MOS晶体管结构与工作原理简述
·CMOS单元电路与版图
·CMOS门电路
·CMOS的功耗表示
老实说,CMOS比较偏微电子器件,微电子器件还真难...这里我就说一些做数字设计或许要了解的东西吧(以后要是有必要,会补充)。
1、MOS晶体管结构与工作原理简述
我们或多或少知道,晶体管在数字电路中的主要作用就是一个电子开关,通过电压或者电流,控制这个“开关”开还是关。晶体管大概有两种分类:一种是双极性晶体管(BJT,bipolar junction transistor),另外一种是金属-氧化物-半导体场效应晶体管(MOSFET或者MOS,metal-oxide-semiconductor field effect transistor)。我们这里主要来聊聊MOS了,那个BJT在现在数字IC设计中已经不是主流工艺了。
①MOS晶体管分为PMOS和NMOS,是哪一类MOS取决于衬底和掺杂浓度。至于是怎么形成的,这太复杂了,简单的三言两语说不清楚,这里干脆就不说了,我们直接来看他们的截面图和简单地讲解它们的工作原理好了(以下均以NMOS为例)。
NMOS晶体管的横截面结构如下所示:
最底层是硅晶元圆衬底(substrate)(Body Si那里),最顶上是导电的栅极(gate),中间是二氧化硅构成的绝缘层。在过去栅极是由金属构成的,因此叫做金属-氧化物-半导体,现在的栅极使用的是多晶硅(poly)。MOS结构中,金属(多晶硅)与半导体衬底之间的二氧化硅会形成一个电容。
好吧,上面那一段看不懂也没关系,也不重要,需要你记住的是,上述的NMOS晶体管中,衬底是P型的,衬底上有两个n型的掺杂区域分别称为源极(Source)和漏极(Drain)(其实你把左边定义为漏而右边定义为源也没有问题,因为这个时候这个器件是对称的,在连接电源和地之后,S和D才真正确定),中间最上面的称为栅极(Gate),这就是NMOS的三个电极了(实际上的MOS是一个4端器件,它的衬底也是一个端)。下面来说一下他们怎么工作。
前面我们说了,晶体管的作用就是大致就是一个开关,在电流或者电压的控制下进行开和关,对于NMOS晶体管,我们现在给它加上电压,让它开始工作:
如上左图所示,加上电压后,所谓的源极,就相当于电子的源头;所谓的漏极,就相当于漏出电子的开口;而中间的栅极,就像控制开关一样:一方面通过控制在栅极施加的高电平电压,使源漏之间出现沟道,电子通过沟道从源极流向漏极,电流的方向也就是从漏到源了,从而进行导电,也就是“开关”打开的的时候(由于是形成的N沟道,也就是电子导电,因此成为N型CMOS)。另一方面再通过控制在栅极施加低电平电压,让沟道关断,因此就源漏之间就关断了,也就是“开关”关断的时候。上面就是NMOS的结构和工作流程了。(PMOS的工作流程恰好相反:通过控制在栅极施加的低电平电压,进行打开,而通过控制在栅极施加高电平电压,让沟道关断。)
注意:栅极的电压达到一定数值时,沟道才会形成,沟道形成时的电压称为阈值电压(Vth)。
②下面我们来看一下I-V特性曲线(注意这两个称呼,一个是转移特性曲线,一个是输出特性曲线):
在前面我们知道,对于NMOS,源极(S)是接地的,漏极(D)是接数字电源的,在工作的时候,一般Vds是不变的,然后根据栅极(G)上的电压决定沟道是否导通。工作的时候,Vg的值(也就是输入信号的电压值)是一个定值,要么高电平(可能有波动),要么是低电平,从这里我们也知道NMOS工作的时候,是有电流从电源(VDD)流到地(GND)的(也就是从D流到S的),在电源电压不变的时候,这个电流随着栅极上的电压增大而增大。
③接着我们看看MOS的内部自个形成的电容(寄生电容),如下图所示:
主要分为:
(1)栅和沟道之间的氧化层电容C1;
(2)衬底和沟道之间的耗尽层电容C2;
(3)多晶硅栅与源和漏的交叠而产生的电容C3 和C4;
(4)源/漏区与衬底之间的结电容C5与C6。
好吧,其实这些个MOS这个电容我们看看就好了,毕竟我们不是做器件的。
2、CMOS单元电路与版图
在现在工艺中,我们主要使用的是成为CMOS(互补型半导体,Complementary MOS)的工艺,这种工艺主要就是把PMOS和NMOS这两类晶体管构成一个单元,称为CMOS单元或者反相器单元,其结构把PMOS和NMOS同时集成在一个晶元上然后栅极相连,漏极相连,下面是它的结构图(关于电路符号和功能将在后面讲):
在上图中,左边是NMOS,右边是PMOS。A是共连栅极输入,Y是共连漏极输出,VDD连接PMOS的源极,GND连接GND。
下面电路符号图了,上面的那个CMOS反相器对于的电路符号图如下所示:
现在我们就来分析一下这个CMOS反相器的工作原理来说明这个为什么CMOS工艺是主流吧:
A当输入信号A=1时,PMOS关断,NMOS打开,输出信号Y的电压相当于GND的电压,也就是Y=0;在这个过程中,从VDD到GND这一个供电回路都没有导通,因此理论不存在电流从VDD流到GND,因此功耗为0.
B当输入信号A=0时,PMOS打开,而NMOS关闭,输出信号Y=VDD=1,但是从VDD到GND这一个供电回路也没有导通,因此理论上也不存在电流从VDD流到GND,因此功耗也为0。
C因此可以得出,理论上反相器进行传输信号时,没有功耗(好吧,我们应该这样说:功耗极其地低),这就是为什么使用CMOS的工艺的原因。
下面我们来看一下CMOS单元的版图:
左边是CMOS的电路符号,右边是版图(这个版图先凑合着看),下面来说一下这个版图吧:
首先是从下往上看,金属(蓝色)连接到数字地(Vss)上面;白色背景红色虚线边框的P阱区域是为说明,下面的绿色掺杂区域形成的是NMOS,上面绿色掺杂区域形成的是PMOS;
然后 绿色的掺杂区域 分布在 红色的多晶硅附近,然后多晶硅连在一起(也就是把PMOS和NMOS的栅极连在一起),然后通过金属引出(那个X表示通孔)为输入Vi。
然后下面的NMOS的源极通过通孔跟金属连在一起(绿色跟蓝色通过X连在一起);NMOS和PMOS的漏极通过通孔连接到同一块金属上面然后当做输出。
PMOS的源极通过通孔连接到金属然后连接到了数字电源上。
更加抽象(好看一点)的图如下所示:
版图的基本知识就到这好了,更详细的知识还是查看更专业的书籍吧。
3、CMOS门电路
①CMOS非门:上面的一个CMOS单元的功能就是非门的功能了,因此CMOS非门也就是这个CMOS的单元,也称为反相器。其电路结构就是反相器的电路结构。
②(二输入)CMOS与非门(NAND):
直接上图吧,CMOS与非门的电路符号结构如下所示:
(PMOS的电路符号栅极处本来应该有个小圈圈,表示低电平有效的)
③(二输入)CMOS或非门(NOR)的电路符号和工作原理如下所示:
(PMOS的电路符号栅极处本来应该有个小圈圈,表示低电平有效的)
数字逻辑电路都可以由上面的三种电路化简构成,也就是说一个电路可以由NAND或者NOR电路构成,我们来看看他们的特点来推导数字CMOS电路的特点。
容易知道(反正我们就当做结论好了):
反相逻辑门的通用结构如下所示:
此外我们也注意到,使用到与功能的时候,NMOS网络是串联的;使用或功能时,NMOS网络是并联的。因此可以这么记忆:要NOMS都一起,才能一起(与),只要NMOS其中一个就可以(或),与还是或,可以根据NMOS的串并结构判断。
然后设计多少个输入的NXXX门,就把多少个NMOS串/并联起来,然后PMOS就是并/串就可以了。
4、CMOS的功耗表示
功耗是单位时间内消耗的能量,在数字系统中的功耗主要包括静态功耗和动态功耗,我们将从CMOS电路角度聊聊静态功耗和动态功耗。
CMOS的静态功耗:当CMOS不翻转/不工作时的功耗。在CMOS都不工作时,也就是晶体管都处于截止状态的时候,从VDD到GND并不是完全没有电流流过的,还是有些微电流从电源流到地,这个静态电流Idd称为电源和地之间的漏电流,跟器件有关(至于漏电流是怎么引起的,这里就不再阐述了)。初中的时候,我们就学过P=UI,因此静态功耗就可以这样表示 :
CMOS的动态功耗是信号在0和1变化之间,电容充放电所消耗的功耗。我们知道,不仅仅CMOS器件有寄生电容,导线间也有电容。将电容C充电到电压Vdd所需要的能量CVdd^2。如果电容每秒变换f次(也就是电容的切换频率为f,在一秒内,电容充电f/2次,放电f/2次),由于放电不需要从电源那里获取功耗,因此动态功耗就可以这样表示:
PS:上面主要是列举了一些主要的功耗,比如动态功耗中除了翻转时电容消耗功耗外,还有在栅极信号翻转的时候PMOS和NMOS同时导通引起的短路功耗。
这里不一一陈述,主要是考虑上面的那两种功耗。也许后面记载低功耗设计的时候会详细说明一下。
国芯网,国产芯片一站式展销平台 www.oriic.com
IC设计:CMOS器件及其电路的更多相关文章
- 数字IC设计入门书单
首发于观芯志 写文章 数字IC设计入门书单 Forever snow 1 年前 作者:Forever snow链接:你所在领域的入门书单? - 知乎用户的回答来源:知乎著作权归作者所有,转 ...
- IC设计学习路线
一 前言 一直以来都是这也想学那也想学,搞个两三个月又放弃了,开始搞新的,从来没有任何东西超过一年,更不要说坚持三年.现在经历的事情多了,学过各种编程语言明白了要想学会一个专业技能,至少是三年.得到软 ...
- VerilogHDL概述与数字IC设计流程学习笔记
一.HDL的概念和特征 HDL,Hard Discrimination Language的缩写,翻译过来就是硬件描述语言.那么什么是硬件描述语言呢?为什么不叫硬件设计语言呢?硬件描述语言,顾名思义就是 ...
- [转]关于几本模拟IC设计书
1.P.R.Gray的书 这本书被业界誉为模拟IC的Bible,盛名之下,必无虚士.现在已经出到第四版,作者无一例外是业界大牛,该书论述严谨,思路清晰,对电路分析透彻,定义严格明确,无愧Bible之名 ...
- 射频IC设计的六边形法则
博主在之前学习射频IC时,通过网上的资料,总结了射频IC设计的六个指标含义及其相应的折中关系,希望能给大家带来帮助. 噪声(Noise): (1)噪声一般可以分为白噪声和闪烁噪声.白噪声是由载流子的无 ...
- IC设计推荐书籍
IC设计推荐书籍 听语音 | 浏览:779 | 更新:2014-07-19 10:52 1 2 3 4 5 6 7 分步阅读 接触IC设计这一行已经有7年的时间了,前面4年是大学本科,用来学习知识,现 ...
- 【转载】数字IC设计流程及开发工具
原文链接:https://www.zhihu.com/question/28322269/answer/42048070 Design Flow <img src="h ...
- 数字IC设计工程师的知识结构
刚毕业的时候,我年少轻狂,以为自己已经可以独当一面,庙堂之上所学已经足以应付业界需要.然而在后来的工作过程中,我认识了很多牛人,也从他们身上学到了很多,从中总结了一个IC设计工程师需要具备的知识架构, ...
- 华为IC设计人员的薪酬(5年经验28万),以及麒麟是如何脱颖而出的~
垂直整合助力麒麟腾飞 由于ARM技术路线大幅降低了技术门槛和研发的资金和时间成本,导致ARM阵营参与者众多,加上大家都是购买ARM的CPU核与GPU核,造成产品高度同质化,市场竞争异常激烈——在价格上 ...
随机推荐
- 常用的JAVA第三方工具类
转自:https://www.jianshu.com/u/9c5cb1ee4c46 一. org.apache.commons.io.IOUtils 注解 说明 closeQuietly 关闭一个IO ...
- R 保存图片——tiff
tiff(filename = "c:\\aaa.tiff", res = 800, pointsize = 2) plot(1:100) dev.off() tiff(file= ...
- [BZOJ3140][HNOI2013]消毒:二分图匹配
分析 假如实验皿是二维的,那么这道题便是一个二分图最小点覆盖问题,可以转化为二分图最大匹配问题,使用匈牙利算法解决. 考虑如何扩展到三维,首先我们发现一次操作的代价为\(min(x,y,z)\).不难 ...
- CG-CTF | Hello,RE!
菜狗开始向着pwn与re进军了(●'◡'●)[说白了,还是在水博客吧] 按r出flag: galf leW{ emoc _oT_ W_ER dlro }! 反一下:fla ...
- 如何降低Vue.js项目中Webpack打包文件的大小?
https://blog.csdn.net/maray/article/details/50988500?utm_source=blogxgwz0 import Blur from ‘vux/src/ ...
- 前端每日实战:142# 视频演示如何用 CSS 的 Grid 布局创作一枚小鸡邮票
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/mGZbmQ 可交互视频 此视频是可 ...
- sed的一些应用
1. sed 使用变量进行替换,注意使用参数 r 时,需要放在参数 i 的前面 下面这个例子是用2.txt中的版本号替换docker-compose.yml中的版本号,其中变量UPGRADE_NAME ...
- HDU 5172 GTY's gay friends (线段树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5172 题意: 给你一个n个数的数组,m次询问,询问在[L, R] 这个区间里面有没有 [1, R-L+ ...
- 麦子lavarel---10、一些第三方应用注意
麦子lavarel---10.一些第三方应用注意 一.总结 一句话总结: 其实把重要的几个功能弄一个就好了,邮箱验证,手机号验证,支付验证,都是调用第三方接口,也很简单 1.关于页面和服务端校验的看法 ...
- Vue知识整理1:$watch方法的使用
如下图所示:vue中,可以使用$watch方法显示变量的前面值和当前值,方便进行判断.使用方法: vm.$watch('a',function(newval,oldval){ ...... })