• 欢迎访问知慧网,因知而慧,你的知识补充站,欢迎加入投稿
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏知慧网吧

微处理器工作原理

大科学 ransiwen 2年前 (2016-11-02) 429次浏览 已收录 0个评论

在本文中,您将了解到简简单单的数字逻辑电路技术如何让计算机完成诸如玩游戏或是对文档进行拼写检查的工作。

微处理器工作原理
Intel4004 芯片

微处理器(又称为CPU或中央处理单元)是装配在单颗芯片上的一个完整的计算引擎。第一颗微处理器是 1971 年问世的 Intel 4004。4004 的能力不算强大 _ 它只能执行加减运算,而且每次只能对 4 位的数据进行运算。但是它是一个很奇妙的产品,因为所有东西都集成在一颗芯片中。在 4004 出现之前,工程师们要么使用一堆芯片来制造计算机,要么使用零散部件来搭建出计算机(一次连接一个晶体管)。4004 曾被用来生产第一款便携式电子计算器。

微处理器工作原理
Intel8080

使计算机进入寻常百姓家的第一款微处理器是 Intel 8080,它是一个完整的 8 位计算机芯片,于 1974 年问世。而迅速在市场中走红的第一款微处理器则是 1979 年推出的 Intel 8088,大概在 1982 年左右面世的 IBM PC 便使用了此微处理器。如果您熟悉 PC 市场及其历史,便会知道 PC 市场经历了从 8088 到 80286、80386、80486,再到奔腾、奔腾 II、奔腾 III 乃至奔腾 4 的发展过程。所有这些微处理器都是由英特尔制造的,而且都是对 8088 基本设计的改进。奔腾 4 可以执行最初的 8088 所能运行的所有代码,但是它的速度是 8088 的 5000 倍。

微处理器的发展过程:Intel

下表可帮助您了解 Intel 在不同时间推出的不同处理器之间的差异。

 

名称
日期
晶体管数量
微米
时钟频率
数据宽度
MIPS
8080
1974
6,000
6
2 MHz
8 位
0.64
8088
1979
29,000
3
5 MHz
16 位
8 位总线
0.33
80286
1982
134,000
1.5
6 MHz
16 位
1
80386
1985
275,000
1.5
16 MHz
32 位
5
80486
1989
1,200,000
1
25 MHz
32 位
20
奔腾
1993
3,100,000
0.8
60 MHz
32 位
64 位总线
100
奔腾 II
1997
7,500,000
0.35
233 MHz
32 位
64 位总线
~300
奔腾 III
1999
9,500,000
0.25
450 MHz
32 位
64 位总线
~510
奔腾 4
2000
42,000,000
0.18
1.5 GHz
32 位
64 位总线
~1,700
奔腾 4“Prescott”
2004
125,000,000
0.09
3.6 GHz
32 位
64 位总线
~7,000

数据来自 Intel 微处理器快速参考指南和 TSCP 基准测试成绩

与此表有关的信息:

什么是芯片?
芯片又称集成电路。通常,它是一个很小、很薄的硅片,上面蚀刻有组成微处理器的晶体管。芯片可能只有 2.5 厘米见方大小,但是却包含几千万个晶体管。较简单的处理器可能在几毫米见方的芯片上刻有几千个晶体管。

 

  • 日期是该款处理器首次推出的年份。许多处理器会在首次发布之后在多年中不断推出具有更高时钟频率的型号。
  • 晶体管数量是指芯片上晶体管的数量。可以看到,芯片上包含的晶体管数量在逐年稳步上升。
  • 微米是指芯片上最细的电路的宽度(单位为微米)。可以用人的头发做个比较,头发的宽度为 100 微米。随着芯片外形尺寸不断缩小,晶体管数量却在不断增加。
  • 时钟频率是指芯片的最大时钟速度。我们将在下一节中详细介绍时钟频率。
  • 数据宽度是指 ALU 的宽度。8 位的 ALU 可以对两个 8 位(8 比特)数字进行加减乘除运算,而 32 位的 ALU 可以计算 32 位的数字。8 位 ALU 如果要对两个 32 位数字进行加法操作,必须执行四条相加指令,而 32 位 ALU 则只需要执行一条指令。很多情况下,外部数据总线的宽度与 ALU 相同,但也有不同的情况。8088 的 ALU 为 16 位,而总线为 8 位,而现代的奔腾处理器的数据总线宽度为 64 位,ALU 为 32 位。
  • MIPS 代表“每秒百万条指令”,是衡量 CPU 性能的粗略标准。对于现代 CPU 的许多工作,MIPS 指标在很大程度上已经失去了意义,但是您可以将它作为一个大致的量度,根据本栏中的数据来了解 CPU 的性能强弱。

