当前位置: 首页 > news >正文

自底向上了解CPU的运算

文章目录

    • 引言
    • CPU如何实现逻辑运算
      • NMOS和PMOS
      • 基于MOS管组合下的逻辑门运算
      • 逻辑运算下运算的实现
      • ALU的诞生
      • CPU的诞生
    • 关于二进制运算的研究
      • 十进制转二进制基础换算
      • 为什么负数要使用补码进行表示
      • 为什么反码就能解决正负数相加问题,我们还需要用补码来表示负数呢?
      • 小数的二进制转换
    • 计算机如何保存带有小数的数据
      • 科学计数法
      • 如何用二进制空间表示科学计数法的结果
    • 详解0.1+0.2==0.3返回false
      • 问题描述
      • 解决方案
      • 编程中运算的一点建议
    • 小结
    • 参考

引言

本文将从CPU演变的视角逐步推进说明CPU演进过程,同时也会针对计算机数学运算过程中一些常见的错误细节进行探讨。

CPU如何实现逻辑运算

NMOS和PMOS

CPU是由晶体管构成,在逻辑上我们一般会将其通过电路符号进行抽象,即分为如下三个连接端:

  1. 栅级(gate)
  2. 源极(source)
  3. 漏极(drain)

基于NMOS而言,从语义上来理解,它是消极的MOS管(N即negative),所以它的电流是逆流而上的,这也就是为什么下图中寄生二极管(即右边的箭头)的朝向是由源极(S)到漏极(D)即通过这样的导向避免漏极电流无条件从漏极流向源极,从N的语义上理解,因为电流是消极的流向,所以输出电流也必须付出更大的努力才能导通电源,所以NMOS的规范为:

在这里插入图片描述

  1. 当输入二进制1时,栅极闭合,电路导通,电流从漏极流向源极
  2. 当输入二进制00时,栅极电源断开,电路无法导通

在这里插入图片描述

PMOS反之,可以看到寄生二极管从漏极指向源极避免源极无条件流向漏极,因为PMOS是积极的(P即positive),即无需过多努力即可导通电源,所以其电路运行机制为:

  1. 当输入0时,栅极闭合,电路直接导通,从源极直接流向漏极
  2. 当输入1,栅极断开,电路无法导通

在这里插入图片描述

基于MOS管组合下的逻辑门运算

基于上述电路符号的基础上,我们将二者结合,NMOS接地、PMOS接电源,试想这样我们输入数字1:

  1. 对于NMOS电源导通,输出端Y导通,接地连同
  2. 对于PMOS电源断开,与电源端断开
  3. 最终没有亮起输出0

在这里插入图片描述

同理,我们不妨再尝试输入0:

  1. 对于NMOS电源断开
  2. 对于PMOS电源导通
  3. 电源端导通,输出1

在这里插入图片描述

由此可知,输出结果与输入结果相反,就生成二进制中的非运算,而上述的组合我们也称之为非门。同理,设计者们基于NMOS和PMOS这两种晶体管搭建出各种各样的门电路:

  1. 与门
  2. 或门
  3. 非门
  4. 与非门
  5. 或非门
  6. 异或门

在这里插入图片描述

逻辑运算下运算的实现

基于逻辑门的基础,我们开始推进计算机运算的步骤,我们都知道计算机是二进制语言,对应我们以加法为例,对应的运算为:

  1. 0+0=0 即二进制的00+00,最终输出二进制结果为00
  2. 0+1=1 即二进制中的00+01,最终输出二进制结果为01
  3. 1+1=2 即二进制中的01+01,最终输出二进制结果为10

最终我们将这些数字的二进制运算转为换下图所示的表格,我们以1+1为例,可以看到输出二进制结果为10,对应的低位为0,而进位为1,由此得出10。

在这里插入图片描述

我们从最基础的规律抓起,可以看到低位的0本质上不就是异或运算:

  1. 第一行低位的0本质上就是 0^0,对应输出0
  2. 第一行低位的0本质上就是 0^1,对应输出1
  3. 第一行低位的0本质上就是 1^1,对应输出0

