下载
第11章计算机基础
计算机是人们最熟悉的数字网络的范例之一。计算机体系结构的研究涉及组成计算机的
基本的数字部分如何互连以形成系统特性。本章,我们将分析用来构造计算机的组件,以及
它们如何联合运作来提供基本的功能。
11.1 计算机操作概述
为了理解组成计算机的基本单元,我们考虑一台典型的台式个人计算机工作时所使用的
操作。
给计算机加电,启动一个称为操作系统的程序;普通的样例是U n i x 和M i c r o s o f t
Wi n d o w s R的变体。操作系统提供命令,即从用户的视角所需的系统功能。它包含许多例程,
用来连续不断地扫描键盘和鼠标以检测输入,在磁盘驱动器上检索和存储数据,为了在监视
器上显示而发送数据到视频存储器,以及启动应用程序如字处理器和逻辑C A D工具集等等。
应用程序的启动,首先需要从磁盘驱动器(或其他来源)把应用程序载入主系统存储器,
然后指定第一条指令的存储器地址。操作系统找到第一条命令,检索并执行它,然后依次到
第二条命令,等等。一旦该操作完毕,程序接管序列,应用就运行起来。程序自身由一组有
序的命令组成,它们告诉计算机把数据传送到系统里的各处(如在一个数据库程序之中),或
者执行一些操作如加法。
这个简单的概述足以说明构造计算机的主要的逻辑部件。首先,我们必须有某种存储设
备来保存程序和数据。我们将看到,计算机通常以两种形式提供存储设备,即大容量的系统
存储器和少数的一组快速寄存器。第二,我们必须有一个能够执行基本的二进制操作的逻辑
部件,如算术和逻辑功能所需的那些部件。最后,我们必须有一个逻辑网络,它能够接收一
条命令并把它翻译到控制系统操作的二进制信号集中。
11.1.1 计算机的主要组件
典型的计算机能够划分为五个主要的部分,每一部分执行一组具体的任务。图11 - 1中的
框图从一般的视角说明了计算机的主要部分。对于外界的用户,在我们的世界和二进制环境
之间的接口是通过一组电路,它允许我们输入信息与检索结果。这些行为由两种主要的电路
来管理。
1. 输入网络这些电路允许设备如键盘、鼠标、磁盘驱动器、CD ROM或者扫描仪给计算
机提供输入数据。
2. 输出网络因为信息以二进制处理,要在平常的世界里应用,它必须被编码。输出设
备的例子是监视器和写模式磁盘驱动器。
一些设备同时具有输入和输出功能。例如,调制解调器允许用户发送和接收数据。
尽管输入/输出( I / O)电路是计算机的集成部分,对于初学者,内部电路更令人感兴趣,
因为正是在这儿,进行着机器的内部工作。内部电路包括三个主要的部分。
下载
图11-1 计算机的主要组件
3. 存储器存储器为程序、数据和其他必需的项目如操作系统提供存储功能。
4. 数据通道如其名称暗示,数据通道表示事件处理期间数据流动的通道。我们将看到,
数据通道的结构决定了计算机能够执行的操作。这包括事项,如代数运算(加法、乘法等)
和数据到存储器之间的来回传送。
5. 控制数据通道被设计来提供许多不同的操作。关于数据怎样被处理,每一个操作有
它自身的需求。例如,加法使用一个加法器来实现,从而输入字必须被指引到该加法器电路。
控制器负责确保把数据发送到正确的电路。
数据通道和控制器通常组合在一起,形成中央处理器(C P U)。图11 - 1中,我们已经在中
央处理器中包括了一个标注为局部存储器的方框。局部存储器,称为高速缓冲存储器(c a c h e),
允许中央处理器执行功能,而不必要总是从主存储器中检索数据。
11.1.2 计算机能做什么
尽管计算机能够解决非常复杂的任务,但其内部操作模式非常有限。一般地,计算机仅
仅提供两种基本类型的操作:
• 数据传送
和
• 执行二进制操作。
数据传送恰如其听起来一样:在系统里把数据从一点传送到另一点。这除了包括在C P U
内的数据通道中传送数据到各处之外,还包括在存储单元中存储和检索信息。
计算机内置的二进制操作集通常组合为主要的两组。第一组是逻辑功能,如N O T和
X N O R等,允许我们对经过数据通道的二进制字执行布尔操作。当使用正确时,这就赋予机
器判决能力。第二组操作是算术功能。这些包括加法和减法,在较高级的设计还包括乘法和
除法。
计算机能够执行的每一个操作称为一条指令。指令的聚合称为指令系统。指令的数量和
类型由数据通道的电路结构决定。例如,除非数据通道之中有加法器,否则计算机不能执行
加法。每一计算机根据指令系统的具体细节区别于其他所有计算机。
298 数字系统设计基础教程
系统存储器
局部存储器控制
数据通道输出电路
中央处理器
用户
输入电路
11.1.3 冯·诺依曼模型
直到最近,大多数的计算机都是基于约翰·冯·诺依曼开发的模型,该模型描述了一个
程序中的每一条指令线的有序执行。图11 - 2为理解冯·诺依曼机器的主要特征提供了一个简
单的可视化辅助。
图11-2 可编程计算机的冯·诺依曼模型
该框图描绘了两个主要的部分。存储单元用于存储程序和数据。一般地,这两类信息保
存在存储单元的不同部分,如图中所隐含。程序由一系列指令组成,它们标注为
指令0,指令1,指令2,. . .
等等。程序是有序的,因为指令号表明了执行的一般次序。确定下一条指令是控制器的责
任。术语“数据”用来指示正被处理的信息。例如,“数据”可能包括如名称和地址等条
目。
中央处理器( C P U)是冯·诺依曼模型的另一个主要部分。它由数据通道和控制器组
成。数据通道方框代表实现每一条指令所必需的逻辑电路,如加法或者逻辑操作。因为数
据通道网络有能力提供几种不同的操作,所以我们必须发送信号,指定要使用哪些电路。
这是控制器的责任;它发送信号到数据通道单元,激活正确的电路。在控制器中,有一个
单独的存储区域,用来容纳当前的指令字;它在图中显示为一个小的矩形,称为指令寄存
器(I R)。
计算机的冯·诺依曼模型基于一个重复的四周期过程来执行程序。这些周期被命名和描
述如下。
1. 取指令(Instruction Fetch) 在第一个周期期间,中央处理器发送一个信号到存储单
元,告诉它需要哪一条指令。存储器响应,发送该指令到C P U,保存在控制器中。
2. 指令译码(Instruction Decode) 译码就是翻译二进制指令并确定为了实现这个操作在
C P U中必须做些什么的过程。这个信息从控制器发送到数据通道。
3. 指令执行(Instruction Execute) 在数据通道从控制器接收到信息之后,指令可以被
执行。数据通道接收必需的输入数据,不是从存储器,就是从自身之中的局部存储器,并输
出结果。
第11章计算机基础299
下载
控制器
指令
取指令
存储器
程序
指令0
指令1
指令2
指令3
指令4
指令5
指令
发送数据
接收数据
数据
数据0
数据1
数据2
数据通道
中央处理器
输入输出
4. 存储(S t o r a g e) 周期的最后一步是把结果回存到存储器中。
程序中的每一条指令使用相同顺序的过程来处置。
关于计算机的描述,观察到的重要一点是,只要程序在运行,系统就重复相同的四个周
期。指令之间主要的差别通过改变数据通道网络执行的功能来操纵。以后我们将看到,数据
通道电路使用多路选择器和其他开关元件,“导引”数据经过大量的逻辑的级联组合,提供不
同的操作。
分析这种模型的计算机的速度也是有用的。如果计算机的功能以硬件实现,那么完成一
条指令将需要的总的时间是
tI n s t=tI F+tI D+tE X+tS ( 11 - 1 )
在这个方程中,
tI F= 执行取指操作所需要的时间,
tI D= 执行指令译码所需要的时间,
tE X= 在数据通道中的执行时间,和
ts= 存储结果所需要的时间。
显然, tI n s t值小意味着计算机较快,因为在一秒钟之内能够完成更多的指令。在冯·诺依曼模
型里,计算机的速度通过减少执行每一条指令所需要的时间来提高。因为定时通常由一个外
部应用的时钟信号ø(t)控制,那么时钟频率f 越高,计算机运行得就越快。
理解计算机固有的计算能力的关键在于把上面的序列和指令系统的概念结合起来。每一
条指令不是从一点到另一点传送数据,就是接收一个二进制输入,执行一个逻辑或算术操作,
并返回一个结果。单个操作并不能独立完成多少事情。然而,如果指令时间tI n s t很小,那么计
算机在一个很短的时间内能够执行许多条指令。举个例子,即使一个“慢” C P U,指令时间
tI n s t小于0 . 1ms ,意味着该计算机每秒钟能够执行大约一千万条指令(众所周知的1 0 M I P S)。
从而,尽管单个操作有限,正是计算机执行成千上万条指令的能力赋予计算机强大的计算能
力。
11.1.4 编程
我们都熟悉计算机使用一门高级语言如P a s c a l或者C编程的概念。一个程序是一个有序的
命令列表,告诉操作序列完成具体的任务。程序中的每一行(或行组)使用启动某些行为的
特殊的字符构造。命令构造的具体方式称为语法;这包括具体命令字符的次序和用法,以及
必须附带的其他方面,如分隔符(句号、逗号、分号等)的使用。每一门高级语言都以这种
方式定义。
因为数字系统是基于二进制数值系统的,计算机仅能处理由0和1组成的二进制字。这称
为机器语言级,人要使用是非常麻烦的。计算机的二进制逻辑电路被设计来接受指定的二进
制格式的命令,促使需求的动作发生。计算机的字长n是指用于数据段的位的个数。在许多系
统里,各指令使用相同的字长。尽管n可以是2的任意次幂,大多数的现代系统使用1 6位的偶
数倍字长。例如,目前的台式计算机采用3 2或者6 4位字长。
300 数字系统设计基础教程
下载
一微秒由1ms=10-6s定义。
现在,我们转向这样一个概念,我们怎样对一个由逻辑网络构建的数字计算机编程。
以高级语言编写的程序必须使用一个称为编译器的特殊程序翻译到机器语言。这个过程示
意性地在图11 - 3中说明。编译器接受以高级语言编写的程序,产生计算机能够理解的机器
语言指令序列。读和解释机器语言是十分困难的,所以我们还引入了另一类语言,称为汇
编语言,帮助我们理解计算机内部的操作。汇编程序命令与每一个二进制机器语言命令是
一一对应的,但是它们使用助记符,如“ a d d”和“ s u b”,使它们更易于解释。我们将趋于
使用汇编语言来说明计算机指令。尽管起初它可能看起来有点奇怪,但它易于学习,因为
助记符会是一个易于记忆的好选择。更重要的是,汇编语言允许我们了解计算机如何操作
的细节。
图11-3 编程语言的层次
11.1.5 计算机寄存器
寄存器就是组合在一起存储整个字的一组独立的存储单元。在计算机中,寄存器以几种
不同的方式使用,但所有的寄存器有着相同的基本功能:它们能够用来存储一个二进制字。
尽管我们在第9章中已经分析了寄存器,在这里,我们将移到一个更加精确的视角,帮助我们
理解它。
当讨论计算机中的数据流时,我们将使用简化的符号表示寄存器。它们如图11 - 4所示。
图11 - 4 a表示能够存储一位的单个存储单元;注意它的内部电路的细节被忽略了,因为在层次
的这一级,只有存储特性是重要的。为了建立一个3 2位寄存器,我们简单地组合3 2个独立的
单元,如图11 - 4 b所示,标记各位为d3 1到d0。尽管它提供了所有必需的信息,由于有3 2根输入
线和3 2根输出线,画起来是麻烦的。这导致我们使用比较简单的草图11 - 4 c,对于我们的讨论,
它是优选的符号。输入和输出线已经被表示3 2根独立位线的单根数据总线所取代。总线的宽
度由贯穿总线的“斜线”(/)和总线携带的位数( 3 2)表示。这个简化符号对于我们的草图
是足够的,只要我们记住它表示一个存储3 2 b i t字的数字元件。有时,显式地表示寄存器的内
容(内部存储的字)将是有用的,如图11 - 4 d所示。
第11章计算机基础301
下载
f=x+y
g=w-z
if(f==g)then
result=2*x
else
result=6*w
add R3, R2, R5
sub R7, R18, R7
beq R3, R7,
0x60a5
...
汇编语言
编译器
高级
语言
程序
计算
机的
机器
语言
图11-4 用于表示寄存器的原理图符号
11.2 中央处理器:初识
计算机的心脏是中央处理器。这组电路决定了计算机能够提供的操作,通常指示出整个
系统的性能。可以预见,详细地研究C P U是相当复杂的;如果整个C P U作为单个器件来分析,
尤其如此。然而,可以使用层次设计的概念把C P U分解为几个截然不同的部分,每一部分能
够相对于其他部分独立地研究。
我们将分析一个“典型”的现代计算机系统的基本操作。尽管这个讨论十分平常,我们
的研究将使用相当具体的引用,包含某些细节。这些被选取,是为了给那些打算在将来更加
详细地研究计算机的人提供一个可靠的背景。
11.2.1 取指令网络
为了执行存储在存储器中的程序,我们必须把指令送入处理器。这个使用取指令网络完
成,取指令网络是控制器内部的一个子系统。
程序是二进制字的有序列表,每一个字提供逻辑网络执行一个具体操作所必需的信息。
当程序存储在存储器中时,每一个二进制字对应它在程序中的位置,被分配给一个独一无二
的地址。图11 - 5中提供的例子说明了这一点。指令序列由数字给定, Inst 0是第一个, Inst 1是
下一个,等等。每一条指令由一个二进制字代表。我们在草图中已经使用了3 2位字,但实际
的大小依赖于计算机。
通常以一种方式划分存储器,允许我们指定每一个8位字节的地址。一个3 2位字由四个字
节组成,所以相邻两条指令的地址相差4。我们来分析,数据是如何通过引用图中的数值而被
存储的。Inst 0位于十进制地址0 4 0 0,有二进制数值
0 11 0 1100 11111010 11110000 1111 0 0 0 0
下一条指令是Inst 1,它位于十进制地址0 4 0 4,有二进制数值
11000101 10110101 00001111 1111 0 0 0 0
等等。
302 数字系统设计基础教程
下载
a) 单个位单元
输入
输出
b) 32 位寄存器
c) 简化符号
d) 显示的内容
这里选择的体系结构,如以后所解释的,是称为R I S C设计的一个例子。
图11-5 存储器中存储的程序序列
一个基本的取指令逻辑网络由图11 - 6中的框图描述。取指令网络的主要部分包括两个寄
存器。指令寄存器(I R)包含程序指定的当前操作例如一个加法的二进制指令字。程序计数
器(P C)用于指令执行时,通过计数指令来维持程序流。它包含计算机将要检索和执行的下
一条指令的存储器地址。
图11-6 取指令(IF)网络的操作
取指令网络的操作由程序序列存储在存储单元之中的事实规定。程序计数器是一个寄存器,
存储从存储器取回的当前指令的地址。它供应给存储器,相关的数据字就被传送到指令寄存器。
例如,如果我们希望从存储器中获得Inst 0,那么我们以0 4 0 0的二进制等效值预置P C;这导致
了所需的至I R的传送。为了获得下一条指令( Inst 1),提供一个加法器单元,按照
P C=P C+X
递增P C的内容,这里X= 4是得到下一条指令所需的间隔。在当前的例子中,这意味着
P C= 0 4 0 0 + 4
致使Inst 1传送到I R。一旦处于I R中,指令就被计算机中其他的电路译码,使指令得以执行。
当该过程结束,指令作用完毕,下一条指令从存储器中取出,传送到I R。这个过程允许我们
有序地执行程序行。
11.2.2 数据通道的概念
既然我们已经了解指令怎样从存储器中取出并保存在指令寄存器里,让我们扩大对图11 - 7
所示的中央处理器的视角。这个框图描绘了C P U的主要组成部分,但是在各部分之间仅仅包
第11章计算机基础303
下载
地址次序
指令0
指令1
指令2
指令3
指令4
指令5
指令6
指令7
指令8
二进制指令
程序计数器(PC)
指令寄存器(IR)
增量
地址
存储器
数据输出
含了少量的实际接线。细节的缺乏是故意的,因为在我们分析赋予计算机编程特性的体系结
构的特征之后,互连方案最好理解。
图11-7 中央处理器由数据通道和控制器组成
指令寄存器显示在控制器的中心。一旦一条指令被置入I R中,该指令字的各位作为输入
进入图中所示的控制逻辑网络。控制逻辑网络由逻辑门组成,它们提供已知的输出,共同作
为控制信号,通过控制线供应给数据通道。控制信号用来告诉逻辑电路正确地设置数字元件,
如多路选择器。在某些情况下,控制逻辑单元的输出将包含来自于指令自身的数据位。
现在考虑标注为数据通道的部分。数据通道电路给可由计算机执行的每一条指令提供必
需的逻辑。数据流由包含于数据通道块内部的大箭头表示,指示数据字可以采用的通道。多
路选择器和多路分配器由简单的交叉点表示;它们的含义在图11 - 8中阐明。数据流的选择规
定了一大类基本的计算机指令,包括系统内一般的数据转移。通常,数据通道网络能被分解
为主要的三组电路:寄存器文件(register file)、算术逻辑单元(A L U)和局部存储器(l o c a l
m e m o r y)块。
a) MUX等效b) DeMUX等效
图11-8 简化的MUX和DeMUX符号
寄存器文件是一组通用存储的寄存器,用来存储当前计算链中要使用的数据字。开关网
络允许我们为数据存储选择输入寄存器,也允许我们选择读操作时使用的输出寄存器。框图
中描绘的寄存器文件允许从两个不同的寄存器同时输出,然后供应给下一逻辑块的输入A和B。
304 数字系统设计基础教程
下载
控制器
指令寄存器
控制逻辑
控制线
选择ALU
功能
局部存储器
寄存器文件
数据通道
算术逻辑单元( A L U)是提供所有算术操作(如加法和减法)和逻辑功能(如N O T和O R)
的一组电路。A L U独特的方面在于,它是依赖应用于它的控制信号而能够提供几种不同的操
作的单个电路。在图中,这些信号来源于控制逻辑部分,标注了“选择A L U功能”。
图中所示的余下部分标注为局部存储器。这是一小部分存储器,称为高速缓冲存储器
(c a c h e)。它包含于C P U之中,提供快速的读写操作,那将不会减慢计算机的操作。尽管显示
它与C P U相隔离,事实上,它既与C P U组件通讯,又与主系统存储器通讯。
11.2.3 数据通道操作
现在,我们来分析数据通道,以了解数据如何能够实际地在单元之间移动。如图所示,
基本的C P U允许执行三种主要的操作。它们根据数据原始的和最终的目的组合一起。
寄存器到寄存器操作
这类操作从寄存器文件中接受数据字,把它们用作ALU 的输入。然后,把结果存回到寄
存器文件中。
寄存器到寄存器操作的等效数据通道表示在图11 - 9中。在这个例子里,数据字x和y从寄存
器文件复制,分别作为A L U的输入A和B。A L U然后产生一个结果R(A,B)=z,它被导回到寄
存器文件并存储在那里。因为这类操作允许数据流过A L U,所以它被用来执行C P U中所有的
算术和逻辑操作。例如,指令
( 11 - 2 )
图11-9 寄存器到寄存器操作的数据通道,这里数据来源于寄存器,结果被存回到寄存器
都能够使用这类数据通道操作来实现。然而注意,在一条指令能被执行之前,数据必须首先
在寄存器之中。这使得强制地提供操作,允许数据在寄存器和存储器之间传送。
置入(L o a d)
当一个程序启动时,数据通常只置入计算机的存储器中。为了在我们的系统中实现寄存
器到寄存器操作,数据必须在A L U能够访问它之前从存储器转移到寄存器文件中。这种操作
称为置入,置入字(load word)指令助记符号为l w。图11 - 1 0表示数据通道网络实现置入操作
的部分。因为我们希望从存储器中接受一个字,所以我们必须指定该字所处的地址。这由从
第11章计算机基础305
下载
寄存器文件
局部
寄存器
指令寄存器和控制器中接收的A L U输入A实现;A的实际值是程序的一部分。只要该地址送给
存储单元,数据d就从指定位置传送到一个寄存器。
图11-10 置入字指令允许我们从存储器转移数据字到特定的寄存器
存储(S t o r e)
存储操作给出存储字(s w)指令,是置入的对立面。它允许我们从一个寄存器转移一个
数据字,写到存储阵列。图11 - 11中的数据流通道表明了这种操作的重要方面。地址A经过
A L U,指明该字要存放的位置。然后从寄存器文件中接收数据x,并置于存储器中。
图11-11 存储字指令允许我们从寄存器转移数据并把它存储在存储器中
尽管此刻,我们对计算机的考察高度地被简化,这三类操作说明了用来构造现代计算机指令
系统的最重要的数据流通道。
11.3 数据通道组件
既然我们已经了解了计算机中基本的数据流通道的特性,我们来更加详细地研究数据通
道组件。每个主要单元在这一节中分析;我们的目标是获得每一组件的系统级操作的更全面
的描述。在我们已经完成了详细研究之后,我们将讨论逻辑单元的连接如何构造计算机的指
令系统。
11.3.1 寄存器文件
计算机的中央处理器提供一种存储数据字的途径,它能够容易地把数据字用作A L U的输
306 数字系统设计基础教程
下载
寄存器文件
局部
存储器
数据
d = 数据
地址
地址
寄存器文件
局部
存储器
A=地址
地址
x = 数据
入。这些存储位置由几个寄存器组成,它们以一种便利的方式接入数据通道。总体上,这组
寄存器被称为寄存器文件。它可以看作是一个归档的小柜子的电子模拟,在那里,每个寄存
器就象一个抽屉,能够容纳独立于所有其他抽屉里所包含的条目。
寄存器文件的一个样例表示在图11 - 1 2中。它由标注为R 0到R 3 1的3 2个寄存器组成;每个
寄存器为3 2位宽。寄存器文件有单根3 2 b i t输入总线,允许用户每次把一个字存入文档中的一
个寄存器。输入字被写入由5 b i t目的选择字
d4d3d2d1d0
指定的寄存器中。来自寄存器文件的、由A和B表示的两个3 2 b i t输出显示在右边。传送到这些
线的数据字依赖于源选择字
s4s3s2s1s0
(对于选择A)和对象选择字
t4t3t2t1t0
(对于选择B)。只要选择字被指定,所选择的寄存器的内容就被传送到正确的输出。这是一个
非破坏性的操作,因为在读操作之后,寄存器的内容仍然完整无缺。
图11-12 寄存器文件的结构
框图提供了寄存器文件的系统级描述,但是它没有说明该单元是如何由较小的积木所构
造的。尽管对于理解该单元在计算机中如何作用,内部工作的知识是不必要的,研究寄存器
文件如何应用比较简单的组件来创建还是值得的。在层次结构中,我们降低一级,使用图11 -
1 3中的图示描述输入和输出选择操作。在这一级,寄存器仍然视作带3 2 b i t输入和输出线的单
个的3 2 b i t结构。寄存器输出A和B的选择,使用两个独立的带3 2 b i t输入的3 2∶1多路选择器来
实现。两个M U X单元有着相同的输入。这意味着,例如,寄存器R 0的输出连接到两个M U X
单元中的0输入,寄存器R 1的输出连接到两个M U X的1输入等等。输出寄存器由5位M U X控制
字s4s3s2s1s0和t4t3t2t1t0选择。例如,如果
和
那么A为寄存器R2的内容,而B等于寄存器R2 8的内容。再一次注意,图中A和B都是3 2位字。
输入(目的)寄存器由字d4d3d2d1d0决定,它控制寄存器文件输入一侧的1∶3 2多路分配器
单元。对于输出一侧, d4d3d2d1d0的值决定数据发送到哪一个寄存器。例如,值
d4d3d2d1d0= 0 0 0 0 1
第11章计算机基础307
下载
目的源对象
(源)
(对象)
32位输出
32位输入
32位输出
存储输入字在寄存器R 1中,
d4d3d2d1d0= 0 0 0 1 0
发送输入字到R2等等,允许我们规定所需的目的。
图11-13 寄存器文件结构的单元级视图
因为逻辑电路创建于单个位级,在系统层次结构中进一步降低一级,达到图11 - 1 4中简化
308 数字系统设计基础教程
下载
1∶3 2
多路分
配器
来自ALU
1∶3 2
多路分
配器
来自ALU
图11-14 寄存器文件的位级逻辑图解
的电路,是有用的。该图说明了上图中相同的系统,但是只描绘每个寄存器的第0位b0。对于
其他的每一位b1到b3 1,行为是相同的,所以显示单个位是足够的。注意,时钟信号ø已经显式
地包含在这里,但在较高层次的视图中被隐含。
这个视图说明了层次结构中基本的元件级视图。为了真实地建立完整的寄存器文件,我
们将采取3 2个相同的电路,形成系统级结构。相反,如果我们想要以硬件实现它,我们必须
降低层次结构。下一步将是使用逻辑门构造元件,然后,我们将转到晶体管级。最后一步是
硅芯片的物理设计。
11.3.2 算术逻辑单元
算术逻辑单元( A L U)是计算机的一部分,它提供所需的算术功能,如A D D和S U B,和
全部逻辑操作,如N O T、N A N D和X O R。尽
管具体功能随处理器而变化,大多数现有的
计算机拥有大量的公共操作。
一个A L U的符号表示在图11 - 1 5中。这个
单元有两个数据输入A和B,以及一个作为操
作结果的输出R。尽管这个讨论十分普通,我
们将假设A、B和R都是3 2 b i t宽,使体系结构
更加逼真。
在系统级,A L U的操作由功能选择字F控
制;F中的位数fi取决于单元内置的操作的数
量。A L U被设计来提供依赖于F值的不同的结
果。这能够用方程形式表示,记作
( 11 - 3 )
这里,A和B为输入,而F作为一个控制选择字。这解释如下。F能够假设为不同的值F0、F1、
F2等等;每一个F值指定一种不同的操作,从而指定一种不同的结果Ra。这能够陈述为
( 11 - 4 )
它说明了重要的一点, A L U能够提供不同的功能Ra、Rb、Rc等等。
A L U的基本构造由将要内置于处理器的操作决定。为了理解该单元的构造,让我们假设F
是一个3位字
( 11 - 5 )
它有八个可能的值。在这种情况下,最多有八个不同的结果Ra到Rh(这里下标包括字母表的前
8个字母)。因为每次只能选择一个结果,我们可以记R为
( 11 - 6 )
第11章计算机基础309
下载
输入
(功能选择)
结果(输出)
输入
图11-15 算术逻辑单元(ALU)的符号
它依赖于f2 f1 f0的值来选择输入。思索片刻将证实,这就是8∶1M U X的方程,带有输入Ra到Rh,
带有由f2 f1 f0的值实现的选择。相应于该方程的多路
选择器表示在图11 - 1 6中。为了构造这个A L U,我们
必须提供用作M U X输入的多样的结果Ra、⋯Rh、。
在作进一步处理之前,我们来分析这个A L U
的并行结构。每一根数据线A、B和R都是3 2位宽。
单独的位表示为
( 11 - 7 )
允许我们可视化整个A L U,如图11 - 1 7 a所示。因
为逻辑电路仅能处理单个位,所以A L U由3 2个相
同网络的并行组合构造。如果我们分析第n位,这里n是在范围0到3 1内的任意一位,那么我们
得到图11 - 1 7 b所示的位片。这是一个典型的电路,是通过把3 2位结构“切分”为单独位,然
后选择一片进行研究来获得的。这个概念的作用很容易理解。只要我们已经展现了第n位电路
的特性,仅仅通过并行3 2个该电路,我们就能够构造3 2位A L U。介绍并行网络全部的复杂性
是不必要的。
a) 32位ALU b) 位片
图11-17 ALU位片的概念
现在,我们转回到构造A L U的问题。图11 - 1 8表示了位片电路,它隐含了我们已经讨论过
的特性。在这一级,输入由an和bn表示。它们用来通过一个功能网络产生不同的结果ra、rb⋯,
这些结果被供应给一个多路选择器。功能选择字f2 f1 f0决定哪一个输入供应给输出rn。这个图解
使这点很清楚,A L U仅能执行功能网络提供的操作。从而,选择最有效的操作是重要的。
图11 - 1 9 a提供了A L U位片的一个例子。我们已经包括了加法和减法的代数操作,以及逻
辑功能A N D、O R、X N O R(等价)、N O T和“通过”。首先分析应用到每一个M U X输入的结
果,然后应用M U X自身的开关特性,就得到图11 - 1 9 b中的操作表。注意到这点十分重要,
A L U有电路提供全部八个功能,但只有一个指向输出。
作为A L U如何操作的一个例子,假设我们想要把两位an和bn相加。输入位an和bn通过由
310 数字系统设计基础教程
下载
每个Ra
宽32位
图11-16 用来选择几个结果之一的多路选择器
ALU
第n位
注意,这个例子仅为了说明用途,不与真实世界的任何处理器相符。
“+ / -”表示的加/减单元,产生和数sn。选择A L U控制位为
f2f1f0= 0 0 0
图11-18 位片的单元级结构
a) 逻辑网络b) 功能总结
图11-19 ALU位片设计的例子
就选定M U X输入0传送到输出rn。当然,这相应于求和,得到一个输出
rn = an+bn
若取而代之,我们使用
那么M U X输入1将被选择,产生一个不同的输出
第11章计算机基础311
下载
8∶1多路选
择器
第几位输出
和
rn = an-bn
我们已经假设,加/减选择位S能够由图中没有示出的附加电路来提供适当的值。
那么现在,既然我们懂得了怎样设计A L U的一个位片,一个n位宽的电路就能够由
• 复制这个位片(n-1 )次,然后
• 并行地连接这n个电路。
获得。
需要记住的一个重要方面是,编号为j的加/减单元的进位输出位必须用作编号为( j+1)
的加/减单元的进位输入位,以确保字的加法和减法是正确的。
11.3.3 局部存储器
在我们的例子里,局部存储单元在数据通道中提供。在设备场境中,如果它和C P U电路
在同一集成电路上,它将类属于L 1(第一
级)存储器。在实际的计算机里, L 1存储
器提供快速的读/写存储,但它与主存储器
相比较非常小。这类存储器用来提供快速
的置入和存储操作,通常被称为高速缓冲
存储器(c a c h e)。高速缓冲存储器连接数
据流通道和主存储单元,如图11 - 2 0所示。
在目前的讨论中, L1 cache只是作为一个通用的
存储单元,提供读写操作的存储。c a c h e存储器
的细节在第1 2章中作更深入的分析。
c a c h e的操作将假定在操作上与一般的读/写
存储阵列相同,能够使用图11 - 2 1所示的简化方
框在系统级建立模型。它在阵列中的位置由地址
输入指定。读/写控制信号R / W的值指定读/写操
作发生,或者存储器不活动而刷新。
11.4 指令和数据通道
数据通道包括三个主要部分:寄存器文件、A L U和存储单元。我们能够这样总结我们关
于C P U组件的研究,如下:
• ALU功能决定能被执行的算术和逻辑操作的类型。
• 寄存器文件提供一组快速的局部存储场所。
• cache存储器允许我们访问大型的系统存储器。
因为互连方案建立了允许的数据流通道,所以我们能够声明
• 能够在一给定计算机上实现的指令由每一单元的属性以及它们如何连接而形成系统所决
定。
这称为计算机的体系结构,因为它告诉我们系统是怎样建立的。上句话仅仅认可这样一个事
实,为了包含一条特定的指令,我们必须( a)在A L U中包含任何必需的逻辑,且( b)提供
一个数据流通道,以便能够完成该操作。例如,如果我们想要在指令系统里包括A D D,那么
312 数字系统设计基础教程
下载
数据流通道L1 cache
(小而快)
主存储器
(大而慢)
图11-20 局部存储器的概念
图11-21 局部存储器的操作模型
地址
数据输入
局部存储器
数据输出
我们必须在A L U中使用加法器,也确保我们能够选择所需的数据字来引入A L U。
为了更加详细地说明这一点,我们将以基本单元开始,然后展示如何构造数据通道。在
这一级,我们的目标是设计单个单元,它有多个数据通道,每一个都支持一类具体的数据流
通道。该通道由指令字和相关的控制逻辑选择,在这个层次看作一组控制信号。
首先,我们创建一个数据通道,它允许我们执行如下步骤:
• 从一个寄存器R X中检索一个数据字。
• 从一个寄存器RY中检索一个数据字。
• 对这两个字执行一个逻辑或算术操作。
• 然后存储结果到寄存器R Z。
这可以由图11 - 2 2所示的数据流通道实现。寄
存器文件输出直接与A L U的输入A和B接口。
结果R出现在A L U输出处,被反馈到寄存器文
件,并存储在那里。本章早先提及,这称为寄
存器到寄存器指令,因为它使用来自寄存器文
件的数据,并在那里存储结果。
只要数据通道已经被确定,以A和B为输入能够导致的实际操作依赖于A L U内置的特性功
能。在这个层次,独立的指令很容易使用汇编语言描述。早先提及,汇编语言使用助记符描
述操作;一个助记符就是一个完整的单词的缩写版本,易于记忆。汇编语言的指令格式定义
了每一符号的次序和意义。在我们的处理中,两数相加的寄存器到寄存器指令将记为
add RZ,R X,RY #把R X的内容与RY的内容相加,结果放入R Z中
这里,“#”号右边全部是注释语句,对操作不起作用。类似地,减法将记为
sub R12,R 7,R8 #R7-R8→R 1 2
这里,注释语句的意思是“从寄存器R 7的内容中减去寄存器R 8的内容,结果放入寄存器R 1 2
中”。
计算机中常见的其他寄存器到寄存器操作是逻辑功能,如
and RC,R 1,R2 #AND(R 1 , R 2)→R C
和
or R4,R 2 2,R1 #OR(R 2 2 , R 1)→R 4 C
尽管这些操作基于3 2 b i t字,逻辑操作被定义只作用于对齐位上。例如,如果我们有
X= 1111 0000 1111 0000 1111 0000 1111 0000
Y= 1010 1010 1010 1010 1010 1010 1010 1010
那么,
A N D(X,Y) = 1010 0000 1010 0000 1010 0000 1010 0000
而
O R(X,Y) = 1111 1010 1111 1010 1111 1010 1111 1010
它们能够直接从我们并行同一位片电路来创建3 2位A L U的方式得到证明。从我们的讨论中可
以看到,操作的类型只受A L U能力的限制。
我们要分析的下一个数据通道将允许我们以下面的步骤执行存储操作:
• 从指令中获得存储器地址。
第11章计算机基础313
下载
图11-22 寄存器到寄存器操作的数据通道
寄存器文件
• 从寄存器R X发送数据到存储器。
• 然后在正确的位置存储该字。
这类操作的数据流通道表示在图11 - 2 3中。地址直接送到A L U输入A,同时R X的内容发送到存
储单元。这是一个存储字指令,以汇编语言写为
sw RX,ADDRESS #存储R X的内容在A D D R E S S处
图11-23 存储字操作的数据通道
例如,假设R 4包含十六进制字0 x 2 A F 5 2 9 B 1,我们希望把它存储在存储器位置0 x 4 3 8 5。该命
令将是
sw R4,0 x 4 3 8 5
那将导致0 x 2 A F 5 2 9 B 1被存储在正确的位置。
我们将分析的最后一个数据通道是置入字指令,它允许我们从存储器复制一个字,并把
它置于一个寄存器R X中。这个指令记为
lw RX,ADDRESS #复制A D D R E S S处存储器的内容到寄存器R X
图11 - 2 4说明了这类指令的数据通道。再次,地址通过A L U到达存储器,它指定了要读的
位置。然后数据字从存储器传送到寄存器文件,存储在指定的寄存器R X中。
既然我们了解了独立的数据流通道的特性,我们转到设计单个单元的问题,该单元能够
通过改变一组控制信号c0和c1,指定使用哪个通道,实现所有的三种可能。多路选择器
图11-24 置入字操作的数据通道
314 数字系统设计基础教程
下载
寄存器文件
局部存储器
地址
地址
输入
寄存器文件
局部存储器
地址
地址
输出
以一种直接的方式提供这种功能,引导我们构造图11 - 2 5中所示的数据通道。单元之间的互连
是固定的,但是为数据流所选择的实际通道取决于应用到多路选择器的控制信号的设置。还
要注意, A L U操作由控制位f2 f1 f0以11 . 3 . 2节中讨论过的方式选择。从而,一个完整的数据通道
由两个M U X控制位c0和c1以及A L U选择字f2 f1 f0指定。
让我们通过分析如何使用控制位改变数据通道,阐明数据通道的一般性描述。A L U的A输
入由c0的值决定,这样
若c0= 0,则A是一个地址(s w或者l w操作)。
若c0= 1,则A是一个寄存器的内容。
另一个控制位c1决定A L U的输出是发送到存储单元的地址输入,还是发送回寄存器文件。如
下可见
如果c1= 0,那么A L U输出导向存储器地址端口,
而
如果c1= 1,那么A L U输出导向寄存器文件。
第一种情况相应于一个s w或l w操作,而第二种情况表示一个寄存器到寄存器操作。
注意这点是重要的,从寄存器文件读或者写到寄存器文件的任何指令也必须提供信息,
允许特定的寄存器被选择。因为我们已经假设3 2个寄存器R 0到R 3 1,这意味着它采用5 b i t选择
一个寄存器。一个寄存器到寄存器操作如
xor R2,R 4,R19 #XOR(R 4 , R 1 9)→R 2
需要指定3×5 = 1 5个寄存器选择位,而存储器访问操作
lw R3 ,0 x 5 A 2 8
图11-25 允许寄存器到寄存器、置入字和存储字操作的数据通道
需要有5位来选择目的寄存器R 3。在我们讨论的寄存器文件中,它们是称为s4s3s2s1s0(源)、
t4t3t2t1t0(对象)和d4d3d2d1d0(目的)的位组。
指令系统中的变体
上面的例子说明了一个重要的事实,计算机的指令系统由系统的体系结构决定。计算机
只能够实现数据通道允许的那些指令。
作为物理结构和指令系统之间关系的一个例子,注意到置入字( l w)和存储字( s w)被
第11章计算机基础315
下载
寄存器文件
局部存储器
地址
地址
输入输出
多路选择器
限定到指令自身指定的地址。换句话说,如果我们想要把R 5的内容存入地址为0 x 6 A 4 5的存储
器,我们记作
sw R5,0x6A45 #复制R 5的内容进入地址为0 x 6 A 4 5的存储器
所以只允许地址的立即数值。这是一种寻址方式(addressing mode),但是其他的几种寻址方
式增强了编程能力。
我们考虑这种情况,寄存器R 3 0包含十进制数值4 5 0 0;我们把它表示为
[R30] = 4500。
假设我们宁愿使用4 5 0 0作为我们的程序中的一个引用,把字存储到存储器地址4 5 0 0、4 5 0 4、
4 5 0 8、4 5 1 2等。目前的体系结构不允许这种指令。然而,图11 - 2 6中所示修改的数据通
图11-26 允许实现更多指令的修改的数据通道
道提供了必需的数据流通道。这两种网络的快速比较表明,我们已经改变地址输入到多路选
择B,作为一个A L U输入。新的控制信号由c2表示,这样
若c2= 0,则A L U输入B为一个地址,而
若c2= 1,则A L U输入B来自一个寄存器。
为了理解它如何改变指令系统,注意,除已经讨论的指令之外,我们现在能够执行操作
sw R2 ,4(R 3 0) #复制R 2的内容进入存储器地址( [ R 3 0 ] + 4)= M [ R 3 0 + 4 ]
这里,速记符号M [ R 3 0 + 4 ]的意思是存储器的位置在R 3 0的内容加4计算出的地址处。这被许可,
是由
• 选择寄存器R 3 0作为A L U的A输入,
• 置c2= 0使数值4作为A L U的B输入,
• 指示A L U相加,产生地址([ R 3 0 ] + 4)= 4 5 0 4,且
• 发送寄存器R 2的内容到存储器输入(在该多路选择器的旁边)
这个指令由图11 - 2 7中高亮的数据通道显式地表明。
为了把寄存器R 3、R 4和R 5依次存入下一个较高地址,我们使用指令
316 数字系统设计基础教程
下载
记住,我们使用8 b i t字节的寻址约定,所以采用4 B y t e存储一个3 2 b i t字。这意味着字地址增加4。
寄存器文件
局部存储器
地址
地址
输入输出
图11-27 指令sw R2,4(R30)的数据通道
它们各自把数据置于存储器地址4 5 0 8、4 5 1 2和4 5 1 6。这个数据通道允许我们实现类似的置入
字指令,形式为
lw RX,A(RY) # M [ RY + A ]→R X
它意味着在存储器地址(RY + A)中的字被复制到寄存器R X。
从这个例子,显然,计算机的指令系统取决于
• 每一单元的特性,和
• 它们互连的方式
这已经在前面声明。指令系统对逻辑和硬件的依赖说明了在层次结构中的多个级别观察系统
的重要性。
作为另一个例子,假设我们在A L U的输出增加一个并行置入移位寄存器,如图11 - 2 8所示。
移位操作由S H R(右移)和S H L(左移)控制字指定,带有所需的由移位寄存器自身能力决
定的控制位数。增加这部分到数据通道,允许我们执行如下指令
shl R14,R 8,3 #R8的内容左移3位,把结果置于寄存器R 1 4中
或者,以一般形式
shl RD,RT,SHIFT #左移(RT) S H I T F位→R D
图11-28 增加一个移位单元来增强指令系统
第11章计算机基础317
下载
寄存器文件
局部存储器
地址
输入输出
寄存器文件
局部存储器
地址
输入
移位
地址
输出
对于右移操作,有相同的格式
shr RD,RT,SHIFT #右移(RT) S H I F T位→R D
它扩展了指令系统,包含一组移位(和循环)操作,常见于大量类型的计算法则中。在大多
数设计中,移位寄存器作为A L U自身的一部分而包含。
11.5 控制器
现在我们已经了解了数据通道是如何建立的,我们来分析二进制指令如何实际地控制数
据通道。只要来自存储器的指令到达,就被置于指令寄存器( I R)中,如图11 - 2 9 a所示。图
11 - 2 9 b是其简化的方框符号。在这一级,指令含义模糊,因为它看上去只是一行3 2个1和0。
机器码有那样的特性,使它很难理解。
图11-29 IR中的机器语言指令
把机器语言指令翻译为某种更有意义的东西的关键是,引入指令格式(instruction format)
的概念。指令格式把3 2位划分成称为字段的较小的位组。每一字段在字中的位置定义好,并
赋予特定的意义。例如,我们可以分配一部分位成为二进制字,指明一特定的寄存器。尽管
真实的计算机有好几种指令格式,对于这里描述的简单的机器,我们只需要两种。一种用于
寄存器到寄存器操作,称为R型指令格式。另一种用于s w和l w操作,称为I型指令格式,因为
它使用立即数,也就是,指令自身提供的、不必从其他来源获得的数据。
R型指令格式在图11 - 3 0 a中表示。3 2位字已经划分为六个不同的字段,给出了指定的位数。
理解该格式的关键是,每一字段有一个独立的意义和用法。它由图11 - 3 0 b所示的等效观点阐
明,那里,字段已由名称指定。
图11-30 R型指令格式
318 数字系统设计基础教程
下载
a) 独立单元
b) 显示内容的方框符号
a) 字段的定义
操作码
b) 字段名称
值得提及,尽管对于M I P S处理器,R和I型指令格式是具体的,大多数R I S C设计有着类似的(或相同的)指
令类型。
考虑一个寄存器到寄存器指令,形式为
and RD,R S,RT #AND(R S,RT)→R D
在R型指令格式中,每一寄存器由合适的字段确定。假设在寄存器文件中有3 2个寄存器R 0到
R 3 1。我们必须为每一个分配5位。它们图中表示为字段R S、RT和R D。在这个例子中,逻辑
A N D操作由两个字段确定: 6位O P C O D E(操作码的缩写)字段和6位F U N C T(功能的缩写)
字段。在大型计算机中,它们用来为A L U功能生成功能选择字f2 f1 f0,所有的多路选择器设置
(像前面的数据通道例子中的c0、c1和c2),以及系统中任何其他必需的控制信号。R型指令格
式中表示的另外一个字段是5位S H I F T字段,它能够用来指定移位和循环操作。
接下来,考虑置入字和存储字操作。因为两者都在寄存器文件和存储器之间传送数据,
所以它们能够由相同的指令格式描述。这些指令基于立即数(在指令自身中提供),由图11 -
3 1中的I型格式表示。注意左边两个字节(位1 6 - 3 1)与R型所定义的字段相同。在这种情况下,
寄存器由如下指令定义
sw RT,4 8(R S) # [ RT ]→M [ R S + 4 8 ]
和
lw RT,1 0 0(R S) # M [ R S + 1 0 0 ]→RT
这里,源寄存器R S包含基地址,而对象寄存器RT表示要传送的数据段的起源或目的。I型指
令的右边1 6位(位1 5 - 0)标注了I M M E D I AT E,用于数据或指定地址。在上面的两个指令例子
中,立即数的值分别是4 8和1 0 0。
图11-31 I型指令格式的字段
图11-32 R型和I型格式的比较
第11章计算机基础319
下载
一般指
令选择
一般指
令选择
选择源
寄存器
选择源
寄存器
选择对
象寄存
器
选择对
象寄存
器
选择目
的寄存
器
移位数R型选
择
立即数
a) R型
b) I型
现在,我们转到控制数据通道的全局问题。每一条二进制指令必须包括执行操作所需的
全部信息。这包括寄存器的指定,操作中使用的A L U功能,以及经由控制信号的数据通道选
择。把指令置于I R中,然后使用不同的字段提供必需的信息,就完成了数据通道的控制。要
理解连接,考虑R型和I型指令格式,因为它们与发送到数据通道的控制信号有关系。在图11 -
3 2 a中,指令寄存器中的每一位已与一根输出线相连接。6位O P C O D E标注了i5到i0,用来指定
指令组合。寄存器字段R S、RT和R D的每一个有5位,能够直接用来选择如图11 - 1 2中的寄存
器;类似地,S H I F T字段能够应用到移位寄存器。F U N C T字段有6位,与O P C O D E字段相结合
一起生成A L U控制位f2 f1 f0。I型格式表示在图11 - 3 2 b中。容易看出,左边1 6位以与R型格式相
同的方式定义。另一方面,右边位1 5到0用于立即数或地址。左边字段的重叠允许我们构造单
个连线图解,如图11 - 3 3所示。为了同时适应R型和I型格式,右边1 6位走线来提供能够用于每
一种指令类型的并行控制信号。
图11-33 来自指令寄存器的一般连线
确定指令格式和相关连线,我们就能获得图11 - 3 4中所示的中央处理器的完整视图。它说
明了I R如何与数据通道交互来控制操作。寄存器选择字段R S、R D和RT能够直接连接到寄存
器文件。多路选择器和A L U功能选择所需的其余控制信号使用一个逻辑网络得到,该逻辑网
络包含于标注为控制逻辑的部分之中。它接受来自O P C O D E、S H I F T和F U N C T字段的输入,
生成必需的输出。理解这个过程的关键是,注意到这些字段被编码以符合具体的指令。每一
组输入位生成一组具体的控制信号,为数据通道组件提供正确的设置。注意,控制位c3决定将
用哪一个寄存器字段指定目的。这是需要的,因为R型指令使用R D,而I型指令没有R D,而
是采用对象字段RT取代它的目的。
控制信号取决于处理器的O P C O D E映射。它是用于指令字段OPCODE 的编码;R型指令
还使用F U N C T字段。在设计计算机时,每一条指令由合适的字段中唯一的一组二进制值定义。
这称为“映射”,因为它定义了一条指令和唯一的二进制字之间的关系。控制逻辑网络围绕这
个映射设计。O P C O D E和F U N C T作为基本的输入,并决定硬件执行特定指令所需的所有控制
位的值。作为O P C O D E映射的一个例子,在M I P S处理器设计中使用的三个入口是
OPCODE = 000000 =>寄存器到寄存器操作
OPCODE = 100011 =>置入字(l w)
OPCODE = 101011 =>存储字(s w)
只要R型(寄存器到寄存器)指令在O P C O D E中指定, F U N C T字段就用来决定要执行哪一个
320 数字系统设计基础教程
下载
一般指
令选择
选择源
寄存器
选择对
象寄存
器
选择目
的寄存
器
移位数R型选
择
Immediate/address
操作。例如,M I P S系统给出
OPCODE = 000000 和FUNCT = 100000 =>ADD
OPCODE = 000000 和FUNCT = 100010 =>SUB
等等。它提供了由3 2 b i t二进制字组成的机器语言指令与处理器要执行的实际操作之间的关键
连接。
图11-34 表示数据通道和控制信号的连线图解
11.6 CISC和R I S C体系结构
现在,我们来分析一类基于系统内建指令的数量和类型的计算机。我们已经了解,每一
指令类型必须被数据通道的结构认可。指令的变化越大,内建于处理器的数据流变体就越多,
系统就越复杂。
如果我们跟踪计算机设计早期的历史演变,我们发现后继的每一代通常比前一代更加复
杂。改进的技术允许更多数量的指令类型和寻址方式,以及包含更多可能的数据流。它们发
展到现在,称为复杂指令系统计算机(C I S C机器)。编译器利用扩展的指令系统写出,在使
用汇编代码时,由于有大量可利用的指令,编程更容易。这种原则支配了计算机行业数十年。
然而,2 0世纪7 0年代的研究改变了设计和构造计算机的方法的基础。
该方法集中于设计一种只有少量指令(相比C I S C机器)的精简指令系统计算机(R I S C)。
在硬件级,该设计强调尽可能块地运行所提供的指令。R I S C体系结构的计算机的目标是,使
用相对简单的数据通道完成快速的计算。为了鉴赏R I S C原则,我们来更加详细地分析C I S C体
系结构,把它作为比较的基准。
第11章计算机基础321
下载
指令寄存器
控制逻辑
移位
寄存器文件
局部存储器
地址
输入输出
11.6.1 CISC和微编程
C I S C计算机通过使用一种嵌入控制器内部的时序逻辑网络的称为微编程的技术获得它们
的大型指令系统。事实上,它类似于有一个在主计算机内部操作的小计算机。微程序方法把
每一个基本的操作分解为微指令。它除了应该恰当地称为微代码指令,且比汇编语言更深
(更原始)一级之外,还包括我们可以松散地描述的命令,如
get [RX] #从R X读数据
input [RX] ALU #传送[ R X ]到A L U输入
事实上,汇编级的计算机指令,如置入字( l w),通过使用如图11 - 3 5所示的一系列微操作创
建。每一条指令以此种方式定义,但是它将采取不同数量的微指令来创建每一条汇编指令。
微编程允许设计者通过在微代码级组合必需的操作创建一条指令。它允许建立大型指令
系统,因为微指令提供了系统里所有的基本运动。每一微代码序列存储在微代码R O M阵列中。
当给予计算机一条指令如置入字( l w)时,微代码序列被访问。整个结果是一个控制器,它
以图11 - 3 6所示的方式操作。I R中的一条指令发送到序列发生器,决定与具体操作相应的微代
码的位置。序列发生器读出并执行第一条指令,然后第二条,等等,直到指令序列被完成。
每一条指令都经历了这一过程。
指令微代码操作
lw RY,I m m e d i a t e(R X) = > 开始
从寄存器R X得到数据
发送[ R X ]到A L U
从I R得到立即数
发送立即数到A L U
计算地址=(R X +立即数)
发送地址到存储器
从存储器得到数据
发送数据到RY
结束
图11-35 一条计算机指令包含几条微指令
图11-36 控制器中微代码的用法
对于增加计算机的指令系统,这是一个强有力而灵活的方法。增加一条新指令只需要附
322 数字系统设计基础教程
下载
微代码ROM
指令寄存器
控制器
控制逻辑
控制信号
输入数据通道输出
序列发生器
lw 指令的
代码序列
寻找
增量
加的代码写出并存储在R O M中,所以指令系统的修改不需要过多的硬件改变。它主要的障碍
是
• 内部序列发生器电路必须增加到单元。
• 每一条微指令的完成需要一段时间tm i c ro,所以计算机级指令如a d d和l w可能有不同的执行
时间。
一旦定义了机器,进行微编码就是简单的。或许,在C I S C方法中,最难以考虑的是这样的事
实,硬件随着微代码指令系统的丰富而变得越来越复杂。从历史的角度看,硬件复杂性的增
加已经被技术的改进相抵消。随着更新换代,这就产生了更强大更快捷的机器。
11.6.2 RISC机器
现在,我们来看看R I S C计算机的概念。对运行在C I S C计算机上程序的一个有趣的研究,
得到了一个规则,现在称为8 0 / 2 0规则。要了解这个规则,设想一台C I S C机器有大量的指令
可资利用。那么,根据8 0 / 2 0规则,
“8 0 %的程序只使用2 0 %的可利用的指令”
例如,如果一台计算机可能有5 0 0条指令,那么8 0 %的典型程序将只使用其中大约1 0 0条指令。
当然,这不是精确的数量。但它说明了重要的一点:大多数的程序只使用少量的指令就能够
运行。这就提出了精简指令系统计算机(R I S C)的概念。
R I S C计算机的原则可以总结为下面的语句
• 在数据通道中只包含最有用的指令,而且
• 确保数据通道快速地执行每一条指令。
这导致比较简单的硬件和结构特征,但是必须编写出编译器以产生有效的机器码。虽然这些
语句传达了重要的思想, C I S C和R I S C体系结构之间
的差别比可以想象的要大得多;这两种方法能够产
生根本不同的机器。分析它们在操作级的差别是值
得的,因为那将使得鉴赏现代计算机更加容易。
图11 - 3 7表示R I S C机器中控制器的基本结构;
细心的读者将会发现,它与我们在一般讨论中所研
究的控制器有着相同的特征。指令寄存器直接连到
控制逻辑块,控制逻辑块依次传送控制信号到数据
通道。然而,注意我们已经指出R I S C方法只认可单
通数据通道结构。这意味着数据通道中的每一个单
元(A L U、存储器和寄存器文件)在一条指令期间
只能被访问一次。限制数据通道单通,主要有三种结果:
• 数据通道能够被优化为最快的吞吐量
• 每一条指令花费一样多的时间。
• 只允许那些在数据通道单通中能够完成的指令
这些概念的真正实现导致许多对体系结构的约束。例如,要增加一条新指令,数据通道自身
必须被改变以允许所需的连接。而且,考虑到比较容易地在C P U与存储单元之间传送,指令
字和数据字选择为相同大小。
第11章计算机基础323
下载
控制器
指令寄存器
控制逻辑
控制信号
输入单通数据通道输出
图11-37 RISC设计使用简单的控制
和单通数据通道
在C I S C机器中使用的微程序方法和单通数据通道R I S C设计之间的差别,能够使用图11 - 3 8
中的框图来理解。回顾一下,每一条指令开始以
• 取指令(I F),指令从存储器进入I R中
接着
• 指令译码( I D),控制信号产生并发送到数据通道。
这些是两种设计所共有的。不同之处在于计算所执行的方式。图11 - 3 8 a表示C I S C情形,在那
里,微代码控制在A L U、存储单元和寄存器文件之间的数据流。只要指令在I D阶段被译码,
控制信号就相继提供必须的操作。例如,它允许我们执行命令
add M[AD],M [ A 1 ],M[A2] #M[A1]+M[A2]→M [ A D ]
获得两个存储位置A 1和A 2的内容,把它们相加,并把结果存储在存储器地址A D中。类似地,
稍微改变微代码产生指令
add RD,M [ A 1 ],M[A2] #M[A1]+M[A2]→R D
它把内容放置在寄存器文件中的寄存器R D之中。
图11-38 CISC与RISC体系结构中数据流比较
现在考虑图11 - 3 8 b中说明的基本R I S C单通数据通道。在该设计中, A L U从寄存器文件接
受输入,并能够把结果存储在寄存器文件或者存储器之中。因为数据通道受限于每条指令只
能够单向通过每一单元,所以它不允许上面对于C I S C设计所讨论的两者中任一操作。这是由
于两者对于A L U输入都使用存储器访问,但是R I S C数据通道只允许来自寄存器文件的输入。
这个简单的例子说明, R I S C设计在可以包含的指令类型方面有着多得多的限制。如果考虑到
更多的变体而扩展该数据通道,那么增加的复杂性可能使系统慢下来。
11.6.3 现代计算机
现代处理器设计在方式上有所进展,它通常包含尽可能多的来自R I S C原则的思想。对于
324 数字系统设计基础教程
下载
开始退出
开始退出
微操作通道
a) CISC数据流通道
b) RISC单通数据通道
以硅制造的V L S I微处理器尤其如此。某些处理器,如M I P S和Power PC®芯片,是真正的
R I S C机器,而另外一些,如P e n t i u m和AMD K6处理器,有一个R I S C核心网络嵌入较大的控
制结构之中,提供C I S C类型的操作。当微处理器系列新的一代需要与早期C I S C产品向后兼容
时,这种设计特别重要。
11.7 浮点操作
算术操作如加法和乘法经常需要我们使用小数值,它们可能包括一个很宽的数值范围。
众所周知,它们在数学中称为实数。一些普通的例子是常数
( 11 - 8 )
和数值,如
( 11 - 9 )
这些数与我们迄今已研究过的整数有着不同的特性。尽管我们能够使用在1 . 5节中讨论过的小
数换算,实际上使用的是一种称为浮点表示的更有效的方法。
浮点数以二进制表示的基本表达式为
( 11 - 1 0 )
这里,s i g n i f i c a n d提供该数的有效位,e x p o n e n t指明2的阶数,b i a s用来控制该数的范围。而且,
S是符号位,对于正数,定义S =0,对于负数,定义S =1。浮点表示的真正实现依赖于分配多
少位表示该数,因此依赖于它的精确性。我们将研究IEEE 754浮点标准(F P S),它使用3 2位
字提供单精度表示。该标准也规定了称为双精度的更精确的6 4位表示。
在进一步论述F P S的细节以前,我们来分析十进制数到二进制浮点表示的转换。假设我们
希望以二进制格式表示基于1 0的数X = 4 . 6 2 5。由41 0= 1 0 02和0 . 6 2 51 0= 0 . 1 0 12
我们能够写出
X= 1 0 0 . 1 0 12 ( 11 - 11 )
它能够通过左移小数点两位并乘以22,以科学计数法表示如下:
100.101 = 1.00 101×22 ( 11 - 1 2 )
这表明二进制浮点表示与标准的基于1 0的思想相同。
在F P S中,单精度浮点数基于3 2位字,该字划分为三个不同的字段,如图11 - 3 9所示。阶
数由8位字段表示,而有效数分配整整2 3位;符号位占S据最高位。单精度格式定义偏移值为
1 2 7。既然公认看起来有点模糊,我们使用一个例子来分析它如何工作。
图11-39 单精度浮点格式
第11章计算机基础325
下载
万一你错过了第2章中的首字母缩写词, I E E E代表电子电气工程师协会,一个专业组织。
阶数有效数
例11 - 1
考虑基于1 0的数a = 12.151 0。使用标准转换技术,它的二进制表示为
( 11 - 1 3 )
其中,我们已经注释0 . 1 51 0的二进制表示包含循环值1 0 0 1
0 . 1 51 0= 00 1001 1001 1001 ...
我们在方程中把它表示为
—1 0 0 1。通过直接比较,从而2 3位有效数为
S=1 1000 1001 1001 1001 1001 10 ( 11 - 1 4 )
为了决定阶数,我们记偏移为1 2 7,因此阶数的值为
( 11 - 1 5 )
因为a为正数,它的F P S表示为
0|1000 0010|11000 1001 1001 1001 1001 10
它能够由逆向过程来验证。
双精度浮点表示基于6 4位字,如图11 - 4 0所示。阶数增加到11位,偏移为2 5 6,有效数长
5 2位。尽管双精度F P S的大小是单精度表示的两倍,概念仍然是一样的。
图11-40 浮点数的双精度格式
11.7.1 算术操作
二进制浮点算术非常类似于基于1 0的科学计数法表示的数的使用过程。考虑两个十进制
数
要得到(X+Y)的和,我们首先移动一个(或两个)数的小数点,找到1 0的相同幂次。这称
为阶数的对齐:
然后相加得到
326 数字系统设计基础教程
下载
字1 阶数
字2
32b
有效数(高部)
有效数(低部)
要得到乘积
我们只要把阶数相加,得到
所以不需要对齐。
二进制浮点操作以同样的方式处理。为了把两个浮点数相加,我们首先对齐阶数。这意
味着我们在因子2m中找到共同值m。在完成这个之后,我们相加有效数,得到和值。乘法由相
乘有效数以及相加阶数来实现。概念上,这些操作简单明了。然而,实际上它们的细节是十
分棘手的,产生了一个复杂的逻辑网络。对于浮点加法器,许多的复杂性归因于必须执行两
个任意浮点数对齐的算法。乘法器电路由于有效数的大小和执行快速计算的需要而变得复杂。
由于这些,我们在这里将放弃细节,保持我们的讨论在较高的系统级。
11.7.2 计算机应用
通用计算机被设计用来处理整数和浮点数。因为逻辑网络截然不同,一般要提供整数和
浮点A L U。一种方法是,使用浮点单元作为协
处理器,如图11 - 4 1所示。协处理器必须与主
(整数)处理器一起使用。在描绘的基本系统
中,指令存储在通用I R中。指令译码决定了它
要发送到整数单元还是浮点处理器( F P U)。
通过对整数和浮点操作使用不同的指令码实现
它。数据总线控制器确保输入和输出发送到正
确的单元。在微处理器的早期,协处理器作为
分开的“附加”芯片出售。然而, V L S I的进步
使它已经成为处理器核心电路的集成部分。
11.8 计算机设计的V L S I
现代计算机使用高密度集成的硅技术来设计。它应用于大型系统直到在单芯片上包含整
个C P U加上L1 cache的微处理器。尽管设计复杂V L S I芯片的细节超出了本书的范围,这些概
念还是简单的,基于第7章中论述的内容。
完成如此复杂的V L S I设计的两个关键是
• 一组强大而有凝聚力的工程师,以及
• 一个好的C A D工具集和单元库。
两者都非常重要,因为现代微处理器设计不断地推进技术限制,达到它们的雄心勃勃的
目标。设计流程的起点是指明系统特性。这包括指令系统的细节、硬件与时钟考虑、以及一
些单元规范。系统的体系结构直接与指令系统相关,以至体系结构的特征需要与所有必需的
逻辑一起来设计。在V L S I中,电路设计和版图是影响系统性能的关键方面,所以设计工程师
必须完全地理解技术并表现它的特性。
我们从版图的角度来分析一个简单微处理器的建立。通过使用库,我们可以选择存储单
第11章计算机基础327
下载
图11-41 作为协处理器的浮点单元的使用
指令寄存器
控制器
整数ALU FPU
元,并使用它创建一个寄存器。那么,该寄存器可以作为实例来产生寄存器文件,如图11 - 4 2
所示。V L S I设计极大地依赖于设计一个单元,然后在芯片版图中多次使用它的能力,这样就
节省了许多时间和精力。
接下来,考虑A L U。它可以使用本章中早些时候讨论过的位片的方法来设计。单个位片
可以构造得如图11 - 4 3所示,那里,库中的单元已经实例为加法/减法和基本逻辑操作。对于一
给定的位片,输入an和bn与每一单元相连,并产生一个特定的输出结果。使用一个M U X作为
垂直堆栈的最终单元,允许我们选择所需的功能结果rn。然后,把位片作为基本单元,并按需
多次实例化,得到完全的A L U。这就产生了图11 - 4 4中说明的大型单元。
单元库和实例用来创建微处理器芯片所有其他的部分。在芯片规范的布图规划期间,每一单
元由预估的高度和宽度特性化。只要单元被完成,它们拼在一起并连线,就得到图11 - 4 5中所描绘
的最终的版图。它表明了“输入/输出焊盘”的用途,那是矩形的金属区域,能够与封装管脚相连。
图11-44 由位片单元实例形成的ALU
328 数字系统设计基础教程
下载
库存储单元
实例化32次
实例化32次
寄存器文件
图11-42 使用单元库创建寄存器文件
32b寄存器
图11-43 ALU位片的创建
输入
结果
库中独立
逻辑单元
输入
结果
这个概述提供了V L S I微处理器设计领域像个什么样子的一瞥。在真实世界里,然而,具
有艺术级特征的芯片工程能够花费一组有2 0 0多位工程师的队伍2年或者3年(或者更多!)的
时间完成加工阶段。如此挑战是使该领域在工程学生之中十分有趣味和流行的方面之一。
图11-45 微处理器芯片例子的最终版图
11.9 问题
1. 在个人计算机上除监视器和磁盘驱动器之外,你能够举例说出两个普通的输出设备
吗?
2. 讨论只使用数据传送和二进制操作的两个基本的计算机操作,如何能够生成一个基本
的字处理程序。
3. 下面列出了几种大小的寄存器文件。对于每一种情形,确定用来选择一个具体寄存器
的各选择字的字长。
(a) 16个1 6位寄存器
(b) 16个3 2 b i t寄存器
(c) 8个3 2 b i t寄存器
4. 考虑一个由8个8 b i t寄存器组成的寄存器文件。使用图11 - 1 3所示相同的细节,画出该寄
存器文件的框图。确信在你的图中指明了各选择字、M U X大小等等。
5. 考虑图11 - 1 9所示简单的A L U。假设对于一个特定的位片,输入S确定、an=1和bn= 1。为
下列每一个功能选择字找出输出结果rn。
(a) f2 f1 f0= 010
(b) f2 f1 f0= 101
(c) f2 f1 f0= 11 0
第11章计算机基础329
下载
I/O焊盘
算术逻辑单元
局部存储器
寄存器文件
控制
(d) f2 f1 f0= 011
6. 考虑图11 - 1 9所示简单的A L U。假设对于一个特定的位片,输入S确定、an= 1和bn= 1。为
下列每一个功能选择字找出输出结果rn。
(a) f2 f1 f0= 111
(b) f2 f1 f0= 0 0 0
(c) f2 f1 f0= 1 0 0
(d) f2 f1 f0= 0 0 1
7. 假设我们想要构造一个基本的2输入A L U网络,它仅仅提供四种操作: A D D、N O T、
A N D、O R。操作规范使用2位字f1 f0实现。
(a) 把图11 - 1 9中的画法作为参考,设计该A L U的位片的逻辑。
(b) 在完成该设计之后,你决定想要在A L U中提供S U B操作; S U B将由另一个控制位fs
来选择。对于这个修改,使用( a)部分的电路,并提供附加的电路。
8. 使用一个8寄存器的寄存器文件,为4位宽、允许寄存器到寄存器操作的数据通道构造
一个框图。确信指定了该寄存器各选择字的大小。
9. 使用一个1 6寄存器的寄存器文件,为1 6位宽、允许寄存器到寄存器操作的数据通道构
造一个框图。确信指定了该寄存器各选择字的大小。
10. 设X = 1001和Y = 1011。计算下列操作的结果。
( a )
(b)
(c)
(d)
11. 我们定义两个8位字,它们基1 0的值为A= 1 5 61 0和B =7 31 0。在执行下面的二进制操作之
后,得到它们基1 0的结果
(a)
(b)
(c)
(d) A B
(e)
12. 考虑图P 11 - 1中的基本数据通道。寄存器的初始内容以基1 0的等价值表示。假设把它
们作为下面每一部分的起点。
(a) 在如下操作之后计算R 2的内容
add R2,R 4,R 5
(b) 在完成下列指令序列之后,得到R 6的内容
add R5,R 6,R 1
add R6,R 2,R 7
(c) 在如下操作之后,得到R 4的内容。以二进制和基1 0的形式给出你的答案
add R4,R 2,R 6
13. 考虑图P 11 - 1中的基本数据通道。寄存器中显示的值表示下列指令序列运行时的初始
内容。在完成该序列之后,列出寄存器文件的内容。以基1 0的数值给出你的结果。
330 数字系统设计基础教程
下载
sub R1,R 3,R 6
add R2,R 6,R 7
or R3,R 5,R 6
add R4,R 3,R 1
图P11-1
14. 考虑图P 11 - 1中的基本数据通道。在已经执行下列指令序列之后, R 4、R 5的内容是什
么?以二进制和十进制数值给出你的答案。
add R3,R 4,R 6
shl R4,R 3,3
shr R5,R 3,3
15. 考虑图P 11 - 1中具有A L U的数据通道,该A L U由图11 - 1 9中描绘的位片指定。对于下面
的每一条指令,列出A L U功能选择字f2 f1 f0,以及寄存器选择字d2d1d0、s2s1s0、t2t1t0的二进制数
值。
(a) and R3,R 5,R 7
(b) sub R6,R 1,R 4
(c) xnor R4,R 2,R 0
16. 考虑下列指令。在图11 - 2 6所示的R I S C数据通道中,哪一条不能够实现?对于每一种
情形,提供实现相同结果的R I S C指令序列
add R3,R 2 8,R 3 2
sw R2,4(R 2 7)
add R4,M [ R 6 ],0 x 3 4
lw R17,M [ R 2 1 ]
17. 列出两个你认为最重要的C I S C体系结构的特性。然后对R I S C体系结构亦如此。最终,讨
论组合所有四个特征进入单个计算机设计的可能性。你认为它将产生一个更好的体系结构吗?
18. 把十进制数2 3 . 6 2 5转换为二进制浮点数。
19. 把1 6 . 8 7 5转换为二进制浮点数。
20. 一个二进制数的浮点表示为
1 . 0 0 1 0 11×2 3
求出它的基1 0(十进制)的等效值。
21. 使用IEEE FPS求出单精度浮点数
0 | 1000 0011 | 10000 1001 1001 1001 10
第11章计算机基础331
下载
寄存器文件
的十进制等效值。
22. 假设我们有一个3 2位整数C P U,它与一个双精度F P U接口。为什么对两部分使用分离
的寄存器文件是有意义的?
23. 由于计算机体系结构越来越强大,需要附加的电路适应新的特征。在集成电路和V L S I
方面,那可能导致非常大的芯片。讨论该收益问题(第7章)以及如何通过改进硅工艺克服
它。
24. 假设我们有这样的工艺, 1位CMOS VLSI存储器单元所占的硅面积为
1 . 8mm×1 . 2mm
(a) 估计3 2位寄存器的大小。
(b) 估计由3 2×3 2 b i t寄存器组成的寄存器文件的面积。
(c) 假设每个电路尺寸由因子a= 1 . 9扩展,如第7章所定义。求出产生的3 2×3 b i t寄存器文
件的大小。
25. 使用World Wide We b从不同的公司查阅可获得的有关具体计算机芯片的信息。对于
U R L,不是运行一个查找,就是试试h t t p : / / w w w. c o m p a n y _ n a m e . c o m,这里c o m p a n y _ n a m e表
示制造厂家的名字(例如, company_name = intel将使你进入I n t e l公司的主页)。
332 数字系统设计基础教程
下载
第11章计算机基础
计算机是人们最熟悉的数字网络的范例之一。计算机体系结构的研究涉及组成计算机的
基本的数字部分如何互连以形成系统特性。本章,我们将分析用来构造计算机的组件,以及
它们如何联合运作来提供基本的功能。
11.1 计算机操作概述
为了理解组成计算机的基本单元,我们考虑一台典型的台式个人计算机工作时所使用的
操作。
给计算机加电,启动一个称为操作系统的程序;普通的样例是U n i x 和M i c r o s o f t
Wi n d o w s R的变体。操作系统提供命令,即从用户的视角所需的系统功能。它包含许多例程,
用来连续不断地扫描键盘和鼠标以检测输入,在磁盘驱动器上检索和存储数据,为了在监视
器上显示而发送数据到视频存储器,以及启动应用程序如字处理器和逻辑C A D工具集等等。
应用程序的启动,首先需要从磁盘驱动器(或其他来源)把应用程序载入主系统存储器,
然后指定第一条指令的存储器地址。操作系统找到第一条命令,检索并执行它,然后依次到
第二条命令,等等。一旦该操作完毕,程序接管序列,应用就运行起来。程序自身由一组有
序的命令组成,它们告诉计算机把数据传送到系统里的各处(如在一个数据库程序之中),或
者执行一些操作如加法。
这个简单的概述足以说明构造计算机的主要的逻辑部件。首先,我们必须有某种存储设
备来保存程序和数据。我们将看到,计算机通常以两种形式提供存储设备,即大容量的系统
存储器和少数的一组快速寄存器。第二,我们必须有一个能够执行基本的二进制操作的逻辑
部件,如算术和逻辑功能所需的那些部件。最后,我们必须有一个逻辑网络,它能够接收一
条命令并把它翻译到控制系统操作的二进制信号集中。
11.1.1 计算机的主要组件
典型的计算机能够划分为五个主要的部分,每一部分执行一组具体的任务。图11 - 1中的
框图从一般的视角说明了计算机的主要部分。对于外界的用户,在我们的世界和二进制环境
之间的接口是通过一组电路,它允许我们输入信息与检索结果。这些行为由两种主要的电路
来管理。
1. 输入网络这些电路允许设备如键盘、鼠标、磁盘驱动器、CD ROM或者扫描仪给计算
机提供输入数据。
2. 输出网络因为信息以二进制处理,要在平常的世界里应用,它必须被编码。输出设
备的例子是监视器和写模式磁盘驱动器。
一些设备同时具有输入和输出功能。例如,调制解调器允许用户发送和接收数据。
尽管输入/输出( I / O)电路是计算机的集成部分,对于初学者,内部电路更令人感兴趣,
因为正是在这儿,进行着机器的内部工作。内部电路包括三个主要的部分。
下载
图11-1 计算机的主要组件
3. 存储器存储器为程序、数据和其他必需的项目如操作系统提供存储功能。
4. 数据通道如其名称暗示,数据通道表示事件处理期间数据流动的通道。我们将看到,
数据通道的结构决定了计算机能够执行的操作。这包括事项,如代数运算(加法、乘法等)
和数据到存储器之间的来回传送。
5. 控制数据通道被设计来提供许多不同的操作。关于数据怎样被处理,每一个操作有
它自身的需求。例如,加法使用一个加法器来实现,从而输入字必须被指引到该加法器电路。
控制器负责确保把数据发送到正确的电路。
数据通道和控制器通常组合在一起,形成中央处理器(C P U)。图11 - 1中,我们已经在中
央处理器中包括了一个标注为局部存储器的方框。局部存储器,称为高速缓冲存储器(c a c h e),
允许中央处理器执行功能,而不必要总是从主存储器中检索数据。
11.1.2 计算机能做什么
尽管计算机能够解决非常复杂的任务,但其内部操作模式非常有限。一般地,计算机仅
仅提供两种基本类型的操作:
• 数据传送
和
• 执行二进制操作。
数据传送恰如其听起来一样:在系统里把数据从一点传送到另一点。这除了包括在C P U
内的数据通道中传送数据到各处之外,还包括在存储单元中存储和检索信息。
计算机内置的二进制操作集通常组合为主要的两组。第一组是逻辑功能,如N O T和
X N O R等,允许我们对经过数据通道的二进制字执行布尔操作。当使用正确时,这就赋予机
器判决能力。第二组操作是算术功能。这些包括加法和减法,在较高级的设计还包括乘法和
除法。
计算机能够执行的每一个操作称为一条指令。指令的聚合称为指令系统。指令的数量和
类型由数据通道的电路结构决定。例如,除非数据通道之中有加法器,否则计算机不能执行
加法。每一计算机根据指令系统的具体细节区别于其他所有计算机。
298 数字系统设计基础教程
系统存储器
局部存储器控制
数据通道输出电路
中央处理器
用户
输入电路
11.1.3 冯·诺依曼模型
直到最近,大多数的计算机都是基于约翰·冯·诺依曼开发的模型,该模型描述了一个
程序中的每一条指令线的有序执行。图11 - 2为理解冯·诺依曼机器的主要特征提供了一个简
单的可视化辅助。
图11-2 可编程计算机的冯·诺依曼模型
该框图描绘了两个主要的部分。存储单元用于存储程序和数据。一般地,这两类信息保
存在存储单元的不同部分,如图中所隐含。程序由一系列指令组成,它们标注为
指令0,指令1,指令2,. . .
等等。程序是有序的,因为指令号表明了执行的一般次序。确定下一条指令是控制器的责
任。术语“数据”用来指示正被处理的信息。例如,“数据”可能包括如名称和地址等条
目。
中央处理器( C P U)是冯·诺依曼模型的另一个主要部分。它由数据通道和控制器组
成。数据通道方框代表实现每一条指令所必需的逻辑电路,如加法或者逻辑操作。因为数
据通道网络有能力提供几种不同的操作,所以我们必须发送信号,指定要使用哪些电路。
这是控制器的责任;它发送信号到数据通道单元,激活正确的电路。在控制器中,有一个
单独的存储区域,用来容纳当前的指令字;它在图中显示为一个小的矩形,称为指令寄存
器(I R)。
计算机的冯·诺依曼模型基于一个重复的四周期过程来执行程序。这些周期被命名和描
述如下。
1. 取指令(Instruction Fetch) 在第一个周期期间,中央处理器发送一个信号到存储单
元,告诉它需要哪一条指令。存储器响应,发送该指令到C P U,保存在控制器中。
2. 指令译码(Instruction Decode) 译码就是翻译二进制指令并确定为了实现这个操作在
C P U中必须做些什么的过程。这个信息从控制器发送到数据通道。
3. 指令执行(Instruction Execute) 在数据通道从控制器接收到信息之后,指令可以被
执行。数据通道接收必需的输入数据,不是从存储器,就是从自身之中的局部存储器,并输
出结果。
第11章计算机基础299
下载
控制器
指令
取指令
存储器
程序
指令0
指令1
指令2
指令3
指令4
指令5
指令
发送数据
接收数据
数据
数据0
数据1
数据2
数据通道
中央处理器
输入输出
4. 存储(S t o r a g e) 周期的最后一步是把结果回存到存储器中。
程序中的每一条指令使用相同顺序的过程来处置。
关于计算机的描述,观察到的重要一点是,只要程序在运行,系统就重复相同的四个周
期。指令之间主要的差别通过改变数据通道网络执行的功能来操纵。以后我们将看到,数据
通道电路使用多路选择器和其他开关元件,“导引”数据经过大量的逻辑的级联组合,提供不
同的操作。
分析这种模型的计算机的速度也是有用的。如果计算机的功能以硬件实现,那么完成一
条指令将需要的总的时间是
tI n s t=tI F+tI D+tE X+tS ( 11 - 1 )
在这个方程中,
tI F= 执行取指操作所需要的时间,
tI D= 执行指令译码所需要的时间,
tE X= 在数据通道中的执行时间,和
ts= 存储结果所需要的时间。
显然, tI n s t值小意味着计算机较快,因为在一秒钟之内能够完成更多的指令。在冯·诺依曼模
型里,计算机的速度通过减少执行每一条指令所需要的时间来提高。因为定时通常由一个外
部应用的时钟信号ø(t)控制,那么时钟频率f 越高,计算机运行得就越快。
理解计算机固有的计算能力的关键在于把上面的序列和指令系统的概念结合起来。每一
条指令不是从一点到另一点传送数据,就是接收一个二进制输入,执行一个逻辑或算术操作,
并返回一个结果。单个操作并不能独立完成多少事情。然而,如果指令时间tI n s t很小,那么计
算机在一个很短的时间内能够执行许多条指令。举个例子,即使一个“慢” C P U,指令时间
tI n s t小于0 . 1ms ,意味着该计算机每秒钟能够执行大约一千万条指令(众所周知的1 0 M I P S)。
从而,尽管单个操作有限,正是计算机执行成千上万条指令的能力赋予计算机强大的计算能
力。
11.1.4 编程
我们都熟悉计算机使用一门高级语言如P a s c a l或者C编程的概念。一个程序是一个有序的
命令列表,告诉操作序列完成具体的任务。程序中的每一行(或行组)使用启动某些行为的
特殊的字符构造。命令构造的具体方式称为语法;这包括具体命令字符的次序和用法,以及
必须附带的其他方面,如分隔符(句号、逗号、分号等)的使用。每一门高级语言都以这种
方式定义。
因为数字系统是基于二进制数值系统的,计算机仅能处理由0和1组成的二进制字。这称
为机器语言级,人要使用是非常麻烦的。计算机的二进制逻辑电路被设计来接受指定的二进
制格式的命令,促使需求的动作发生。计算机的字长n是指用于数据段的位的个数。在许多系
统里,各指令使用相同的字长。尽管n可以是2的任意次幂,大多数的现代系统使用1 6位的偶
数倍字长。例如,目前的台式计算机采用3 2或者6 4位字长。
300 数字系统设计基础教程
下载
一微秒由1ms=10-6s定义。
现在,我们转向这样一个概念,我们怎样对一个由逻辑网络构建的数字计算机编程。
以高级语言编写的程序必须使用一个称为编译器的特殊程序翻译到机器语言。这个过程示
意性地在图11 - 3中说明。编译器接受以高级语言编写的程序,产生计算机能够理解的机器
语言指令序列。读和解释机器语言是十分困难的,所以我们还引入了另一类语言,称为汇
编语言,帮助我们理解计算机内部的操作。汇编程序命令与每一个二进制机器语言命令是
一一对应的,但是它们使用助记符,如“ a d d”和“ s u b”,使它们更易于解释。我们将趋于
使用汇编语言来说明计算机指令。尽管起初它可能看起来有点奇怪,但它易于学习,因为
助记符会是一个易于记忆的好选择。更重要的是,汇编语言允许我们了解计算机如何操作
的细节。
图11-3 编程语言的层次
11.1.5 计算机寄存器
寄存器就是组合在一起存储整个字的一组独立的存储单元。在计算机中,寄存器以几种
不同的方式使用,但所有的寄存器有着相同的基本功能:它们能够用来存储一个二进制字。
尽管我们在第9章中已经分析了寄存器,在这里,我们将移到一个更加精确的视角,帮助我们
理解它。
当讨论计算机中的数据流时,我们将使用简化的符号表示寄存器。它们如图11 - 4所示。
图11 - 4 a表示能够存储一位的单个存储单元;注意它的内部电路的细节被忽略了,因为在层次
的这一级,只有存储特性是重要的。为了建立一个3 2位寄存器,我们简单地组合3 2个独立的
单元,如图11 - 4 b所示,标记各位为d3 1到d0。尽管它提供了所有必需的信息,由于有3 2根输入
线和3 2根输出线,画起来是麻烦的。这导致我们使用比较简单的草图11 - 4 c,对于我们的讨论,
它是优选的符号。输入和输出线已经被表示3 2根独立位线的单根数据总线所取代。总线的宽
度由贯穿总线的“斜线”(/)和总线携带的位数( 3 2)表示。这个简化符号对于我们的草图
是足够的,只要我们记住它表示一个存储3 2 b i t字的数字元件。有时,显式地表示寄存器的内
容(内部存储的字)将是有用的,如图11 - 4 d所示。
第11章计算机基础301
下载
f=x+y
g=w-z
if(f==g)then
result=2*x
else
result=6*w
add R3, R2, R5
sub R7, R18, R7
beq R3, R7,
0x60a5
...
汇编语言
编译器
高级
语言
程序
计算
机的
机器
语言
图11-4 用于表示寄存器的原理图符号
11.2 中央处理器:初识
计算机的心脏是中央处理器。这组电路决定了计算机能够提供的操作,通常指示出整个
系统的性能。可以预见,详细地研究C P U是相当复杂的;如果整个C P U作为单个器件来分析,
尤其如此。然而,可以使用层次设计的概念把C P U分解为几个截然不同的部分,每一部分能
够相对于其他部分独立地研究。
我们将分析一个“典型”的现代计算机系统的基本操作。尽管这个讨论十分平常,我们
的研究将使用相当具体的引用,包含某些细节。这些被选取,是为了给那些打算在将来更加
详细地研究计算机的人提供一个可靠的背景。
11.2.1 取指令网络
为了执行存储在存储器中的程序,我们必须把指令送入处理器。这个使用取指令网络完
成,取指令网络是控制器内部的一个子系统。
程序是二进制字的有序列表,每一个字提供逻辑网络执行一个具体操作所必需的信息。
当程序存储在存储器中时,每一个二进制字对应它在程序中的位置,被分配给一个独一无二
的地址。图11 - 5中提供的例子说明了这一点。指令序列由数字给定, Inst 0是第一个, Inst 1是
下一个,等等。每一条指令由一个二进制字代表。我们在草图中已经使用了3 2位字,但实际
的大小依赖于计算机。
通常以一种方式划分存储器,允许我们指定每一个8位字节的地址。一个3 2位字由四个字
节组成,所以相邻两条指令的地址相差4。我们来分析,数据是如何通过引用图中的数值而被
存储的。Inst 0位于十进制地址0 4 0 0,有二进制数值
0 11 0 1100 11111010 11110000 1111 0 0 0 0
下一条指令是Inst 1,它位于十进制地址0 4 0 4,有二进制数值
11000101 10110101 00001111 1111 0 0 0 0
等等。
302 数字系统设计基础教程
下载
a) 单个位单元
输入
输出
b) 32 位寄存器
c) 简化符号
d) 显示的内容
这里选择的体系结构,如以后所解释的,是称为R I S C设计的一个例子。
图11-5 存储器中存储的程序序列
一个基本的取指令逻辑网络由图11 - 6中的框图描述。取指令网络的主要部分包括两个寄
存器。指令寄存器(I R)包含程序指定的当前操作例如一个加法的二进制指令字。程序计数
器(P C)用于指令执行时,通过计数指令来维持程序流。它包含计算机将要检索和执行的下
一条指令的存储器地址。
图11-6 取指令(IF)网络的操作
取指令网络的操作由程序序列存储在存储单元之中的事实规定。程序计数器是一个寄存器,
存储从存储器取回的当前指令的地址。它供应给存储器,相关的数据字就被传送到指令寄存器。
例如,如果我们希望从存储器中获得Inst 0,那么我们以0 4 0 0的二进制等效值预置P C;这导致
了所需的至I R的传送。为了获得下一条指令( Inst 1),提供一个加法器单元,按照
P C=P C+X
递增P C的内容,这里X= 4是得到下一条指令所需的间隔。在当前的例子中,这意味着
P C= 0 4 0 0 + 4
致使Inst 1传送到I R。一旦处于I R中,指令就被计算机中其他的电路译码,使指令得以执行。
当该过程结束,指令作用完毕,下一条指令从存储器中取出,传送到I R。这个过程允许我们
有序地执行程序行。
11.2.2 数据通道的概念
既然我们已经了解指令怎样从存储器中取出并保存在指令寄存器里,让我们扩大对图11 - 7
所示的中央处理器的视角。这个框图描绘了C P U的主要组成部分,但是在各部分之间仅仅包
第11章计算机基础303
下载
地址次序
指令0
指令1
指令2
指令3
指令4
指令5
指令6
指令7
指令8
二进制指令
程序计数器(PC)
指令寄存器(IR)
增量
地址
存储器
数据输出
含了少量的实际接线。细节的缺乏是故意的,因为在我们分析赋予计算机编程特性的体系结
构的特征之后,互连方案最好理解。
图11-7 中央处理器由数据通道和控制器组成
指令寄存器显示在控制器的中心。一旦一条指令被置入I R中,该指令字的各位作为输入
进入图中所示的控制逻辑网络。控制逻辑网络由逻辑门组成,它们提供已知的输出,共同作
为控制信号,通过控制线供应给数据通道。控制信号用来告诉逻辑电路正确地设置数字元件,
如多路选择器。在某些情况下,控制逻辑单元的输出将包含来自于指令自身的数据位。
现在考虑标注为数据通道的部分。数据通道电路给可由计算机执行的每一条指令提供必
需的逻辑。数据流由包含于数据通道块内部的大箭头表示,指示数据字可以采用的通道。多
路选择器和多路分配器由简单的交叉点表示;它们的含义在图11 - 8中阐明。数据流的选择规
定了一大类基本的计算机指令,包括系统内一般的数据转移。通常,数据通道网络能被分解
为主要的三组电路:寄存器文件(register file)、算术逻辑单元(A L U)和局部存储器(l o c a l
m e m o r y)块。
a) MUX等效b) DeMUX等效
图11-8 简化的MUX和DeMUX符号
寄存器文件是一组通用存储的寄存器,用来存储当前计算链中要使用的数据字。开关网
络允许我们为数据存储选择输入寄存器,也允许我们选择读操作时使用的输出寄存器。框图
中描绘的寄存器文件允许从两个不同的寄存器同时输出,然后供应给下一逻辑块的输入A和B。
304 数字系统设计基础教程
下载
控制器
指令寄存器
控制逻辑
控制线
选择ALU
功能
局部存储器
寄存器文件
数据通道
算术逻辑单元( A L U)是提供所有算术操作(如加法和减法)和逻辑功能(如N O T和O R)
的一组电路。A L U独特的方面在于,它是依赖应用于它的控制信号而能够提供几种不同的操
作的单个电路。在图中,这些信号来源于控制逻辑部分,标注了“选择A L U功能”。
图中所示的余下部分标注为局部存储器。这是一小部分存储器,称为高速缓冲存储器
(c a c h e)。它包含于C P U之中,提供快速的读写操作,那将不会减慢计算机的操作。尽管显示
它与C P U相隔离,事实上,它既与C P U组件通讯,又与主系统存储器通讯。
11.2.3 数据通道操作
现在,我们来分析数据通道,以了解数据如何能够实际地在单元之间移动。如图所示,
基本的C P U允许执行三种主要的操作。它们根据数据原始的和最终的目的组合一起。
寄存器到寄存器操作
这类操作从寄存器文件中接受数据字,把它们用作ALU 的输入。然后,把结果存回到寄
存器文件中。
寄存器到寄存器操作的等效数据通道表示在图11 - 9中。在这个例子里,数据字x和y从寄存
器文件复制,分别作为A L U的输入A和B。A L U然后产生一个结果R(A,B)=z,它被导回到寄
存器文件并存储在那里。因为这类操作允许数据流过A L U,所以它被用来执行C P U中所有的
算术和逻辑操作。例如,指令
( 11 - 2 )
图11-9 寄存器到寄存器操作的数据通道,这里数据来源于寄存器,结果被存回到寄存器
都能够使用这类数据通道操作来实现。然而注意,在一条指令能被执行之前,数据必须首先
在寄存器之中。这使得强制地提供操作,允许数据在寄存器和存储器之间传送。
置入(L o a d)
当一个程序启动时,数据通常只置入计算机的存储器中。为了在我们的系统中实现寄存
器到寄存器操作,数据必须在A L U能够访问它之前从存储器转移到寄存器文件中。这种操作
称为置入,置入字(load word)指令助记符号为l w。图11 - 1 0表示数据通道网络实现置入操作
的部分。因为我们希望从存储器中接受一个字,所以我们必须指定该字所处的地址。这由从
第11章计算机基础305
下载
寄存器文件
局部
寄存器
指令寄存器和控制器中接收的A L U输入A实现;A的实际值是程序的一部分。只要该地址送给
存储单元,数据d就从指定位置传送到一个寄存器。
图11-10 置入字指令允许我们从存储器转移数据字到特定的寄存器
存储(S t o r e)
存储操作给出存储字(s w)指令,是置入的对立面。它允许我们从一个寄存器转移一个
数据字,写到存储阵列。图11 - 11中的数据流通道表明了这种操作的重要方面。地址A经过
A L U,指明该字要存放的位置。然后从寄存器文件中接收数据x,并置于存储器中。
图11-11 存储字指令允许我们从寄存器转移数据并把它存储在存储器中
尽管此刻,我们对计算机的考察高度地被简化,这三类操作说明了用来构造现代计算机指令
系统的最重要的数据流通道。
11.3 数据通道组件
既然我们已经了解了计算机中基本的数据流通道的特性,我们来更加详细地研究数据通
道组件。每个主要单元在这一节中分析;我们的目标是获得每一组件的系统级操作的更全面
的描述。在我们已经完成了详细研究之后,我们将讨论逻辑单元的连接如何构造计算机的指
令系统。
11.3.1 寄存器文件
计算机的中央处理器提供一种存储数据字的途径,它能够容易地把数据字用作A L U的输
306 数字系统设计基础教程
下载
寄存器文件
局部
存储器
数据
d = 数据
地址
地址
寄存器文件
局部
存储器
A=地址
地址
x = 数据
入。这些存储位置由几个寄存器组成,它们以一种便利的方式接入数据通道。总体上,这组
寄存器被称为寄存器文件。它可以看作是一个归档的小柜子的电子模拟,在那里,每个寄存
器就象一个抽屉,能够容纳独立于所有其他抽屉里所包含的条目。
寄存器文件的一个样例表示在图11 - 1 2中。它由标注为R 0到R 3 1的3 2个寄存器组成;每个
寄存器为3 2位宽。寄存器文件有单根3 2 b i t输入总线,允许用户每次把一个字存入文档中的一
个寄存器。输入字被写入由5 b i t目的选择字
d4d3d2d1d0
指定的寄存器中。来自寄存器文件的、由A和B表示的两个3 2 b i t输出显示在右边。传送到这些
线的数据字依赖于源选择字
s4s3s2s1s0
(对于选择A)和对象选择字
t4t3t2t1t0
(对于选择B)。只要选择字被指定,所选择的寄存器的内容就被传送到正确的输出。这是一个
非破坏性的操作,因为在读操作之后,寄存器的内容仍然完整无缺。
图11-12 寄存器文件的结构
框图提供了寄存器文件的系统级描述,但是它没有说明该单元是如何由较小的积木所构
造的。尽管对于理解该单元在计算机中如何作用,内部工作的知识是不必要的,研究寄存器
文件如何应用比较简单的组件来创建还是值得的。在层次结构中,我们降低一级,使用图11 -
1 3中的图示描述输入和输出选择操作。在这一级,寄存器仍然视作带3 2 b i t输入和输出线的单
个的3 2 b i t结构。寄存器输出A和B的选择,使用两个独立的带3 2 b i t输入的3 2∶1多路选择器来
实现。两个M U X单元有着相同的输入。这意味着,例如,寄存器R 0的输出连接到两个M U X
单元中的0输入,寄存器R 1的输出连接到两个M U X的1输入等等。输出寄存器由5位M U X控制
字s4s3s2s1s0和t4t3t2t1t0选择。例如,如果
和
那么A为寄存器R2的内容,而B等于寄存器R2 8的内容。再一次注意,图中A和B都是3 2位字。
输入(目的)寄存器由字d4d3d2d1d0决定,它控制寄存器文件输入一侧的1∶3 2多路分配器
单元。对于输出一侧, d4d3d2d1d0的值决定数据发送到哪一个寄存器。例如,值
d4d3d2d1d0= 0 0 0 0 1
第11章计算机基础307
下载
目的源对象
(源)
(对象)
32位输出
32位输入
32位输出
存储输入字在寄存器R 1中,
d4d3d2d1d0= 0 0 0 1 0
发送输入字到R2等等,允许我们规定所需的目的。
图11-13 寄存器文件结构的单元级视图
因为逻辑电路创建于单个位级,在系统层次结构中进一步降低一级,达到图11 - 1 4中简化
308 数字系统设计基础教程
下载
1∶3 2
多路分
配器
来自ALU
1∶3 2
多路分
配器
来自ALU
图11-14 寄存器文件的位级逻辑图解
的电路,是有用的。该图说明了上图中相同的系统,但是只描绘每个寄存器的第0位b0。对于
其他的每一位b1到b3 1,行为是相同的,所以显示单个位是足够的。注意,时钟信号ø已经显式
地包含在这里,但在较高层次的视图中被隐含。
这个视图说明了层次结构中基本的元件级视图。为了真实地建立完整的寄存器文件,我
们将采取3 2个相同的电路,形成系统级结构。相反,如果我们想要以硬件实现它,我们必须
降低层次结构。下一步将是使用逻辑门构造元件,然后,我们将转到晶体管级。最后一步是
硅芯片的物理设计。
11.3.2 算术逻辑单元
算术逻辑单元( A L U)是计算机的一部分,它提供所需的算术功能,如A D D和S U B,和
全部逻辑操作,如N O T、N A N D和X O R。尽
管具体功能随处理器而变化,大多数现有的
计算机拥有大量的公共操作。
一个A L U的符号表示在图11 - 1 5中。这个
单元有两个数据输入A和B,以及一个作为操
作结果的输出R。尽管这个讨论十分普通,我
们将假设A、B和R都是3 2 b i t宽,使体系结构
更加逼真。
在系统级,A L U的操作由功能选择字F控
制;F中的位数fi取决于单元内置的操作的数
量。A L U被设计来提供依赖于F值的不同的结
果。这能够用方程形式表示,记作
( 11 - 3 )
这里,A和B为输入,而F作为一个控制选择字。这解释如下。F能够假设为不同的值F0、F1、
F2等等;每一个F值指定一种不同的操作,从而指定一种不同的结果Ra。这能够陈述为
( 11 - 4 )
它说明了重要的一点, A L U能够提供不同的功能Ra、Rb、Rc等等。
A L U的基本构造由将要内置于处理器的操作决定。为了理解该单元的构造,让我们假设F
是一个3位字
( 11 - 5 )
它有八个可能的值。在这种情况下,最多有八个不同的结果Ra到Rh(这里下标包括字母表的前
8个字母)。因为每次只能选择一个结果,我们可以记R为
( 11 - 6 )
第11章计算机基础309
下载
输入
(功能选择)
结果(输出)
输入
图11-15 算术逻辑单元(ALU)的符号
它依赖于f2 f1 f0的值来选择输入。思索片刻将证实,这就是8∶1M U X的方程,带有输入Ra到Rh,
带有由f2 f1 f0的值实现的选择。相应于该方程的多路
选择器表示在图11 - 1 6中。为了构造这个A L U,我们
必须提供用作M U X输入的多样的结果Ra、⋯Rh、。
在作进一步处理之前,我们来分析这个A L U
的并行结构。每一根数据线A、B和R都是3 2位宽。
单独的位表示为
( 11 - 7 )
允许我们可视化整个A L U,如图11 - 1 7 a所示。因
为逻辑电路仅能处理单个位,所以A L U由3 2个相
同网络的并行组合构造。如果我们分析第n位,这里n是在范围0到3 1内的任意一位,那么我们
得到图11 - 1 7 b所示的位片。这是一个典型的电路,是通过把3 2位结构“切分”为单独位,然
后选择一片进行研究来获得的。这个概念的作用很容易理解。只要我们已经展现了第n位电路
的特性,仅仅通过并行3 2个该电路,我们就能够构造3 2位A L U。介绍并行网络全部的复杂性
是不必要的。
a) 32位ALU b) 位片
图11-17 ALU位片的概念
现在,我们转回到构造A L U的问题。图11 - 1 8表示了位片电路,它隐含了我们已经讨论过
的特性。在这一级,输入由an和bn表示。它们用来通过一个功能网络产生不同的结果ra、rb⋯,
这些结果被供应给一个多路选择器。功能选择字f2 f1 f0决定哪一个输入供应给输出rn。这个图解
使这点很清楚,A L U仅能执行功能网络提供的操作。从而,选择最有效的操作是重要的。
图11 - 1 9 a提供了A L U位片的一个例子。我们已经包括了加法和减法的代数操作,以及逻
辑功能A N D、O R、X N O R(等价)、N O T和“通过”。首先分析应用到每一个M U X输入的结
果,然后应用M U X自身的开关特性,就得到图11 - 1 9 b中的操作表。注意到这点十分重要,
A L U有电路提供全部八个功能,但只有一个指向输出。
作为A L U如何操作的一个例子,假设我们想要把两位an和bn相加。输入位an和bn通过由
310 数字系统设计基础教程
下载
每个Ra
宽32位
图11-16 用来选择几个结果之一的多路选择器
ALU
第n位
注意,这个例子仅为了说明用途,不与真实世界的任何处理器相符。
“+ / -”表示的加/减单元,产生和数sn。选择A L U控制位为
f2f1f0= 0 0 0
图11-18 位片的单元级结构
a) 逻辑网络b) 功能总结
图11-19 ALU位片设计的例子
就选定M U X输入0传送到输出rn。当然,这相应于求和,得到一个输出
rn = an+bn
若取而代之,我们使用
那么M U X输入1将被选择,产生一个不同的输出
第11章计算机基础311
下载
8∶1多路选
择器
第几位输出
和
rn = an-bn
我们已经假设,加/减选择位S能够由图中没有示出的附加电路来提供适当的值。
那么现在,既然我们懂得了怎样设计A L U的一个位片,一个n位宽的电路就能够由
• 复制这个位片(n-1 )次,然后
• 并行地连接这n个电路。
获得。
需要记住的一个重要方面是,编号为j的加/减单元的进位输出位必须用作编号为( j+1)
的加/减单元的进位输入位,以确保字的加法和减法是正确的。
11.3.3 局部存储器
在我们的例子里,局部存储单元在数据通道中提供。在设备场境中,如果它和C P U电路
在同一集成电路上,它将类属于L 1(第一
级)存储器。在实际的计算机里, L 1存储
器提供快速的读/写存储,但它与主存储器
相比较非常小。这类存储器用来提供快速
的置入和存储操作,通常被称为高速缓冲
存储器(c a c h e)。高速缓冲存储器连接数
据流通道和主存储单元,如图11 - 2 0所示。
在目前的讨论中, L1 cache只是作为一个通用的
存储单元,提供读写操作的存储。c a c h e存储器
的细节在第1 2章中作更深入的分析。
c a c h e的操作将假定在操作上与一般的读/写
存储阵列相同,能够使用图11 - 2 1所示的简化方
框在系统级建立模型。它在阵列中的位置由地址
输入指定。读/写控制信号R / W的值指定读/写操
作发生,或者存储器不活动而刷新。
11.4 指令和数据通道
数据通道包括三个主要部分:寄存器文件、A L U和存储单元。我们能够这样总结我们关
于C P U组件的研究,如下:
• ALU功能决定能被执行的算术和逻辑操作的类型。
• 寄存器文件提供一组快速的局部存储场所。
• cache存储器允许我们访问大型的系统存储器。
因为互连方案建立了允许的数据流通道,所以我们能够声明
• 能够在一给定计算机上实现的指令由每一单元的属性以及它们如何连接而形成系统所决
定。
这称为计算机的体系结构,因为它告诉我们系统是怎样建立的。上句话仅仅认可这样一个事
实,为了包含一条特定的指令,我们必须( a)在A L U中包含任何必需的逻辑,且( b)提供
一个数据流通道,以便能够完成该操作。例如,如果我们想要在指令系统里包括A D D,那么
312 数字系统设计基础教程
下载
数据流通道L1 cache
(小而快)
主存储器
(大而慢)
图11-20 局部存储器的概念
图11-21 局部存储器的操作模型
地址
数据输入
局部存储器
数据输出
我们必须在A L U中使用加法器,也确保我们能够选择所需的数据字来引入A L U。
为了更加详细地说明这一点,我们将以基本单元开始,然后展示如何构造数据通道。在
这一级,我们的目标是设计单个单元,它有多个数据通道,每一个都支持一类具体的数据流
通道。该通道由指令字和相关的控制逻辑选择,在这个层次看作一组控制信号。
首先,我们创建一个数据通道,它允许我们执行如下步骤:
• 从一个寄存器R X中检索一个数据字。
• 从一个寄存器RY中检索一个数据字。
• 对这两个字执行一个逻辑或算术操作。
• 然后存储结果到寄存器R Z。
这可以由图11 - 2 2所示的数据流通道实现。寄
存器文件输出直接与A L U的输入A和B接口。
结果R出现在A L U输出处,被反馈到寄存器文
件,并存储在那里。本章早先提及,这称为寄
存器到寄存器指令,因为它使用来自寄存器文
件的数据,并在那里存储结果。
只要数据通道已经被确定,以A和B为输入能够导致的实际操作依赖于A L U内置的特性功
能。在这个层次,独立的指令很容易使用汇编语言描述。早先提及,汇编语言使用助记符描
述操作;一个助记符就是一个完整的单词的缩写版本,易于记忆。汇编语言的指令格式定义
了每一符号的次序和意义。在我们的处理中,两数相加的寄存器到寄存器指令将记为
add RZ,R X,RY #把R X的内容与RY的内容相加,结果放入R Z中
这里,“#”号右边全部是注释语句,对操作不起作用。类似地,减法将记为
sub R12,R 7,R8 #R7-R8→R 1 2
这里,注释语句的意思是“从寄存器R 7的内容中减去寄存器R 8的内容,结果放入寄存器R 1 2
中”。
计算机中常见的其他寄存器到寄存器操作是逻辑功能,如
and RC,R 1,R2 #AND(R 1 , R 2)→R C
和
or R4,R 2 2,R1 #OR(R 2 2 , R 1)→R 4 C
尽管这些操作基于3 2 b i t字,逻辑操作被定义只作用于对齐位上。例如,如果我们有
X= 1111 0000 1111 0000 1111 0000 1111 0000
Y= 1010 1010 1010 1010 1010 1010 1010 1010
那么,
A N D(X,Y) = 1010 0000 1010 0000 1010 0000 1010 0000
而
O R(X,Y) = 1111 1010 1111 1010 1111 1010 1111 1010
它们能够直接从我们并行同一位片电路来创建3 2位A L U的方式得到证明。从我们的讨论中可
以看到,操作的类型只受A L U能力的限制。
我们要分析的下一个数据通道将允许我们以下面的步骤执行存储操作:
• 从指令中获得存储器地址。
第11章计算机基础313
下载
图11-22 寄存器到寄存器操作的数据通道
寄存器文件
• 从寄存器R X发送数据到存储器。
• 然后在正确的位置存储该字。
这类操作的数据流通道表示在图11 - 2 3中。地址直接送到A L U输入A,同时R X的内容发送到存
储单元。这是一个存储字指令,以汇编语言写为
sw RX,ADDRESS #存储R X的内容在A D D R E S S处
图11-23 存储字操作的数据通道
例如,假设R 4包含十六进制字0 x 2 A F 5 2 9 B 1,我们希望把它存储在存储器位置0 x 4 3 8 5。该命
令将是
sw R4,0 x 4 3 8 5
那将导致0 x 2 A F 5 2 9 B 1被存储在正确的位置。
我们将分析的最后一个数据通道是置入字指令,它允许我们从存储器复制一个字,并把
它置于一个寄存器R X中。这个指令记为
lw RX,ADDRESS #复制A D D R E S S处存储器的内容到寄存器R X
图11 - 2 4说明了这类指令的数据通道。再次,地址通过A L U到达存储器,它指定了要读的
位置。然后数据字从存储器传送到寄存器文件,存储在指定的寄存器R X中。
既然我们了解了独立的数据流通道的特性,我们转到设计单个单元的问题,该单元能够
通过改变一组控制信号c0和c1,指定使用哪个通道,实现所有的三种可能。多路选择器
图11-24 置入字操作的数据通道
314 数字系统设计基础教程
下载
寄存器文件
局部存储器
地址
地址
输入
寄存器文件
局部存储器
地址
地址
输出
以一种直接的方式提供这种功能,引导我们构造图11 - 2 5中所示的数据通道。单元之间的互连
是固定的,但是为数据流所选择的实际通道取决于应用到多路选择器的控制信号的设置。还
要注意, A L U操作由控制位f2 f1 f0以11 . 3 . 2节中讨论过的方式选择。从而,一个完整的数据通道
由两个M U X控制位c0和c1以及A L U选择字f2 f1 f0指定。
让我们通过分析如何使用控制位改变数据通道,阐明数据通道的一般性描述。A L U的A输
入由c0的值决定,这样
若c0= 0,则A是一个地址(s w或者l w操作)。
若c0= 1,则A是一个寄存器的内容。
另一个控制位c1决定A L U的输出是发送到存储单元的地址输入,还是发送回寄存器文件。如
下可见
如果c1= 0,那么A L U输出导向存储器地址端口,
而
如果c1= 1,那么A L U输出导向寄存器文件。
第一种情况相应于一个s w或l w操作,而第二种情况表示一个寄存器到寄存器操作。
注意这点是重要的,从寄存器文件读或者写到寄存器文件的任何指令也必须提供信息,
允许特定的寄存器被选择。因为我们已经假设3 2个寄存器R 0到R 3 1,这意味着它采用5 b i t选择
一个寄存器。一个寄存器到寄存器操作如
xor R2,R 4,R19 #XOR(R 4 , R 1 9)→R 2
需要指定3×5 = 1 5个寄存器选择位,而存储器访问操作
lw R3 ,0 x 5 A 2 8
图11-25 允许寄存器到寄存器、置入字和存储字操作的数据通道
需要有5位来选择目的寄存器R 3。在我们讨论的寄存器文件中,它们是称为s4s3s2s1s0(源)、
t4t3t2t1t0(对象)和d4d3d2d1d0(目的)的位组。
指令系统中的变体
上面的例子说明了一个重要的事实,计算机的指令系统由系统的体系结构决定。计算机
只能够实现数据通道允许的那些指令。
作为物理结构和指令系统之间关系的一个例子,注意到置入字( l w)和存储字( s w)被
第11章计算机基础315
下载
寄存器文件
局部存储器
地址
地址
输入输出
多路选择器
限定到指令自身指定的地址。换句话说,如果我们想要把R 5的内容存入地址为0 x 6 A 4 5的存储
器,我们记作
sw R5,0x6A45 #复制R 5的内容进入地址为0 x 6 A 4 5的存储器
所以只允许地址的立即数值。这是一种寻址方式(addressing mode),但是其他的几种寻址方
式增强了编程能力。
我们考虑这种情况,寄存器R 3 0包含十进制数值4 5 0 0;我们把它表示为
[R30] = 4500。
假设我们宁愿使用4 5 0 0作为我们的程序中的一个引用,把字存储到存储器地址4 5 0 0、4 5 0 4、
4 5 0 8、4 5 1 2等。目前的体系结构不允许这种指令。然而,图11 - 2 6中所示修改的数据通
图11-26 允许实现更多指令的修改的数据通道
道提供了必需的数据流通道。这两种网络的快速比较表明,我们已经改变地址输入到多路选
择B,作为一个A L U输入。新的控制信号由c2表示,这样
若c2= 0,则A L U输入B为一个地址,而
若c2= 1,则A L U输入B来自一个寄存器。
为了理解它如何改变指令系统,注意,除已经讨论的指令之外,我们现在能够执行操作
sw R2 ,4(R 3 0) #复制R 2的内容进入存储器地址( [ R 3 0 ] + 4)= M [ R 3 0 + 4 ]
这里,速记符号M [ R 3 0 + 4 ]的意思是存储器的位置在R 3 0的内容加4计算出的地址处。这被许可,
是由
• 选择寄存器R 3 0作为A L U的A输入,
• 置c2= 0使数值4作为A L U的B输入,
• 指示A L U相加,产生地址([ R 3 0 ] + 4)= 4 5 0 4,且
• 发送寄存器R 2的内容到存储器输入(在该多路选择器的旁边)
这个指令由图11 - 2 7中高亮的数据通道显式地表明。
为了把寄存器R 3、R 4和R 5依次存入下一个较高地址,我们使用指令
316 数字系统设计基础教程
下载
记住,我们使用8 b i t字节的寻址约定,所以采用4 B y t e存储一个3 2 b i t字。这意味着字地址增加4。
寄存器文件
局部存储器
地址
地址
输入输出
图11-27 指令sw R2,4(R30)的数据通道
它们各自把数据置于存储器地址4 5 0 8、4 5 1 2和4 5 1 6。这个数据通道允许我们实现类似的置入
字指令,形式为
lw RX,A(RY) # M [ RY + A ]→R X
它意味着在存储器地址(RY + A)中的字被复制到寄存器R X。
从这个例子,显然,计算机的指令系统取决于
• 每一单元的特性,和
• 它们互连的方式
这已经在前面声明。指令系统对逻辑和硬件的依赖说明了在层次结构中的多个级别观察系统
的重要性。
作为另一个例子,假设我们在A L U的输出增加一个并行置入移位寄存器,如图11 - 2 8所示。
移位操作由S H R(右移)和S H L(左移)控制字指定,带有所需的由移位寄存器自身能力决
定的控制位数。增加这部分到数据通道,允许我们执行如下指令
shl R14,R 8,3 #R8的内容左移3位,把结果置于寄存器R 1 4中
或者,以一般形式
shl RD,RT,SHIFT #左移(RT) S H I T F位→R D
图11-28 增加一个移位单元来增强指令系统
第11章计算机基础317
下载
寄存器文件
局部存储器
地址
输入输出
寄存器文件
局部存储器
地址
输入
移位
地址
输出
对于右移操作,有相同的格式
shr RD,RT,SHIFT #右移(RT) S H I F T位→R D
它扩展了指令系统,包含一组移位(和循环)操作,常见于大量类型的计算法则中。在大多
数设计中,移位寄存器作为A L U自身的一部分而包含。
11.5 控制器
现在我们已经了解了数据通道是如何建立的,我们来分析二进制指令如何实际地控制数
据通道。只要来自存储器的指令到达,就被置于指令寄存器( I R)中,如图11 - 2 9 a所示。图
11 - 2 9 b是其简化的方框符号。在这一级,指令含义模糊,因为它看上去只是一行3 2个1和0。
机器码有那样的特性,使它很难理解。
图11-29 IR中的机器语言指令
把机器语言指令翻译为某种更有意义的东西的关键是,引入指令格式(instruction format)
的概念。指令格式把3 2位划分成称为字段的较小的位组。每一字段在字中的位置定义好,并
赋予特定的意义。例如,我们可以分配一部分位成为二进制字,指明一特定的寄存器。尽管
真实的计算机有好几种指令格式,对于这里描述的简单的机器,我们只需要两种。一种用于
寄存器到寄存器操作,称为R型指令格式。另一种用于s w和l w操作,称为I型指令格式,因为
它使用立即数,也就是,指令自身提供的、不必从其他来源获得的数据。
R型指令格式在图11 - 3 0 a中表示。3 2位字已经划分为六个不同的字段,给出了指定的位数。
理解该格式的关键是,每一字段有一个独立的意义和用法。它由图11 - 3 0 b所示的等效观点阐
明,那里,字段已由名称指定。
图11-30 R型指令格式
318 数字系统设计基础教程
下载
a) 独立单元
b) 显示内容的方框符号
a) 字段的定义
操作码
b) 字段名称
值得提及,尽管对于M I P S处理器,R和I型指令格式是具体的,大多数R I S C设计有着类似的(或相同的)指
令类型。
考虑一个寄存器到寄存器指令,形式为
and RD,R S,RT #AND(R S,RT)→R D
在R型指令格式中,每一寄存器由合适的字段确定。假设在寄存器文件中有3 2个寄存器R 0到
R 3 1。我们必须为每一个分配5位。它们图中表示为字段R S、RT和R D。在这个例子中,逻辑
A N D操作由两个字段确定: 6位O P C O D E(操作码的缩写)字段和6位F U N C T(功能的缩写)
字段。在大型计算机中,它们用来为A L U功能生成功能选择字f2 f1 f0,所有的多路选择器设置
(像前面的数据通道例子中的c0、c1和c2),以及系统中任何其他必需的控制信号。R型指令格
式中表示的另外一个字段是5位S H I F T字段,它能够用来指定移位和循环操作。
接下来,考虑置入字和存储字操作。因为两者都在寄存器文件和存储器之间传送数据,
所以它们能够由相同的指令格式描述。这些指令基于立即数(在指令自身中提供),由图11 -
3 1中的I型格式表示。注意左边两个字节(位1 6 - 3 1)与R型所定义的字段相同。在这种情况下,
寄存器由如下指令定义
sw RT,4 8(R S) # [ RT ]→M [ R S + 4 8 ]
和
lw RT,1 0 0(R S) # M [ R S + 1 0 0 ]→RT
这里,源寄存器R S包含基地址,而对象寄存器RT表示要传送的数据段的起源或目的。I型指
令的右边1 6位(位1 5 - 0)标注了I M M E D I AT E,用于数据或指定地址。在上面的两个指令例子
中,立即数的值分别是4 8和1 0 0。
图11-31 I型指令格式的字段
图11-32 R型和I型格式的比较
第11章计算机基础319
下载
一般指
令选择
一般指
令选择
选择源
寄存器
选择源
寄存器
选择对
象寄存
器
选择对
象寄存
器
选择目
的寄存
器
移位数R型选
择
立即数
a) R型
b) I型
现在,我们转到控制数据通道的全局问题。每一条二进制指令必须包括执行操作所需的
全部信息。这包括寄存器的指定,操作中使用的A L U功能,以及经由控制信号的数据通道选
择。把指令置于I R中,然后使用不同的字段提供必需的信息,就完成了数据通道的控制。要
理解连接,考虑R型和I型指令格式,因为它们与发送到数据通道的控制信号有关系。在图11 -
3 2 a中,指令寄存器中的每一位已与一根输出线相连接。6位O P C O D E标注了i5到i0,用来指定
指令组合。寄存器字段R S、RT和R D的每一个有5位,能够直接用来选择如图11 - 1 2中的寄存
器;类似地,S H I F T字段能够应用到移位寄存器。F U N C T字段有6位,与O P C O D E字段相结合
一起生成A L U控制位f2 f1 f0。I型格式表示在图11 - 3 2 b中。容易看出,左边1 6位以与R型格式相
同的方式定义。另一方面,右边位1 5到0用于立即数或地址。左边字段的重叠允许我们构造单
个连线图解,如图11 - 3 3所示。为了同时适应R型和I型格式,右边1 6位走线来提供能够用于每
一种指令类型的并行控制信号。
图11-33 来自指令寄存器的一般连线
确定指令格式和相关连线,我们就能获得图11 - 3 4中所示的中央处理器的完整视图。它说
明了I R如何与数据通道交互来控制操作。寄存器选择字段R S、R D和RT能够直接连接到寄存
器文件。多路选择器和A L U功能选择所需的其余控制信号使用一个逻辑网络得到,该逻辑网
络包含于标注为控制逻辑的部分之中。它接受来自O P C O D E、S H I F T和F U N C T字段的输入,
生成必需的输出。理解这个过程的关键是,注意到这些字段被编码以符合具体的指令。每一
组输入位生成一组具体的控制信号,为数据通道组件提供正确的设置。注意,控制位c3决定将
用哪一个寄存器字段指定目的。这是需要的,因为R型指令使用R D,而I型指令没有R D,而
是采用对象字段RT取代它的目的。
控制信号取决于处理器的O P C O D E映射。它是用于指令字段OPCODE 的编码;R型指令
还使用F U N C T字段。在设计计算机时,每一条指令由合适的字段中唯一的一组二进制值定义。
这称为“映射”,因为它定义了一条指令和唯一的二进制字之间的关系。控制逻辑网络围绕这
个映射设计。O P C O D E和F U N C T作为基本的输入,并决定硬件执行特定指令所需的所有控制
位的值。作为O P C O D E映射的一个例子,在M I P S处理器设计中使用的三个入口是
OPCODE = 000000 =>寄存器到寄存器操作
OPCODE = 100011 =>置入字(l w)
OPCODE = 101011 =>存储字(s w)
只要R型(寄存器到寄存器)指令在O P C O D E中指定, F U N C T字段就用来决定要执行哪一个
320 数字系统设计基础教程
下载
一般指
令选择
选择源
寄存器
选择对
象寄存
器
选择目
的寄存
器
移位数R型选
择
Immediate/address
操作。例如,M I P S系统给出
OPCODE = 000000 和FUNCT = 100000 =>ADD
OPCODE = 000000 和FUNCT = 100010 =>SUB
等等。它提供了由3 2 b i t二进制字组成的机器语言指令与处理器要执行的实际操作之间的关键
连接。
图11-34 表示数据通道和控制信号的连线图解
11.6 CISC和R I S C体系结构
现在,我们来分析一类基于系统内建指令的数量和类型的计算机。我们已经了解,每一
指令类型必须被数据通道的结构认可。指令的变化越大,内建于处理器的数据流变体就越多,
系统就越复杂。
如果我们跟踪计算机设计早期的历史演变,我们发现后继的每一代通常比前一代更加复
杂。改进的技术允许更多数量的指令类型和寻址方式,以及包含更多可能的数据流。它们发
展到现在,称为复杂指令系统计算机(C I S C机器)。编译器利用扩展的指令系统写出,在使
用汇编代码时,由于有大量可利用的指令,编程更容易。这种原则支配了计算机行业数十年。
然而,2 0世纪7 0年代的研究改变了设计和构造计算机的方法的基础。
该方法集中于设计一种只有少量指令(相比C I S C机器)的精简指令系统计算机(R I S C)。
在硬件级,该设计强调尽可能块地运行所提供的指令。R I S C体系结构的计算机的目标是,使
用相对简单的数据通道完成快速的计算。为了鉴赏R I S C原则,我们来更加详细地分析C I S C体
系结构,把它作为比较的基准。
第11章计算机基础321
下载
指令寄存器
控制逻辑
移位
寄存器文件
局部存储器
地址
输入输出
11.6.1 CISC和微编程
C I S C计算机通过使用一种嵌入控制器内部的时序逻辑网络的称为微编程的技术获得它们
的大型指令系统。事实上,它类似于有一个在主计算机内部操作的小计算机。微程序方法把
每一个基本的操作分解为微指令。它除了应该恰当地称为微代码指令,且比汇编语言更深
(更原始)一级之外,还包括我们可以松散地描述的命令,如
get [RX] #从R X读数据
input [RX] ALU #传送[ R X ]到A L U输入
事实上,汇编级的计算机指令,如置入字( l w),通过使用如图11 - 3 5所示的一系列微操作创
建。每一条指令以此种方式定义,但是它将采取不同数量的微指令来创建每一条汇编指令。
微编程允许设计者通过在微代码级组合必需的操作创建一条指令。它允许建立大型指令
系统,因为微指令提供了系统里所有的基本运动。每一微代码序列存储在微代码R O M阵列中。
当给予计算机一条指令如置入字( l w)时,微代码序列被访问。整个结果是一个控制器,它
以图11 - 3 6所示的方式操作。I R中的一条指令发送到序列发生器,决定与具体操作相应的微代
码的位置。序列发生器读出并执行第一条指令,然后第二条,等等,直到指令序列被完成。
每一条指令都经历了这一过程。
指令微代码操作
lw RY,I m m e d i a t e(R X) = > 开始
从寄存器R X得到数据
发送[ R X ]到A L U
从I R得到立即数
发送立即数到A L U
计算地址=(R X +立即数)
发送地址到存储器
从存储器得到数据
发送数据到RY
结束
图11-35 一条计算机指令包含几条微指令
图11-36 控制器中微代码的用法
对于增加计算机的指令系统,这是一个强有力而灵活的方法。增加一条新指令只需要附
322 数字系统设计基础教程
下载
微代码ROM
指令寄存器
控制器
控制逻辑
控制信号
输入数据通道输出
序列发生器
lw 指令的
代码序列
寻找
增量
加的代码写出并存储在R O M中,所以指令系统的修改不需要过多的硬件改变。它主要的障碍
是
• 内部序列发生器电路必须增加到单元。
• 每一条微指令的完成需要一段时间tm i c ro,所以计算机级指令如a d d和l w可能有不同的执行
时间。
一旦定义了机器,进行微编码就是简单的。或许,在C I S C方法中,最难以考虑的是这样的事
实,硬件随着微代码指令系统的丰富而变得越来越复杂。从历史的角度看,硬件复杂性的增
加已经被技术的改进相抵消。随着更新换代,这就产生了更强大更快捷的机器。
11.6.2 RISC机器
现在,我们来看看R I S C计算机的概念。对运行在C I S C计算机上程序的一个有趣的研究,
得到了一个规则,现在称为8 0 / 2 0规则。要了解这个规则,设想一台C I S C机器有大量的指令
可资利用。那么,根据8 0 / 2 0规则,
“8 0 %的程序只使用2 0 %的可利用的指令”
例如,如果一台计算机可能有5 0 0条指令,那么8 0 %的典型程序将只使用其中大约1 0 0条指令。
当然,这不是精确的数量。但它说明了重要的一点:大多数的程序只使用少量的指令就能够
运行。这就提出了精简指令系统计算机(R I S C)的概念。
R I S C计算机的原则可以总结为下面的语句
• 在数据通道中只包含最有用的指令,而且
• 确保数据通道快速地执行每一条指令。
这导致比较简单的硬件和结构特征,但是必须编写出编译器以产生有效的机器码。虽然这些
语句传达了重要的思想, C I S C和R I S C体系结构之间
的差别比可以想象的要大得多;这两种方法能够产
生根本不同的机器。分析它们在操作级的差别是值
得的,因为那将使得鉴赏现代计算机更加容易。
图11 - 3 7表示R I S C机器中控制器的基本结构;
细心的读者将会发现,它与我们在一般讨论中所研
究的控制器有着相同的特征。指令寄存器直接连到
控制逻辑块,控制逻辑块依次传送控制信号到数据
通道。然而,注意我们已经指出R I S C方法只认可单
通数据通道结构。这意味着数据通道中的每一个单
元(A L U、存储器和寄存器文件)在一条指令期间
只能被访问一次。限制数据通道单通,主要有三种结果:
• 数据通道能够被优化为最快的吞吐量
• 每一条指令花费一样多的时间。
• 只允许那些在数据通道单通中能够完成的指令
这些概念的真正实现导致许多对体系结构的约束。例如,要增加一条新指令,数据通道自身
必须被改变以允许所需的连接。而且,考虑到比较容易地在C P U与存储单元之间传送,指令
字和数据字选择为相同大小。
第11章计算机基础323
下载
控制器
指令寄存器
控制逻辑
控制信号
输入单通数据通道输出
图11-37 RISC设计使用简单的控制
和单通数据通道
在C I S C机器中使用的微程序方法和单通数据通道R I S C设计之间的差别,能够使用图11 - 3 8
中的框图来理解。回顾一下,每一条指令开始以
• 取指令(I F),指令从存储器进入I R中
接着
• 指令译码( I D),控制信号产生并发送到数据通道。
这些是两种设计所共有的。不同之处在于计算所执行的方式。图11 - 3 8 a表示C I S C情形,在那
里,微代码控制在A L U、存储单元和寄存器文件之间的数据流。只要指令在I D阶段被译码,
控制信号就相继提供必须的操作。例如,它允许我们执行命令
add M[AD],M [ A 1 ],M[A2] #M[A1]+M[A2]→M [ A D ]
获得两个存储位置A 1和A 2的内容,把它们相加,并把结果存储在存储器地址A D中。类似地,
稍微改变微代码产生指令
add RD,M [ A 1 ],M[A2] #M[A1]+M[A2]→R D
它把内容放置在寄存器文件中的寄存器R D之中。
图11-38 CISC与RISC体系结构中数据流比较
现在考虑图11 - 3 8 b中说明的基本R I S C单通数据通道。在该设计中, A L U从寄存器文件接
受输入,并能够把结果存储在寄存器文件或者存储器之中。因为数据通道受限于每条指令只
能够单向通过每一单元,所以它不允许上面对于C I S C设计所讨论的两者中任一操作。这是由
于两者对于A L U输入都使用存储器访问,但是R I S C数据通道只允许来自寄存器文件的输入。
这个简单的例子说明, R I S C设计在可以包含的指令类型方面有着多得多的限制。如果考虑到
更多的变体而扩展该数据通道,那么增加的复杂性可能使系统慢下来。
11.6.3 现代计算机
现代处理器设计在方式上有所进展,它通常包含尽可能多的来自R I S C原则的思想。对于
324 数字系统设计基础教程
下载
开始退出
开始退出
微操作通道
a) CISC数据流通道
b) RISC单通数据通道
以硅制造的V L S I微处理器尤其如此。某些处理器,如M I P S和Power PC®芯片,是真正的
R I S C机器,而另外一些,如P e n t i u m和AMD K6处理器,有一个R I S C核心网络嵌入较大的控
制结构之中,提供C I S C类型的操作。当微处理器系列新的一代需要与早期C I S C产品向后兼容
时,这种设计特别重要。
11.7 浮点操作
算术操作如加法和乘法经常需要我们使用小数值,它们可能包括一个很宽的数值范围。
众所周知,它们在数学中称为实数。一些普通的例子是常数
( 11 - 8 )
和数值,如
( 11 - 9 )
这些数与我们迄今已研究过的整数有着不同的特性。尽管我们能够使用在1 . 5节中讨论过的小
数换算,实际上使用的是一种称为浮点表示的更有效的方法。
浮点数以二进制表示的基本表达式为
( 11 - 1 0 )
这里,s i g n i f i c a n d提供该数的有效位,e x p o n e n t指明2的阶数,b i a s用来控制该数的范围。而且,
S是符号位,对于正数,定义S =0,对于负数,定义S =1。浮点表示的真正实现依赖于分配多
少位表示该数,因此依赖于它的精确性。我们将研究IEEE 754浮点标准(F P S),它使用3 2位
字提供单精度表示。该标准也规定了称为双精度的更精确的6 4位表示。
在进一步论述F P S的细节以前,我们来分析十进制数到二进制浮点表示的转换。假设我们
希望以二进制格式表示基于1 0的数X = 4 . 6 2 5。由41 0= 1 0 02和0 . 6 2 51 0= 0 . 1 0 12
我们能够写出
X= 1 0 0 . 1 0 12 ( 11 - 11 )
它能够通过左移小数点两位并乘以22,以科学计数法表示如下:
100.101 = 1.00 101×22 ( 11 - 1 2 )
这表明二进制浮点表示与标准的基于1 0的思想相同。
在F P S中,单精度浮点数基于3 2位字,该字划分为三个不同的字段,如图11 - 3 9所示。阶
数由8位字段表示,而有效数分配整整2 3位;符号位占S据最高位。单精度格式定义偏移值为
1 2 7。既然公认看起来有点模糊,我们使用一个例子来分析它如何工作。
图11-39 单精度浮点格式
第11章计算机基础325
下载
万一你错过了第2章中的首字母缩写词, I E E E代表电子电气工程师协会,一个专业组织。
阶数有效数
例11 - 1
考虑基于1 0的数a = 12.151 0。使用标准转换技术,它的二进制表示为
( 11 - 1 3 )
其中,我们已经注释0 . 1 51 0的二进制表示包含循环值1 0 0 1
0 . 1 51 0= 00 1001 1001 1001 ...
我们在方程中把它表示为
—1 0 0 1。通过直接比较,从而2 3位有效数为
S=1 1000 1001 1001 1001 1001 10 ( 11 - 1 4 )
为了决定阶数,我们记偏移为1 2 7,因此阶数的值为
( 11 - 1 5 )
因为a为正数,它的F P S表示为
0|1000 0010|11000 1001 1001 1001 1001 10
它能够由逆向过程来验证。
双精度浮点表示基于6 4位字,如图11 - 4 0所示。阶数增加到11位,偏移为2 5 6,有效数长
5 2位。尽管双精度F P S的大小是单精度表示的两倍,概念仍然是一样的。
图11-40 浮点数的双精度格式
11.7.1 算术操作
二进制浮点算术非常类似于基于1 0的科学计数法表示的数的使用过程。考虑两个十进制
数
要得到(X+Y)的和,我们首先移动一个(或两个)数的小数点,找到1 0的相同幂次。这称
为阶数的对齐:
然后相加得到
326 数字系统设计基础教程
下载
字1 阶数
字2
32b
有效数(高部)
有效数(低部)
要得到乘积
我们只要把阶数相加,得到
所以不需要对齐。
二进制浮点操作以同样的方式处理。为了把两个浮点数相加,我们首先对齐阶数。这意
味着我们在因子2m中找到共同值m。在完成这个之后,我们相加有效数,得到和值。乘法由相
乘有效数以及相加阶数来实现。概念上,这些操作简单明了。然而,实际上它们的细节是十
分棘手的,产生了一个复杂的逻辑网络。对于浮点加法器,许多的复杂性归因于必须执行两
个任意浮点数对齐的算法。乘法器电路由于有效数的大小和执行快速计算的需要而变得复杂。
由于这些,我们在这里将放弃细节,保持我们的讨论在较高的系统级。
11.7.2 计算机应用
通用计算机被设计用来处理整数和浮点数。因为逻辑网络截然不同,一般要提供整数和
浮点A L U。一种方法是,使用浮点单元作为协
处理器,如图11 - 4 1所示。协处理器必须与主
(整数)处理器一起使用。在描绘的基本系统
中,指令存储在通用I R中。指令译码决定了它
要发送到整数单元还是浮点处理器( F P U)。
通过对整数和浮点操作使用不同的指令码实现
它。数据总线控制器确保输入和输出发送到正
确的单元。在微处理器的早期,协处理器作为
分开的“附加”芯片出售。然而, V L S I的进步
使它已经成为处理器核心电路的集成部分。
11.8 计算机设计的V L S I
现代计算机使用高密度集成的硅技术来设计。它应用于大型系统直到在单芯片上包含整
个C P U加上L1 cache的微处理器。尽管设计复杂V L S I芯片的细节超出了本书的范围,这些概
念还是简单的,基于第7章中论述的内容。
完成如此复杂的V L S I设计的两个关键是
• 一组强大而有凝聚力的工程师,以及
• 一个好的C A D工具集和单元库。
两者都非常重要,因为现代微处理器设计不断地推进技术限制,达到它们的雄心勃勃的
目标。设计流程的起点是指明系统特性。这包括指令系统的细节、硬件与时钟考虑、以及一
些单元规范。系统的体系结构直接与指令系统相关,以至体系结构的特征需要与所有必需的
逻辑一起来设计。在V L S I中,电路设计和版图是影响系统性能的关键方面,所以设计工程师
必须完全地理解技术并表现它的特性。
我们从版图的角度来分析一个简单微处理器的建立。通过使用库,我们可以选择存储单
第11章计算机基础327
下载
图11-41 作为协处理器的浮点单元的使用
指令寄存器
控制器
整数ALU FPU
元,并使用它创建一个寄存器。那么,该寄存器可以作为实例来产生寄存器文件,如图11 - 4 2
所示。V L S I设计极大地依赖于设计一个单元,然后在芯片版图中多次使用它的能力,这样就
节省了许多时间和精力。
接下来,考虑A L U。它可以使用本章中早些时候讨论过的位片的方法来设计。单个位片
可以构造得如图11 - 4 3所示,那里,库中的单元已经实例为加法/减法和基本逻辑操作。对于一
给定的位片,输入an和bn与每一单元相连,并产生一个特定的输出结果。使用一个M U X作为
垂直堆栈的最终单元,允许我们选择所需的功能结果rn。然后,把位片作为基本单元,并按需
多次实例化,得到完全的A L U。这就产生了图11 - 4 4中说明的大型单元。
单元库和实例用来创建微处理器芯片所有其他的部分。在芯片规范的布图规划期间,每一单
元由预估的高度和宽度特性化。只要单元被完成,它们拼在一起并连线,就得到图11 - 4 5中所描绘
的最终的版图。它表明了“输入/输出焊盘”的用途,那是矩形的金属区域,能够与封装管脚相连。
图11-44 由位片单元实例形成的ALU
328 数字系统设计基础教程
下载
库存储单元
实例化32次
实例化32次
寄存器文件
图11-42 使用单元库创建寄存器文件
32b寄存器
图11-43 ALU位片的创建
输入
结果
库中独立
逻辑单元
输入
结果
这个概述提供了V L S I微处理器设计领域像个什么样子的一瞥。在真实世界里,然而,具
有艺术级特征的芯片工程能够花费一组有2 0 0多位工程师的队伍2年或者3年(或者更多!)的
时间完成加工阶段。如此挑战是使该领域在工程学生之中十分有趣味和流行的方面之一。
图11-45 微处理器芯片例子的最终版图
11.9 问题
1. 在个人计算机上除监视器和磁盘驱动器之外,你能够举例说出两个普通的输出设备
吗?
2. 讨论只使用数据传送和二进制操作的两个基本的计算机操作,如何能够生成一个基本
的字处理程序。
3. 下面列出了几种大小的寄存器文件。对于每一种情形,确定用来选择一个具体寄存器
的各选择字的字长。
(a) 16个1 6位寄存器
(b) 16个3 2 b i t寄存器
(c) 8个3 2 b i t寄存器
4. 考虑一个由8个8 b i t寄存器组成的寄存器文件。使用图11 - 1 3所示相同的细节,画出该寄
存器文件的框图。确信在你的图中指明了各选择字、M U X大小等等。
5. 考虑图11 - 1 9所示简单的A L U。假设对于一个特定的位片,输入S确定、an=1和bn= 1。为
下列每一个功能选择字找出输出结果rn。
(a) f2 f1 f0= 010
(b) f2 f1 f0= 101
(c) f2 f1 f0= 11 0
第11章计算机基础329
下载
I/O焊盘
算术逻辑单元
局部存储器
寄存器文件
控制
(d) f2 f1 f0= 011
6. 考虑图11 - 1 9所示简单的A L U。假设对于一个特定的位片,输入S确定、an= 1和bn= 1。为
下列每一个功能选择字找出输出结果rn。
(a) f2 f1 f0= 111
(b) f2 f1 f0= 0 0 0
(c) f2 f1 f0= 1 0 0
(d) f2 f1 f0= 0 0 1
7. 假设我们想要构造一个基本的2输入A L U网络,它仅仅提供四种操作: A D D、N O T、
A N D、O R。操作规范使用2位字f1 f0实现。
(a) 把图11 - 1 9中的画法作为参考,设计该A L U的位片的逻辑。
(b) 在完成该设计之后,你决定想要在A L U中提供S U B操作; S U B将由另一个控制位fs
来选择。对于这个修改,使用( a)部分的电路,并提供附加的电路。
8. 使用一个8寄存器的寄存器文件,为4位宽、允许寄存器到寄存器操作的数据通道构造
一个框图。确信指定了该寄存器各选择字的大小。
9. 使用一个1 6寄存器的寄存器文件,为1 6位宽、允许寄存器到寄存器操作的数据通道构
造一个框图。确信指定了该寄存器各选择字的大小。
10. 设X = 1001和Y = 1011。计算下列操作的结果。
( a )
(b)
(c)
(d)
11. 我们定义两个8位字,它们基1 0的值为A= 1 5 61 0和B =7 31 0。在执行下面的二进制操作之
后,得到它们基1 0的结果
(a)
(b)
(c)
(d) A B
(e)
12. 考虑图P 11 - 1中的基本数据通道。寄存器的初始内容以基1 0的等价值表示。假设把它
们作为下面每一部分的起点。
(a) 在如下操作之后计算R 2的内容
add R2,R 4,R 5
(b) 在完成下列指令序列之后,得到R 6的内容
add R5,R 6,R 1
add R6,R 2,R 7
(c) 在如下操作之后,得到R 4的内容。以二进制和基1 0的形式给出你的答案
add R4,R 2,R 6
13. 考虑图P 11 - 1中的基本数据通道。寄存器中显示的值表示下列指令序列运行时的初始
内容。在完成该序列之后,列出寄存器文件的内容。以基1 0的数值给出你的结果。
330 数字系统设计基础教程
下载
sub R1,R 3,R 6
add R2,R 6,R 7
or R3,R 5,R 6
add R4,R 3,R 1
图P11-1
14. 考虑图P 11 - 1中的基本数据通道。在已经执行下列指令序列之后, R 4、R 5的内容是什
么?以二进制和十进制数值给出你的答案。
add R3,R 4,R 6
shl R4,R 3,3
shr R5,R 3,3
15. 考虑图P 11 - 1中具有A L U的数据通道,该A L U由图11 - 1 9中描绘的位片指定。对于下面
的每一条指令,列出A L U功能选择字f2 f1 f0,以及寄存器选择字d2d1d0、s2s1s0、t2t1t0的二进制数
值。
(a) and R3,R 5,R 7
(b) sub R6,R 1,R 4
(c) xnor R4,R 2,R 0
16. 考虑下列指令。在图11 - 2 6所示的R I S C数据通道中,哪一条不能够实现?对于每一种
情形,提供实现相同结果的R I S C指令序列
add R3,R 2 8,R 3 2
sw R2,4(R 2 7)
add R4,M [ R 6 ],0 x 3 4
lw R17,M [ R 2 1 ]
17. 列出两个你认为最重要的C I S C体系结构的特性。然后对R I S C体系结构亦如此。最终,讨
论组合所有四个特征进入单个计算机设计的可能性。你认为它将产生一个更好的体系结构吗?
18. 把十进制数2 3 . 6 2 5转换为二进制浮点数。
19. 把1 6 . 8 7 5转换为二进制浮点数。
20. 一个二进制数的浮点表示为
1 . 0 0 1 0 11×2 3
求出它的基1 0(十进制)的等效值。
21. 使用IEEE FPS求出单精度浮点数
0 | 1000 0011 | 10000 1001 1001 1001 10
第11章计算机基础331
下载
寄存器文件
的十进制等效值。
22. 假设我们有一个3 2位整数C P U,它与一个双精度F P U接口。为什么对两部分使用分离
的寄存器文件是有意义的?
23. 由于计算机体系结构越来越强大,需要附加的电路适应新的特征。在集成电路和V L S I
方面,那可能导致非常大的芯片。讨论该收益问题(第7章)以及如何通过改进硅工艺克服
它。
24. 假设我们有这样的工艺, 1位CMOS VLSI存储器单元所占的硅面积为
1 . 8mm×1 . 2mm
(a) 估计3 2位寄存器的大小。
(b) 估计由3 2×3 2 b i t寄存器组成的寄存器文件的面积。
(c) 假设每个电路尺寸由因子a= 1 . 9扩展,如第7章所定义。求出产生的3 2×3 b i t寄存器文
件的大小。
25. 使用World Wide We b从不同的公司查阅可获得的有关具体计算机芯片的信息。对于
U R L,不是运行一个查找,就是试试h t t p : / / w w w. c o m p a n y _ n a m e . c o m,这里c o m p a n y _ n a m e表
示制造厂家的名字(例如, company_name = intel将使你进入I n t e l公司的主页)。
332 数字系统设计基础教程
下载