从本表中可以看到,总体来说,时钟频率和 MIPS 之间存在一定关系。最大时钟频率与制造工艺和芯片内的延迟密切相关。此外,在晶体管数量和 MIPS 之间也存在一定联系。例如,8088 的时钟频率为 5MHz,但是只能以 0.33MIPS 的速度执行指令(大约每 15 个周期执行 1 条指令)。现代的处理器经常可以在每个时钟周期内执行两条指令。这种能力改进与晶体管的数量有直接关系,我们将在下一节中对此加以讨论。
为了理解微处理器的工作原理,首先看看它的内部结构和了解其工作逻辑会很有帮助。在这个过程中,您还可以了解到汇编语言——微处理器的固有语言——以及工程师们为了提高处理器速度所做的大量工作。

微处理器执行一组机器指令,这组指令可向处理器告知应执行哪些操作。微处理器就会根据指令执行三种基本工作:

  • 通过使用 ALU(算术/逻辑单元),微处理器可以执行数学计算。例如:加法、减法、乘法和除法。现代的微处理器包含完整的浮点处理器,它可以对很大的浮点数执行非常复杂的浮点运算。
  • 微处理器可以将数据从一个内存位置移动到另一个位置。
  • 微处理器可以做出决定,并根据这些决定跳转到一组新指令。

微处理器能够执行许多非常复杂的工作,但是所有工作都属于这三种基本操作的范畴。下图显示了一个能够执行上述三种操作的非常简单的微处理器:

微处理器工作原理

这是一个进行了最大程度简化的微处理器。此微处理器具有:

  • 一条地址总线(总线宽度可以 8 位、16 位或 32 位),用于向内存发送一个地址
  • 一条数据总线(总线宽度可以是 8 位、16 位或 32 位),能够将数据发送到内存或从内存取得数据
  • 一条 RD(读)和 WR(写)线路,告诉内存它是希望写入某个地址位置还是获得某个地址位置的内容
  • 一条时钟线路,将时钟脉冲序列发送到处理器
  • 复位线路,用于将程序计数器重置为零(或者其他内容)并重新开始执行

在本例中,我们假定地址和数据总线的宽度都是 8 位的。

以下是这个简单的微处理器的各个组成部分:

  • 寄存器 A、B 和 C 就是一些用触发器制造的锁存器。(有关详细信息,请参见布尔逻辑的应用一文的“边缘触发锁存器”部分。)
  • 地址锁存器与寄存器 A、B 和 C 极其类似。
  • 程序计数器也是一个锁存器,但是它有一种额外的能力,也就是能够在执行每条语句后将计数器加一,并在被告知应进行重置时将计数器重置为零。
  • ALU 可以像一个 8 位加法器一样简单(有关详细信息,请参见布尔逻辑的应用一文中有关加法器的部分),也可以较为复杂,能够对 8 位的值进行加法、减法、乘法和除法运算。我们假定是后面一种加法器。
  • 测试寄存器是一种特殊的锁存器,可以存放在 ALU 中执行的比较运算的结果。ALU 通常可以比较两个数字,并确定它们是否相等以及其中一个数字是否大于另一个数字等。测试寄存器通常还可以保存加法器上一次计算产生的进位。它将这些值存放在触发器中,随后指令解码器可以使用这些值做出决定。
  • 图中有六个标记有“3-State”(三态)的方框。它们是三态缓冲区。三态缓冲区可以输出 1、0 或者彻底断开其输出(可以将其想像为一个将输出线从电路中彻底断开的开关)。三态缓冲区能够将多种输出连接到电路中,但是线路上的某一个输出实际上代表的是 1 或 0。
  • 指令寄存器和指令解码器负责控制所有其他组件。

