深入理解计算机组成原理(一文看懂计算机的整体原理)

我和小玉从小就相爱了。我们住在隔壁。

一、电路——的编码和信号转换

晚上爸妈会没收我的手机,但是我们还是想聊天又不敢发出声音,所以就想到了这个办法。

我们所有的汉字都是通过灯泡的开和关的组合来表达的。同时约定每秒读取灯泡状态并记录。这是我们的秘密代码。

我:亮亮。

Xi:出去,出去,出去

欢:熄灯,熄灯。

你:亮亮。

这样,虽然我们不没有手机,我们仍然可以日夜聊天。虽然效率很低,但我们还是很开心。

我和小宇不经意间把语言转换成了灯泡的组合。这个过程叫做编码。

二、门电路3354信号相关性

我和小宇一直偷偷的聊,直到上了大学,我们的父母都不能我们再也不能控制手机的使用了。

但是和小灯泡聊了这么多年,总觉得事情没那么简单,于是开始了一些新的探索。

我们增加了一个开关。此时,当两个开关同时闭合时,灯泡就会亮起。

两个开关和灯泡这么简单的对应,已经不是以前的那种了,而是一种逻辑。

开关的断开和闭合分别对应电路的断开和闭合。但是,小灯泡的亮度也对应着电路的断开和接通。那么两者就可以统一起来,不再取决于具体的物理性能。

此外,开关的连接和断开是活动的。小灯泡的连接和断开是被动的和结果。

我们把这里开关的接通和断开称为输入端,灯泡的接通和断开称为输出端,把整个电路封装在一个图中,可以得到如下抽象:

我们决定把这个电路叫做门电路,上面这个叫做与门。

为了以后更抽象地探讨,我们把电路连接表示为数字1,电路断开表示为数字0。

我们称这种表示为二进制。

a输入b输出000010100111

慢慢的,我们发现了越来越多的玩法。

我把上面的电路抽象成下面的门电路形状,叫做或门。

之后就一发不可收拾了。我和小玉设计了越来越多的门电路。我们发现任何我们能想到的逻辑关系都可以设计成相应的门电路。

三、加法器3354信号的计算

十进制数可以转换成二进制数,可以对应门电路的输入输出。

于是我和小玉有了一个大胆的想法。能不能设计一个计算加法的电路?

让让我们从最简单的一位二进制数加法开始:

0 0=0;0 1=1;1 0=1;1 1=10

把它变成如下的表格

加法a,加法b,加法输出进位输出0000110101101

也就是我们需要设计一个能达到表中输入输出效果的电路。

经过不懈的努力,终于发现这个电路可以由异或门和与门两个门电路组成。

这个器件实现了二进制一位加法,但并不完美,因为只考虑了这两个数的进位输出,而没有考虑最后一位的进位,所以只能称为半加法器。

如果考虑到前一个进位,只需要再加一个半加法器,拼接一个或门。

此时,我们已经构建了一个完美的一位加法器,并自豪地称之为全加器。

全加器做好以后,不管加法器有多少位,只要把全加器一个一个的放在一起就行了。让让我们试着做一个八位加法器。

好吧,你我们结束了。有了加法器,任何数学运算都可以在理论上实现。

因为我们知道乘法可以转化为加法,除法可以转化为减法,减法可以转化为补码加法。现在我们可以自豪地称这个组件为ALU。

四、时钟3354信号振荡

我和于豆都很开心。最后,通过电路实现了计算功能。

但慢慢地它没有没有任何意义,所以我们突发奇想,设计了下面这个诡异的电路。

当开关A闭合时,整个电路接通,开关B会被吸下去,整个电路断开,电磁铁失磁,开关B又弹起。这时电路又接通了,开关B又会被吸下去。

这样开关B在断开和闭合之间连续快速循环,我们从不干涉这个电路,所以这个电路具有自反馈特性。

因为开关B来回振荡,所以我们称这个电路为振荡器。因为它可以产生不断变化的电信号,所以它像时钟一样不断有规律地运行。我们也称这个装置为时钟。它产生的交流电信号称为时钟信号。

五、 ram 3354以保存信号

虽然有加法器,但输入的数从何而来?你能先把它放在某个地方吗?

我和小宇经过多次实验,发明了一种非常复杂的电路:

如果输入端是1,而信号为一个控制终端被改变(信号从0变到1的瞬间),输出端变成1,然后输出端仍然保持(存储)just 1。如果输入为0且信号为一个控制终端被改变,输出将变成0,然后输出将仍然保持(存储)恰好0。

如果你不我不明白,它不没关系,只要记住这个电路的设计,实现一位存储功能就行了!我们称之为1位锁存器。

