302-门电路的基本原理
# 302-门电路的基本原理
现代计算机的CPU和其它很多功能部件都是基于晶体管的集成电路,想要了解计算机组成的基本原理,还是需要有一些集成电路的基本知识, 就让我们从最简单的门电路的实现开始吧! 晶体管是构成现代集成电路的基本元件, 通常使用的是MOS晶体管,MOS是金属,氧化物,半导体的缩写。而MOS晶体管又主要有两种类型, 一种我们称为N型MOS管,也简称为NMOS,这就是NMOS的符号表示。 它对外有三个连接,一个是源,一个漏, 一个是门。那么只看这个符号是非常抽象的,我们还是来打个比方说明吧! MOS晶体管其工作原理其实很像这个水龙头,电路中的电流 就好比水管中的水流,水流的来源也就是源, 而水流出的地方就称为漏,控制水流的开关就是门。 如果把门打开,水流就会从源流到漏, 也就相当于晶体管导通,电流可以从源到漏。对于NMOS来说, 其导通的条件是gate端连接了高电平,而当gate端连接低电平时, 这个晶体管是不导通的。
与NMOS相对还有另一种类型叫做PMOS, 它和NMOS的区别就在于当gate端连接低电平时 这个晶体管导通,而连接高电平时这个晶体管不导通。 这就好比我们有两种类型的水龙头,一种是把这个 把手向上拉才会出水,另一种是将这个把手向下压才会出水。 用这两种功能相对应的晶体管就构成了互补型的MOS集成电路, 也简称为CMOS。
那我们就来看一看如何用晶体管构建逻辑门。 最简单的一种逻辑就是取非, 那么首先来看非门, 这是非门的逻辑符号。a是输入,y是输出, 中间用一个三角再加上一个小圆圈构成。 这是真值表列出了在各种输入情况下输出应该是怎么样的。 非门的真值表非常的简单,当输入a为0的时候,输出y为1, 输a为1的时候,输出y为零。 如果要写成逻辑函数表达式,应该是在a上面加一条横线,但这个表示用纸笔比较容易些, 而用键盘输入就比较困难一些。所以在编程时 经常会用这两种表达式来替代,在a前面加波浪线或者加感叹号来表示取非的操作。 这张图则显示了如何用晶体管来构成非门。 我们可以发现非门非常简单,只需要用两个晶体管。
我们一起来看一看非门的工作过程。 首先来看当输入a为0时如何让输出y变为1。先来看最上面, 这个电路上方连接的是电源,也就是高电平用1来表示。 然后再来看下面,这个符号代表的D, 也就是低电平,用0来表示, 当a为0时,我们注意到a同时连接到了两个 晶体管的gate端。上面这个注意这个符号, 这是一个PMOS晶体管,当它的gate端等于0时,请想一想,它是否处于导通状态。 对于PMOS来说,它的gate端为0时是导通的, 所以电源这一端的这个1我们就可以认为它传导了过来。 这个1会传给输出Y,但只有这一点是不够的, 因为我们发现Y还连接下面这个晶体管,这个符号代表了一个NMOS, 同样它的gate端也与a相连, 连接的是0,那对于NMOS来说gate端连接的是零,它是什么样的状态呢? 其实它是关闭的,所以我们可以认为 连接的这个D的这个0是无法通过这个晶体管传导出来, 所以现在y这条线就由上面这个晶体管驱动,因此Y就输出为1了。 这就是a为0时,通过非门,让Y变为了1。
我们再来看另一种情况也就是a等于1时,y等于零, 同样电源是1,D是零, a等于1时,上面这个PMOS的gate端是1,所以处于关闭状态。 而下面这个NMOS的gate端为1时,它就处于导通状态,我们可以认为连接 d的这个0通过这个晶体管传导了出来,因此这时y的输出就是0。 这两张图就说明了非门的工作过程。
我们再来看下一个非常常用的逻辑门也就是与门。 与门是有这个符号来表示的, 它的逻辑函数可以写成y等于a点运算符b, 其实这个点儿也是乘号的一种表示方式。 我们来看它的真值表。所谓与操作就是两个输入端都为1时, 输出才会为1,我们可以看第四行, 在其他的情况下输出全为0。 右边这个图是一个与非门实现原理, 它有四个晶体管构成,我们要注意虽然我们需要的逻辑功能是与门, 但是在实现中,与非门,比与门的实现更为简单。 所谓与非门,它的输出结果于与门正好相反, 也就是两个输入均为一时输出为0,其它时候输出都为1, 所以可以很简便的用一个与非门和非门相连就实现了与门的功能。
我们再来看一看与非门的工作过程,假设a等于1,b等于1, 对于与非门来说,这时候的输出结果应该是0,我们来看这个工作过程是怎么样的。 这时候a,b为1,我们首先来看b所连接的晶体管, 上面这是一个PMOS,它的gate端为1, 所以这个晶体管是关闭的, 那好我们暂时可以不管它,我们再来看b连接的另一个晶体管,在最下面这里, 它的gate端是1,所以它是导通的,那么它就会把0传导出来, 但这个0还需要经过一个晶体管才能传导到y, 这个晶体管是由输入a来控制的, 这也是一个NMOS晶体管,而我们发现现在输入a也是1, 所以这个晶体管也是导通的,因此这个0 被继续往外传输就传递到了y,与此同时我们还要看到上面这个PMOS晶体管也是由a控制的, 当gate端为1时,这个晶体管是关闭的, 因此信号y与电源之间并联的两个晶体管都处于关闭状态, 而与D之间串联的两个晶体管都处于导通状态。 所以y的值就是0。
右边这个例子则说明了a等于1, b等于零时,与非门的输出应该是1。 对于这个例子我就不详加描了。 简单的说就是下面两个串联的NMOS,有一个处于关闭状态, 因此y与D不联通,而上面两个并联的PMOS, 有一个处于导通状态。所以y与电源连通, 因此y的值就是1,这就是与非门的工作过程。 将它的输出y再链接一个非门就构成了与门。
然后我们来看或门, 我们与与加号相同的这个符号来表示或操作。 这是或门的真值表,它的规则也很简单。 只有当两个输入都是0的时候,输出为0, 只要有任何一个输入为1,或者两个输入都为1, 输出都是1,那或门也是有几个PMOS和NMOS构成的。 在这里我们就不详细描述了。
最后来看一个逻辑门称为异或门,异或操作是指它的两个操作数的值如果不相同则结果为真,也就是1, 如果两个操作数的值相同,则结果为假,也就是0, 它其实可以用我们刚才学过的与或非的操作组合出来,a的非和b进行与, 这个意思就是当a等于零时,a的非为1,而且b也等于1时, 这第一个括号中的表达式就为1,而当a等于1,b等于0时, 第二个括号中的表达式就会为1,中间进行或, 也就是这两个表达式只要其中一个为1,结果就是1, 而当a和b都等于0,或者a和b都等1时,这两个表达式 的结果都是0。取或之后最终的结果也还是0。 这就体现了异或运算的要求,这是异或运算的逻辑符号, 主体与或门类似,只是在左边多了一条线。 这是异或的逻辑函数表示,用一个圈内部带一个加号。 当然这个符号很难直接用键盘输入, 所以在编程时也会用这个符号表示异或。 这是异或运算的真值表,当输入相同时, 比如都等于零,或者都等于1, 则输出为0,当输入不同时,也就是一个0一个1, 这样的形式输出则为1, 这就是异或运算。
现在我们已经学习了NMOS晶体管, PMOS晶体管,以及由它们构成的逻辑门, 包括非门, 与门,我们用与门则可以 进一步去实现计算机当中所要求的各种与相关的操作。 我们还实现了或门,用或门可以去实现各种或运算指令,以及更为复杂的异或门,可以实现更多的功能。
现在我们已经学习的最基础的门电路, 别看它们简单实际上可以构造出非常复杂的功能了。 但是还有一个问题,这些电路是如何存储信息的呢? 这就是我们下一节要讨论的问题。