然后我们就需要考虑另一个问题,即进位问题,经过推理发现本质上就是按位与,同样结合表格可以看出,对应的进位本质上就是低位运算的按位与:

  1. 第一行低位的0本质上就是 0&0,对应输出0
  2. 第一行低位的0本质上就是 0&1,对应输出0
  3. 第一行低位的0本质上就是 1&1,对应输出1

最终我们完成低位的加法运算推导过程,即通过:

  1. 异或门计算低位和
  2. 与门计算进位

在这里插入图片描述

对应的我们将上述的逻辑视图换成如下符号表示,读者可结合图片中的语义自行理解:

在这里插入图片描述

但是我们加法中还是涉及一些高位累加的,例如15+9对应9+5的进位就需要参与到高位的运算中,所以说我们目前的加法器只是一个简单的半加法器。

关于二进制进位的运算,通过低位进位和高位和进行按位或解决,我们试想3+3j即二进制的11和11相加,对应的换算步骤为:

  1. 低位两个1使用半加器算得和为0、进位1。
  2. 高位两个1使用半加器算得和为0、进位1。
  3. 因为低位有个进位1,也就是10对应高位的和,两者进行按位或得到1。
  4. 结合低位和0,高位和和低位进位按位或得到1,高位进位1,得到二进制110也就是6:

在这里插入图片描述

同理我们再演示一下2+2也就是二进制10和10相加:

  1. 低位算得和0进位也为0
  2. 高位算得和为0进位为1
  3. 低位进位0和高位和0按位或得0
  4. 结合低位0、高位和与低位进位0算法低2位为0,高位进位为1即100
  5. 最终结果为4

在这里插入图片描述

通过这种运算,我们推理出全加法器,在此基础上,串联无数个全加法器生成更高进位的加法运算。

http://www.dtcms.com/a/359389.html

相关文章:

  • Google 的 Agent2Agent 协议 (A2A):带示例的指南
  • 「日拱一码」068 机器学习——迁移学习TL
  • SIEPIC工具和PDK安装
  • C#语言入门详解(17)字段、属性、索引器、常量
  • 云计算与服务器
  • 【C#】在一个任意旋转的矩形(由四个顶点定义)内绘制一个内切椭圆
  • 在AlmaLinux或CentOS 8上编译安装ZLMediaKit流媒体服务器
  • Mysql中事务隔离级别有哪些?
  • 【行业洞察】多智能体的风口浪尖--微软MagenticOne/UI
  • android中常见布局及其约束
  • 鸿蒙创新赛活动——Mac提交压缩失败后续
  • [linux仓库]解剖Linux内核:文件描述符(fd)的‘前世今生’与内核数据结构探秘
  • 如何绕过 disable-devtool.js 打开控制台
  • mac Monterey 安装erlang23
  • 【高级】系统架构师 | 信息系统基础
  • Wi-Fi技术——MAC特性
  • Java提供高效后端支撑,Vue呈现直观交互界面,共同打造的MES管理系统,含完整可运行源码,实现生产计划、执行、追溯一站式管理,提升制造执行效率
  • 基于EHO与BP神经网络分类模型的特征选择方法研究(Python实现)
  • 现代C++性能陷阱:std::function的成本、异常处理的真实开销
  • HarmonyOS 应用开发:基于API 12+的现代化实践
  • 第4章从一条记录说起-InnoDB记录结构
  • openssl使用SM2进行数据加密和数据解密
  • Linux中卸载和安装Nginx
  • 第24章学习笔记|用正则表达式解析文本文件(PowerShell 实战)
  • Git版本管理工具零基础学习
  • ThinkPHP8学习篇(五):数据库(一)
  • windows docker 中的mysql 无法被外部浏览器访问如何解决
  • windows环境下安装dify到本地
  • 线程池、锁策略
  • Qt中UDP回显服务器和客户端