在计算机几百年的发展过程中,最终确定了计算机以逻辑电路为基础,基于二进制运算的结构。那么逻辑跟电路有什么关系?逻辑电路是怎么进行数学运算的呢?CPU又是怎么工作的呢?    

上篇文章「欲知大道,必先知史」中介绍了计算机的发展历程,在计算机几百年的发展过程中,逐步的形成了现代计算机的架构,这篇文章会带大家了解下逻辑、电路和数学的关系。

01
 
布尔逻辑
 
说到逻辑,就绕不开布尔这个人,1854年,布尔把逻辑简化成极为简单的一种代数,即布尔代数。但是刚问世时候并没有受到重视,人们也没有把布尔代数和计算机电路联系起来,直到香农的《继电器与开关电路的符号分析》论文发表,人们才清楚的认识到逻辑和电路的关系。那么布尔代数究竟是什么东西呢?
       
布尔逻辑有三个运算操作(与,或,非 ),下面以一个例子简单介绍一下布尔代数中逻辑运算规律。为了更贴合计算机,我们把与记作AND,或记作OR,非记作NOT
   
Round one:小明爱吃冰棍儿,爸爸有两个条件,如果天气很热并且小明口渴,才允许买冰棍儿。为了好记,我们把条件符号化一下,小明是否口渴(T)、天气是否炎热(H),1为真,0为假。那么爸爸的条件是: T=1 AND H=1
 
这时,咱们列一下不同条件下,爸爸是否允许小明买冰棍儿。
     
