一文搞懂CPU运算原理

以下是视频计算机科学速成课的笔记,感谢字幕组!!!

一、逻辑门

了解逻辑门以前,让我们来看看组成逻辑门的三极管。
在这里插入图片描述
这是三极管,有两个电极和一根控制线。如果控制线有输入,三极管才能导通,即如果电流从上面来,控制线如果没有电流,则下面的电极也没有电流。只有控制线有电流通过,下面的电极才能有电流。

有了上面的基础,我们来了解一下非门。
1、非门
在这里插入图片描述
把控制线当作输入,把上面的电极当作输出。当我们把下面的电极接地,一旦有输入,那么上面的电流会通往下面的电极,由于下面的电极接地,所以会导致上面没有输入。(下面把有输入输出当作1,没输入输出当作0) 而当输入为0时,这时候上面和下面的电极会断开,电流会流向输出端,那么输出为1。简单点说,输入为1时输出为0,输入为0时输出就为1。

2、与门
在这里插入图片描述
使用两个三极管这样连接,把两个控制线当作输入,把右边三极管的一个电极当作输出。这样,我们就得到了一个与门。只有当两个输入都是1的时候,输出才是1,否则输出为0。

3、或门
在这里插入图片描述
使用两个三极管这样连接,即把两个三极管的两个电极分别连接在一起,把控制线当作输入,把三极管的一极当作输出。这样,我们就得到了一个或门。当任意一个输入为1时,输出都为1,两个输入都是0才输出0。

这就是最基本的逻辑门,接下来其他的如异或门都是基于这几种组合而成。


二、算术逻辑单元(ALU)

1、算数单元

1.1、半加器
半加器表格
上图表示两个数相加的结果。

算出来的结果存在SUM,进位结果存在CARRY。由上图的表可知,SUM可由或门得到,CARRY则由与门可得到结果。
在这里插入图片描述
半加器只考虑两个1位二进制数A和B相加,不考虑低进位来的进位数相。如果需要低进位参与运算,我们需要一个全加器。

1.2、全加器
在这里插入图片描述
全加器由于要考虑进位,所以有三个输入。
在这里插入图片描述
这里使用两个半加器来制作全加器,即把半加器1中A、B的和当作下一个半加器的A与C相加。三个1位二进制相加,最多只有一个进位。这里使用一个或门检查进位是否为1。

1.3、8位加法器

有了上面的基础,我们能够通过1个半加器和7个全加器制作一个8位加法器,如图所示。
在这里插入图片描述
假设 A:10111011、B:00000001

  1. A0和B0的相加是第一次相加,不用考虑进位,使用半加器得到sum0为0,进位C为1。(A0和B0是最低位,即上面A和B的最后一位数都是1)
  2. A1和B1相加,同时还要考虑上面的第一步的进位C,即A1(1)+ B1(0)+ C(1)得到sum1为0,进位C为1。
  3. A2与B2相加,也要考虑第二步的进位C,即A2(0)+ B2(0)+ C(1)得到sum2为0,进位C为0。

依此计算,得到结果sum7-sum0排列的结果是10111111,与我们列式计算式一样的。

同时,我们要知道最后一个半加器有进位,则表示有溢出,我们使用的8位不能够表示相加的结果,因为相加的结果太大了。

2、逻辑单元
在这里插入图片描述
这个逻辑电路负责检查计算的结果是否位0,只有当所有输入都为0的时候,输出才为0。除了0标志位,还有溢出标志、复数标志等等。

三、寄存器和内存

1、存储1位数据的电路:锁存器

需要回向电路,即把输出连回输入。

OR门:两个输入分别为A和B,将输出连回输入B。首先两个输入都设为0,0 OR 0 是0,所以电路的输出为0,如果将A变为1,1 OR 0 为1,所以输出为1,输出回到B,OR门的两个输入都是1,1 OR 1 仍然为1,所以输出不变,此时该电路能记录“1”,但是问题是这个记录是永久的,无论怎么改变输入A都没办法从1变回0。
在这里插入图片描述
AND门:两个输入分别为A和B,将输出连回输入B。开始时将A和B都设为1,1 AND 1 输出1,之后将A设为0,由于是AND门,输出会变成0,这个电路能记录0,并且无论A设为什么值该电路都始终输出0。
在这里插入图片描述
AND-OR 锁存器

有了能存0和1的电路,为了做有效的存储可以将两个电路结合起来,称为“AND-OR 锁存器”(AND-OR latch)。它有两个输入,“设置”(SET)输入把输出变成1,“复位”(RESET)输入把输出变成0,如果SET和RESET都是0,电路会输出最后放入的内容,即存储了1位的信息。

这叫“锁存”(latch)是因为它“锁定”了一个值,放入数据的动作叫“写入”(writing),拿出数据的动作叫“读取”(reading)。
在这里插入图片描述
但是这个锁存器有两个输入,即当需要存1的时候我就SET设置为1,存0的时候就RESET设置为1。我们希望只有一个输入,所以门锁出现了。

门锁

为了方便使用,增加逻辑门将AND-OR 锁存器改为“门锁”(Gated Latch),两个输入为数据输入(data input)和允许写入线(write enable),一个输出为数据输出(data output)。门锁只是在原来的基础上增加了一些额外的门电路。
在这里插入图片描述
为了方便表示,将门锁抽象成下图:
在这里插入图片描述
即仅当允许输入为1时可以写入,为0时无论输入0或1输出都是上一次的数据。

我们上面的门锁只能锁定1个bit,所以我们将多个锁存器就可以组合成寄存器。

2、寄存器

8位寄存器
在这里插入图片描述
将多个锁存器并排放置就得到了一个8位寄存器。它有8根输入线和8根输出线和一根启用写入线。64位寄存器则需要129根线,256位则需要513根线!!!这种排列的方式扩容所需要的数据线是恐怖的,为了解决这个问题,将他们以矩阵方式排列。

16*16门锁矩阵
在这里插入图片描述
如果要启动某个寄存器,就打开相应的行线和列线。我们放大其中的一个寄存器,可以看见:
在这里插入图片描述
这时如果将行线和列线,允许写入线设置为1,那么这个时候是可以把数据写入的。当允许写入线设置为0,数据就锁定了。

同样,如果将允许读取线设置为1,那么三极管处会导通,可以通过数据线读取到该寄存器的值。

因为我们通过行线和列线只能唯一确定一个锁存器,所以同一时间只有一个锁存器会起作用。因此,我们只需要1根数据线,1根允许读线和1根允许写线,加上行和列,只需要35根线。也就是说,锁定256位数据只需要35根线,而并排则需要513根,极大减少了线的数量。

3、多路复用器

おすすめ

転載: blog.csdn.net/never_late/article/details/111146039