noteless 头像
noteless

2.计算机组成-数字逻辑电路 门电路与半加器 异或运算半加器 全加器组成 全加器结构 反馈电路 振荡器 存储 D T 触发器 循环移位 计数器 寄存器 传输门电路 译码器 晶体管 sram rom 微处理 计算机

现代计算机的各个部件到底是如何通过逻辑电路构成的呢

 

半加器

我们说过了门电路

看似简单的三种门电路却是组成了整个逻辑电路的根基

真值表--其实就是根据输入输出状态枚举罗列出来的所有可能

比如有一台设备,他有两个输入A和B

无论何时,他们都有电或者都没有电的时候是正常,任何一个有电就是不正常

那么他的真值表就是这样子的

AB表示输入  F表示输出

第一步:找到F=1的行

第二步:把表达式写成数理逻辑的形式,如果是0写成非的形式

         

第三步:各个逻辑"加"起来

继续翻译成逻辑电路的话那就是

A与B的非门连接到一个与门

A的非门与B连接到一个与门

然后再把这两个连接到一个或门

符号

是不是很简单?

就好似摩天大楼由砖头(与) 水泥(或) 钢筋(非)组成一样

一块砖和另一块砖叠在一起很简单,但是组成摩天大楼就会很复杂

其实这个电路不就是一个异或门

a⊕b = (¬a ∧ b) ∨ (a ∧¬b)

如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。

再回头看一下上面的真值表

A和B经过这个设备,输出为F,是不是可以这样描述

0⊕0=0

0⊕1=1

1⊕0=1

1⊕1=0

设想一下二进制的加法是什么样子的?

0+0=0

0+1=1

1+0=1

1+1=0(此处应该有进位1)

这不就是没有进位的二进制加法运算设备吗?

所以说

异或也叫半加运算

--之所以说是半,是因为他没有进位机制

 

全加器

想要计算加法,很显然我们需要一个全加器,就是有进位的,对吧,这是很自然的逻辑思维

百度百科中如是说:

全加器是能够计算低位进位的二进制加法电路。

是用门电路实现两个二进制数相加并求出和的组合线路.

与半加器相比

全加器不只考虑本位计算结果是否有进位,也考虑上一位对本位的进位,

可以把多个一位全加器级联后做成多位全加器.

用现在的概念去解释描绘历史,好像不是那么合适,但是我觉得会更有利于理解

全加器不只考虑本位计算结果是否有进位,也考虑上一位对本位的进位

如果不理解的话,可以拿出纸笔来计算,比如

前一个进位1 显然就是上一位对本位的进位

后一个进位1 显然就是本位计算结果是否有进位

每一次的计算,都有三个输入,加数被加数,以及来自上一位的进位

每一次的运算,则会产生当前位的结果,以及向下一位的进位

所以一次计算会有5个变量

我们用A,B分别表示两个输入 加数和被加数

Ci表示来自前一列的进位

S是加数A被加数B以及Ci的和,和并不太准确,也就是求和后当前位的值

C0表示本位计算结果对下一位的进位

显然,A,B,Ci都可能有不同的值

我们列一下S的真值表 表示当前位计算的结果

三位的组合,每位可能两个值,所以总共8种可能

按照之前的步骤,找出来S为1的行,0用非来表示,最后求和

C0的真值表   表示当前计算结果是否有进位

也是三位的组合,每位可能两个值,所以总共8种可能

我们转换成电路

不要问我怎么画,你就按照我们上面的两条逻辑对着电路图走一遍

看看是不是这么回事就好了,反正我自己只是要理解计算机,而不是去设计电路

你要想搞得很明白,你可以去研究下

数字逻辑与数字系统设计或者数字逻辑XXX与XX设计一类的书名的书籍

我们可以把上面的式子简化下

可以简化为

我们之前已经知道对于  异或电路半加器

a⊕b = (¬a ∧ b) ∨ (a ∧¬b)  也就是a与b的异或就是 

 

简化为

根据:

就可以得到下面的电路图

根据输入输出的变量情况

我们可以用下面的图来表示一位全加器

有了一位全加器,我们自然可以组合出来更多位的全加器

看三位的全加器有了

S3  S2   S1   S0   的排列就是计算出来的结果,不是吗

我们继续抽象一下,一个加法计算器就出来了

根据之前提到过的一些知识理论,我们可以很容易想得到

对于左侧的输入,我们完全可以根据电路的闭合和联通来确定是0 还是 1

对于右侧的输出,我们可以接上小灯泡,用亮和灭来记录结果

 

反馈电路  振荡器 -计算机的心跳

之前提到过,继电器的常用场景之一就是用作控制电路

如下图所示

想想我们之前的非门

带电源的常闭式(就是右侧电路默认是闭合)的继电器就是一个非门

