认识 CPU 底层原理(2)——逻辑门

认识 ,原理,底层,逻辑门 · 浏览次数 : 486

小编点评

**《硬件科普》带你认识CPU的《逻辑运算》学习笔记** **引言** 本章将介绍CPU设计者如何使用MOSFET组合出更强大的运算单元的原理。逻辑运算指的是“条件”与“结论”之间的关系,是对因果关系进行分析的运算,其运算结果并不表示数制的大小,而是表示逻辑概念成立还是不成立。 **逻辑运算的种类** 逻辑运算的种类从代数的角度看,最简单的逻辑运算有这么几种: * 非运算 * 与运算 * 运算 *异或运算 * 同或运算 **逻辑运算与算数运算的关系** 二进制计算结果与十进制是等价的,由于1和0在计算机中非常天然的可以使用高低电平来表示,因此计算机使用二进制数进行与十进制等价的各种运算。 **MOSFET的作用** 由电子元器件构成的逻辑运算单元就被称为逻辑门电路。非门电路上一篇我们已经简单的介绍了非门电路的组成,这里我们再复习一下。 **构建逻辑运算器** MOSFET是PMOS和NMOS两端相连组成的电路,PMOS不导通,NMOS导通,两者组合时形成逻辑门的输出端。 **异或门电路** 异或门电路主要作用是,当A和B的输入相同时,输出0,否则输出1。 **结论** 本章学习了逻辑运算与算数运算的等价性,更进一步认识了组成这些基本逻辑运算的电路。下一篇文章我们将继续深入,看看这些基本的逻辑运算电路是如何组成一个计算加法的加法器的。

正文

本文为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。

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

image

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

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

image

其实运算法则与十进制相同,十进制是每一位相加满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来构建上述的逻辑运算。由电子元器件构成的逻辑运算单元就被称为逻辑门电路。

非门电路

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

image

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

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

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

image

或门电路

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

image

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

image

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

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

与门电路

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

image

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

image

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

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

异或门电路

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

image

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

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

image

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

总结

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

与认识 CPU 底层原理(2)——逻辑门相似的内容:

认识 CPU 底层原理(2)——逻辑门

本文为B站UP主硬件茶谈制作的系列科普《【硬件科普】带你认识CPU》系列的学习笔记,仅作个人学习记录使用,如有侵权,请联系博主删除 上一篇文章我们从最基本的粒子的角度认识了组成CPU的最基本单元MOSFET的原理。CPU作为计算机的核心硬件,其最主要的功能是进行运算,本章我们将会介绍CPU设计者是如

认识CPU底层原理(1)——MOSFET

本文为B站UP主硬件茶谈制作的系列科普《【硬件科普】带你认识CPU》系列的学习笔记,仅作个人学习记录使用,如有侵权,请联系博主删除 近年来,由于国内外各种因素影响,半导体行业逐渐被推向风口浪尖,这时人们才认识到,作为早已宣称进入信息化和数字化时代的中国,在计算机基础设施建设上是如此薄弱。 计算机基础

10.4 认识Capstone反汇编引擎

Capstone 是一款开源的反汇编框架,目前该引擎支持的CPU架构包括x86、x64、ARM、MIPS、POWERPC、SPARC等,Capstone 的特点是快速、轻量级、易于使用,它可以良好地处理各种类型的指令,支持将指令转换成AT&T汇编语法或Intel汇编语法等多种格式。Capstone的...

你认识的C# foreach语法糖,真的是全部吗?

> 本文的知识点其实由golang知名的for循环陷阱发散而来, 对应到我的主力语言C#, 其实牵涉到闭包、foreach。为了便于理解,我重新组织了语言,以倒叙结构行文。 先给大家提炼出一个C#题:观察for、foreach闭包的差异 ![](https://files.mdnice.com/us

[转帖]认识A-Tune

https://docs.openeuler.org/zh/docs/22.03_LTS_SP1/docs/A-Tune/%E8%AE%A4%E8%AF%86A-Tune.html 认识A-Tune 简介 架构 支持特性与业务模型 简介 操作系统作为衔接应用和硬件的基础软件,如何调整系统和应用配置,

[转帖]认识目标文件的格式——a.out COFF PE ELF

https://cloud.tencent.com/developer/article/1446849 1.目标文件的常用格式 目标文件是源代码编译后未进行链接的中间文件(Windows的.obj和Linux的.o),与可执行文件(Windows的.exe和Linux的ELF)的结构和内容相似,因此

10.5 认识XEDParse汇编引擎

XEDParse 是一款开源的x86指令编码库,该库用于将MASM语法的汇编指令级转换为对等的机器码,并以XED格式输出,目前该库支持x86、x64平台下的汇编编码,XEDParse的特点是高效、准确、易于使用,它可以良好地处理各种类型的指令,从而更容易地确定一段程序的指令集。XEDParse库可以集成到许多不同的应用程序和工具中,因此被广泛应用于反汇编、逆向工程、漏洞分析和入侵检测等领域。XED

带你认识JDK8中超nice的Native Memory Tracking

摘要:从 OpenJDK8 起有了一个很 nice 的虚拟机内部功能: Native Memory Tracking (NMT)。 本文分享自华为云社区《Native Memory Tracking 详解(1):基础介绍》,作者:毕昇小助手。 0.引言 我们经常会好奇,我启动了一个 JVM,他到底会

带你认识数仓的增量备份核心设计

摘要:增量备份是重要的常规备份策略,正确快速识别增量变化文件的相关信息对增量备份至关重要。 本文分享自华为云社区《其疾如风,GaussDB(DWS)增量备份核心设计》,作者: 我的橘子呢 。 1、认识增量备份 GaussDB(DWS)数仓的备份恢复工具Roach支持集群级增量备份。全量备份会将源数据

带你认识3个J.U.C组件扩展

摘要:本文主要为大家讲解3种J.U.C组件扩展。 本文分享自华为云社区《【高并发】J.U.C组件扩展》,作者: 冰 河。 1.FutureTask FutureTask是J.U.C(java.util.concurrent)下的,但不是AQS(AbstractQueuedSynchronizer)的