本文为B站UP主硬件茶谈制作的系列科普《【硬件科普】带你认识CPU》系列的学习笔记,仅作个人学习记录使用,如有侵权,请联系博主删除

上一篇文章我们从最基本的粒子的角度认识了组成CPU的最基本单元MOSFET的原理。CPU作为计算机的核心硬件,其最主要的功能是进行运算,本章我们将会介绍CPU设计者是如何使用MOSFET组合出更强大的运算单元的。

逻辑运算

为了能够讲清楚计算机是怎么进行计算的,我们首先要从逻辑运算讲起。

逻辑运算指的是“条件”与“结论”之间的一种关系,是对因果关系进行分析的运算,其运算结果并不表示数制的大小,而是表示逻辑概念成立还是不成立。

举例:小帅喜欢吃苹果,小美不喜欢吃苹果。则我们可以得到推论:两人都喜欢吃苹果这个事情为假;两人其中至少一个人喜欢吃苹果这个事情为真;两人都不喜欢吃苹果这个事情为假。

上面这个例子中,小帅喜欢吃苹果,小美不喜欢吃苹果就是“条件”,后面的推论就是逻辑运算的“结论”。逻辑运算就是对逻辑进行代数抽象,用数学的方式表达逻辑推论的过程的一种代数运算。

逻辑运算的种类

从代数的角度看,最简单的逻辑运算有这么几种:非运算,与运算,或运算,异或运算,同或运算。

如果我们用数字1表示条件为真,数字0表示条件为假,则上述几种逻辑运算可以被表示为以下运算表(数学上称为真值表),最后一列均表示括号中的推论是否为真:

非运算

条件A 推论(非A成立)
1 0
0 1

与运算

条件A 条件B 推论(A与B同时成立)
1 1 1
1 0 0
0 1 0
0 0 0

或运算

条件A 条件B 推论(A或B成立)
1 1 1
1 0 1
0 1 1
0 0 0

异或运算

条件A 条件B 推论(A与B不同)
1 1 0
1 0 1
0 1 1
0 0 0

同或运算

条件A 条件B 推论(A与B相同)
1 1 1
1 0 0
0 1 0
0 0 1

逻辑运算与算数运算的关系

明白了逻辑运算的原理,你可能会问这跟计算机有什么关系?

我们都知道,任何信息在计算机中都是使用二进制的方式存储和计算的。比如十进制数19在二进制中表示为10011,十进制数5在二进制中表示为101,19+5的结果是24,用二进制数表示为11000。

下图为十进制竖式加法的运算过程

先加个位,9加4超过10,因此向十位进1,个位写4,再把十位上的数和进位相加,1加1等于2没有超过10,因此十位相加的结果是2,最后算出来的结果是十进制数24。

下图是对应的二进制竖式加法的运算过程

其实运算法则与十进制相同,十进制是每一位相加满10进1,二进制加法同样是每一位相加,满2进1。最后得到二进制结果11000,刚好也是十进制的24。二进制计算结果与十进制是等价的,由于1和0在计算机中非常天然的可以使用高低电平来表示,因此计算机使用二进制数进行与十进制等价的各种运算。

让我们看一下最基本的两个1位二进制数相加的结果,如果不考虑进位的话,那么1+1的结果是0,1+0的结果是1,0+1的结果也是1,0+0的结果是0。发现了吗,这其实与上一节逻辑运算中异或运算的真值表是相同的。

我们再看一看两个1位二进制数相加的进位是什么情况,1+1进位是1,1+0进位是0,0+1进位是0,0+1进位是0,同样的与上一节逻辑运算的结果比较,可以发现这个结果是与逻辑运算中的与运算真值表相同。

这是两个一位二进制数相加的情况,可以想象,两个多位二进制数相加其实就是对每一位先用异或运算求出该位的值,再用与运算求出该位的进位,就能得到最终的结果。这样我们就把计算机中的算数运算与逻辑运算建立了关系。只要进行简单的逻辑运算,我们就可以在计算机中计算加法。如果能计算加法就能计算减法,因为减法相当于一个数加另一个数的负数。同样如果能计算加减法就能计算乘除法,因为乘法相当于是多个相同的数的加法。

