您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 电子科技大学计算机系统结构综合实验实验报告
-1-电子科技大学计算机学院实验中心实验报告课程名称:计算机系统结构综合实验学院:计算机科学与工程学院专业:计算机科学与技术学生姓名:WolfAlice学号:2016020912016指导教师:米源评分:日期:2019年6月6日电子科技大学实验报告学生姓名:WolfAlice学号:2016020912016指导教师:米源实验地点:主楼A2-412实验时间:2019.5.24一、实验室名称:主楼A2-412二、实验项目名称:CPU流水线结构分析三、实验学时:4四、实验原理:(一)流水线处理机及其设计流水线(pipeline)是一种能够使多条指令重叠执行的处理机的实现技术,它已成为现代处理机设计中最为关键的技术。流水线处理机把一条指令的执行分成几个步骤,或称级(stages),每一级在一个时钟周期内完成。在每个时钟周期,处理机启动执行一条指令。如果处理机的流水线有m级,则同时可重叠执行的指令总条数将为m,每条指令处在不同的执行阶段。如果分级分得好的话,那么每一级都没有时间上的浪费,这是最理想的情况。流水线处理机的最大特点:每一个时钟周期取出一条指令来执行。所有的指令按取出的先后次序通过数据路径。依照指令类型的不同,每种指令在执行过程中可能会用到数据路径的不同的部分。1.流水线寄存器的引入在单周期处理机中,如果一条指令还没有执行完毕,PC的内容不会改变。这就使得在一条指令的整个执行过程中,IM始终输出当前指令。流水线处理机每个时钟周期都要取出一条指令。因此,当流水线处理机已从存储器取出一条指令并把它送到ID级去译码时,下一条指令也正在从指令存储器中取出。如果先取出的指令没被保存,则它后面正在被取出的指令会对它造成影响。也就是说,必须要使用寄存器来保存从存储器取出的指令。推而广之,我们必须要在流水线的各级之间安排一组寄存器,用以保存当前时钟周期各流水级操作的结果,以便为下个周期使用,我们称这些寄存器为流水线寄存器。在第一级与第二级之间,我们使用了一个被称为IR(instructionregister)的指令寄存-3-电子科技大学计算机学院实验中心器。对于字长为32位的处理机来讲,PC一般有30位,它存放的是32位指令的字地址。IR有32位,用来存放一条指令。第二和第三级之间需要较多的寄存器:*从寄存器堆中读出的两个32位数据A和B必须要保存。*经符号扩展后的32位立即数I也要保存。图中的ISE(immediatesign-extend)代表指令中立即数的符号扩展。*一个d寄存器(5位),它被用来保存目的寄存器号;因为指令的操作结果要在WB级写入寄存器堆,目的寄存器号也要在那时使用,因此必须要同步跟随过去。第三级和第四级之间除了d之外,还有Z,R和S:•Z用于存放ALU的一位ZERO标志。当ALU指令的运算结果为全0时,ZERO输出1,否则输出0。在执行条件转移指令时,Z用来决定是否真正转移。•S专为store指令而设,用来存放要被写入存储器中的数据。•R保存32位ALU运算结果。第四级和第五级之间的寄存器如下:•D存放load指令从存储器中读出的数据;•C只是保存前一级的R,即ALU指令的结果。•这一级d寄存器的输出用于指定目的寄存器,D或C的数据要被写入由d所指定的目的寄存器中。我们可以把寄存器堆看作是最后一级流水线寄存器。2.流水线处理机的5部分和数据路径我们把执行指令的过程分为5部分,使其能够按流水线方式执行指令。每一级所使用的名字及其要完成的动作如下:(1)IF(instructionfetch)取指令;•使用PC的内容访问指令存储器,取出指令,并在该级结束时,把指令打人IR寄存器。•下一条指令的地址也在这一级计算出,并把它打人PC寄存器。(2)ID(instructiondecode)指令译码并读寄存器操作数;指令译码级主要有两件事情要做:•从寄存器堆中读寄存器操作数和对指令中的立即数部分进行符号扩展。•此外:目的寄存器号要保存在流水线寄存器d中,以便在WB级指定把结果写入哪一个寄存器中。(3)EXE(execution)执行;*ALU运算类指令将在本级计算结果,并把它打人R寄存器。同时,ALU的ZERO输出也被打入Z寄存器。ALU的两个操作数,一个来自于寄存器rs1,它在前一级已被打人流水线寄存器A中了;另一个或是寄存器rs2操作数(B中内容),或是立即数(I中内容)。(4)MEM(memoryaccess)存储器访问;存储器访问级专为load/store指令而设。•load/store均使用流水线寄存器R的输出作为访问存储器的地址。store指令把S的内容写入存储器。load指令读存储器,并把读出的数据打入流水线寄存器D。•ALU指令在本级直接把R内容打入C。(5)WB(writeback)写回。写回级把指令结果写回到寄存器堆。目的寄存器号由从ID级一直传递过来d指定。写入的来源有两个:*一个是流水线寄存器D中的内容(load指令读出内容),即存储器数据;*一个是ALU的计算结果指令执行时从左移向右通过数据通路。但有两处从右向左的例外:•WB级,它把运算结果写回中间靠左位置的寄存器堆中;•IF级,它把经过计算的下一条指令的地址写入程序计数器PC中。下一条指令地址的计算方法有两种:一种是当前PC加4;另一种是当前PC加字地址偏移量,偏移量在指令中定义出。(二)流水线模型机的指令系统和指令格式ALU操作类型的指令存储器访问指令条件转移指令无条件转移指令ALU指令除了把运算结果写入寄存器堆之外,也把ZERO标志写入Z寄存器。条件转移指令使用Z标志决定是否转移,其它指令不影响Z寄存器。1、对于add/and/or/xorrd,rs,rt指令其中rs和rt是两个源操作数的寄存器号,rd是目的寄存器号。2、对于sll/srlrd,rt,shift指令移动shift位3、对于addirt,rs,imm指令符号拓展)rt是目的寄存器号,立即数要做符号拓展到32位。-5-电子科技大学计算机学院实验中心4、对于andi/ori/xorirt,rs,imm指令零拓展)因为是逻辑指令,所以是零拓展。5、对于loadrt,offset(rs)指令load是一条取存储器字的指令。寄存器rs的内容与符号拓展的offset想加,得到存储器地址。从存储器取来的数据存入rt寄存器。6、对于storert,offset(rs)指令store是一条存字指令。存储器地址的计算方法与load相同。7、对于beqrs,rt,label指令beq是一条条件转移指令。当寄存器rs内容与rt相等时,转移到label。如果程序计数器PC是beq的指令地址,则label=PC+4+offset2。offset左移两位导致PC的最低两位永远是0,这是因为PC是字节地址,而一条指令要占4个字节。offset要进行符号拓展,因为beq能实现向前和向后两种转移。8、bne指令去beq类似,但是是在寄存器rs内容与rt不相等时,转移到label。9、对于jumptarget指令jump是一条跳转指令。target是转移的目标地址,32位,由3部分组成:最高4位来自于PC+4的高4位,中间26位是指令中的address,最低两位为0。五、实验内容:1.贴出补全的CPU流水线结构图;2.对流水线中各模块,描述其端口信号的作用,模块的工作原理以及模块在流水线中的功能六、实验目的:1.熟悉代码中的模块名和接口信号,并理解其作用;2.通过补全流水线的模块图,进一步熟悉代码中各模块的连接细节,加强对流水线CPU工作原理的掌握。七、实验器材(设备、元器件)PC机实验环境:Windows8.1八、实验步骤:1.贴出补全的CPU流水线结构图;2.对流水线中各模块,描述其端口信号的作用,模块的工作原理以及模块在流水线中的功能九、实验数据及结果分析:1.贴出补全的CPU流水线结构图;2.对流水线中各模块,描述其端口信号的作用,模块的工作原理以及模块在流水线中的功能(1)IF(instructionfetch)取指令;1.程序计数器PCRPCR负责输出下一条指令的地址。输入信号:Clock:时钟信号Resetn:复位信号,低电平有效,此时pc被清零。Npc:输入下一条指令的地址输出信号:Pc:输出指令地址,若复位则为0,否则为npc.-7-电子科技大学计算机学院实验中心2.32位加法器加法器负责计算pc+4,即当前指令按顺序执行的下一条指令地址。输入信号:Pc:PCR输出的指令地址4:常数4,一条指令的长度输出信号:Pc4:pc+4用于输出至ID级计算跳转地址3.32位4选1选择器根据ID级的pcsource信号选择下一条指令的地址。输入信号:Pcsource:选择信号,选择下一条指令的地址。bpc:分支指令的下一条地址。jpc:跳转指令的下一条地址。Pc4:pc+4,正常顺序执行的跳转地址。32位常数0:复位时下一条地址为0输出信号:npc:输出下一条指令的地址4.指令存储器从存储器取出需要执行的指令。输入信号:Pc:下一条指令的地址。输出信号:inst:需要执行的指令(2)ID(instructiondecode)指令译码并读寄存器操作数;1.控制部件负责根据指令的类型,产生各类控制信号。输入信号:rsrtequ:判断ALU输出结果是否为0func,op:指令中相应控制码字段输出信号:wreg,m2reg,wmem,regrt,aluimm,sext,shift,wz:CPU控制信号,具体的意义在各个部件会详细介绍。它们被送到需要用到的部件上,或是传到寄存器当中供之后使用。aluc:ALU控制码pcsource:PC多路选择器控制码,选择下一条指令的地址2.寄存器堆寄存器堆有32个32位的寄存器,0号寄存器恒为0;在上升沿将数据写入寄存器。输入信号:rna,rnb:需要取寄存器a,b值的寄存器编号wn,d:需要回写到寄存器的数据和地址clk,clrn:时钟和复位信号we:回写使能控制信号输出信号:qa,qb:寄存器a,b的值3.5位2选1选择器选择目的寄存器是来自于rd,还是rt,取决是寄存器类型指令或是Load指令。输入信号:rd,rt:指令中对应的地址。Regrt:选择信号,当前指令类型是寄存器类型指令还是Load指令输出信号:id_rn:目的寄存器的地址4.32位加法器负责beq,bne指令的目标地址的计算。输入信号:pc4,br_offset:当前地址和偏移地址。输出信号:bpc:beq,bne指令的目标地址此外,ID级还输出以下信号:Jpc:jump指令的目标地址Imm:立即数操作数(3)EXE(execution)执行;1.32位选择器有两个,分别负责选择ALUa端、b端的数据来源。a端:输入信号:exe_a,sa:ALUa端的数据来源,寄存器或立即数扩展exe_shift:选择信号。-9-电子科技大学计算机学院实验中心输出信号:alua:ALUa端的数据b端:输入信号:exe_b,exe_imm:ALUb端的数据来源,寄存器或立即数exe_aluimm:选择信号。输出信号:alua:ALUb端的数据2.ALU负责运算的执行。输入信号:alua,alub:ALUa端、b端的数据。exe_aluc:ALU运算类型。输出信号:exe_alu,z:运算结果和z标志。Z标志用来判断运算结果是否为0。此外,这一级还将没有用到的控制信号送往下一级。(4)MEM(memoryaccess)存储器访问;Load/store指令需要在这一级访问存储器。输入信号:Datain,addr:数据和地址,load指令用addr指明地址,store指令用datain指明写入的数据。we:写入使能信号。Clk:时钟信号。输出信号:dataout:如果是取存储器数据,输出取出的数据。此外,这一级还将没有用到的控制信号送往下一级。(5)WB(writeback)写回:负责将需要写回寄存器的值送到ID级写入寄存器。输入信号:r_alu,m_o:alu运算结果和存储器取出的数据。m2reg:选择信号,
本文标题:电子科技大学计算机系统结构综合实验实验报告
链接地址:https://www.777doc.com/doc-6973783 .html