刚已经说过,上面是用作控制电路,左侧电路控制右侧,右侧也是有电源的

如果共用电源

可以很明显的看得出来

开关本身是闭合的,一旦接通电源

吸引衔铁开关,断开电路然后失去磁性,然后电路闭合

吸引衔铁开关,断开电路然后失去磁性,然后电路闭合

.....

他是一种特殊的非门

把自身的输出结果拿过去作为输入

把一个非门的输出拿出来一部分作为它的自身的输入这叫做反馈

那也就是说一个非门加上一个反馈

就构成了这样子的一个装置,可以反复的在两种结果中跳转,并且无限持续

这就是 振荡器

能够产生一连串无限(只要有电)交替变化的输出

可以想象得到,振荡器的变化形式类似下面的形式

也就是高低交替的(不要去纠结到底是横线多长间距多大两行之间有多高~)

电流的切换速度是极快的

所以我们直接忽略时间,认为他是瞬间就可以达到,否则他肯定是斜线

上升沿:电压从0到最大值的上升的竖线叫做上升沿

下降沿:电压从最大值到0的下降的竖线叫做下降沿

 

触发器-记忆

然后又有两个人才研究出来了一个更加特殊的连线方式

电路上下对称,分别都是一个或门连着一个非门

他们各自的输出又分别是对方的输入

两个或非门首尾相连形成两个反馈

再次强调不要纠结这到底是啥,我相信最初肯定是瞎弄的,科学不就是尝试么

然后发现了有些有意思的地方,然后就被加深研究了

如果左侧加上电源 右侧接上两个灯泡的话

根据开关闭合与断开 以及灯泡的情况

研究出来了触发器的原理

工作状态依赖于两个开关R S 

闭合一个断开另一个,总是会得到两个相反的输出Q和Q~

要是全部断开,那么取决于Q和Q~刚才是什么状态,也就是有记忆功能

最早的一种触发器,称之为R-S触发器

Q和Q~总是以相反的状态出现

0 1 或者1 0

触发器截然相反的两个输出,不过多数情况下仅仅使用一个

触发器的记忆功能被应用到计算机的存储上

使用Q来记忆一个比特,另外一个就不用了,因为本来他们就相反

要想使用Q保存一个比特,自然离不开R  S

想要Q=0   S=0 且R=1

想要Q=1   S=1 且R=0

两个输入可以用非门表示

当电路刚接好(还没有按下开关),S为0 R=1  Q=0  灯泡不亮

当按下开关后,S为1 R=0  Q=1  灯泡亮了

但是一旦开关断开,灯泡立刻又灭了,因为又回到了刚才的状态

显然,虽然可以保存1比特,但是并不能维持他的存在,因为R和S作为输入发生了变化

所以很自然的,想到在R和S外加一层控制

然后又发明了带控制的触发器  D触发器

CP作为控制线路

Cp=0 时,通过与门,自然不管D上是什么,S和R都为0,触发器保持原有内容不变

CP=1 时,如果D=0 那么 S=0 R=1  Q=0

CP=1 时,如果D=1 那么 S=1 R=0  Q=1

也就是说CP作为控制线路控制是否可写

在可写的情况写,D控制写入的内容

这种触发器会在CP=1期间都可以进行写,只要D改变了,保存的值就会发生改变

所以想要准确的保存一个比特,你需要保持住D的值,持续经过CP从0~1然后再到0的过程

所以,又发明了一种新的触发器,仅仅是在CP从0变成1  或者从1变成0  的时候才会触发

-也就是接受D的输入

两个D触发器首尾相连而成,前一个触发器的输出是后一个触发器的输入

这两个触发器不会同时工作

这个触发器是上升沿D触发器

也就是不管控制端是0 还是1   还是从1到0的下降沿,都不能保存

只有0到1的上升沿才能保存

如果把若干个上升沿D触发器连接起来

最初开关是断开的,所有的触发器都不工作

因为CP都是0

如果你不停的按开关,最初闭合开关瞬间的这个比特1 就会在触发器间顺序传递,从左到右

手动按动开关自然是无聊的,所以振荡器就被应用其中了,而且速度是可调节的

这种走马灯的电路就是 循环移位寄存器

寄存,是临时存放的意思

当若干个触发器组合在一起,可以同时保存多个比特时就成为寄存器

 

计数器

T触发器   Q~作为输入到D

假设最初Q=1 Q~=0  灯泡是亮着的

反复按动开关(按键开关),灯泡会在亮灭之间交替变化

每当一个脉冲到达CP时,触发器的输出就会发生翻转,原先是0 则变成1  原先是1 则变成0

Q~也是这样,只不过值刚好相反

他有一个神器的作用就是用于计数

简化一下(隐藏了Q~到D的连线,但是他是存在的)

