0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一个个开关竟能构造出功能强大的CPU

单片机与嵌入式 来源:单片机与嵌入式 2023-06-28 17:09 次阅读

几乎每天都会开灯关灯,但这简单的开关却是组成CPU的基本单元。

分享本文,来看下怎么构建CPU这个非0即1的开关世界。

晶体管到门电路

上世纪出现了晶体管这个小而伟大的发明。

有了晶体管,也就是开关,在此基础之上就可以搭建与、或、非门电路。

任何一个逻辑函数最终都可以通过与、或、非表达出来。也就是说,计算机最终可以通过简单的与、或、非门构造出来。

与或非门实现计算、存储电路

计算

以加法为例。

由于CPU只认知 0 和 1,也就是二进制,那么二进制的加法有哪些组合呢:

0 + 0,结果为0,进位为0

0 + 1,结果为1,进位为0

1 + 0,结果为1,进位为0

1 + 1,结果为0,进位为1

注意进位这一列,只有当两路输入的值都是 1 时,进位才是 1 ,这就是与门啊!

再看下结果一列,当两路输入的值不同时结果为1,输入结果相同时结果为0,这就是异或啊!

如下图,用一个与门和一个异或门就可以实现二进制加法:

fe76ba2e-1592-11ee-962d-dac502259ad0.png

上述电路就是一个简单的加法器,加法可以用与或非门实现。

除了加法,我们也可以根据需要将不同的算数运算设计出来,负责计算的电路有一个统称,这就是所谓的算术逻辑单元ALU(arithmetic/logic unit),是CPU 中专门负责运算的模块,本质上和上面的简单电路没什么区别,就是更加复杂而已。

现在,通过与或非门的组合我们获得了计算能力,计算能力就是这么来的。

但,只有计算能力是不够的,电路需要能记得住信息

存储

到目前为止,你设计的组合电路比如加法器天生是没有办法存储信息的,它们只是简单的根据输入得出输出,但输入输出总的有个地方能够保存起来,这就是需要电路能保存信息。

电路怎么能保存信息呢?有一天一位英国物理学家,给出了这样一个神奇电路:

fe9c2868-1592-11ee-962d-dac502259ad0.png

这是两个与非门的组合。

比较独特的是该电路的组合方式,一个与非门的输出是另一个与非门的输入。该电路的组合方式会自带一种很有趣的特性,只要给S和R端输入1,那么这个电路只会有两种状态:

a端为1,此时B=0、A=1、b=0;

a端为0,此时B=1、A=0、b=1;

不会再有其他可能了,我们把a端的值作为电路的输出。

此后,你把S端置为0的话(R保持为1),那么电路的输出也就是a端永远为1,这时就可以说我们把1存到电路中了;而如果你把R段置为0的话(S保持为1),那么此时电路的输出也就是a端永远为0,此时我们可以说把0存到电路中了。

就这样,电路具备存储信息的能力了。

现在为保存信息你需要同时设置S端和R端,但你的输入是有一个(存储一个bit位嘛),为此你对电路进行了改造:

feb97fc6-1592-11ee-962d-dac502259ad0.png

这样,当D为0时,整个电路保存的就是0,否则就是1。

寄存器与内存

现在你的电路能存储一个比特位了,想存储多个比特位还不简单,复制粘贴就可以了:

fecee26c-1592-11ee-962d-dac502259ad0.png

我们管这个组合电路就叫寄存器。

如果继续搭建更加复杂的电路以存储更多信息,同时提供寻址功能,就这样内存也诞生了。

寄存器及内存都离不开上文那个简单电路,只要通电,这个电路中就保存信息,但是断电后很显然保存的信息就丢掉了,现在你应该明白为什么内存在断电后就不能保存数据了吧。

构建CPU

硬件平台

通过上文讲解知道,电路可以实现数据计算、信息存储的通用功能。但现在还有一个问题,真的有必要把所有的逻辑运算都用与或非门实现出来吗?这显然是不现实的。

