欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    第4章 中央处理器设计(RISC)(1).ppt

    • 资源ID:2379021       资源大小:1.67MB        全文页数:248页
    • 资源格式: PPT        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第4章 中央处理器设计(RISC)(1).ppt

    2,第4章 中央处理器设计(RISC),中央处理器也简称为处理器(或称为CPU)是组成计算机系统的核心部件,是计算机组成原理研究的主要内容之一。,3,4.1 计算机组成的层次概念,软件应用软件系统软件编译,指令系统硬件数据路径数字电路物理实现,计算机系统的层次结构见图4.1,4,4.2 RISC与CISC,4.2.2 精简指令系统计算机体系结构精简指令系统的依据通过优化典型的高级语言程序中最耗费时间的操作,能够更好地支持高级语言。RISC结构通常体现如下几点:首先是使用大量的寄存器;其次,要精心设计流水线;最后,应采用相对简单的指令系统。这对于在单一芯片上实现CPU是有益的。,5,4.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,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。其含义是将寄存器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)把数据从存储器中读到寄存器中的情况称为读(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指令的功能如下: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寄存器,寄存器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指令应用举例将如下的一个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位数据,然后使用立即数加法指令装入低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)式右边的“某寄存器”应使用哪个寄存器?条件转移指令要根据当前指令的运行结果来判断下一条指令的地址,因此它们倾向转向附近的指令。当把指令格式中的低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/转向指令10000,20,4.4 汇编语言概念,翻译器(translator):翻译器是这样一种程序,它可以把用某种语言编写的用户程序转换成另一种语言的程序。源语言(source language):翻译器转换之前的程序使用的语言称为源语言。目标语言(target language):翻译器转换之后的语言称为目标语言。,21,4.4 汇编语言概念,汇编语言与汇编器(assembler):如果源语言基本上是数字型机器语言的符号表示,则源语言称为汇编语言,相应地就把这种源语言的翻译器称为汇编器。编译器(complier):如果源语言是C语言(或Java语言等)这样的高级语言,而目标语言或者是数字型机器语言或者是机器语言的符号表示(即汇编语言),那么这种翻译器就称为编译器。,22,4.4 汇编语言概念,在纯粹的汇编语言中,每条语句都精确地产生一条机器指令。汇编语言程序员可以访问目标计算机的所有指令,可以利用目标计算机的所有特性,而高级语言程序员就没有这样的能力。汇编语言和高级语言的另一个重要的区别是:汇编语言程序只能运行在指令系统相同的系列计算机上,而高级语言程序则可以运行在各种不同的计算机上。汇编语言编写程序不方便,强迫程序员用机器的方式思考问题。,23,4.5 指令系统软件的接口,在这一节里,将考虑将高级语言C语言的源程序转换成模型机的汇编语言程序,看看模型机的汇编语言程序究竟要完成哪些基本的操作,这将有助于加深理解中央处理器的硬件设计部分。,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赋值语句: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;对应的模型机汇编代码是:load 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/寄存器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,S3/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指令应是模型机的处理器硬件能够实现的基本指令,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 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/中间寄存器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(在寄存器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语言)的顺序、转移和循环程序结构。这些是高级语言程序的基本结构。人们通过对算法的研究知道,由顺序、转移和循环结构组成的程序可以完成任何复杂的计算。由此可见,模型机的指令系统已经具备了相当强的功能。,37,4.6 CPU的设计-数据路径与控制器,数据路径的建立通过模型机讨论数据路径的建立ALU控制器的设计主控制单元的设计,控制器的实现硬布线控制器单周期的实现多周期的实现微程序控制器,38,4.6.1 概论,研究指令系统的硬件接口。研究RISC的CPU设计。数据路径的建立。控制器的设计实现。硬布线(ALU控制单元和主控制单元)。微程序。,39,4.6.2 单周期数据路径,首先要理解以下概念:数据路径:处理器中各个部件之间的信息通路。单周期数据路径:数据路径中的每一条指令的运行周期都相等。指令周期:一条指令从取指令开始到该条指令完全运行完毕所需要的最短时间间隔。控制单元:产生数据路径正确工作的控制信号的控制部件。控制单元也称为控制器。,40,4.6.2 单周期数据路径,建立数据路径的思想方法单独建立取指令和各类指令的数据路径,然后整合(拼接)起来,得到完整的数据路径。即分别建立取指令,R型、load/store、beq、jump指令的数据路径,然后整合。,单周期数据路径的优点:实现简单,控制器的设计容易;缺点:对于速度快的指令来说是一种性能上的损失,需要考察一条指令的运行需要的部件,对每一类指令建立局部的数据路径。在讨论数据路径部件时,也要考虑控制信号,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个字节)。取指令的数据路径见图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所示。寄存器堆总根据输入的读端口的编号输出对应的寄存器中的内容。但是,写则必须由写控制信号来控制,并在时钟周期的边沿(如上升沿)写入。,45,4.6.2 单周期数据路径,ALU需要一个ALU对从寄存器堆中读出的数据进行操作(图4.7-4.8)。ALU(图4.7-4.8)接收两个32位的输入数据并产生一个32位的输出数据。,46,4.6.2 单周期数据路径,R型指令的数据路径见图4.10。它使用的是图4.7-4.8的寄存器堆和ALU。因为寄存器的编号来自指令的相应字段,因此,图4.10中画的指令来自图4.9,指令的相关字段连接到寄存器堆的寄存器编号的输入端。,47,4.6.2 单周期数据路径,3.load和store指令的数据路径需要的部件除了寄存器堆和ALU以外,还需要一个符号扩展单元,一个数据存储器。见图4.11。符号扩展单元用来对指令的16位偏移量字段中的数值进行符号位扩展,以转换成带符号的32位数值。见图4.11。数据存储器用来读取和存储数据。数据存储器只有在存储(store)指令时,才能被写入数据;因此,它必须有读写控制信号,一个地址输入,一个将数据写入存储器的输入。见图4.11。,48,4.6.2 单周期数据路径,图4.12给出了假设指令已经读出的情况下,上述部件组合在一起,形成读写数据字指令的数据路径。寄存器堆中寄存器编号的输入来自指令的相关字段。偏移量数值的输入也来自指令的相关字段,经过符号位扩展以后,作为ALU的第二个输入。,49,4.6.2 单周期数据路径,4.beq指令的数据路径需要寄存器堆,ALU,符号扩展单元,加法器Add。beq指令有三个操作数,两个寄存器操作数用来比较相等性,另一个16位偏移量用来计算转移的目标地址。要实现这一指令,就必须计算转移的目标地址,这可以用指令字段中经过符号扩展的偏移量与PC+4相加而求得。,50,4.6.2 单周期数据路径,除了计算转移目标地址以外,还应该确定下一条指令是顺序运行还是转去运行转移目标地址的指令。当转移条件为真时(即两个操作数相等),转移指令的地址就成为新的PC值,此时称为转移成功。如果操作数不相等,则已经增加了的PC值(PC+4)就成为当前的PC值,这种情况称为转移不成功。,51,4.6.2 单周期数据路径,因此,beq指令的数据路径必须做两个操作:一个是计算转移目标的地址,而另一个是比较寄存器中数值的内容。图4.13给出了beq指令的数据路径。将两个寄存器操作数送给ALU,通过控制命令,可以使ALU做减法运算。见图4.13。ALU提供了一个输出信号来指示运算结果是否为零。如果ALU的Zero端有输出信号,则表明两个数值相等。见图4.13。虽然当ALU的运算结果为零时,Zero总有输出信号,但是,该信号只有当用于相等转移的条件测试时才被使用。,52,4.6.2 单周期数据路径,5.jump指令的数据路径无条件转移指令(jump)的运行是这样的:用指令中的低26位左移两位来代替PC中的低28位。这种移位仅仅是将转移的偏移量后面连接00。,53,4.6.2 单周期数据路径,既然对每一类的数据路径都进行了描述,现在就可以把它们组合在一起,再加上控制信号来实现整个的数据路径。图4.9,图4.10,图4.12,图4.13将用于两种不同的实现。,54,4.6.2 单周期数据路径,这一节里,将讨论一个简单的实现方案。通过将各类数据路径段“装配”起来,再加上需要的控制信号,就可以构成一个简单的数据路径和对它的控制。这种简单的实现包括load(读),store(写),beq(相等转移)及算术逻辑指令add(加),sub(减),and(与),or(或)。,55,4.6.2 单周期数据路径,假设由图4.9,图4.10,图4.12和图4.13给出的各个数据路径段出发,来建立一个数据路径。最简单的数据路径是每条指令的运行都需要一个时钟周期。这意味着每条指令的运行所使用的数据路径的资源不会超过一次,因此,任何需要使用一次以上的部件都需要重建。,56,4.6.2 单周期数据路径,需要将指令存储器和数据存储器分开。虽然当把各类数据路径部件组合起来时,某些功能单元会被复制,许多部件还是可以被不同的指令流所共享。,57,4.6.2 单周期数据路径,为了在两类不同指令之间共享一个数据路径,必须允许对某一个部件的输入进行多重连接,并通过控制信号来选择不同的输入。这种选择通常用多路器来实现。多路器通过对它的控制线的设置来选择不同的输入。,58,4.6.2 单周期数据路径,例:R型指令的数据路径(图4.10)与load/store指令的数据路径(图4.12)是非常相似的,其主要的区别如下:ALU单元的第二个输入或者来自寄存器堆(R型指令,见图4.10)的输出或者来自指令的低16位经符号位扩展后的数据(load/store指令,见图4.12)。,59,4.6.2 单周期数据路径,存储到目标寄存器中的数值来自ALU(对R型指令)或者来自存储器(对load指令)。例:问如何使用多路器把两个数据路径组合起来,而不复制图4.10和图4.12中功能相同的部件?,60,4.6.2 单周期数据路径,解:要想只用一个寄存器堆和一个ALU把两个数据路径组合起来,必须使ALU的第二个输入端接收两个不同的源数据,以及存入寄存器堆中的两个不同的源数据。因此,一个多路器应位于ALU的输入端;另一个多路器应位于寄存器堆的数据输入端。图4.14给出了组合后的数据路径。,61,4.6.2 单周期数据路径,数据路径的取指令部分(图4.9),可以容易地添加到图4.14的数据路径中来。图4.15给出了组合后的结果。组合后的数据路径包括了一个指令存储器和一个数据存储器,且指令存储器与数据存储器相分离。这一组合的数据路径需要一个加法器和一个ALU,加法器用来完成PC的增量计算,而ALU用来在同一个时钟周期内运行指令。,62,4.6.2 单周期数据路径,现在,把转移的数据路径(图4.13)加进来,就可以把几个数据路径段组合起来,形成一个简单的数据路径,见图4.16。转移指令使用ALU来比较寄存器的操作数,于是图4.13中的加法器必须保留,以便用来计算转移的目的地址;另外,还需要一个附加的多路器,它用来选择后继顺序指令的地址(PC+4)或者是将转移目的地址写入PC,见图4.16。,63,4.6.2 单周期数据路径,既然已经建立了简单的数据路径,就可以把控制单元加进来。主控制单元应能够接收输入,并且对每一个状态部件产生一个控制信号,对每一个多路器产生一个选择控制信号,以及ALU控制单元的输入信号。增加了ALU控制单元的数据路径见图4.17。ALU控制单元应能产生对运算器ALU的控制信号。,主控制单元与ALU控制单元之间的关系是什么?请思考!,要特别注意ALU控制单元与运算器ALU的区别!见图4.17。,64,4.6.3 单周期数据路径的控制器,4.6.3.1 ALU控制单元假设运算器ALU的功能由输入的3个二进制位来控制,它的8种组合中的几个如表4.8所示。参见图4.19。ALU需要完成以下的功能中的一个。对于load和store指令,通过加法使用ALU来计算存储器的地址。对于R型指令,ALU需要完成and、or、add、sub运算,取决于指令字段中的6位funct字段(指令的低6位)的数值。对于beq指令,ALU必须进行减法计算。,65,4.6.3.1 ALU控制单元,ALU控制单元的输入为指令的funct字段和一个2位控制信号(称为ALUOp),ALU控制单元的输出为3位控制信号,见表4.9。这个3位的ALU控制单元的输出信号直接控制运算器(ALU)使其完成相应的操作。,请注意ALU控制单元的设计思想,66,4.6.3.1 ALU控制单元,ALUOp控制信号的作用对于load和store指令,ALUOp=00,ALU做加法;对于beq指令,ALUOp=01,ALU做减法;对于R型指令,ALUOp=10,ALU的具体功能由指令的funct字段决定。见表4.9。表4.10给出了ALU控制单元的输入输出之间关系的真值表。ALU控制单元的输入信号是2位ALUOp和6位funct代码;ALU控制单元的输出信号为3位,它作为运算器ALU的输入信号。,67,4.6.3.1 ALU控制单元,多级译码是一种通用的实现技术。例如,主控制单元产生ALUOp信号,ALU控制单元产生控制运算器ALU工作的实际信号。使用多级控制可以减少主控制单元的复杂性。使用几个小的控制单元也有增加整个控制单元速度潜力。这种优化是非常重要的,因为控制单元常常是受功能制约的。,这里采用的是多级译码技术。注意主控制单元与ALU控制单元之间的关系!见图4.20。,68,4.6.3.1 ALU控制单元,在许多情况下,我们并不关心输入的某些值,或者为保持真值表紧凑,也将一些“随意项”包括进来。真值表中的一个随意项(在输入列中记为x)指的是输出并不依赖于对应于那一列的输入值。一旦真值表建立起来,就可以得到优化,然后用门电路实现,从而完成ALU控制单元的实现。,69,4.6.3.2 单周期处理器主控制单元的设计,对于图4.16已经建立的数据路径,应该确定指令的各个字段的含义和控制线。回顾一下三类指令的格式,即R型、beq和load/store指令的格式。见图4.18。,70,4.6.3.2 单周期处理器主控制单元的设计,通过对所采用的指令格式的观察,可以得出以下几点:Op字段也称为操作码字段,总是包含在31-26位,我们把这一字段记为Op5-0。见图4.18。两个寄存器读总是由rs及rt字段确定,位置为25-21和20-16位。R型指令,相等转移指令和store指令都是这样。见图4.18。load和store指令的基址寄存器总是位于25-21位(rs)。见图4.18。,71,4.6.3.2 单周期处理器主控制单元的设计,beq、load和store指令的16位偏移量总是位于15-0。见图4.18。目标寄存器位于两个位置之一。对于load指令,它位于20-16位,而对于R型指令,它位于15-11(rd)。于是,需要增加一个多路器,用来选择使用指令的哪一个字段来具体指明待写入寄存器的编号。见图4.19。,72,4.6.3.2 单周期处理器主控制单元的设计,1.定义控制信号由于所有的多路器都有两个输入端,因此,每一个多路器需要一跟控制线。图4.19给出了七个一位控制信号及一个2位ALUOp控制信号。表4.11描述了这些控制信号的功能。,73,4.6.3.2 单周期处理器主控制单元的设计,带有主控制单元和控制信号的数据路径见图4.20。主控制单元简称为控制单元。除了funct字段直接确定的控制信号外,主控制单元能直接设置除PCscr以外的所有的控制信号。如果指令是beq并且ALU的零输出(Zero)有效,那么PCscr控制线就被置位。要产生PCscr信号,需要一个来自控制单元的称为转移(Branch)的信号与一个来自ALU的零输出(Zero)的信号相“与”。见图4.20,即:PCscr=Branch and Zero,74,4.6.3.2 单周期处理器主控制单元的设计,主控制单元的输入来自指令的操作码字段(指令的高6位),主控制单元的输出共有九位控制信号,见图4.20。其中七个是一位控制信号,见表4.11;一个两位控制信号为ALUOp。,75,4.6.3.2 单周期处理器主控制单元的设计,因为控制单元输出的控制线的定义仅仅依赖于指令的操作码字段,于是可以对操作码的每一组数值,把每一个控制单元输出的控制信号定义成0、1或x(随意项)。表4.12给出了如何对每一个操作码设置控制信号。,76,4.6.3.2 单周期处理器主控制单元的设计,2.数据路径的操作以上将几类不同的指令的数据路径整合后得到了图4.20的数据路径。现在回过头来,根据图4.20提供的数据路径,来考察一下各类指令的运行过程,这对于加深理解数据路径是很有帮助的。主控制单元的实现,77,4.6.3.2 单周期处理器主控制单元的设计,R型指令的运行假设有指令:add r1,r2,r3。运行一条R型指令需要以下四步:指令由指令存储器取出,且完成PC的增量计算。见图4.21。两个寄存器r2和r3由寄存器堆读出。主控制单元也在这一步中完成对控制线的设置。见图4.22和表4.12。ALU根据从寄存器堆中读出的数据进行操作,它使用funct代码(5-0位)来生成ALU的功能。见图4.23。ALU计算出的结果被写入寄存器堆,并根据指令的15-11位来选择要写入的目的寄存器。见图4.24。,78,4.6.3.2 单周期处理器主控制单元的设计,应该指出的是,这里的实现是组合逻辑实现,也就是说,事实上并没有上述的四个可以严格区分的顺序步骤。数据路径是在一个单一的时钟周期内运行的,在这个时钟周期中,数据路径中的各个信号可能会变得难以预测。信号能够大体上按照上面的顺序步骤稳定流动,是因为信息流也是按照这样一个顺序流动的。见图4.20。,79,4.6.3.2 单周期处理器主控制单元的设计,load指令的运行load r1,offset(r2)可以把load指令的运行分为五步(与R型的指令运行过程相似):指令由指令存储器取出,且完成PC的增量计算。见图4.25。寄存器r2(r2是源寄存器,对应于指令格式中的rs字段)的值由寄存器堆读出。见图4.26,图4.18和表4.12。ALU计算由该寄存器读出的值与指令的低16位(即offset)经符号扩展后的数之和。见图4.27。,80,4.6.3.2 单周期处理器主控制单元的设计,ALU的这个和值用做数据存储器的地址。见图4.28。把数据存储器单元读出的数据写入寄存器堆,目的寄存器r1(r1是目的寄存器,对应于指令格式中的rt 字段)由指令的20-16位给出。见图4.29和图4.18。,81,4.6.3.2 单周期处理器主控制单元的设计,beq指令的运行例如:beq r1,r2,offset,该指令的运行过程很象R型指令的运行过程,但ALU的输出用来决定PC写入的值究竟是PC+4还是转移目标的地址。它的运行分为四步:指令由指令存储器取出,且完成PC的增量计算。见图4.30。,82,4.6.3.2 单周期处理器主控制单元的设计,两个寄存器r2和r3由寄存器堆读出。见图4.31。ALU根据从寄存器堆读出的数据进行减法计算。PC+4的值与指令的低16位(offset)经符号扩展后再左移两位的数相加,得到的结果就是转移的目标地址。见图4.32和图4.18。ALU的Zero信号用来决定哪一个加法器的运算结果写入PC。见图4.33。,83,4.6.3.2 单周期处理器主控制单元的设计,3.主控制单元的实现主控制单元的输出是控制线,输出信号的取值见表4.12;主控制单元的输入信号是6位操作码Op5-0,Op5-0的取值见表4.13。因此,可以建立输入输出关系的真值表。把所有的输入、输出项组合在一起建立一张真值表,就可以描述控制单元的逻辑关系了,见表4.14。该表完全确定了控制功能,可以利用数字电路的基本知识直接由门电路来实现。,84,4.6.4 多周期数据路径,单周期的实现方案由于效率比较低,所以要对其进行改进,这就是下面要研究的多周期的实现方案。运行一条指令需要经历取指令、指令译码、执行三个阶段。若能够将一条指令完整的运行时间划分成一些更小的时间段,成为子周期。那么,指令系统的每一条指令都可以按照自己需要的子周期数去工作,而不必像单周期那样,选择指令系统中最慢的指令作为指令周期。,子周期的划分要根据CPU的主要部件的工作时间来确定,85,4.6.4 多周期数据路径,将指令周期划分成以下几个周期。取指周期:完成取指令所需要的时间。译码周期:对取出的指令进行译码,产生控制信号所需要的时间。执行周期:完成指令的功能所需要的操作的时间。机器周期:按照CPU内部的部件的工作时间来划分的工作周期称为机器周期。机器周期也称为CPU周期。时钟周期:CPU完成一个基本操作所需要的时间。时钟周期也成为节拍。主频:时钟信号的频率称为CPU的主频。,指令周期等于取指周期、译码周期和执行周期三者之和,一个指令周期等于若干个机器周期,一个机器周期等于若干个时钟周期,86,4.6.4 多周期数据路径,4.6.4.1 多周期数据路径的建立在单周期中,是把每一条指令按照功能的需要,分成一些串行的操作步骤,这些串行步骤会用到某些功能部件(如ALU,寄存器堆,数据存储器等)。在多周期的实现中,指令运行中的每一个单步都要占用一个机器周期。多周期实现允许每一条指令多次(一次以上)使用某一个功能部件,只要在不同的机器周期使用就行。这种共享有助于减少硬件的使用量。,87,4.6.4.1 多周期数据路径的建立,多周期设计的主要优点:允许指令使用不同数量的机器周期以及在单一的指令运行中共享多个功能部件。图4.34给出了多周期数据路径的示意图。把该图与图4.16的单周期数据路径相比较,可以看出以下的区别:单一的存储器单元既用于指令,也用于数据。只有一个ALU,而不是一个ALU和两个加法器。在每一个主要的功能部件后面都增加了一个或多个寄存器,以便保存该部件的输出值,使其能在随后的机器周期中使用。,88,4.6.4.1 多周期数据路径的建立,机器周期结束时,在随后的若干机器周期中要用到的所有数据都必须存放在状态部件之中。在随后的机器周期中,后继指令要使用的数据要存储在一个程序可见的状态部件中(即寄存器堆,PC或存储器中)。与之相对的是,在随后的机器周期中,同一条指令要使用的数据必须存储在某一个附加的寄存器之中。,89,4.6.4.1 多周期数据路径的建立,因此,决定附加寄存器的位置需要考虑两个因素:在一个机器周期中适合组合在一起的部件(单元)是什么?在后面的机器周期中完成指令的运行所需要的数据是什么?,90,4.6.4.1 多周期数据路径的建立,在多周期设计中,假设机器周期至多可以容纳下列的操作之一:存储器访问,寄存器堆访问(两个读和一个写),或者一个ALU操作。因此,由这三种功能部件(即寄存器堆、存储器或ALU)所产生的任何数据都必须存放在

    注意事项

    本文(第4章 中央处理器设计(RISC)(1).ppt)为本站会员(仙人指路1688)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开