5个连接在一起,从右往左看,每个触发器的输出端Q~都连接下一个触发器的CP

先把每一个触发器清零 使得 Q43210   的值为00000,这表示0  

随着振荡器脉冲的输入,会不断计数

显然,一个触发器表示一个比特,8个触发器组成计数器,就是可以累积255个脉冲 11111111

试想一下如果计数器已经达到最大了,此时又来了一个脉冲,是什么效果?这不就是溢出的基本原理么

 

寄存器

试想一下如果多个数通过全加器进行计算,需要解决什么问题?

之前我们说到过半加器到全加器的进化,需要记录处理进位的情况类似

多个数相加,自然需要处理中间结果,所以你需要保存下来

寄存器的符号(就是触发器组成 多个触发器可以构成寄存器)

上升沿才会工作

把加法器换一种形式描绘

如果你还记得到话,之前是这样子的

我们把寄存器连接到加法器上

你应该可以看得懂

当按键开关KRA按下时,开关输入的数值会通过寄存器,输出到加法器,作为他的一个加数

为了简化电路图,使用同一组开关提供加数和被加数

这样,通过开关送进来的数可以先到到寄存器RA ,同时也被送到加法器另一个输入端

如果你想要保存到寄存器RA就按一下按键开关

如果你想要用它和寄存器中的数相加,就什么也不用做,结果自动从加法器的输出端

所以当你输入第一个数字,按一下KRA开关,寄存器保存了加数

输入第二个数字,寄存器的值就和他相加  立刻得出结果

然而此时的寄存器还没有保存中间结果

一种很显然的方案就是加法器的输出,同寄存器的输入端直接相连接

很显然,共用电路带来了很多麻烦

比如加法器计算出来的结果不仅会达到寄存器还会进入自己的输入端

所以说要么就是想办法电路分开,要么就是轮流共用线路

大家共用的线路,就是我们常说的总线

 

轮流使用总线 传输门

继电器的作为控制电路的理论再次被应用

这种结构就叫做传输门---开关闭合,信号可以通过,开关断开,信号就中断

名字很形象

所以可以使用传输门来控制总线上数据的传输

 

上图中都是按键开关,不是闸刀开关

左边通过传输门GA接入总线

右边加法器输出通过GB接入

而且还多了一个临时寄存器TR 临时保存加法器的计算结果

计算过程是这样子的:

比如 1+2+3+4+5

第一步:开关拨出来第一个数 ->按住KGA打开传输门->按下KRA,数据保存在寄存器RA中,松开KGA,关闭传输门

虽然此时这个数据已经也到了加法器的另一个输入,加法器也会进行运算,但是GB关闭的,TR也不会进行保存

第二步:开关拨出来第二个数

->按住KGA打开传输门,这样第二个数被加数会进入加法器的另一个输入端,加法器会自动运行

->按一下KTR,保存计算结果到临时寄存器

->松开KGA

->然后就是按住KGB,让临时寄存器TR的数据达到RA

->按一下KRA寄存器保存中间结果

虽然也会输入到加法器的另一个输入端,也会进行加法,但是TR会屏蔽掉数据不会保存

梳理简化下步骤:

按住KGA   按一下下KRA 松开KGA===>保存了加数

按住KGA===>计算结果

按一下KTR    松开KGA  按住KGB 按一下KRA===>保存中间结果

 

译码器

你可以去设想可能的电路,找到输入输出,然后列出真值表

然后设计逻辑电路,这是通用的解决问题的思路

比如我们设想

 

经过这样子一个电路,我们可以更方便的操作,图中假定设置加数 是装载   设置被加数求和 是相加

再次优化

 

RR是循环移位寄存器,两个输出t0  t1 替代了K0 K1

这样子就是最开始的时候需要装载,此后都是开关拨数,按两次K,开关拨数按两次K..

这就是控制器的基础原型

上面的这个新电路其实就是译码器,译码器就是用于输入的转换,把一种输入转换为另外的一种输出

如同名字一样,翻译

至此,我们已经可以通过相对比较简便的操作进行连续累加

但是每次不断地拨弄开关进行数据输入,仍旧是比较繁琐的

 

存储器

存储器按照我们的理解,他像一个容器一样,有一个口可以进行 存 / 放 数据

之前说过想要存储数据那就是触发器-上升沿D触发器

G是传输门,控制Q与外部世界的连通性

默认W和R都为0  G是断开的

写入时,DB输入数据,W从0变成1 上升沿   R继续为0,G是断开的

读取时,R=1 打开传输门,W仍旧为0

作为一个基本单元,可以构造容量更大的存储器

使用几个就是可以保存几个比特的二进制数

默认读写均为0

D0~D4准备好数据 写从0~1上升沿,写0  写入数据

写0 读1 读取数据到D0~D4