虽然没有显示在此图中,但实际上存在一些来自指令解码器的控制线,它们的作用是:

  • 通知 A 寄存器锁存当前在数据总线上传递的值
  • 通知 B 寄存器锁存当前在数据总线上传递的值
  • 通知 C 寄存器锁存当前由 ALU 输出的值
  • 通知程序计数器寄存器锁存当前在数据总线上传递的值
  • 通知地址寄存器锁存当前在数据总线上传递的值
  • 通知指令寄存器锁存当前在数据总线上传递的值
  • 通知程序计数器进行递增
  • 通知程序计数器重置为零
  • 激活所有六个三态缓冲区(六条单独的线路)
  • 通知 ALU 要执行的操作
  • 通知测试寄存器锁存 ALU 的测试位
  • 激活 RD 线路
  • 激活 WR 线路

来自测试寄存器和时钟线路(以及指令寄存器)的数据位会进入到指令解码器中。

RAM 和 ROM

上一节中我们讨论了地址和数据总线,以及 RD 和 WR 线路。这些总线和线路连接到 RAM 或 ROM——通常是同时连接到二者。在我们作为例子的微处理器中,有一个宽度为 8 位的地址总线和一个宽度为 8 位的数据总线。也就是说,该微处理器可以寻址(28) 256 个字节的内存空间,并且可以向内存读取或写入 8 位的数据。我们假定这个简单的微处理器有 128 字节的 ROM,其地址从 0 开始,此外还有 128 字节的 RAM,其地址从 128 开始。

微处理器工作原理

ROM 代表只读内存。ROM 芯片使用永久性的预设字节进行了编程。地址总线通知 ROM 芯片应取出哪些字节并将它们放在数据总线上。当 RD 线的状态更改后,ROM 芯片会将选择的字节放在数据总线上。

微处理器工作原理
RAM 芯片

RAM 代表随机存取内存。它包含多个字节的信息,微处理器可以读取或写入这些字节,而具体操作取决于信号是由 RD 线路给出的还是 WR 线路给出的。RAM 芯片的一个缺点是,在电源中断后,保存的所有信息都会消失。这也就是为何计算机需要使用 ROM 的原因。

顺便说一下,几乎所有计算机都包含一定数量的 ROM(可以制造出不包括任何 RAM 的简单计算机——许多微控制器便做到了这一点,方法是将少量的 RAM 字节放在处理器芯片自身中——但是,通常不可能制造出不包含任何 ROM 的计算机)。在 PC 中,ROM 称作 BIOS(基本输入输出系统)。在微处理器启动时,它开始执行在 BIOS 中找到的指令。BIOS 指令会执行对计算机中的硬件进行测试这样的工作,然后访问硬盘以读取启动扇区(有关详细信息,请参见硬盘工作原理)。该启动扇区是另一个小型程序,在将其从磁盘中读出后,BIOS 将它存储在 RAM 中。然后,微处理器开始从 RAM 中执行启动扇区的指令。启动扇区程序会通知微处理器将其余指令从硬盘读入 RAM,微处理器随后又会执行这些指令,以此类推。这就是微处理器加载和执行整个操作系统的过程。


虽然前面例子中的微处理器非常简单,但是它仍然可以执行相当多的指令。指令集通过位模式的方式实现,每一个位模式在加载到指令寄存器中后都有不同的含义。由于人们不能很好记住这些位模式,所以定义了一些简短的单词来表示不同的位模式。这些单词的集合称作处理器的汇编语言。汇编程序可以将这些单词轻松翻译成它们的位模式,然后会将汇编程序的输出放在内存中供处理器执行。

