本文为B站UP主硬件茶谈制作的系列科普《【硬件科普】带你认识CPU》系列的学习笔记,仅作个人学习记录使用,如有侵权,请联系博主删除
上一篇文章我们从最基本的粒子的角度认识了组成CPU的最基本单元MOSFET的原理。CPU作为计算机的核心硬件,其最主要的功能是进行运算,本章我们将会介绍CPU设计者是如何使用MOSFET组合出更强大的运算单元的。
为了能够讲清楚计算机是怎么进行计算的,我们首先要从逻辑运算讲起。
逻辑运算指的是“条件”与“结论”之间的一种关系,是对因果关系进行分析的运算,其运算结果并不表示数制的大小,而是表示逻辑概念成立还是不成立。
举例:小帅喜欢吃苹果,小美不喜欢吃苹果。则我们可以得到推论:两人都喜欢吃苹果这个事情为假;两人其中至少一个人喜欢吃苹果这个事情为真;两人都不喜欢吃苹果这个事情为假。
上面这个例子中,小帅喜欢吃苹果,小美不喜欢吃苹果就是“条件”,后面的推论就是逻辑运算的“结论”。逻辑运算就是对逻辑进行代数抽象,用数学的方式表达逻辑推论的过程的一种代数运算。
从代数的角度看,最简单的逻辑运算有这么几种:非运算,与运算,或运算,异或运算,同或运算。
如果我们用数字1表示条件为真,数字0表示条件为假,则上述几种逻辑运算可以被表示为以下运算表(数学上称为真值表),最后一列均表示括号中的推论是否为真:
非运算
条件A | 推论(非A成立) |
---|---|
1 | 0 |
0 | 1 |
与运算
条件A | 条件B | 推论(A与B同时成立) |
---|---|---|
1 | 1 | 1 |
1 | 0 | 0 |
0 | 1 | 0 |
0 | 0 | 0 |
或运算
条件A | 条件B | 推论(A或B成立) |
---|---|---|
1 | 1 | 1 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
异或运算
条件A | 条件B | 推论(A与B不同) |
---|---|---|
1 | 1 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
同或运算
条件A | 条件B | 推论(A与B相同) |
---|---|---|
1 | 1 | 1 |
1 | 0 | 0 |
0 | 1 | 0 |
0 | 0 | 1 |
明白了逻辑运算的原理,你可能会问这跟计算机有什么关系?
我们都知道,任何信息在计算机中都是使用二进制的方式存储和计算的。比如十进制数19在二进制中表示为10011,十进制数5在二进制中表示为101,19+5的结果是24,用二进制数表示为11000。
下图为十进制竖式加法的运算过程
先加个位,9加4超过10,因此向十位进1,个位写4,再把十位上的数和进位相加,1加1等于2没有超过10,因此十位相加的结果是2,最后算出来的结果是十进制数24。
下图是对应的二进制竖式加法的运算过程
其实运算法则与十进制相同,十进制是每一位相加满10进1,二进制加法同样是每一位相加,满2进1。最后得到二进制结果11000,刚好也是十进制的24。二进制计算结果与十进制是等价的,由于1和0在计算机中非常天然的可以使用高低电平来表示,因此计算机使用二进制数进行与十进制等价的各种运算。
让我们看一下最基本的两个1位二进制数相加的结果,如果不考虑进位的话,那么1+1的结果是0,1+0的结果是1,0+1的结果也是1,0+0的结果是0。发现了吗,这其实与上一节逻辑运算中异或运算的真值表是相同的。
我们再看一看两个1位二进制数相加的进位是什么情况,1+1进位是1,1+0进位是0,0+1进位是0,0+1进位是0,同样的与上一节逻辑运算的结果比较,可以发现这个结果是与逻辑运算中的与运算真值表相同。
这是两个一位二进制数相加的情况,可以想象,两个多位二进制数相加其实就是对每一位先用异或运算求出该位的值,再用与运算求出该位的进位,就能得到最终的结果。这样我们就把计算机中的算数运算与逻辑运算建立了关系。只要进行简单的逻辑运算,我们就可以在计算机中计算加法。如果能计算加法就能计算减法,因为减法相当于一个数加另一个数的负数。同样如果能计算加减法就能计算乘除法,因为乘法相当于是多个相同的数的加法。
可以想象到,当有了四则运算,计算机就可以做大部分数学计算了。
好啦,现在已经掌握了所有基础知识,我们就可以学习逻辑运算是如何通过电路实现的了。MOSFET的作用其实就是构建上述几种逻辑运算器的基本组件,那么我们就看一下如何使用MOSFET来构建上述的逻辑运算。由电子元器件构成的逻辑运算单元就被称为逻辑门电路。
上一篇文章我们已经简单的介绍了非门电路的组成,这里我们再复习一下。
供电电压是高压电平,接地电压是低压电平。上面的MOSFET是PMOS,下面的是NMOS。由PMOS和NMOS的特性可知:
当我们把高电平定义为1,低电平定义为0,那么这正是非门的运算结果,电路符号如下图:
或门电路的组成,符号和真值表如下图所示:
让我们看看当A和B输入0时,Y是如何得到输出结果的
当A和B输入0时,两个PMOS导通,两个NMOS不导通,左半边输出高电平,红框是我们上面讲的非门电路,因此最终Y端输出低电平0。其他情况大家可以自行推导。
或门的作用是,只要有一个输入为1,输出就是1,只有当两个输入都为0,输出才是0。
下图是与门电路的组成,符号和真值表:
我们来看一下当A和B均输入1时,Y的输出情况:
当A和B同时输入1,左边两个PMOS不导通,两个NMOS导通,这时左半边输出为低电平0,经过右边的非门转化为高电平1。其他情况大家可以自己推导。
与门电路的作用是,只有当两个输入都为1时输出才是1,否则输出均为0。
下图展示了异或门电路的组成,符号和真值表,同时也展示了当A和B端均输入1时,输出端Y的结果推导过程:
异或门电路的主要作用是,当A和B的输入相同时,输出0,否则输出1。
可以看出上图中为了构建异或门电路,一共使用了10个MOSFET,然而真实使用中,人们研究出了一种更节省材料的方法来实现异或门电路,其电路图如下所示:
中间由一个PMOS和一个NMOS两端相连组成的单元叫做传输门,虽然两个MOS组合在一起,其各自的作用还是不变的,与原始电路比较,这里只用了6个MOSFET就组成了异或门电路。
本篇我们学习了逻辑运算与算数运算的等价性,更进一步认识了组成这些基本逻辑运算的电路。下一篇文章我们会继续深入,看看这些基本的逻辑运算电路是如何组成一个计算加法的加法器的。