然后我们把几个锁存器组合起来,加上一些3-8译码器,8-1选择器等电路,就可以实现一个可以存储8位二进制的存储器,并且可以随机读写。我们称之为RAM,简称内存。

该元件可以再次组合,形成一个N M RAM阵列。例如,我们可以表示一个1024 * 8的RAM阵列。

这意味着存储容量为1024个单位,每个单位占用8位。

为了更方便,我们规定1024=1K,8位=1字节(8位=1字节),那么我们可以说这个RAM的存储容量是1K个单位,每个单位占1B。或者说,地址空间1K,存储容量1KB。

这个时候,这个RAM模块已经近乎完美,我们甚至可以单独使用,把数据存储在一个地址,把数据读出一个地址。

如何方便人们操作?只需将地址输入、数据输入、写操作端子分别连接到一个控制面板上,通过一个开关控制这些信号的输入是1还是0,然后将数据输出连接到一些便于观察的灯泡上,就可以做到单个可以手动操作的存储设备。(下图有彩蛋~)

有了可读可写的存储器,我们可以预先在存储器中存储几个数字。接下来能不能让算术逻辑单元ALU自动读取这个数并相加?

六、程序3354自动化

让我们先介绍一个新的元件,10位计数器,其中Clk连接到我们在第四部分谈到的时钟信号,Clr是复位端。具体效果在下图中一目了然。

计数器的输出是0,1,2,3,4,5,可以作为内存中的地址。

我们把这个计数器,以及上面提到的ALU和RAM连接起来,尝试实现一个可以累加求和的器件。

我们要计算的是1 2 3 4 5 6 7。这个自动计算器是这样工作的。

1、使用控制面板将数字1~7存储在RAM的地址0~6,这在上一节中已经实现。2、当计数器值为0时,数据1输出到加法器进行计算。此时加法器A=1,B=0,计算结果为1。但是要记住锁存器存储的是上一个加法器输出0,这次的计算结果要等到下一个锁存器遇到上升沿信号。3、当计数器的值为1时,数据2被输入到加法器。此时锁存器存储上一次的计算结果1,并将这个1输出给小灯泡,同时返回给加法器的B。所以这时加法器A=2,B=1,计算结果是34、。当计数器的值为3时,以此类推,请看下图。

我们已经自动化了积累和求和的过程!之后,如果你想计算累积和,只需使用控制面板将数据预先存储在内存中!不是不方便吗?

七、程序指令

我们也想要更多的自动化!

现在,这种设备只能无意识地从头到尾累积RAM中的数据,并且不能不能选择添加或不添加,也不能选择何时停止。

比如我们RAM里的数据是这样的。

地址(十六进制)数据(十进制)0x00.0x01100x02.0x03200x04300x05..

我们只想把RAM蓝色地址的数据累加,忽略其他地方的数据,停在RAM0x05。我们做什么呢

我们可以再增加一个内存。存储在这个RAM中的数据表示说明

让让我们先发明三种指令。

加法:累加RAM这个位置的值。nop:忽略这里的值(也就是什么都不做)。停止:停止(禁止计数器加1)

那么,为了实现上述功能,相应指令RAM中的数据应该如下。

注意:下面指令RAM的地址和上面数据RAM的地址是一一对应的!

地址(十六进制)指令RAM值指令含义0x00nop不执行任何操作0x 01添加累加0x02nop不执行任何操作0x 03添加累加0x 04添加累加0x05halt停止..

我们需要引入一个控制单元,并把它放在下面的位置。

当遇到nop指令(0x00)时,输出将禁用锁存器的w位,并且不允许锁存器写操作,因此不会输入累加结果。

例如,当输入为halt指令(0x05)时,计数器的en位被禁止,计数器1不被允许,从而达到停止的效果。

此时可以再次振荡时钟信号,从而实现选择性求和过程,时钟信号可以悬停在指定位置。现在让让时钟信号振动,看看这个过程。(这里只留下关键部件)

这个控制单元怎么实现?我们知道,只要给定输入和输出,任何元件都是可以制造的。本文不再展开。

有了三条指令,我们知道所有的操作都可以通过指令和各种复杂的控制器实现自动化。

接下来要做的就是设计控制器,约定大量指令,通过这些指令的排列组合,实现任何自动计算操作。

我们会设计很多指令。

调用指令集

我们排列组合指令后可以实现的功能。

叫做程序。

我们在这个过程中结合指令的排列。

叫做编程。

我们会安排结合这些说明的人。

叫做程序员。

我们将如何称呼这个承载所有这些的设备呢?

没错,这个蠢东西就是电脑。

原标题:插图|你把这蠢东西叫电脑?

来源:【微信微信官方账号:传感器技术】欢迎关注!请注明文章出处。