以下是设计人员可以为例子中的微处理器建立的一组汇编语言指令:

  • LOADA mem——将某个内存地址的数据加载到寄存器 A 中
  • LOADB mem——将某个内存地址的数据加载到寄存器 B 中
  • CONB con——将一个常量值加载到寄存器 B 中
  • SAVEB mem——将寄存器 B 的内容保存到某个内存地址
  • SAVEC mem——将寄存器 C 的内容保存到某个内存地址
  • ADD——将 A 和 B 相加并将结果保存在 C 中
  • SUB——将 A 和 B 相减并将结果保存在 C 中
  • MUL——将 A 和 B 相乘并将结果保存在 C 中
  • DIV——将 A 和 B 相除并将结果保存在 C 中
  • COM——将 A 和 B 进行比较并将结果保存在测试寄存器中
  • JUMP addr——跳转到某个地址
  • JEQ addr——如果相等则跳转到某个地址
  • JNEQ addr——如果不相等则跳转到某个地址
  • JG addr——如果大于则跳转到某个地址
  • JGE addr——如果大于或等于则跳转到某个地址
  • JL addr——如果小于则跳转到某个地址
  • JLE addr——如果小于或等于则跳转到某个地址
  • STOP——停止执行

如果你读过 C 语言入门教程一文,那么会知道下面这段简单的 C 代码可计算 5 的阶乘(5 的阶乘=5!=5X4X3X2X1=120):

 

a=1;  f=1;  while (a<=5)  {      f=f*a;      a=a+1;  }

在程序执行末尾,变量f中包含了 5 的阶乘。

 

汇编语言

C 编译器可将这段 C 代码编译为汇编语言。假定此处理器中 RAM 的地址从 128 开始,而 ROM(包含汇编语言程序)的地址从 0 开始,那么对于我们这个简单的微处理器来说,该汇编语言看起来如下所示: 
 

// 假定 a 位于地址 128 处 // 假定 F 位于地址 129 处 0   CONB 1      // a=1;  1   SAVEB 128  2   CONB 1      // f=1;  3   SAVEB 129  4   LOADA 128   // 如果 a>5,则跳转到 17 5   CONB 5  6   COM  7   JG 17  8   LOADA 129   // f=f*a;  9   LOADB 128  10  MUL  11  SAVEC 129  12  LOADA 128   // a=a+1;  13  CONB 1  14  ADD  15  SAVEC 128  16  JUMP 4       // 进行循环,返回到比较部分  17  STOP

ROM

那么,现在的问题是:所有这些指令在 ROM 中是什么样的?所有这些汇编语言指令必须以二进制数字的形式表示。为了简单起见,我们假定每条汇编语言指令具有一个唯一的编号,如下所示:

  • LOADA-1
  • LOADB-2
  • CONB-3
  • SAVEB-4
  • SAVEC mem-5
  • ADD -6
  • SUB -7
  • MUL -8
  • DIV -9
  • COM -10
  • JUMP addr -11
  • JEQ addr -12
  • JNEQ addr -13
  • JG addr -14
  • JGE addr -15
  • JL addr -16
  • JLE addr -17
  • STOP -18

这些数字称作 opcode(优化代码)。在 ROM 中,我们的小程序看起来如下所示:

 

// 假定 a 位于地址 128 处 // 假定 F 位于地址 129 处 地址 opcode/值  0    3             // CONB 1  1    1  2    4             // SAVEB 128  3    128  4    3             // CONB 1  5    1  6    4             // SAVEB 129  7    129  8    1             // LOADA 128  9    128  10   3             // CONB 5  11   5  12   10            // COM  13   14            // JG 17  14   31  15   1             // LOADA 129  16   129  17   2             // LOADB 128  18   128  19   8             // MUL  20   5             // SAVEC 129  21   129  22   1             // LOADA 128  23   128  24   3             // CONB 1  25   1  26   6             // ADD  27   5             // SAVEC 128  28   128  29   11            // JUMP 4  30   8  31   18            // STOP

您可以看到,七行 C 代码变成了 18 行汇编语言,并且变成了 ROM 中的 32 个字节。

解码

指令解码器需要将每个 opcode 转变为一组能够驱动微处理器内部各个部件的信号。让我们以 ADD 指令为例,看看解码器都执行了哪些工作:

  1. 在第一个时钟周期,我们需要实际载入该指令。因此,指令解码器需要:
    • 激活程序计数器的三态缓冲区
    • 激活 RD 线路
    • 激活 data-in(读入数据)三态缓冲区
    • 将指令锁存在指令寄存器中
  2. 在第二个时钟周期中,对 ADD 指令进行解码。需要做的工作很少:
    • 将 ALU 的操作设置为加法
    • 将 ALU 的输出锁存到 C 寄存器中
  3. 在第三个时钟周期中,程序计数器会进行递增(理论上这个过程与第二个时钟周期是重叠进行的)。