可以想象到,当有了四则运算,计算机就可以做大部分数学计算了。

逻辑门电路

好啦,现在已经掌握了所有基础知识,我们就可以学习逻辑运算是如何通过电路实现的了。MOSFET的作用其实就是构建上述几种逻辑运算器的基本组件,那么我们就看一下如何使用MOSFET来构建上述的逻辑运算。由电子元器件构成的逻辑运算单元就被称为逻辑门电路。

非门电路

上一篇文章我们已经简单的介绍了非门电路的组成,这里我们再复习一下。

供电电压是高压电平,接地电压是低压电平。上面的MOSFET是PMOS,下面的是NMOS。由PMOS和NMOS的特性可知:

  • 当A接入高电平,PMOS不导通,NMOS导通,B端相当于与接地电压联通,输出低电平。
  • 当A接入低电平,PMOS导通,NMOS不导通,B点相当于与供电电压联通,输出高电平。

当我们把高电平定义为1,低电平定义为0,那么这正是非门的运算结果,电路符号如下图:

或门电路

或门电路的组成,符号和真值表如下图所示:

让我们看看当A和B输入0时,Y是如何得到输出结果的

当A和B输入0时,两个PMOS导通,两个NMOS不导通,左半边输出高电平,红框是我们上面讲的非门电路,因此最终Y端输出低电平0。其他情况大家可以自行推导。

或门的作用是,只要有一个输入为1,输出就是1,只有当两个输入都为0,输出才是0。

与门电路

下图是与门电路的组成,符号和真值表:

我们来看一下当A和B均输入1时,Y的输出情况:

当A和B同时输入1,左边两个PMOS不导通,两个NMOS导通,这时左半边输出为低电平0,经过右边的非门转化为高电平1。其他情况大家可以自己推导。

与门电路的作用是,只有当两个输入都为1时输出才是1,否则输出均为0。

异或门电路

下图展示了异或门电路的组成,符号和真值表,同时也展示了当A和B端均输入1时,输出端Y的结果推导过程:

异或门电路的主要作用是,当A和B的输入相同时,输出0,否则输出1。

可以看出上图中为了构建异或门电路,一共使用了10个MOSFET,然而真实使用中,人们研究出了一种更节省材料的方法来实现异或门电路,其电路图如下所示:

中间由一个PMOS和一个NMOS两端相连组成的单元叫做传输门,虽然两个MOS组合在一起,其各自的作用还是不变的,与原始电路比较,这里只用了6个MOSFET就组成了异或门电路。

总结

本篇我们学习了逻辑运算与算数运算的等价性,更进一步认识了组成这些基本逻辑运算的电路。下一篇文章我们会继续深入,看看这些基本的逻辑运算电路是如何组成一个计算加法的加法器的。

