计算机底层知识点(一)晶体管与CPU执行指令之间的联系

news2025/1/12 18:48:20

该文主要通过详细介绍晶体管在CPU执行指令时的作用。本文所讲解例子为NPN型二极管。这里简单介绍一下,NPN是共阳极,即两个NP结的P结相连为基极,另两个N结分别做集电极和发射极,发射极电流 =集电极电流 + 基极电流

图5 LED两脚分别接NPN型三极管的发射极与集电极

如上图所示为晶体管的一个粗略示意图,可以视为一个简单的开关。当我们将电流加入到基级也就是竖直的这根线上(基级)时,会允许电流从晶体管的一端流向另一端。各引脚位置如图2所示。

具体来说,基极上的电流能够激活晶体管内部的导电通道,使得原本可能处于阻断状态的电子流得以通过。这一变化直接导致了一个显著的效应:电流开始顺畅地从晶体管的一端(通常是发射极)流向另一端(集电极)。

图2 晶体管各引脚定义
图2 晶体管各引脚定义

一个晶体管中,通常有三个端子,一个集电极,一个发射极和一个电路中的基极,它可以充当绝缘体,防止电流在集电极和集电极之间流动。 发射极端子,但如果我们向基极端子施加小电流,它就会充当允许电流流动的导体。如图3所示为导通后的晶体管。

图3 导通的晶体管示意图

本质上晶体管可以被视为开关,但它不是机械运动,而是通过使用电信号来操作,在此示例电路中我们使用的是 晶体管通过利用基极端子作为输入和发射极端子作为输出信号来打开和关闭 LED。

我们可以用开关模拟输入信号并用 LED 直观地表示输出信号让我们将其称为一个简单的门。 当输入为零时输出为零,当输入为 1 时输出为1 。这里的逻辑类似与门。

图4 LED两脚均接NPN型三极管的发射极

改变LED之间的排列方式。此时当LED两个引脚分别接在三极管的集电极和发射极之间时。三极管导通时,LED之间的电压差非常小。此时两侧的正向电压不足以达到需要发光的阈值状态,保持熄灭状态。此时输入设置为1时,LED灯熄灭为0。当输入设置为0时,LED亮起为1。这里的逻辑类似非门。

将两个晶体管串联起来,可以抽象为与门。

图6 与门与其真值表
​​​​​

与门,当输入有0时输出为0,仅当仅有输入全时输出为1。

图7 与门性质

将两个晶体管串联起来,可以抽象为或门。

图8 或门结构与真值表

我们可以利用这些基础的逻辑门组成更复杂的逻辑电路。下图就是一个基础的异或门。

图9 异或门的构成及其真值表

图10 异或门的内部晶体管排列位置

ADDER

0+0=0;

0+1=1;

1+0=1;

1+1=2;

因为2无法使用单个的二进制数来表示,所以遇到这个情况时,我们通常用进位溢出来表示该值。

简单来说就是将二进制的值用不同的位代替,其中sum的值采用异或门求得,

图11 利用异或门确定半加法器中的sum值

进位carry的值采用与门确定

图12 利用与门确定半加法器中的进位carry的值

将与门及异或门相结合就可以得到我们想要实现得二进制加法器,但是该加法器存在一个缺陷。就是只可以对单个位的二进制数进行加减。

图13 半加法器结构图

但是对于以下大于或者等于两位的二进制数计算来说,加法器不仅需要考虑原来两个输入二进制单位数相加,还需要考虑将前一个半加法器的进位相加。此时一个半加法器只有两个输入,无法满足要求。

图14 半加法器在进行多位二进制数相加时会进位溢出

此时我们根据需要设置一个电路结构,该电路结构可以同时对三个输入进行处理。我们将其称为全加器。

图15 全加器及其真值表

例如1+1就时x=1,y=1,进位为0,此时结果为0B10。0B101+0B111=0B1100则可以使用三个全加器进行计算。

图16 使用全加器进行二进制的计算

以此类推,所以八位的二进制数与八位的二进制数应该使用八个加法器来进行运算。

图17  使用八个全加器进行两个八位二进制数之间的运算

但是这个时候需要注意,此时当两个输入的值之和等于大于0B1111 1111+0B0000 0001时,会导致该八位加法器的值溢出。

图18  使用多一位来检测进位是否溢出

以此类推,我们可以利用晶体管搭建逻辑门搭建对应的运算单元。CPU就可以通过这些单元来进行对应的计算。右边为汇编语言,也就是机器所使用的语言。常用的运算单元由加减乘除,常用的逻辑单元有与、或、非、异或。