所有指令都会像这样分解成一组有序操作,按照正确的顺序操作微处理器的各个组件。有些指令(例如这条 ADD 指令)需要 2 或 3 个时钟周期即可完成。而其他指令则可能需要 5 或 6 个时钟周期才能完成。

可用晶体管的数量对处理器性能有巨大影响。如上所述,在 8088 这样的处理器中,通常要花费 15 个时钟周期才能执行一条指令。由于乘法器的设计方式,在 8088 上进行 16 位的乘法运算大约需要 80 个时钟周期。而晶体管越多,就越有可能在一个周期中执行更多的乘法运算。

晶体管数量的增多还使我们能够使用一种称为流水线的技术。在流水线式的体系结构中,指令的执行过程是相互重叠的。所以,虽然需要花费 5 个时钟周期来执行每条指令,但是可以同时执行 5 条指令的各个阶段。这样,表面看起来在每个时钟周期内即可执行完一条指令。

许多现代的处理器具有多个指令解码器,每一个都有自己的流水线。这样便存在多个指令流,也就是说每个时钟周期可以完成多条指令。但是这种技术实现起来非常复杂,因此需要使用大量的晶体管。

发展趋势

处理器设计的发展趋势主要是:完全 32 位的 ALU(内置快速浮点处理器)和多指令流的流水线式执行方式。处理器设计的最新进展是 64 位 ALU,预计在下一个十年中家用 PC 就会用上这种处理器。此外,还存在为处理器添加可高效执行某些操作的特殊指令(例如 MMX 指令)的趋势,以及在处理器芯片中增加硬件虚拟内存支持和 L1 缓存的趋势。所有这些趋势都进一步增加了晶体管的数量,导致现在的处理器包含数千万个晶体管。而这些处理器每秒大约可以执行十亿条指令!

64 位处理器

64 位处理器在 1992 年就已经开发成功,预计它们在 21 世纪将逐步成为主流产品。I 英特尔和 AMD 都开发出了 64 位芯片,Mac G5 也是一款 64 位处理器产品。64 位处理器具有 64 位 ALU、64 位寄存器、64 位总线等等。

微处理器工作原理

人们需要 64 位处理器的原因之一是它们具有更大的地址空间。32 位芯片通常只能访问最大 2GB 或 4GB 的 RAM 空间。这听起来似乎是一个很大的空间,是因为当前的大多数家用计算机只配备了 256MB 到 512MB 的 RAM。但是,对于服务器和运行大型数据库的计算机来说,4GB 的内存空间限制是一个严重问题。而且,即使是家用计算机,如果按照当前趋势继续发展,也很快会遇到 2GB 或 4GB 限制这个问题。64 位芯片则不存在上述限制,因为在可以预见的未来,64 位 RAM 地址空间都可以说是一个无限大的地址空间——2^64 字节的 RAM 大概相当于十亿吉字节的 RAM。

凭借 64 位地址总线以及主板上宽阔的高速数据总线,64 位计算机还可以为硬盘驱动器和显卡这样的设备提供更快的 I/O(输入/输出)速度。这些特点可极大地提升系统的性能。

服务器肯定会受益于 64 位技术,但是它对于普通用户有何意义呢?除了解除 RAM 限制之外,目前我们还不是很清楚 64 位芯片能够为普通用户提供那些切实的好处。但是它们可以更快地处理数据(能够计算很复杂的实数)。进行视频编辑和处理超大图像的人会受益于这种强大的计算能力。高端游戏也会从中受益,但是需要对它们进行重新编码以利用 64 位技术。而阅读电子邮件、浏览网络和编辑 Word 文档的人实际则不需要使用这种处理器。


转载请注明微处理器工作原理转自知慧网 www.ZHW666.com,谢谢。
喜欢 (0)
[ransiwen@163.com]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址