1、某一天小明口渴(T=1),天气炎热(H=1),小明要吃冰棍儿,爸爸一看,今天天气是挺热的,既然你渴了,给你买一个吧。 由于两个条件都满足,记作: 1 AND  1 = 1
2、某一天小明口渴(T=1,天气有点儿冷(H=0,小明要吃冰棍儿,爸爸一看,今天天气那么冷,吃啥吃,一个大耳刮子打了过去,小明:“啊~~”。   记作: 1 AND 0 = 0
3、某一天小明不渴(T=0),天气炎热(H=1),小明想吃冰棍儿,爸爸一看,不渴吃啥冰棍儿,有钱烧的啊!一个大耳刮子打了过去,小明:“啊~~”。   记作: 0 AND 1 = 0
4、某一天小明不渴(T=0),天气有点儿冷(H=0),小明想吃冰棍儿,爸爸直接一个大耳刮子打了过去,小明:“啊~~”。   记作: 0 AND 0 = 0
Round two:突然小明爸爸大发善心,改了条件,跟小明说天气炎热或者口渴都可以吃冰棍儿了。那么爸爸的条件是: T=1 OR H=1
 
1、某一天小明口渴(T=1,天气炎热H=1,小明要吃冰棍儿,爸爸一看,今天天气是挺热的,而且你也渴了,给你买一个吧。 记作: 1 OR  1 = 1
2、某一天小明口渴(T=1,天气有点儿冷H=0,小明要吃冰棍儿,爸爸一看,既然你口渴了,给你买一个解解渴吧。   记作: 1 OR 0 = 1
3、某一天小明不渴(T=0,但是天气炎热H=1,小明想吃冰棍儿,爸爸一看,天气那么热,买一根儿消消暑吧。   记作: 0 OR 1 = 1
4、某一天小明不渴(T=0,天气有点儿冷H=0,小明想吃冰棍儿,爸爸又一个大耳刮子打了过去,小明:“啊~~”。   记作: 0 OR 0 = 0

与和或的运算结果已经都得出来了,非的话就比较简单了。非真即假,非假即真,NOT 1 = 0,NOT 0 = 1。

02
逻辑电路
 
正如布尔代数发明出来,不被人们重视一样,刚才推出来的逻辑运算有什么用,好像跟计算机也没关系啊!大家先别动手,有话好好说,继续听我讲。

香农把布尔逻辑里的1和0,对应到电路里的开和关,发现了一个惊天大秘密,可以把二进制和布尔逻辑结合进电路里,解决数学问题。布尔逻辑怎么和电路结合的呢?还记得我们上一篇文章里画的一个继电器吗?继电器开关闭合电路就通电,断开就没电,不刚好对应输入1和0吗?如果我们把两个继电器串联起来的话,不就是两个都闭合,电路才通电吗?这个不就是逻辑与吗?

我们可以看到,只有当T和H两个开关都闭合时候,a和b处的开关才会闭合,最终形成一个通路,R处的灯泡才会变亮。这个就叫作与门。为了方便,电路符号简化为下面这样。

逻辑或就是并联两个继电器咯。对,就是这么简单!
我们可以看到,a和b有一处闭合的时候电路就是通电状态,所以当T和H两个开关任意一个闭合的话,R处的灯泡就会变亮。这个就叫作为了方便,电路符号简化为下面这样。

逻辑非怎么搞咧,也就是开关断开时候,灯泡会亮,开关闭合时候,灯泡熄灭,我们这么搞是不是就可以了。

当a处的开关断开时候,b处的开关闭合,灯泡是亮的。当a处的开关闭合时候,一股洪荒之力涌上铁棒,把b处的开关往下拉,使电路处于断开状态,灯泡就熄灭了。这个就是非门,它是一元运算,比较简单,我们看一下电路简化符号。

上面三种属于基本的逻辑电路,他们组合起来的话还有一些其他有用的电路。比如两个非门串联起来,就组成了或非门(NOR),它的结果正好跟非门相反。
两个非门并联起来,就组成了与非门(NAND),它的结果正好跟与门相反。
 
布尔逻辑和电路可以完美的结合在一起,但是这些电路有什么用呢?布尔逻辑跟数学运算有什么关系,能完成数学运算吗?继续往下看。

02
加法器

 

数学运算无非就是加、减、乘、除,我们先看一下加法,二进制里加法怎么计算呢,我们先看一下二进制运算的规律。

0  + 0 = 0

0  + 1 = 1

1  + 0 = 1

1  + 1 = 0 (进位1) 

 

通过观察,我们发现,只有两位都为1时候,才会发生进位,跟与门的操作结果一样。

结果值跟或门有点类似,区别是1 OR 1结果是1,但是我们想要的结果是0。跟与非门也有点类似,但是0 NAND 0 结果是1,我们想要的是0。我们把或门非门操作结果与我们想要的结果列出来,看下能否找到其他规律。

 

输入X 输入Y 或门 与非门 预期结果
0 0 0 1 0
0 1 1 1 1
1 0 1 1 1
1 1 1 0 0

哎?这不那啥吗?或门和与非门的结果再进行一次与操作不就符合预期了!模拟一下电路试试。

 

Bingo~,完全符合预期了。这个实际上是另外一个门电路,叫异或门(XOR),相同为0,不同为1。我们把进位标记也融合进来,顺带看一下异或门的电路符号。

 

这不就搞定1位二进制位的加法了,完美!这个实际上是半加器如果计算多位二进制的加法是不是还少点啥?还得能接受进位,也就是输入数据变成了三个,输出数据仍然是结果R和进位C。咱们先捋一下关系,然后再看电路怎么设计。三个数相加R肯定就是三个数的和,进位C的话有两种情况,一种是两个操作数相加后本身就需要进位,另一种情况是两个操作数的和+上一个进位C的结果需要进位,我们来画一下电路图。
 

 
这个就是全加器,我们把电路图封装一下,然后把8个全加器连到一起,就可以做一个8位加法器了,大家可以用Logisim软件试一下。

走线比较挫,累死我了,下篇文章再介绍减法、乘法以及除法运算吧。

本篇文章来源于微信公众号: 搞点儿啥

最后修改日期:2019年11月3日

留言

填写回复或留言