没有必要为所有的计算逻辑实现出对应的硬件,硬件只需要提供最通用的功能。

接下来看下硬件是怎么提供所谓的通用功能。

让我们来思考一个问题,CPU怎么能知道自己要去对两个数进行加法计算,以及哪两个数进行加法计算呢?

很显然,你得告诉CPU,该怎么告诉呢?

CPU也需要机器指令告诉自己该接下来该干什么,而指令通过我们上述实现的组合电路来执行。

指令集

指令集告诉我们 CPU 可以执行什么指令,每种指令需要提供什么样的操作数。不同类型的CPU会有不同的指令集。

指令集中的指令其实都非常简单,画风大体上是这样的:

从内存中读一个数,地址是abc

对两个数加和

检查一个数是不是大于6

把这数存储到内存,地址是abc

等等

看上去很像碎碎念有没有,这就是机器指令,我们用高级语言编写的程序,比如对一个数组进行排序,最终都会等价转换为上面的碎碎念指令,然后 CPU 一条一条的去执行。

接下来看一条可能的机器指令:

feeb1d92-1592-11ee-962d-dac502259ad0.png

这条指令占据16比特,其中前四个比特告诉CPU这是加法指令,这意味着该CPU的指令集中可以包含2^4也就是16个机器指令,这四个比特位告诉CPU该做什么,剩下的bit告诉CPU该怎么做,也就是把寄存器R6和寄存器R2中的值相加然后写到寄存器R6中。

可以看到,机器指令是非常繁琐的,现代程序员都使用高级语言来编写程序。

时钟信号

现在我们的电路有了计算功能、存储功能,还可以通过指令告诉该电路执行什么操作,还有一个问题没有解决。

靠什么来协调或者说靠什么来同步电路各个部分让它们协同工作呢?

时钟信号就像指挥家手里拿的指挥棒,指挥棒挥动一下整个乐队会整齐划一的有个相应动作,同样的,时钟信号每一次电压改变,整个电路中的各个寄存器(也就是整个电路的状态)会更新一下,这样我们就能确保整个电路协同工作不会这里提到的问题。

现在你应该知道CPU的主频是什么意思了吧,主频是说一秒钟指挥棒挥动了多少次,显然主频越高CPU在一秒内完成的操作也就越多。

大功告成

现在我们有了可以完成各种计算的ALU、可以存储信息的寄存器以及控制它们协同工作的时钟信号,这些统称 Central Processing Unit,简称就是 CPU。

一个小小的开关竟然能构造出功能强大的 CPU ,这背后理论和制造工艺的突破是人类史上的里程碑时刻,说 CPU 是智慧的结晶简直再正确不过。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5343

    浏览量

    120377
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10863

    浏览量

    211781
  • 晶体管
    +关注

    关注

    77

    文章

    9693

    浏览量

    138194
