从0到1构建计算机(2/12)--与非门实现CPU的数理基础

2024-01-19 21:48

本文主要是介绍从0到1构建计算机(2/12)--与非门实现CPU的数理基础,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

CPU和布尔函数

CPU本质上是一个函数计算器:

  • 信号通过输入管脚输入,对应着函数的入参
  • CPU的内部电路是函数的黑盒实现
  • 信号通过输出管脚输出,对应着函数的出参

大家有没有思考过现代计算机为什么是基于二进制的🤔?事实上,在计算机的发展历程中确实出现过其他进制的计算机,例如10进制,3进制(现在计算机也是一步步演化过来了,其某些核心设计思想甚至来源于织布机,有兴趣的同学可以翻翻计算机发展史,有助于加深对计算机原理的理解)。我认为现代计算机基于二进制的原因主要有两个:一方面是基于二进制,在物理实现上会更加容易,例如电路设计更加简单,0和1的表示也更加稳定(高低电平);另一方面,既然CPU是函数的实现,那么就需要有完备的数学理论做支撑,其中布尔代数正好完美契合了现代计算机只能执行非常简单的算数逻辑运算集但却能够以超高速方式运行的特点。英国数学家布尔在1854年创立了布尔代数学科,布尔代数本身十分简单,但却为百年之后出现的二进制计算机提供了重要的数学方法和理论基础。

布尔函数

**布尔函数:**布尔函数处理布尔数值(它的输入输出都是二进制数值)。布尔函数在数字计算机的芯片设计中扮演基础角色,也在密码学中扮演关键角色。

布尔函数的两种表示方法:

1.**真值表:**枚举出函数所有输入变量的组合,然后写出每一种组合对应的函数输出值。
真值表
2.**布尔表达式:**使用布尔操作符(And,Or,Not等)表达,上面的真值表可以用此表达式表示:

f(x, y, z) = (x And y) Or (Not(x) And z)

布尔函数和门

**门(gate)**是用来实现布尔函数的物理设备,例如与门,或门,非门,与非门等。门是基本的电子元器件,复杂的门电路就构成了CPU

门有输入管脚和输出管脚,对应着布尔函数的入参和出参;门电路的具体实现方式则对应着布尔函数的运算规则。复杂的布尔函数就对应的复杂的门电路

布尔函数是门电路的数学表达,门电路是布尔函数的物理实现。一个复杂的CPU物理实现对应着一个复杂的布尔函数设计,可以说CPU的实现是建立在布尔函数之上的。

用与非门实现CPU的数理基础

布尔函数的一些数学结论:

  1. 任何一个布尔函数,无论多复杂,都可以只用三种布尔操作符And,Or,Not完全表达。
  2. And,Or,Not运算都可以只用Nand(与非)一种运算来代替实现,或者只用Nor(或非)一种运算来代替实现。
  3. 由1、2可得:仅使用Nand运算,就能够构建任何布尔函数。

以上证明方法可以自行Google

有了上面的数理基础做支撑,我们可以得出结论:一旦我们在物理上实现了Nand(与非门),我们就能够实现任何门电路,进而实现一个CPU。

用软件实现硬件

今天,硬件设计者们也不再亲手制作硬件了,而是用软件来实现设计:通过编写硬件描述语言(HDL)来描述芯片结构,并能通过测试用例来验证设计。

好了,下面就让我们用Nand来实现一个CPU吧~

这篇关于从0到1构建计算机(2/12)--与非门实现CPU的数理基础的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/623801

相关文章

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

深入浅出SpringBoot WebSocket构建实时应用全面指南

《深入浅出SpringBootWebSocket构建实时应用全面指南》WebSocket是一种在单个TCP连接上进行全双工通信的协议,这篇文章主要为大家详细介绍了SpringBoot如何集成WebS... 目录前言为什么需要 WebSocketWebSocket 是什么Spring Boot 如何简化 We

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、

PyCharm中配置PyQt的实现步骤

《PyCharm中配置PyQt的实现步骤》PyCharm是JetBrains推出的一款强大的PythonIDE,结合PyQt可以进行pythion高效开发桌面GUI应用程序,本文就来介绍一下PyCha... 目录1. 安装China编程PyQt1.PyQt 核心组件2. 基础 PyQt 应用程序结构3. 使用 Q

Python实现批量提取BLF文件时间戳

《Python实现批量提取BLF文件时间戳》BLF(BinaryLoggingFormat)作为Vector公司推出的CAN总线数据记录格式,被广泛用于存储车辆通信数据,本文将使用Python轻松提取... 目录一、为什么需要批量处理 BLF 文件二、核心代码解析:从文件遍历到数据导出1. 环境准备与依赖库

linux下shell脚本启动jar包实现过程

《linux下shell脚本启动jar包实现过程》确保APP_NAME和LOG_FILE位于目录内,首次启动前需手动创建log文件夹,否则报错,此为个人经验,供参考,欢迎支持脚本之家... 目录linux下shell脚本启动jar包样例1样例2总结linux下shell脚本启动jar包样例1#!/bin