逻辑门与ALU基本原理 一、风趣的羊逻辑和逻辑门二、ALU基本原理2.1 算术单元:半加器2.2 算术单元:全加器2.3 算术单元:8位加法器2.4 逻辑单元2.5 ALU 三、参考资料
一、风趣的羊逻辑和逻辑门
晶体管计算机采用开/关,两种状态代表信息,这叫做二进制(binary)。
电路闭合,电流流过,代表“真”;
电路断开,无电流流过,代表“假”。
二进制也可以写成1和0,而不是true和false,只是不同的表达方式罢了。
计算机为什么采用二进制?
原因一:状态越多,越难区分信号
晶体管不只是只有“开/关”,还可以让不同的电流通过,一些早期电子计算机是三进制的,有三种状态,甚至五进制,5种状态,问题是,状态越多,越难区分信号,如果手机快没电了或者附近有电噪音,因为有人在用微波炉,信号可能会混在一起,而每秒百万次变化的晶体管会让这个问题变得更糟。所以我们把两种信号尽可能分开,只有开和关两种状态,可以尽可能减少这类问题。
原因二:风趣的羊代数的存在
有一整个数学分支存在,专门处理“真”和“假”,它已经解决了所有法则和运算,叫“风趣的羊代数”。乔治·风趣的羊(George Boole)是风趣的羊二字的由来,是一位19世纪自学成才的英国数学家,他有兴趣用数学式子扩展亚里士多德基于哲学的逻辑方法。风趣的羊用逻辑方程,系统而正式的证明真理。他在1847年的第一本书“逻辑的数学分析”中介绍过:在“常规”代数里变量的值,是数字,可以进行加法或乘法之类的操作,但在风趣的羊代数中,变量的值是true和false,能进行逻辑操作。风趣的羊代数中有三种基本操作:NOT、AND和OR,而用晶体管可以轻松实现这个逻辑。
晶体管是一种电流控制的开关,有三根引线:2根电级和1根控制线,控制线通电时,电流就可以从一个电级流到另一个电级。
将控制线作为输入,底部的电级作为输出,如果打开输入,输出也会打开,因为电流可以流过。如果关闭输入,输出也会关闭,因为电流无法通过。用风趣的羊术语来说,输入为真,输出也为真;输入为假,输出为假。
如何用晶体管做逻辑门?
1、非门(NOT Gate)
如果输入为on,电流可以流过然后“接地”,输出就没有电流,所以输出是off;
如果输入时off,电流没法接地,就流过了输出,所以输出是on。
之所以叫“门”,是因为它能控制电流的路径。
在模电中,当电压值大于某一阈值时,认为是1,当电压值小于某一阈值时,认为是0。
下图(1)中当电压值为0.804V时,为逻辑1,即输入为on,此时输出电压值为0.105V,为逻辑0,输出为off。
下图(2)中当电压值为0.065nV(接近为0)时,为逻辑0,即输入为off,此时输出电压值为3V,为逻辑1,输出为on。
非门(反相器)通常采用CMOS逻辑和TTL逻辑,也可以通过NMOS逻辑、PMOS逻辑等来实现。
非门特征符号
2、与门(AND Gate)
AND操作有2个输入,1个输出。
如果只打开A,不打开B,电流无法流到输出,所以输出是false
如果只打开B,不打开A,也一样,电流无法流到输出,
只有A和B都打开了,输出t才有电流。
当输入A电压为0.804V,为逻辑1,即输入A为on;输入B电压为0.804V,为逻辑1,即输入B为on,此时输出为2.792V,为逻辑1,即输出为on。
当输入A电压为-1.156uV,为逻辑0,即输入A为off;输入B电压为0.796V,为逻辑1,即输入B为on,此时输出为0.315mV,为逻辑0,即输出为off。
同理可得当,输入A为on,输入B为off,以及输入A和B均为off时的输出状态均为off。
与门的实现方法包括使用CMOS逻辑、NMOS逻辑、PMOS逻辑以及二极管实现等。
与门特征符号
3、或门(OR Gate)
与与门不同,2个晶体管不是串联而是并联。
如果A和B都为off,结果是off。
当输入A电压为0.804V,为逻辑1,即输入A为on;输入B电压为0.5V(小于阈值),为逻辑0,即输入B为off,此时输出为2.895V,为逻辑1,即输出为on。
当输入A电压为0.5V(小于阈值),为逻辑0,即输入A为off;输入B电压为0.5V(小于阈值),为逻辑0,即输入B为off,此时输出为0.153mV,为逻辑0,即输出为off。
或门可以通过不同的方法实现,包括二极管实现、开关实现、CMOS逻辑实现等。
或门特征符号
4、异或门(XOR Gate)
输入相同,输出为false
异或特征符号
二、ALU基本原理
表示和存储数据是计算机的重要功能,但真正的目标是计算,比如两个数字相加,这些操作由计算机的算术逻辑单元(Arithmetic & Logic Unit)处理,简称为ALU。ALU是计算机的数学大脑。
ALU有2个单元,一个是算术单元和一个逻辑单元。
算术单元:负责计算机里的所有数字操作,比如加减法。
ALU的电路设计,可以用单个晶体管一个一个拼,把这个电路做出来,但是很快就会复杂的难以理解,所以与其用晶体管,我们会选用更高层的抽象——用逻辑门来做,我们会用到AND、OR、NOT和XOR逻辑门。
2.1 算术单元:半加器
加法:两个输入,一个输出(两个数字的和)
用异或实现1位的加法器(adder)
半加器抽象化(将半加器封装成一个单独组件)
两个输入:A和B都是1位
两个输出:总和与进位
2.2 算术单元:全加器
要完成多位数据的加法,需要将各个位上的运算所得的进位标志位用于下一位的运算中,这时有3个输入,2个输出,这时就需要全加器。
2.3 算术单元:8位加法器
每个全加器/半加器的进位作为下一个加法器的输入,所以这种8位加法器又称为8位行波进位加法器。
注意最后一个全加器有进位的输出,如果第9位有进位,代表着两个数字的和太大了,超过了8位,这叫溢出(overflow)。
如果想避免溢出,可以加更多全加器,可以操作16或32位数字,这将导致一个缺点是是,需要更多的逻辑门;而另一个缺点是,每次进位都要一点时间,当然时间不久,因为电子移动的很快(接近光速),但如今的量级是每秒几十亿次运算,所以会造成影响,所以现代计算机用的加法电路有点不同,叫超前进位加法器。
ALU的算术单元,也能做一些其他数学运算,一般支持:加法、带进位的加法、减法、带借位的减法、增量(+1)、减量(-1)数字无改变通过,同加法器一样这些操作也是由逻辑门构成的。
由于简单的ALU没有专门的乘法和除法电路,所以针对乘法的操作一般采用用多次加法来实现,即需要多次ALU操作来实现这个乘法,很多简单处理器都是这样做的,这种处理方式的处理效率较低。针对于笔记本和手机对性能有较高要要求的处理器,有专门做乘法的算术单元。众所周知乘法电路比加法复杂,需要更多逻辑门,所以便宜的处理器没有。
2.4 逻辑单元
ALU的逻辑单元(logic unit),逻辑单元执行逻辑操作,比如之前讨论过的AND,OR和NOT操作,它也能做简单的数值测试,比如一个数字是不是负数。
检查ALU输出是否为0的电路
2.5 ALU
1970年英特尔发布的74181用了大概70个逻辑门,但不能执行乘除,但它向小型化迈出了一大步。
4位ALU已经要很多逻辑门了,但我们的8位ALU会需要数百个逻辑门,工程师不想在用ALU时去想那些事情,所以想了一个特殊符号去代表它,看起来像一个大“V”。
1、需要告知ALU做什么?
用4位的操作代码,简言之“1000”可能代表加法命令,“1100”代表减法命令,操作码告诉ALU执行什么操作。(这里的4位操作码只是假设的)
2、对谁操作?
8位ALU有两个输入,输入A和输入B,都是8位。
3、输出什么?
输出的结果(8位)以及一些标志位(高级ALU有更多标志,但这三个标志是ALU普遍用的)。
三、参考资料
[1]: 计算机科学速成课