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

一、逻辑门

了解逻辑门以前,让我们来看看组成逻辑门的三极管。

这是三极管,有两个电极和一根控制线。如果控制线有输入,三极管才能导通,即如果电流从上面来,控制线如果没有电流,则下面的电极也没有电流。只有控制线有电流通过,下面的电极才能有电流。

有了上面的基础,我们来了解一下非门。
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、多路复用器

一文搞懂CPU运算原理相关推荐

  1. 一文搞懂线程池原理——Executor框架详解

    文章目录 1 使用线程池的好处 2 Executor 框架 2.1 Executor 框架结构 2.2 Executor 框架使用示意图 2.3 Executor 框架成员 2.3.1 Executo ...

  2. 一文读懂CPU工作原理、程序是如何在单片机内执行的、指令格式之操作码地址码

    文章较长,大家可选择性阅读,嘎嘎细 计算机结构 CPU的运行原理 CPU的控制单元在时序脉冲的作用下,将指令计数器里所指向的指令地址(这个地址是在内存里的)送到地址总线上去,然后CPU将这个地址里的指 ...

  3. 一文读懂CPU缓存原理!

    CPU总体概述   CPU 缓存「Cache」指的访问速度比一般内存快得多的高速存储器,主要是为了解决 CPU 运算速率与内存读写速率不匹配的问题.因为 CPU 的运算速率比内存读写速率快得多,当 C ...

  4. 一文搞懂 Web Worker(原理到实践)

    作者:poetry 原文地址:https://mp.weixin.qq.com/s/XF7qOhbBtYlwADCiyxbT-w Web Worker 作为浏览器多线程技术,在页面内容不断丰富,功能日 ...

  5. 一文搞懂H264量化原理以及计算过程

    1.概述 量化是使数据比特率下降的有效工具.量化过程的输入值动态范围很大,需要较多的比特才能表示一个数值,量化后的输出则只需要较小比特表示. 量化是不可逆过程,处理过程中有信息丢失,存在量化误差. H ...

  6. 一文搞懂CPU、MPU、MCU、SOC的联系与区别

    转载于read://https_www.elecfans.com/?url=https%3A%2F%2Fwww.elecfans.com%2Fd%2F1813764.html 1 CPU CPU(Ce ...

  7. 一文搞懂RSA算法原理及简单实现

    前言 RSA算法是最重要的算法之一,它是一种非对称加密,是目前最有影响力的加密方式之一.这篇文章我们通过实现一种简单的RSA加密来探究它的原理. 计算公钥和私钥 RSA中的公钥和私钥需要结合在一起工作 ...

  8. 一文搞懂 CPU、GPU 和 TPU

    神经网络如何运算 在我们对比 CPU.GPU 和 TPU 之前,我们可以先了解到底机器学习或神经网络需要什么样的计算.如下所示,假设我们使用单层神经网络识别手写数字. 如果图像为 28×28 像素的灰 ...

  9. 一文搞懂 位运算 异或(Java实现)

    提起异或想必很多小伙伴们既熟悉又陌生,熟悉是因为好像在离散数学或者学某个编程语言 时听过这个东西,而陌生呢,则是因为自己平时并没有用过,以至于当在某个场景 (我猜是在看 题解或者某篇博客时)  看到这 ...

最新文章

  1. leetcode-20 有效的括号匹配
  2. AJPFX关于单例设计模式
  3. 《金蝶ERP—K/3标准财务模拟实训(11.X版)》——第1章 金蝶K/3标准财务介绍 1.1 金蝶K/3标准财务系统介绍...
  4. Windows Android Studio生成javadoc
  5. Envoy实现.NET架构的网关(三)代理GRPC
  6. python节日贺卡图片大全_新年贺卡图片_新年贺卡手工制作图片
  7. Linux学习笔记5
  8. python画太极八卦图_太极八卦图的正确画法
  9. linux 查看汉字编码方式
  10. Android FrameWork——PackageManager框架
  11. php中的脚本加速扩展opcache
  12. Hrbust 1522 利用队列求最大子序列的和
  13. android权限字符串,android-打开失败的EACCES(权限被拒绝)
  14. linux ora-12162,【转】ORA-12162问题的解决及其补充
  15. Node.js常用console中的几种方法
  16. 游戏开发之地图编辑器
  17. exploit completed, but no session was created
  18. AWS​捅大篓子了,近1G敏感数据Github裸奔5小时
  19. 长江口陆地、岛屿变迁与沙地人迁徙史.doc
  20. 开局觉醒天道酬勤天赋(一)

热门文章

  1. JS+JQuery实现前端省、市、区三级联动(插件)
  2. Android高效的EPG界面实现方式
  3. Java毕设项目高校教材征订管理系统计算机(附源码+系统+数据库+LW)
  4. 助力新基建,ZStack携手英特尔、阿里云、天翼云等伙伴发布健壮F.T.+新裸金
  5. 高通平台LCD驱动分析
  6. 当状元必须被阉割 历史上最惨的大官
  7. 数据库 树形数据结构数据库的设计
  8. 中国物种物候和地面物候数据获取方法
  9. Redis五种基本以及三种高级数据结构
  10. 5v转3.3v稳压电路管理IC-AM1117-3.3V