首页 > 其他分享 >17 | 建立数据通路(上):指令+运算=CPU

17 | 建立数据通路(上):指令+运算=CPU

时间:2023-01-25 21:32:53浏览次数:47  
标签:周期 17 数据通路 我们 电路 指令 ALU CPU


前面几讲里,我从两个不同的部分为你讲解了 CPU 的功能。


指令


计算


然而,光知道这两部分还不能算是真正揭开了 CPU 的秘密,只有把“指令”和“计算”这两部分功能连通起来,我们才能构成一个真正完整的 CPU。这一讲,我们就在前面知识的基础上,来看一个完整的 CPU 是怎么运转起来的。


指令周期(Instruction Cycle)


我向你介绍过 PC 寄存器、指令寄存器,还介绍过 MIPS 体系结构的计算机所用到的 R、I、J 类指令。如果我们仔细看一看,可以发现,计算机每执行一条指令的过程,可以分解成这样几个步骤。


Fetch ( 取得指令 ),也就是从 PC 寄存器里找到对应的指令地址,根据指令地址从内存里把具体的指令,加载到指令寄存器中,然后把 PC 寄存器自增,好在未来执行下一条指令。


Decode ( 指令译码


Execute ( 执行指令


4. 重复进行 1~3 的步骤。


Fetch - Decode - Execute ”的循环,我们把这个循环称之为 指令周期



17 | 建立数据通路(上):指令+运算=CPU_指令周期


指令周期(Instruction Cycle)


在这个循环过程中,不同部分其实是由计算机中的不同组件完成的。不知道你还记不记得,我们在专栏一开始讲的计算机组成的五大组件?


在取指令的阶段,我们的指令是放在 存储器 里的,实际上,通过 PC 寄存器和指令寄存器取出指令的过程,是由 控制器 (Control Unit)操作的。指令的解码过程,也是由 控制器 进行的。一旦到了执行指令阶段,无论是进行算术操作、逻辑操作的 R 型指令,还是进行数据传输、条件分支的 I 型指令,都是由 算术逻辑单元 (ALU)操作的,也就是由 运算器 处理的。不过,如果是一个简单的无条件地址跳转,那么我们可以直接在 控制器 里面完成,不需要用到运算器。



17 | 建立数据通路(上):指令+运算=CPU_指令周期_02


不同步骤在不同组件之内完成


除了 Instruction Cycle 这个指令周期,在 CPU 里面我们还会提到另外两个常见的 Cycle。一个叫 Machine Cycle , 机器周期 或者 CPU 周期 。CPU 内部的操作速度很快,但是访问内存的速度却要慢很多。每一条指令都需要从内存里面加载而来,所以我们一般把从内存里面读取一条指令的最短时间,称为 CPU 周期。


还有一个是我们之前提过的 Clock Cycle ,也就是 时钟周期 以及我们机器的主频。一个 CPU 周期,通常会由几个时钟周期累积起来。一个 CPU 周期的时间,就是这几个 Clock Cycle 的总和。


对于一个指令周期来说,我们取出一条指令,然后执行它,至少需要两个 CPU 周期。取出指令至少需要一个 CPU 周期,执行至少也需要一个 CPU 周期,复杂的指令则需要更多的 CPU 周期。



17 | 建立数据通路(上):指令+运算=CPU_计算机原理_03


三个周期(Cycle)之间的关系


我们说一个指令周期,包含多个 CPU 周期,而一个 CPU 周期包含多个时钟周期。


建立数据通路


在专栏一开始,不少同学留言问到,ALU 就是运算器吗?在讨论计算机五大组件的运算器的时候,我们提到过好几个不同的相关名词,比如 ALU、运算器、处理器单元、数据通路,它们之间到底是什么关系呢?


名字是什么其实并不重要,一般来说,我们可以认为,数据通路就是我们的处理器单元。它通常由两类原件组成。


操作元件


存储元件


我们通过数据总线的方式,把它们连接起来,就可以完成数据的存储、处理和传输了,这就是所谓的 建立数据通路 了。


控制器


听起来是不是很简单?实际上,控制器的电路特别复杂。下面我给你详细解析一下。


所有 CPU 支持的指令,都会在控制器里面,被解析成不同的输出信号。我们之前说过,现在的 Intel CPU 支持 2000 个以上的指令。这意味着,控制器输出的控制信号,至少有 2000 种不同的组合。


运算器里的 ALU 和各种组合逻辑电路,可以认为是一个固定功能的电路。控制器“翻译”出来的,就是不同的控制信号。这些控制信号,告诉 ALU 去做不同的计算。可以说正是控制器的存在,让我们可以“编程”来实现功能,能让我们的“存储程序型计算机”名副其实。



17 | 建立数据通路(上):指令+运算=CPU_寄存器_04


指令译码器将输入的机器码,解析成不同的操作码和操作数,然后传输给 ALU 进行计算


CPU 所需要的硬件电路


那么,要想搭建出来整个 CPU,我们需要在数字电路层面,实现这样一些功能。


自然是我们之前已经讲解过的 ALU 了,它实际就是一个没有状态的,根据输入计算输出结果的第一个电路。


第二,我们需要有一个能够进行状态读写的电路元件,也就是我们的寄存器。我们需要有一个电路,能够存储到上一次的计算结果。这个计算结果并不一定要立刻拿到电路的下游去使用,但是可以在需要的时候拿出来用。常见的能够进行状态读写的电路,就有锁存器(Latch),以及我们后面要讲的 D 触发器(Data/Delay Flip-flop)的电路。


第三,我们需要有一个“自动”的电路,按照固定的周期,不停地实现 PC 寄存器自增,自动地去执行“Fetch - Decode - Execute“的步骤。我们的程序执行,并不是靠人去拨动开关来执行指令的。我们希望有一个“自动”的电路,不停地去一条条执行指令。


PC 寄存器还有一个名字,就叫作程序计数器。顾名思义,就是随着时间变化,不断去数数。数的数字变大了,就去执行一条新指令。所以,我们需要的就是一个自动数数的电路。


我们都需要通过一个电路找到对应的数据。这个对应的自然就是“译码器”的电路了。


好了,现在我们把这四类电路,通过各种方式组合在一起,就能最终组成功能强大的 CPU 了。但是,要实现这四种电路中的中间两种,我们还需要时钟电路的配合。下一节,我们一起来看一看,这些基础的电路功能是怎么实现的,以及怎么把这些电路组合起来变成一个 CPU。


总结延伸


它们分别是,ALU 这样的组合逻辑电路、用来存储数据的锁存器和 D 触发器电路、用来实现 PC 寄存器的计数器电路,以及用来解码和寻址的译码器电路。


虽然 CPU 已经是由几十亿个晶体管组成的及其复杂的电路,但是它仍然是由这样一个个基本功能的电路组成的。只要搞清楚这些电路的运作原理,你自然也就弄明白了 CPU 的工作原理。


推荐阅读


如果想要了解数据通路,可以参看《计算机组成与设计 硬件软件接口》的第 5 版的 4.1 到 4.4 节。专栏里的内容是从更高一层的抽象逻辑来解释这些问题,而教科书里包含了更多电路的技术细节。这两者结合起来学习,能够帮助你更深入地去理解数据通路。


课后思考


那为什么 CPU 还会有满载运行和 Idle 闲置的状态呢?请你自己搜索研究一下这是为什么,并在留言区写下你的思考和答案。


欢迎你留言和我分享,你也可以把今天的文章分享给你的朋友,和他一起学习和进步。


标签:周期,17,数据通路,我们,电路,指令,ALU,CPU
From: https://blog.51cto.com/u_15202985/6022958

相关文章

  • 题解 CF1773H【Hot and Cold】
    赛时跟队友一起摆烂了,于是没做出来,回来补题。如果询问到了答案,可以直接判断并退出,因此下文的询问过程并没有考虑这一点。显然“\((1,1)\)比\((0,0)\)离所求位置更近”......
  • CF1792 D. Fixed Prefix Permutations : Educational Codeforces Round 142 (Rated fo
    给出n个长度为m的排列(a1,a2,a3,...,an)定义一个操作 r=ai•aj:r[k]=a[j][a[i][k]]定义一个排列(p1,p2,...,pn)的beauty为最大的k,使得p[1]=1,p[2]=2,..,p[k......
  • AtCoder Beginner Contest 172
    A-Calc(abc172a)题目大意给定一个\(a\),输出\(a+a^2+a^3\)解题思路模拟即可。神奇的代码#include<bits/stdc++.h>usingnamespacestd;usingLL=long......
  • 微机原理与系统设计笔记2 | 8086CPU结构与功能
    打算整理汇编语言与接口微机这方面的学习记录。本部分讲解8086CPU的结构和基本功能以及特性。参考资料西电《微机原理与系统设计》周佳社西交《微机原理与接口技术》......
  • 【Windows】VMware Workstation 不可恢复错误 (vcpu-1)解决方案
    ✨报错提示✨解决方案查看log并无头绪,通过搜索引擎寻求解决方案此问题网络上有较多解决方案这里推荐最好的解决方案是安装VMwareWorkstationPro16或者更高版本......
  • 刷刷刷 Day 20 | 617. 合并二叉树
    617.合并二叉树LeetCode题目要求给你两棵二叉树:root1和root2。想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两......
  • python进程绑定CPU的意义
        ===================================== 相关:python进程绑定CPU的一些Demo【转载】python进程绑定CPU......
  • CF1726D 题解
    EdgeSplit。一开始nt了,以为红边为一颗树,蓝边为剩余边,蓝边就不会有环了。假设有\(n\)个点,\(m\)条边,且这些边没有出现环,那么连通块的数量为\(n-m\),因为不存在环,......
  • CF1768C 题解
    \(\mathcalSolution\)【题意】题目要你构造两个序列\(p,q\),满足\(\max\{p_i,q_i\}=a_i\)。【分析】如果满足\(\max\{p_i,q_i\}=a_i\),则满足\(p_i=a_i,q_i\le......
  • CF1768D 题解
    \(\mathcalSolution\)【题意】我们可以交换任意两个数,求最小操作几次能让逆序对变成\(1\)。【分析】如果逆序对为\(1\)的排列一定是:\(2,1,\cdotsn\)\(1,3,......