前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >指令+运算=CPU

指令+运算=CPU

作者头像
JavaEdge
发布2023-01-11 11:28:40
3560
发布2023-01-11 11:28:40
举报
文章被收录于专栏:JavaEdge

1 组合逻辑电路(Combinational Logic Circuit)

要实现完整CPU功能,除加法器这种电路,还需实现其他功能的电路。有这样一种电路,类似加法器,给定输入,就能得到固定输出。

但仅有组合逻辑电路还不够,CPU就会变成电路输入是确定的,对应输出自然也就确定了。那么,要进行不同计算,就要去人工拨动各种开关,改变电路开闭状态,就像远古的打点计算机。

因此,要引入

2 时序逻辑电路(Sequential Logic Circuit)

2.1 解决痛点

自动运行

时序电路接通后可007无休开启、关闭开关,进入一个自动运行的状态。这使得控制器不停让PC寄存器自增读取下一条指令成为可能。

存储

通过时序电路实现的触发器,能把计算结果存储在特定的电路里面,而不是像组合逻辑电路那样,一旦输入有任何改变,对应的输出也会改变。

各功能按时序协调

无论程序实现的软件指令,还是到硬件层面,各种指令的操作都有顺序要求。 时序电路使得不同的事件按时间顺序发生。

硬件实现

时钟

首先得有一个时钟。CPU主频由一个晶体振荡器实现,该晶体振荡器生成的电路信号,就是时钟信号

实现这样一个电路,和通过电的磁效应产生开关信号的方法一样。只是,这里的磁性开关,打开的是当前线路。

原先一般只放一个开关的信号输入端,放上了两个开关:

  • 开关A 初始断开,手工控制
  • 开关B 初始合上,磁性线圈对准初始的开关B

一旦合上A =》磁性线圈通电,产生磁性 =》B就会断开 =》电路中断 =》磁性线圈失去磁性 =》B又合上

如此,电路接通,线圈又有磁性。电路就会007 地开启、关闭这两个状态中切换。

  • 开关A闭合(也就是相当于接通电路之后),开关B就会不停地在开和关之间切换,生成对应的时钟信号

这不断切换的过程,对下游电路就是不断产生新的0/1信号。这种按固定周期不断在0和1之间切换的信号,就是时钟信号(Clock Signal)。

一般这样产生的时钟信号,就像你在各种教科书图例中看到的一样,是一个振荡产生的0、1信号。

  • 时钟信号示意图

这相当于把电路输出信号作为输入信号,再回到当前电路 — 反馈电路(Feedback Circuit)。 上面这个反馈电路可用如下示意图表示:一个输出结果接回输入的反相器(Inverter)即非门。

  • 通过一个反相器实现时钟信号
通过D触发器实现存储功能

有时钟信号,系统就有个“自动门”一样的开关。利用该开关和相同的反馈电路,即可构造出一个有“记忆”功能的电路,实现在CPU中存储计算结果的寄存器,也可实现计算机结构五大组成之一的存储器。

这个RS触发器电路由两个或非门电路组成。

  • 或非门的真值表
  • 该电路初始时,输入开关都关闭,所以或非门(NOR)A的输入是0、0,则输出1。而或非门B的输入是0和A的输出1,对应输出0。 B的输出0反馈到A,和之前的输入没有变化,A的输出仍然是1。 而整个电路的输出Q,也就是0。
  • 当把A前面的开关R合上,A的输入变成1、0,输出变成0,对应B的输入变成0、0,输出就变成1。B的输出1反馈给到了A,A的输入变成了1和1,输出仍然是0。所以把A的开关合上之后,电路仍稳定,但整个电路的输出Q变成1。
  • 这个时候,如果我们再把A前面的开关R打开,A的输入变成和1和0,输出还是0,对应的B的输入没有变化,输出也还是1。B的输出1反馈给到了A,A的输入变成了1和0,输出仍然是0。这个时候,电路仍然稳定。开关R和S的状态和上面的第一步是一样的,但是最终的输出Q仍然是1,和第1步里Q状态是相反的。我们的输入和刚才第二步的开关状态不一样,但是输出结果仍然保留在了第2步时的输出没有发生变化
  • 这个时候,只有我们再去关闭下面的开关S,才可以看到,这个时候,B有一个输入必然是1,所以B的输出必然是0,也就是电路的最终输出Q必然是0。

这称为触发器(Flip-Flop)。接通开关R,输出变为1,即使断开开关,输出还是1不变。接通开关S,输出变为0,即使断开开关,输出也还是0。也就是,当两个开关都断开的时候,最终的输出结果,取决于之前动作的输出结果,这个也就是我们说的记忆功能。

这是最简单的RS触发器,即复位置位触发器(Reset-Set Flip Flop) 。当两个开关都是0,对应输出不是1或0,而是和Q的上个状态一致。

再加两个与门和一个时钟信号,即可利用时钟信号操作电路,可实现随时都可往Q写数据。

再看如下电路,这个在我们的上面的R-S触发器基础之上,在R和S开关之后,加入了两个与门,同时给这两个与门加入了一个时钟信号CLK作为电路输入。

这样,当时钟信号CLK在低电平的时候,与门的输入里有一个0,两个实际的R和S后的与门的输出必然是0。也就是说,无论我们怎么按R和S的开关,根据R-S触发器的真值表,对应的Q的输出都不会发生变化。

只有当时钟信号CLK在高电平的时候,与门的一个输入是1,输出结果完全取决于R和S的开关。我们可以在这个时候,通过开关R和S,来决定对应Q的输出。

通过一个时钟信号,我们可以在特定的时间对输出的Q进行写入操作 如果这个时候,我们让R和S的开关,也用一个反相器连起来,也就是通过同一个开关控制R和S。只要CLK信号是1,R和S就可以设置输出Q。而当CLK信号是0的时候,无论R和S怎么设置,输出信号Q是不变的。这样,这个电路就成了我们最常用的D型触发器。用来控制R和S这两个开关的信号呢,我们视作一个输入的数据信号D,也就是Data,这就是D型触发器的由来。

把R和S两个信号通过一个反相器合并,我们可以通过一个数据信号D进行Q的写入操作 一个D型触发器,只能控制1个比特的读写,但是如果我们同时拿出多个D型触发器并列在一起,并且把用同一个CLK信号控制作为所有D型触发器的开关,这就变成了一个N位的D型触发器,也就可以同时控制N位的读写。

CPU里面的寄存器可以直接通过D型触发器来构造。我们可以在D型触发器的基础上,加上更多的开关,来实现清0或者全部置为1这样的快捷操作。

3 总结

引入时序电路,就可以把数据“存储”下来。 通过反馈电路,创建了时钟信号,然后再利用这个时钟信号和门电路组合,实现“状态记忆”。

电路的输出信号不单单取决于当前的输入信号,还要取决于输出信号之前的状态。最常见的这个电路就是我们的D触发器,它也是我们实际在CPU内实现存储功能的寄存器的实现方式。

“冯·诺伊曼”机关键就是程序需要可以“存储”,而不靠固定线路连接或手工拨动开关,实现计算机的可存储和可编程的功能。

参考

  • 《编码:隐匿在计算机软硬件背后的语言》14章~16章
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023/01/11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 组合逻辑电路(Combinational Logic Circuit)
  • 2 时序逻辑电路(Sequential Logic Circuit)
    • 2.1 解决痛点
      • 自动运行
      • 存储
      • 各功能按时序协调
    • 硬件实现
      • 时钟
      • 通过D触发器实现存储功能
  • 3 总结
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档