认识 CPU 底层原理(2)——逻辑门的更多相关文章

  1. 并发之volatile底层原理

    15.深入分析Volatile的实现原理 14.java多线程编程底层原理剖析以及volatile原理 13.Java中Volatile底层原理与应用 12.Java多线程-java.util.con ...

  2. NGUI所见即所得之深入剖析UIPanel,UIWidget,UIDrawCall底层原理

    NGUI所见即所得之深入剖析UIPanel,UIWidget,UIDrawCall底层原理 By D.S.Qiu 尊重他人的劳动,支持原创,转载请注明出处:http.dsqiu.iteye.com 之 ...

  3. volatile底层原理详解

    今天我们聊聊volatile底层原理: Java语言规范对于volatile定义如下: Java编程语言允许线程访问共享变量,为了确保共享变量能够被准确和一致性地更新,线程应该确保通过排它锁单独获得这 ...

  4. JMM和Volatile底层原理分析

    JMM和volatile分析 1.JMM:Java Memory Model,java线程内存模型 JMM:它是一个抽象的概念,描述的是线程和内存间的通信,java线程内存模型和CPU缓存模型类似,它 ...

  5. Docker底层原理介绍

    1.docker介绍 1.1什么是docker Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻 ...

  6. Java面试底层原理

    面试发现经常有些重复的面试问题,自己也应该学会记录下来,最好自己能做成笔记,在下一次面的时候说得有条不紊,深入具体,面试官想必也很开心.以下是我个人总结,请参考: HashSet底层原理:(问了大几率 ...

  7. 2、docker安装:内核要求、docker三要素、安装、helloworld、底层原理

    1.前提说明 1.CentOS Docker 安装 Docker支持以下的CentOS版本: CentOS 7 (64-bit) CentOS 6.5 (64-bit) 或更高的版本 2.前提条件:内 ...

  8. (前篇:NIO系列 推荐阅读) Java NIO 底层原理

    出处: Java NIO 底层原理 目录 1.1. Java IO读写原理 1.1.1. 内核缓冲与进程缓冲区 1.1.2. java IO读写的底层流程 1.2. 四种主要的IO模型 1.3. 同步 ...

  9. 面试官再问你 HashMap 底层原理,就把这篇文章甩给他看

    前言 HashMap 源码和底层原理在现在面试中是必问的.因此,我们非常有必要搞清楚它的底层实现和思想,才能在面试中对答如流,跟面试官大战三百回合.文章较长,介绍了很多原理性的问题,希望对你有所帮助~ ...

  10. 「MoreThanJava」一文了解二进制和CPU工作原理

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

随机推荐

  1. mac git远程仓库错误解决方法

    mac更新后不知道怎么回事,git时出现了 Permission denied (publickey). 经查询后得出原因 1.首先给git进行config的配置 git config --globa ...

  2. progress监视linux命令进程

    progress监视linux命令进程 可以查看哪些命令进程 cp mv tar dd gzip cat grep 如何在ubuntu安装 sudo apt install progress 使用方法 ...

  3. 声网Agora 实时音视频服务正式上线 HTC VIVE Sync App,支持非 VR 用户

    全球实时互动云服务开创者和引领者声网Agora(纳斯达克股票代码:API)宣布其视频 SDK 现已集成到领先的 VR/XR 远程协作及会议应用 HTC VIVE Sync App 中. 通过集成声网A ...

  4. KMP 自动机,孤独的自动机(同时也是CF1721E的题解)

    给定字符串 \(s\),以及 \(q\) 个串 \(t_i\),求将 \(s\) 分别与每个 \(t_i\) 拼接起来后,最靠右的 \(|t_i|\) 个前缀的 border 长度.询问间相互独立. ...

  5. 自己动手从零写桌面操作系统GrapeOS系列教程——24.加载并运行loader

    学习操作系统原理最好的方法是自己写一个简单的操作系统. 之前我们在电脑的启动过程中介绍过boot程序的主要任务就是加载并运行loader程序,本讲我们就来实现. 本讲代码文件共2个: boot.asm ...

  6. 智能且集成的端到端移动应用程序安全解决方案——Quixxi简介

    移动应用程序安全变得简单快捷 Quixxi 是一种智能且集成的端到端移动应用程序安全解决方案.这个强大的工具可供开发人员在几分钟内保护和监控任何移动应用程序. Quixxi Security 评估应用 ...

  7. 随机森林n_estimators 学习曲线

    随机森林 单颗树与随机森林的的分对比 # 导入包 from sklearn.datasets import load_wine from sklearn.model_selection import ...

  8. Django之admin后台管理

    目录 创建超级用户 向页面中添加表 admin管理页面表名中文显示 创建超级用户 python manage.py createsuperuser 向页面中添加表 登录后,页面中是什么都没有的,还需要 ...

  9. 网络抓包 tcpdump 使用指南

    在网络问题的调试中,tcpdump应该说是一个必不可少的工具,和大部分linux下优秀工具一样,它的特点就是简单而强大.它是基于Unix系统的命令行式的数据包嗅探工具,可以抓取流动在网卡上的数据包. ...

  10. pandas安装1

    Python 官方标准发行版并没有自带 Pandas 库,因此需要另行安装.除了标准发行版外,还有一些第三方机构发布的 Python 免费发行版, 它们在官方版本的基础上开发而来,并有针对性的提前安装 ...