图19 ALU的部分组成单元

但是计算机并不能直接识别LOAD这些语言来去控制对应的运算单元,只可以识别最底层的0和1。此时我们需要一个二进制解码器,将读取到的指令进行解码从而去进行操作对应的单元。这里的每个组合在接收到我们所希望的输出位置的二进制数后,都会触发要激活的特定输出,同时停用所有其他输出。

图20 二进制解码器的逻辑门组成结构

ps:现代CPU通常采用流水线(Pipeline)或其他并行处理技术来提高指令执行效率。这意味着CPU可以同时处理多条指令的不同阶段,但每条指令的执行仍然是串行的(即一次只能执行一条指令的一个阶段)。

因此通过采用二进制解码器,我们就能够创建改变传入的二进制数就可以在多个运算单元中进行选择的电路。

图21  二进制解码器的使用

现在我们回到上面所提到的汇编指令,汇编代码其实就是机器代码的人类友好表示。实际代码由计算机可以理解的0和1组成。

图22 汇编代码在计算机中的实际表示

在计算机中,如果指令的前两位为0,计算机将其解释为算术运算。第三第四位则确定将要执行的算数运算的类型。如果为00则表示加法,如果是01则表示减法。这两位数我们通常将之称为操作代码,每个操作代码有且仅有一种算术运算。

图23 汇编指令中的操作码

当CPU确定当前指令是算术运算时,神秘组件会接收到该操作代码,并在内部将这两个位链接到解码器,用于识别所需的内部操作。这里的直接方法是允许所有电路接收输入。并生成各自的输出。但是解码器的输出是互连的。以一种只允许所选操作的输出通过此操作的方式控制组件。

图24 操作代码在cpu中被识别所起到的作用

我们的神秘组件也可以装在一个盒子里,这是一个基本的以及被称为算术逻辑的东西的不完整版本。这就时我们常说的ALU(算术逻辑单元)。

图25 ALU算术逻辑单元

但在此之前,算术逻辑单元接受输入值以及一个告诉内部电路的操作码在这些值之间执行什么算术运算它生成指定操作的结果以及其他信息如结果是否为负 0或者如果它已经溢出。

图26 算术逻辑单元的宏观展示

到这里,我们就大概了解了晶体管是如何通过不同方式的连接来实现cpu的运算功能啦。后面能挤出时间应该会陆陆续续地更新其他部分的内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1968699.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Vue3】具名插槽

【Vue3】具名插槽 背景简介开发环境开发步骤及源码 背景 随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪念曾经努力学习奋斗的日子。本文内…

纯技术手段实现内网穿透,免注册免收费

纯技术手段实现内网穿透,免注册免收费 一、内网穿透二、方法分类2.1 基于隧道协议的内网穿透2.2 基于反向代理的内网穿透2.3 基于SSH的内网穿透具体工具的分类如下:基于隧道协议基于反向代理基于SSH 三、本文方法四、具体操作4.1 安装服务端4.2 安装客户…

【Linux 网络】链路层

文章目录 链路层1 以太网1.1 以太网帧格式1.2 MAC地址1.3 MTU 2. ARP协议2.1 ARP协议的作用2.2 ARP数据报格式2.3 ARP的流程 其他协议3. DNS协议3.1 域名3.2 输入URL后的事情 4. ICMP协议4.1 ICMP 功能都有啥?4.2 基于ICMP的命令ping命令 5. NAT协议5.1 NAT技术背景…

android13关机按钮 去掉长按事件 去掉启动到安全模式 删除关机长按

总纲 android13 rom 开发总纲说明 目录 1.前言 2.界面效果 3.问题分析 4.代码修改 5.编译替换运行 6.彩蛋 1.前言 在Android操作系统中,关机按钮通常具有多种功能,包括短按关机、长按启动语音助手或重启设备等。在某些情况下,用户或设备管理员可能希望自定义关机按…

爬虫中常见的加密算法Base64伪加密,MD5加密【DES/AES/RSA/SHA/HMAC】及其代码实现(一)

目录 基础常识 Base64伪加密 python代码实现 摘要算法 1. MD5 1.1 JavaScript 实现 1.2 Python 实现 2. SHA 2.1 JavaScript 实现 2.2 Python 实现 2.3 sha系列特征 3. HMAC 3.1 JavaScript 实现 3.2 Python 实现 对称加密 一. 常见算法归纳 1. 工作模式归纳 …

码农职场:一本专为IT行业求职者量身定制的指南

