CPU的原理介绍和如何设计和生产CPU的详细资料说明.doc
《CPU的原理介绍和如何设计和生产CPU的详细资料说明.doc》由会员分享,可在线阅读,更多相关《CPU的原理介绍和如何设计和生产CPU的详细资料说明.doc(15页珍藏版)》请在三一文库上搜索。
1、CPU的原理介绍和如何设计和生产CPU的详细资料说明我们都认为CPU是计算机的“大脑”,但这到底是什么意思呢?用数十亿个晶体管让你的计算机工作到底是怎么回事?在这篇文章中,我们将专注于计算机硬件设计,涵盖计算机工作原理的来龙去脉。文章将涵盖计算机架构、处理器电路设计、超大规模集成电路(VLSI)、芯片制造和未来的计算趋势。如果你一直对处理器内部工作原理的细节感兴趣,请继续关注,因为这就是你想要了解的内容。CPU的原理我们将从一个非常高的层次开始,了解处理器的功能,以及各个组成部分在功能设计中是如何组合在一起的。这包括处理器内核、内存层次结构、分支预测等等。首先,我们需要知道CPU的基本定义。最
2、简单的解释是CPU遵循一组指令,对一组输入执行某些操作。例如,可能是从内存中读取一个值,然后将其加上另一个值,最后将结果存储在不同位置的内存中。如果前一次计算的结果大于零,那么也可能是更复杂的事情,如将两个数字相除。当你想要运行一个像操作系统或游戏这样的程序时,程序本身就是C+PU要执行的一系列指令。这些指令从内存中加载,并在一个简单的处理器上逐一执行,直到程序完成。当软件开发人员用高级语言(如C+或Python)编写程序时,处理器无法理解。它只能理解1和0,所以我们需要一种方式来表示这种格式的代码。程序被编译成一组称为汇编语言的低级指令,作为指令集体系结构(ISA)的一部分。这是CPU用来理
3、解和执行的一组指令。一些最常见的ISA是x86、MIPS、ARM、RISC-V和PowerPC。就像用C+编写函数的语法与用Python编写相同函数的语法不同一样,每种ISA也有不同的语法。这些ISA可以分为两大类:固定长度和可变长度。RISC-V ISA使用固定长度的指令,这意味着每条指令中一定数量的预定义位决定了它是哪种类型的指令。这与x86不同,x86使用可变长度指令。在x86中,指令可以按照不同的方式进行编码,并且针对不同的部分使用不同的位数。由于这种复杂性,x86 CPU中的指令解码器通常是整个设计中最复杂的部分。固定长度的指令允许更容易的解码,因为它们有规则的结构,但限制了ISA可
4、以支持的总指令数。虽然普通版本的RISC-V架构有大约100条指令,而且是开源的,但是x86是专有的,没有人知道究竟有多少条指令。人们通常认为有几千条x86指令,但确切的数字并不公开。 尽管ISA之间存在差异,但它们都具有基本相同的核心功能。一些RISC-V指令的示例。右边的操作码是7位,它决定了指令的类型。每条指令还包含要使用的寄存器和要执行的功能的位。这就是汇编指令如何被分解成二进制以便CPU理解。现在我们准备好打开计算机,开始运行程序。指令的执行实际上有几个基本部分,这些部分通过处理器的许多阶段分解。第一步是将指令从内存提取到CPU中开始执行。第二步对指令进行解码,以便CPU能够确定它是
5、什么类型的指令。有很多类型,包括算术指令、分支指令和内存指令。一旦CPU知道它正在执行的指令类型,就从CPU中的存储器或内部寄存器收集指令的操作数。如果你想把数字A和数字B相加,在你真正知道A和B的值之前不能进行相加。大多数现代处理器都是64位的,这意味着每个数据值的大小都是64位。64位是指CPU寄存器、数据路径,以及内存地址的宽度。对于普通用户来说,这意味着一台计算机一次可以处理多少信息,最好与较小的32位体系结构相比较来理解。64位体系结构一次处理的信息位数是32位的两倍。在CPU有了指令的操作数之后,就移动到执行阶段,在此阶段对输入执行操作。可能是将数字相加,对数字执行逻辑操作,或者只
6、是传递数字而不对其进行修改。计算结果后,可能需要访问内存来存储结果,或者CPU可以将值保存在其内部寄存器中。存储结果后,CPU将更新各个元素的状态,然后转到下一条指令。当然,这种描述是极大的简化,大多数现代处理器将把这几个阶段分解为20个或更多更小的阶段,以提高效率。这意味着尽管处理器将在每个周期中启动和完成多个指令,但是任何一条指令从开始到结束可能需要20个或更多的周期。这个模型通常被称为流水线,因为它需要一段时间来填充流水线,让液体通过流水线,但是一旦流水线满了,就会得到一个恒定的输出。4级流水线示例。彩色方框表示相互独立的指令。(图片来源:维基百科)指令经过的整个周期是一个非常精心编排的
7、过程,但并非所有指令都可以同时完成。例如,加法非常快,而除法或从内存加载可能需要数百个周期。大多数现代处理器都是无序执行的,而不是在一条缓慢的指令完成时使整个处理器停止运行。这意味着处理器将确定在给定时间执行哪条指令最有益,并缓冲其他未准备好的指令。如果当前指令尚未就绪,则处理器可以在代码中向前跳转,以查看是否有其他指令准备就绪。除了无序执行之外,典型的现代处理器还采用了所谓的超标量体系结构(superscalar architecture)。这意味着在任何时候,处理器都在流水线的每个阶段同时执行许多指令。它可能还在等待数百条指令开始执行。为了能够一次执行许多指令,处理器将在每个流水线阶段中包
8、含多个副本。如果处理器看到两条指令已经准备好执行,并且它们之间没有依赖关系,那么它将同时执行这两条指令,而不是等待它们分别完成。这种方法的一个常见实现称为同步多线程(SMT),也称为超线程。英特尔和AMD处理器目前支持双向SMT,而IBM已开发出支持多达八路SMT的芯片。为了完成这种精心编排的执行,处理器除了基本核心之外还有许多额外的元素。在一个处理器中有数百个单独的模块,每个模块都有特定的用途,但我们将只简单介绍一下基本的功能。两个最大和最有益的是缓存和分支预测器。我们不会涉及重新排序缓冲区、寄存器别名表和保留站这些结构。缓存的目的常常令人困惑,因为它们像RAM或SSD一样存储数据。缓存的不
9、同之处在于它们的访问延迟和速度。尽管RAM非常快,但对于CPU来说,它的速度慢了几个数量级。RAM可能需要数百个周期才能对数据做出响应,处理器可能会陷入无事可做的境地。如果数据不在RAM中,则可能需要数万个周期才能访问SSD上的数据。没有缓存,我们的处理器就会陷入停顿。处理器通常具有三级缓存,形成所谓的内存层次结构。L1缓存最小且速度最快,L2位于中间,L3是最大且最慢的缓存。在层次结构中的缓存之上是小型寄存器,在计算期间存储单个数据值。这些寄存器是系统中速度最快的存储设备。当编译器将高级程序转换成汇编语言时,它将确定使用这些寄存器的最佳方法。当CPU从内存中请求数据时,它将首先检查该数据是否
10、已经存储在L1缓存中。如果是,则可以在几个周期内快速访问数据。如果不存在,CPU将检查L2缓存并随后搜索L3缓存。缓存的实现方式通常对核心是透明的。核心只需要在指定的内存地址中请求一些数据,层次结构中的任何级别都将响应它。当我们进入内存层次结构的后续阶段时,大小和延迟通常会增加几个数量级。最后,如果CPU在任何缓存中都找不到它要查找的数据,那么它就会进入主内存(RAM)。在典型的处理器上,每个核心将有两个L1缓存:一个用于数据缓存,一个用于指令缓存。L1缓存的总容量通常在100KB左右,大小可能因芯片和代际而异。每个核心通常也有一个L2缓存,尽管在某些体系结构中,它可能在两个核心之间共享。L2
11、缓存通常为几百KB。最后,还有一个L3缓存在所有核心之间共享,大小为几十MB。当处理器执行代码时,它最常用的指令和数据值将被缓存。这极大地加快了执行速度,因为处理器不需要不断地访问主存来获取所需的数据。在本系列的第2部分和第3部分中,我们将更多地讨论如何实现这些内存系统。除了缓存之外,现代处理器的另一个关键组件是精确的分支预测器。分支指令类似于处理器的“if”语句。如果条件为真,将执行一组指令,如果条件为假,将执行另一组指令。例如,你可能想比较两个数字,如果它们相等,则执行一个函数,如果它们不同,则执行另一个函数。这些分支指令非常常见,大约占程序中所有指令的20%。从表面上看,这些分支指令似乎
12、没什么问题,但对于处理器来说,它们实际上非常具有挑战性。因为在任何时候,CPU可能同时执行10条或20条指令,所以知道要执行哪条指令是非常重要的。可能需要5个周期来确定当前指令是否为分支,另外需要10个周期才能确定条件是否为真。在此期间,处理器可能已经开始执行许多附加指令,甚至不知道这些指令是否是要执行的正确指令。为了解决这个问题,所有现代高性能处理器都使用了一种称为“推测”(speculation)的技术。这意味着处理器将跟踪分支指令,并猜测是否将采用分支。如果预测是正确的,那么处理器已经开始执行后续指令,因此这将带来性能提升。如果预测不正确,那么处理器将停止执行,删除已经开始执行的所有错误
13、指令,并从正确的位置重新开始。这些分支预测器(branch predictors )是机器学习的一些早期形式,因为预测器在运行过程中学习分支的行为。如果预测错误太多,它就会开始学习正确的行为。几十年来对分支预测技术的研究已经使现代处理器的准确率超过90%。虽然推测带来了巨大的性能提升,因为处理器可以执行准备好的指令,而不必在繁忙的指令上排队,但也暴露了安全漏洞。著名的幽灵攻击(Spectre attack)就是利用了分支预测和猜测中的漏洞。攻击者使用经特殊设计的代码来使处理器推测性地执行会泄漏内存值的代码。推测的某些方面必须重新设计,以确保数据不会泄露,这导致性能略有下降。在过去的几十年里,现
14、代处理器的体系结构已经取得了长足的进步。创新和巧妙的设计带来了更高的性能和对底层硬件的更好利用。不过,CPU制造商对其处理器中的技术非常保密,因此不可能确切知道其内部究竟发生了什么。话虽如此,计算机工作的基本原理在所有处理器上都是标准化的。英特尔可能会增加他们的秘密调整以提高缓存命中率,AMD可能会添加一个高级分支预测器,但他们都是完成相同的任务。CPU设计过程既然我们已经了解了处理器在高层次上的工作原理,现在是深入了解内部组件是如何设计的时候了。你可能知道,处理器和其他大多数数字技术都是由晶体管构成的。思考晶体管的最简单方法是把它想象成有三个引脚的可控开关。当栅极打开时,电就可以通过晶体管。
15、当栅极关闭时,电流不能流动。就像你墙上的电灯开关一样,但是要比电灯开关小得多,速度也快得多,而且可以用电来控制。现代处理器中使用的晶体管主要有两种:PMOS和NMOS。NMOS晶体管在栅极充电或设置为高电平时允许电流流过,PMOS晶体管在栅极放电或设置为低电平时允许电流流过。通过将这些类型的晶体管以互补的方式组合起来,我们可以创建CMOS逻辑门。在本文中,我们不会详细讨论晶体管的工作原理,但我们将在本系列的第3部分中讨论它。逻辑门是一种简单的设备,它接受输入,执行一些操作,并输出结果。例如,只有当且仅当门的所有输入都处于打开状态时,与门才会打开其输出。如果输入关闭,那么反相器或非门将打开其输出
16、。我们可以将这两者结合起来,创建一个与非门。当且仅当所有输入都不打开时,它才打开其输出。还有其他具有不同逻辑功能的门,如或门、或非门、异或门和同或门。下面我们可以看到两个基本的逻辑门是如何从晶体管开始设计的:一个反相器和一个与非门。在反相器中,顶部有一个PMOS晶体管连接到VDD,底部有一个NMOS晶体管连接到GND。PMOS晶体管的画法是一个小圆圈连接到栅极上。我们说过,PMOS器件在输入关闭时导通,NMOS器件在输入打开时导通,所以很容易看到输出信号总是与输入信号相反。再看看与非门,我们看到它需要四个晶体管,只要至少有一个输入是关的,输出就会打开。设计更先进的逻辑门和处理器内部其他电路也是
17、这种过程将晶体管连接成这样的简单网络。由于组件就像逻辑门一样简单,所以很难看到它们如何变成一台正常运行的计算机。此设计过程涉及到将多个门组合在一起,以创建一个可以执行简单功能的小型器件。然后,你可以连接许多这样的器件,形成能够执行更高级功能的器件。组合单个组件以创建工作设计的过程正是当今用于创建现代芯片的过程。唯一不同的是,一个现代芯片有数十亿个晶体管。举一个简单的例子,我们将看到一个基本的加法器1位全加器。它接受三个输入A、B和输入进位(Carry-In),并产生两个输出和(Sum)与输出进位(Carry-Out)。基本设计使用五个逻辑门,它们可以连接在一起,创建你想要的任意大小的加法器。现
18、代设计通过优化一些逻辑和进位信号来改进这一点,但基本原理仍然相同。如果A、B二者之一处于打开状态,或者存在输入进位信号,且A、B全开或全关,那么输出和就是开。输出进位有点复杂。当A和B同时开时,或者存在输入进位信号且A、B二者之一处于打开状态,此时输出进位是有效的。要连接多个1位加法器以形成更宽的加法器,只需将前一位的输出进位连接到当前位的输入进位。电路越复杂,逻辑就越混乱,但这是最简单的两个数字相加的方法。现代处理器使用更复杂的加法器,但是这些设计太复杂了,无法像这样进行概述。除了加法器,处理器还包含所有这些操作的除法、乘法和浮点运算的单元。将一系列这样的门组合起来对输入执行某种功能称为组合
19、逻辑(Combinational Logic)。然而,这种逻辑并不是计算机中唯一存在的东西。如果我们不能存储数据或跟踪任何东西的状态,那么就没有多大用处。为此,我们需要具有存储数据能力的时序逻辑。时序逻辑是通过仔细连接反相器和其他逻辑门来构建的,使得它们的输出反馈到门的输入。这些反馈回路用于存储一位数据,称为静态RAM或SRAM。它被称为静态RAM而不是动态DRAM的原因是,存储的数据总是直接连接到正电压或GND。实现单个SRAM的标准方法是使用如下所示的6个晶体管。顶部信号(标记为WL,Word Line)是地址,当它被使能时,存储在这个1位单元中的数据被发送到的位线(标记为BL,Bit L
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CPU 原理 介绍 如何 设计 生产 详细资料 说明
链接地址:https://www.31doc.com/p-3250733.html