收藏 人收藏

    评论

    相关推荐

    AD原理图中怎样将库中的多个元件选中次性放置到原理图中?而不用一个个放置。

    似乎只能一个个的放置,能不能多个次性放置.
    发表于 05-19 11:54

    用labview编程的频谱分析仪,在进行正弦信号幅频谱显示时,为什么不是脉冲,而是一个个三角波的叠加?

    用labview编程的频谱分析仪,在进行正弦信号幅频谱显示时,为什么不是脉冲,而是一个个三角波的叠加
    发表于 05-23 10:01

    看效果像是控制很多LED一个个亮起来,请教下大家有没有做过得或者额类似的方案?

    `看效果像是控制很多LED一个个亮起来,请教下大家有没有做过得或者额类似的方案~谢谢啦`
    发表于 05-29 11:54

    变频串联谐振试验装置功能强大在哪?

    高压耐压试验装置中,变频串联谐振试验装置是非常理想的选择,。由于变频串联谐振相比传统的耐压试验装置有非常多的优势,因此串联谐振耐压试验装置也深受广大电力工作者的欢迎。变频串联谐振耐压试验装置功能强大
    发表于 11-26 15:19

    如何利用DMA将数据一个个搬到USART1的DR寄存器中去呢

    如何利用DMA将数据一个个搬到USART1的DR寄存器中去呢?有哪些操作步骤?
    发表于 12-13 06:47

    分享功能强大的APP蓝牙调试器

    数据发送到上位机,省去了串口连线到电脑的步骤。今天分享功能强大的APP,蓝牙调试器,它具备以下功能发送/接收蓝牙串口的数据自定义蓝牙串口 发送/接收数据包格式支持多种控件:如按键,
    发表于 02-22 06:03

    labview中能实现将一个个圆堆叠成圆柱吗?

    labview中能实现将一个个圆堆叠成圆柱吗? 类似下图
    发表于 05-03 15:05

    用arduino做一个功能强大体化万用表

    教你用arduino做一个功能强大体化万用表。附带资料包含PCB设计图、相关代码等。你也可以简单自己制作!
    发表于 09-27 07:06

    如果所有的机器人可以互联,在未来也许你只需要一个个性化数字助手

    未来,也许你需要一个个性化数字助手。 机器人在今年变得越来越火,但其实人们对机器人的开发还处于萌芽阶段。Barry Coleman认为,为了使机器人更自然地像人类样执行命令、进行交互,对种叫做机器人群体的新方法的运用将成为必
    发表于 12-31 02:23 432次阅读

    如何用旧手机做一个个性十足的音箱?

    买了新手机,旧手机该怎么办?卖二手吧嫌价格低,送人吧也没人要。反正闲着也是闲着,就把旧手机回收利用来做一个个性十足的音箱吧!
    的头像 发表于 08-10 16:24 3.2w次阅读

    功能强大的三级9V FM发射器电路

    该电路是功能强大的三级 9V FM 发射器 (Tx),开放范围可达 1 公里。它在其输出级使用射频晶体管,前两级使用两
    发表于 07-26 17:25 1203次阅读
    <b class='flag-5'>一</b><b class='flag-5'>个</b><b class='flag-5'>功能强大</b>的三级9V FM发射器电路

    基于功能强大的子域收集工具

    OneForAll 收集能力强大、支持子域爆破、支持子域验证、支持子域爬取、支持子域置换、支持子域接管、处理功能强大、速度极快、体验良好,是款集百家之长,功能强大的全面快速子域收集工
    的头像 发表于 10-25 14:50 973次阅读

    小小开关竟能构造出功能强大CPU

    几乎每天都会开灯关灯,但这简单的开关却是组成CPU的基本单元。
    的头像 发表于 06-25 17:19 403次阅读
    小小<b class='flag-5'>开关</b><b class='flag-5'>竟能</b><b class='flag-5'>构造出</b><b class='flag-5'>功能强大</b>的<b class='flag-5'>CPU</b>

    分享非常实用且强大的Linux nc命令

    nc是netcat的简写,是功能强大的网络工具,其功能是用于扫描与连接指定端口,有着网络界的瑞士军刀美称。
    的头像 发表于 08-16 09:15 1.5w次阅读
    分享<b class='flag-5'>一</b><b class='flag-5'>个</b>非常实用且<b class='flag-5'>强大</b>的Linux nc命令

    【干货分享】还在傻傻的一个个调整PCB元件的丝印位号?

    针对后期元件装配,特别是手工装配元件,般都得出 PCB 的装配图,用于元件放料定位之用,这时丝印位号就显示出其必要性了。 初学画PCB的朋友们定有过这样的操作,一个个手动调整元件的丝印位号,非常
    的头像 发表于 03-05 08:40 1230次阅读
    【干货分享】还在傻傻的<b class='flag-5'>一个个</b>调整PCB元件的丝印位号?