目录 写在前面 推荐图书 推荐理由 写在后面 写在前面 本期博主给大家推荐一本专为IT行业求职者量身定制的指南:《码农职场》。 推荐图书 https://item.jd.com/14716160.html 内容简介 这是一本专为广大IT 行业求职者量身定制的指南,提供了从职前…

使用Python实现栅格划分(渔网)

在QGIS中,“渔网”(Fishnet)是指一种创建规则网格(通常是矩形或正方形)的工具,这些网格可以用于空间数据的采样、分区或作为其他地理空间分析的基础。渔网工具可以生成一个由多边形组成的图层,每…

文件解析漏洞—IIS解析漏洞—IIS7.X

在IIS7.0和IIS7.5版本下也存在解析漏洞,在默认Fast-CGI开启状况下,在一个文件路径/xx.jpg后面加上/xx.php会将 “/xx.jpg/xx.php” 解析为 php 文件 利用条件 php.ini里的cgi.fix_pathinfo1 开启IIS7在Fast-CGI运行模式下 在 phpstudy2018 根目录创建…

4、postgresql拓展表空间

base是数据保存目录, OID:对象标识符,无符号4字节整数, 数据库的oid在pg_database中,表,索引,序列等OID存储在pg_class中 表空间:pg最大的逻辑存储单元,表索引数据库都…

Linux安装Zabbix7.0并且使用外置Mysql数据库

MySQL 数据库服务版本。必须至少为 8.00.30 # rpm -Uvh https://repo.zabbix.com/zabbix/7.0/alma/9/x86_64/zabbix-release-7.0-5.el9.noarch.rpm # dnf clean all #安装zabbix # dnf install zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts za…

【一图学技术】6.反向代理 vs API网关 vs 负载均衡的原理和使用场景

反向代理 vs API网关 vs 负载均衡 一、概念 ​ 🌏反向代理(Reverse Proxy)是一种位于服务器和客户端之间的代理服务器。 ​ 它接收来自客户端的请求,并将其转发给后端服务器,然后将后端服务器的响应返回给客户端。客…

dfs,CF 196B - Infinite Maze

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 https://codeforces.com/problemset/problem/196/B 二、解题报告 1、思路分析 考虑如何判断一条路径可以无限走? 我们对朴素的网格dfs改进,改进为可以dfs网格外的区域 如果存在某个…

Go语言加Vue3零基础入门全栈班10 Go语言+gRPC用户微服务项目实战 2024年07月31日 课程笔记

概述 如果您没有Golang的基础,应该学习如下前置课程。 Golang零基础入门Golang面向对象编程Go Web 基础Go语言开发REST API接口_20240728Go语言操作MySQL开发用户管理系统API教程_20240729Redis零基础快速入门_20231227GoRedis开发用户管理系统API实战_20240730Mo…

大模型下的视频理解video understanding

数据集 Learning Video Context as Interleaved Multimodal Sequences Motivation: 针对Narrative videos, like movie clips, TV series, etc.:因为比较复杂 most top-performing video perception models 都是研究那种原子动作or人or物 understandin…

C++ 布隆过滤器

1. 布隆过滤器提出 我们在使用新闻客户端看新闻时,它会给我们不停地推荐新的内容,它每次推荐时要去重,去掉 那些已经看过的内容。问题来了,新闻客户端推荐系统如何实现推送去重的? 用服务器记录了用 户看过的所有历史…

OpenStack——存储服务

存储侧: 块存储 文件存储 对象存储 存储简介 特点: 1、OS盘只能使用块存储 2、不能实现共享【不能解决两个主机同时去读写同一个block的问题】 3、性能最优 filesystem——文件存储 VIMS:高可用文件系统 ——提供了锁机制 对象存储 ——解…

MySQL搭建主从复制和读写分离(数据库管理与高可用)

集群: 高可用; 负载均衡; 高性能 1、MySQL主库在事务提交时把数据变更(insert、delet、update)作为事件日志记录在二进制日志表(binlog)里面。 2、主库上有一个工作线程 binlog dump thread…

蓝桥杯 DNA序列修正

今天再刷蓝桥的题目时,发现这道题目的第二种更为简洁的做法; 首先题目描述如下: 样例输入 5 ACGTG ACGTC 样例输出 2 对于这道题目,我们想的是用两个数组将其分别存储下来,然后再根据A-T、G-C的配对关系将数组二&a…

【C语言】堆排序

堆排序即利用堆的思想来进行排序,总共分为两个步骤: 1. 建堆 升序:建大堆 降序:建小堆 原因分析: 若升序建小堆时间复杂度是O(N^2) 升序建大堆,时间复杂度O(N*logN) 所以升序建大堆…