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 晶体管,以及由它们构成的逻辑门, 包括非门, 与门,我们用与门则可以 进一步去实现计算机当中所要求的各种与相关的操作。 我们还实现了或门,用或门可以去实现各种或运算指令,以及更为复杂的异或门,可以实现更多的功能。
现在我们已经学习的最基础的门电路, 别看它们简单实际上可以构造出非常复杂的功能了。 但是还有一个问题,这些电路是如何存储信息的呢? 这就是我们下一节要讨论的问题。