第4章 中央处理器设计(RISC)(1).ppt
《第4章 中央处理器设计(RISC)(1).ppt》由会员分享,可在线阅读,更多相关《第4章 中央处理器设计(RISC)(1).ppt(248页珍藏版)》请在三一办公上搜索。
1、2,第4章 中央处理器设计(RISC),中央处理器也简称为处理器(或称为CPU)是组成计算机系统的核心部件,是计算机组成原理研究的主要内容之一。,3,4.1 计算机组成的层次概念,软件应用软件系统软件编译,指令系统硬件数据路径数字电路物理实现,计算机系统的层次结构见图4.1,4,4.2 RISC与CISC,4.2.2 精简指令系统计算机体系结构精简指令系统的依据通过优化典型的高级语言程序中最耗费时间的操作,能够更好地支持高级语言。RISC结构通常体现如下几点:首先是使用大量的寄存器;其次,要精心设计流水线;最后,应采用相对简单的指令系统。这对于在单一芯片上实现CPU是有益的。,5,4.2.2
2、精简指令系统计算机体系结构,精简指令系统的特征指令系统简单;只有load和store指令可以访问存储器;简单的寻址方式;固定长度的指令格式。,假设模型机中有32个寄存器。所有的算术逻辑运算都使用寄存器操作数;采用load/store结构,即只有load和store指令可以访问存储器,6,4.3 模型机的指令系统,模型机指令系统的设计原则是:采用简单的指令系统规模适度认真权衡利弊加快经常性事件的运行速度,7,4.3.1把模型机的汇编语句翻译成机器指令,模型机的加法指令:add T0,S1,S2用十进制表示是寄存器S0到S7相对应的是寄存器16到23,寄存器T0到T7相对应的是寄存器8到15。,8
3、,4.3.2 模型机的指令格式,模型机指令中每一个字段名称的含义如下:Op:指令的基本操作,称为操作码rs:第一个源操作数寄存器rt:第二个源操作数寄存器rd:目标操作数寄存器,它存放的是指令操作的结果shamt:暂时不用。funct:这个字段选择Op字段中的具体操作,有时被称为function字段或功能字段。,9,4.3.3 模型机寻址方式,寄存器寻址方式首先约定如下的符号:用Rs、Rt、Rd分别表示rs、rt、rd字段(见图4.2)描述的寄存器中存储的数据。算术运算(如add)指令采用的是寄存器寻址方式,它的三个操作数都在寄存器中。设有以下算术运算指令:addT0,R1,R2。其含义是将寄
4、存器R1和R2中的值求和,并将其结果存放于寄存器T0中。R1、R2、T0分别对应于指令格式中的rs、rt、rd字段所表示的寄存器(见图4.2)中存储的数据,即Rs、Rt、Rd。此时Rd=Rs+Rt。,寄存器寻址方式对应的指令格式称为R格式(R类型)。,10,4.3.3 模型机寻址方式,基址寻址方式基址寻址方式的有效地址按下式计算:EA=Rs+address(4.1)其中address是指令格式中的低16位字段(图4.2)的数值。基址寻址方式对应的指令格式称为I格式(I类型)。数据传送指令使用I格式。,11,4.3.3 模型机寻址方式,load指令采用基址寻址方式(I格式,图4.2)把数据从存储
5、器中读到寄存器中的情况称为读(load)。load指令的功能如下:RtM(Rs+address)或记为Rt=M(Rs+address)load指令的用法举例:例如:指令load T0,32(S3)将基址寄存器S3(位于指令的rs字段)的内容加上32(位于指令的address字段),其求和后的结果作为存储器的地址,用该地址访问存储器,将其内容读出,再写入到寄存器T0中,T0由指令的rt字段标识。,12,4.3.3 模型机寻址方式,store指令采用基址寻址方式(I格式,图4.2)store指令的功能是将寄存器rt中的数据传送(写)到存储器当中去,存储器的地址也由(4.1)式计算。store指令的
6、功能如下:M(Rs+address)Rt或记为M(Rs+address)=Rtstore指令的用法举例:例如:指令store T0,32(S3)将寄存器T0(T0由指令的rt字段标识)中的内容写入到存储器中去,存储器的地址为基址寄存器S3(位于指令的rs字段)的内容加上32(位于指令的address字段)。,13,4.3.3 模型机寻址方式,立即寻址方式(图4.2)加法指令中,如果有一个操作数为常数,则称为立即数加法指令,记为addi。寄存器SP加常数4就可以写成:addiSP,SP,4/SP=SP+4,14,4.3.3 模型机寻址方式,在RISC中,通常提供一个特殊的寄存器,称为ZERO寄存
7、器,寄存器ZERO中的值始终为零。为了和其他值比较,就必须有一个立即数形式的小于比较指令。如比较S2是否小于10,其判断条件可写成:slti T0,S2,10/如果S210,则T0=1后面紧接着的指令可以通过判断T0是否等于1来确定S2是否小于10。,15,4.3.3 模型机寻址方式,32位常数的处理lui指令:它用来设置寄存器中某常数的高16位,并允许下一条指令指定此常数的低16位。例如:lui T0,255/T0为寄存器8 指令lui T0,255的功能是将指令中的16位立即数255传入寄存器T0的高16位,再将T0的低16位置零。,16,4.3.3 模型机寻址方式,lui指令应用举例将如
8、下的一个32位常数装入寄存器S0?0000 0000 0011 1101 0000 1001 0000 0000lui S0,61/(61)10=(0000 0000 0011 1101)2运行后S0的内容为:0000 0000 0011 1101 0000 0000 0000 0000下一步加上低16位,转化为十进制数为2304:addi S0,S0,2304/(2304)10=(0000 1001 0000 0000)2S0的最终值即为所求的结果:0000 0000 0011 1101 0000 1001 0000 0000,首先使用lui指令装入高16位数据,然后使用立即数加法指令装入低
9、16位数据,17,4.3.3 模型机寻址方式,PC相对寻址方式(图4.2)bne S0,S1,Exit/如果S0S1,转向标号为Exit的指令。如果程序的转移地址须装入指令的低16位字段,则意味着所有程序的代码长度都不能超过216个指令字,这在现实中是远远不够的。一种解决方法是指定一个寄存器,将它的值与转移地址相加,这样转移指令的地址计算如下:PC某寄存器中的值转移地址(4.3)由于模型机的寄存器是32位,这个和允许程序达到232,解决了转移地址大小的问题。,18,4.3.3 模型机寻址方式,(4.3)式右边的“某寄存器”应使用哪个寄存器?条件转移指令要根据当前指令的运行结果来判断下一条指令的
10、地址,因此它们倾向转向附近的指令。当把指令格式中的低16位看成是补码时有:-215转移地址215-1。于是条件转移的范围是以当前的PC值为中心,上、下的偏移范围大约是215。由于几乎所有的循环和条件转移的范围都小于215个指令字,所以(4.3)式的右边选择寄存器PC是理想的。注意模型机PC中的当前(地址)值是相对于下一条指令(PC+4)的地址而不是当前指令的地址。,PC某寄存器中的值转移地址(4.3),19,4.3.3 模型机寻址方式,伪直接寻址方式(图4.2)在条件转移指令中使用PC相对寻址。对无条件转移指令和转移连接指令使用J格式为程序调用提供比较长的转移地址。例如:jump10000/转
11、向指令10000,20,4.4 汇编语言概念,翻译器(translator):翻译器是这样一种程序,它可以把用某种语言编写的用户程序转换成另一种语言的程序。源语言(source language):翻译器转换之前的程序使用的语言称为源语言。目标语言(target language):翻译器转换之后的语言称为目标语言。,21,4.4 汇编语言概念,汇编语言与汇编器(assembler):如果源语言基本上是数字型机器语言的符号表示,则源语言称为汇编语言,相应地就把这种源语言的翻译器称为汇编器。编译器(complier):如果源语言是C语言(或Java语言等)这样的高级语言,而目标语言或者是数字型机
12、器语言或者是机器语言的符号表示(即汇编语言),那么这种翻译器就称为编译器。,22,4.4 汇编语言概念,在纯粹的汇编语言中,每条语句都精确地产生一条机器指令。汇编语言程序员可以访问目标计算机的所有指令,可以利用目标计算机的所有特性,而高级语言程序员就没有这样的能力。汇编语言和高级语言的另一个重要的区别是:汇编语言程序只能运行在指令系统相同的系列计算机上,而高级语言程序则可以运行在各种不同的计算机上。汇编语言编写程序不方便,强迫程序员用机器的方式思考问题。,23,4.5 指令系统软件的接口,在这一节里,将考虑将高级语言C语言的源程序转换成模型机的汇编语言程序,看看模型机的汇编语言程序究竟要完成哪
13、些基本的操作,这将有助于加深理解中央处理器的硬件设计部分。,24,赋值语句的编译用寄存器编译C的赋值语句例如:f=(g+h)-(i+j);设编译器将变量f、g、h、i、j分别放在寄存器S0、S1、S2、S3、S4中。那么经过编译后的模型机汇编语言代码如下:add T0,S1,S2/寄存器T0中存放g+hadd T1,S3,S4/寄存器T1中存放i+jsub S0,T0,T1/f等于T0减T1,也就是(g+h)-(i+j),4.5.1 C语言赋值语句编译为模型机的汇编语言程序,R型指令应是模型机的处理器硬件能够运行的基本指令之,25,当一个操作数在存储器中时编译一个赋值语句现在编译下面的C赋值语
14、句:g=h+A8;假设A是一个数组,并且在这之前编译器已经将变量g和h 存放在寄存器S1和S2中,又假设数组的首地址(或称为基地址)在寄存器S3中,则结果是:load T0,32(S3)/寄存器T0中的值是A8add S1,S2,T0/g=h+A8,4.5.1 C语言赋值语句编译为模型机的汇编语言程序,为了实现高级语言(C语言)的数组的运算,load指令应是模型机的处理器硬件能够运行的基本指令之一,26,用load和store指令进行编译(目标操作数存放在存储器中)假设变量h存放在寄存器S2中,并且数组A的基地址存放在寄存器S3中。假设C语句为:A12=h+A8;对应的模型机汇编代码是:loa
15、d T0,32(S3)/中间寄存器T0中存放A8的值add T0,S2,T0/中间寄存器T0中存放h+A8的值store T0,48(S3)/把h+A8的值存放在A12中,4.5.1 C语言赋值语句编译为模型机的汇编语言程序,为了实现高级语言(C语言)的数组的运算,store指令应是模型机的处理器硬件能够运行的基本指令之一,27,用数组下标变量索引进行编译这里考虑的是一个具有下标变量的数组:g=h+Ai;假设A数组的基地址在寄存器S3中,编译器把变量g、h、i分别存放在S1、S2、S4中。这段C语句的模型机汇编代码是:addT1,S4,S4/寄存器T1中的值是2iaddT1,T1,T1/寄存器
16、T1中的值是4iaddT1,T1,S3/寄存器T1中存放了Ai的地址loadT0,0(T1)/寄存器T0=AiaddS1,S2,T0/g=h+Ai,4.5.1 C语言赋值语句编译为模型机的汇编语言程序,28,4.5.3 把C语言的条件转移语句编译成模型 机的汇编语言程序,把if语句编译成条件分支指令在下面的C代码中,f、g、h、i、j是变量:if(i=j)goto L1;f=g+h;L1:f=f-i;假设f到j这五个变量分别存放在寄存器S0到S4中,那么该程序编译后的代码是:beq S3,S4,L1/如果i等于j,跳到标号L1处 add S0,S1,S2/f=g+hL1:sub S0,S0,S
17、3/f=f-i,这条指令总是被运行,29,4.5.3 把C语言的条件转移语句编译成模型 机的汇编语言程序,把if-then-else语句编译成条件转移指令仍旧使用前面的变量和寄存器,编译下面的if语句:if(i=j)f=g+h;else f=g-h;编译成汇编语言就是:bne S3,S4,Else/如果ij,运行Else 标号的指令 add S0,S1,S2/f=g+h(跳过ij这种情况)jump Exit/跳到Exit处Else:sub S0,S1,S2/f=g-h(跳过如果i=j这种情况)Exit:,可见,为了实现高级语言(C语言)的分支转移,beq、bne和jump指令应是模型机的处理器
18、硬件能够实现的基本指令,30,4.5.4 把C语言的循环语句编译成模型机的 汇编语言程序,用下标变量的数组编译循环语句Loop:g=g+Ai;i=i+j;if(i!=h)goto Loop;假设变量g、h、i、j分别存放在寄存器S1、S2、S3、S4中。再假设该数组的基地址存放在寄存器S5中。那么这条循环语句的模型机汇编代码是:,31,4.5.4 把C语言的循环语句编译成模型机的 汇编语言程序,Loop:add T1,S3,S3/中间寄存器T1=2i add T1,T1,T1/中间寄存器T1=4i add T1,T1,S5/T1中存放Ai的地址 load T0,0(T1)/中间寄存器T0=Ai
19、 add S1,S1,T0/g=g+Ai add S3,S3,S4/i=i+j bne S3,S2,Loop/如果i不等于h,返到Loop,见循环语句,32,4.5.4 把C语言的循环语句编译成模型机的 汇编语言程序,编译一个while循环语句下面是一个典型的循环语句:while(savei=k)i=i+j;假设变量i、j、k分别存放在寄存器S3、S4、S5中,并且数组save的基地址存放在寄存器S6中。那么这条循环语句的模型机汇编语言程序是:,33,4.5.4 把C语言的循环语句编译成模型机的 汇编语言程序,Loop:add T1,S3,S3/中间寄存器T1=2i add T1,T1,T1/
20、中间寄存器T1=4i add T1,T1,S6/T1中存放savei的地址 load T0,0(T1)/中间寄存器T0=savei bne T0,S5,Exit/如果saveik,跳出 循环体 add S3,S3,S4/i=i+j jump Loop/跳回到Loop处Exit:,见while循环语句,34,4.5.4 把C语言的循环语句编译成模型机的 汇编语言程序,编译一个小于比较指令在模型机中小于(比较)指令记为slt(set on less than)。例如:slt T0,S3,S4这条指令是指如果寄存器S3中的值要比寄存器S4中的值要小时,寄存器T0的值为1,否则为0。如果变量a(在寄存
21、器S0中)比变量b(在寄存器S1中)小,如果该条件成立,那么则转移到标号为Less的分支的编译代码是:slt T0,S0,S1/若S0S1(ab),则T0=1bne T0,ZERO,Less/若T00,跳到标号Less处,35,4.5.4 把C语言的循环语句编译成模型机的 汇编语言程序,模型机编译器使用slt、beq、bne指令以及通过读取值总为0的寄存器ZERO来建立所有相关的条件:相等、不等、小于、小于等于、大于、大于等于。,36,4.5.4 把C语言的循环语句编译成模型机的 汇编语言程序,从前面的讨论可以看出,模型机中提供的R型、I型及J型指令可以实现高级语言(如C语言)的顺序、转移和循
22、环程序结构。这些是高级语言程序的基本结构。人们通过对算法的研究知道,由顺序、转移和循环结构组成的程序可以完成任何复杂的计算。由此可见,模型机的指令系统已经具备了相当强的功能。,37,4.6 CPU的设计-数据路径与控制器,数据路径的建立通过模型机讨论数据路径的建立ALU控制器的设计主控制单元的设计,控制器的实现硬布线控制器单周期的实现多周期的实现微程序控制器,38,4.6.1 概论,研究指令系统的硬件接口。研究RISC的CPU设计。数据路径的建立。控制器的设计实现。硬布线(ALU控制单元和主控制单元)。微程序。,39,4.6.2 单周期数据路径,首先要理解以下概念:数据路径:处理器中各个部件之
23、间的信息通路。单周期数据路径:数据路径中的每一条指令的运行周期都相等。指令周期:一条指令从取指令开始到该条指令完全运行完毕所需要的最短时间间隔。控制单元:产生数据路径正确工作的控制信号的控制部件。控制单元也称为控制器。,40,4.6.2 单周期数据路径,建立数据路径的思想方法单独建立取指令和各类指令的数据路径,然后整合(拼接)起来,得到完整的数据路径。即分别建立取指令,R型、load/store、beq、jump指令的数据路径,然后整合。,单周期数据路径的优点:实现简单,控制器的设计容易;缺点:对于速度快的指令来说是一种性能上的损失,需要考察一条指令的运行需要的部件,对每一类指令建立局部的数据
24、路径。在讨论数据路径部件时,也要考虑控制信号,41,4.6.2 单周期数据路径,1.取指令的数据路径需要的第一个部件是存放程序指令的存储器。如图4.4-4.6所示。需要的第二个部件是程序计数器(PC),它保存指令的地址,见图4.4-4.6。需要的第三个部件是加法器,以便能够增加PC的值,使其指明下一条指令的地址。加法器是一个组合逻辑部件,记为Add,见图4.4-4.6。,42,4.6.2 单周期数据路径,要想运行指令,第一步就要先从存储器中取出指令。而为了准备好下一条将要运行的指令,还必须增加程序计数器PC的值,以使其指向下一条指令,其位置是当前指令的地址再加4(模型机1个字占4个字节)。取指
25、令的数据路径见图4.9,它使用了图4.4-4.6的三个部件。,43,4.6.2 单周期数据路径,2.R型指令的数据路径这类指令都要读两个寄存器,并在ALU中对两个寄存器的内容进行操作,然后再写操作结果。需要的部件有:寄存器堆,ALU。,44,4.6.2 单周期数据路径,寄存器堆寄存器堆是若干寄存器的集合,只要给出该寄存器堆中寄存器的编号,则其中的任何寄存器都可以读或者写),如图4.7-4.8所示。模型机的寄存器堆有32个寄存器。寄存器堆总共需要四个输入端(三个寄存器编号端口和一个数据端口)和两个输出端(两个都是数据端口),如图4.7-4.8所示。寄存器堆总根据输入的读端口的编号输出对应的寄存器
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第4章 中央处理器设计RISC1 中央处理器 设计 RISC
链接地址:https://www.31ppt.com/p-2379021.html