您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > 作业2—lab2指令集流水化实验—计算机体系结构
Lab2指令集流水化实验报告学号:12281166姓名:崔雪莹Exercise1:WhatishexcodeforNOPorSLLR0,R0,R000000000H.Exercise2:Bylookingatthebinarycodeoftheinstruction,discoverthefollowingfields:Rs:00100,Rt:00011,Rd00101,16-bitImm(Imm16)0010100000100000,Shiftamount00000,FunctionCode100000,WriteMemWrite0andRegWrite1forthisinstruction.Whatisuseof16-bitImmediatefieldinthisinstruction?16位立即数是对branch指令来说的跳转目的地址的偏移地址,add指令没有作用。IfthesameinstructionwereaBranchinstruction,theimmediatefieldwouldhaverepresentedaBranchOffset.WhatisthepotentialTargetAddress43092立即数十进制表示为10272,目的地址为10272*4+2004=43092Exercise3:LWInstructionRs:01000,Rt00111,Rd32(00000),16-bitImm(Imm16)1111111100111000,Shiftamount29(11101),FunctionCode100011,WriteMemWrite0andRegWrite1forthisinstruction.WhatisuseofFunctionfiledandShiftAmountinthisinstruction?操作数表明操作为LW读操作,是指令操作的唯一标记,移位量是相对与移位指令来说移几位,在LW指令没有作用。IfthesameinstructionwereaBranchinstruction,theimmediatefieldwouldhaverepresentedaBranchOffset.WhatisthepotentialTargetAddress1204,(-200*4)+2004=1204。Exercise4:BranchTargetFoundAdress1204,IsItsameasEX.3是?BinputtoALU-200,Why?因为对于I型指令只有rs,rt和立即数,没有rd,是rs和立即数Imm运算的结果进行操作,所以B最终送ALU的是立即数而不是rt,ALUOut800,ALUOP=ADD,Why因为立即数是偏移量,所以运算器是对R8和-200求和,得到的为目的地址.LMD525252,Rdest7whythis?因为没有rd,但是是取800地址的内容,回送到R7里。RegWrite1,MemWrite0,WhataretwovaluesattheinputofverylastMUXintheWBstage525252,800,Whichvalueisselected525252,why因为最终写回的是525252的值,而不是ALU运算的结果800.FinalRegisterFileValues.R7,525252,R8,1000.Exercise5:SWinstructionRs:01000,Rt00111,Rd32(00000),16-bitImm(Imm16)1111111100111000,,Shiftamount28(11100),FunctionCode101011,WriteMemWrite1andRegWrite0forthisinstruction.WhatisuseofFunctionfiledandShiftAmountinthisinstruction?操作数表明操作为SW读操作,是指令操作的唯一标记,移位量是相对与移位指令来说移几位,在SW指令没有作用。IfthesameinstructionwereaBranchinstruction,theimmediatefieldwouldhaverepresentedaBranchOffset.WhatisthepotentialTargetAddress1204,(-200*4)+2004=1204。Exercise6:BranchTargetFoundAdress1204,IsItsameasEX.3是?BinputtoALU-200,Why?因为对于I型指令只有rs,rt和立即数,没有rd,是rs和立即数Imm运算的结果进行操作,所以B最终送ALU的是立即数而不是rt,ALUOut800,ALUOP=ADD,Why因为SW是想把R7里的内容存到目的地址,立即数是偏移量,所以运算器是对R8和-200求和,得到的为目的地址.LMD7777,Rdest7whythis?因为没有rd,但是是把R7里的内容存到目的地址800里。RegWrite0,MemWrite1,Why因为现在是存数,存到memory里,不是register里,所以MemWrite置1,RegWrite置0,WhataretwovaluesattheinputofverylastMUXintheWBstage7777,800,Whatisselected800why因为写回memory地址为800(不太懂).FinalRegisterFileValues.R7,7777,R8,1000.Exercise7:SignalNameValueWhyID.A22222ID正在分析SWR1,200(R2)Rs=Reg[2]=22222ID.B11111Rt=Reg[1]=11111ALUOUTinEXE9000EXE正在执行SLTIR9,R10,-1000运算结果为10000-1000=9000ALUOUTinMEM88988MEM正在进行LWR7,100(R8)运算结果为100+88888=88988ALUOUTINWB122221WB正在写回ADDR4,R5,R6结果为55555+66666=122221RDESTinID0ID正在分析SWR1,200(R2)没有涉及到RdRDESTinEXE9EXE正在执行SLTIR9,R10,-1000R9作为Rt,在选择时被选为RdRDESTinMEM7同理,R7被选为RdRDESTinWB4对于ADDR4,R5,R6R4为RdLMDinMEM77777从memory地址88988读到的数据为77777LMDinWB999上一个NOP的LMD为999没有被选择FinalValuesofRegisterFileR1=11111,R2=22222,R3=0,R4=122221,R5=55555,R6=66666,R7=77777,R8=88888,R9=0,R10=10000,R11=-1000,R12=12000,R13=13000Exercise8:ExpectedValuesofRegisterFileADDR1,R2,R3R2=22222,R3=33333,所以R1=55555SUBR5,R6,R1R6=66666,R1=55555,所以R5=11111ADDR4,R1,R5R1=55555,R5=11111,所以R4=66666SWR1,200(R4)R4=66666,所以memory地址为66866值为55555LWR4,100(R1)R1=55555,令55655地址内容为77777,所以R4=77777综上,R1=55555,R2=22222,R3=33333,R4=77777,R5=11111,R6=66666ActualValuesofRegisterFile实际上,R1=55555,R2=22222,R3=33333,R4=77777,R5=55555,R6=66666Reasonondifference发现期望值与实际实验的值不一样,我仔细观察指令的流水化过程,比如ADDR1,R2,R3R2=22222,R3=33333,所以R1=55555SUBR5,R6,R1R6=66666,R1=55555,所以R5=11111这是我期望的结果和过程,但实际上第一条指令走到WB阶段,R1值55555还没写回时,第二条指令已经取到了原始的没有写回R1的值11111,计算得到的R5为55555,当第一条指令写回后第二条指令走到了WB,结果没改变,造成错误,同理,接下来的计算类似,只是因为赋值特殊,所以看不出来变化,实际实现机制是不一样的。所以上述结果出现错误。Exercise9:Instruction\ClockCycle123456789101112ADDR1,R2,R3IFIDEXEMEMWBNOPIFIDEXEMEMWBNOPIFIDEXEMEMWBSUBR5,R6,R1IFIDEXEMEMWBExercise10:Instruction\ClockCycle1234567891011121314151617ADDR1,R2,R3IFIDEXEMEMWBSUBR5,R6,R1IFIDIDIDEXEMEMWBADDR4,R1,R5IFIFIFIDIDIDEXEMEMWBSWR1,200(R4)IFIFIFIDIDIDEXEMEMWBLWR4,100(R1)IFIFIFIDIDIDEXEMEMWB实验体会与心得:这次实验是关于指令流水化的内容,课上关于流水化只讲解了一些概念,并没有一个相对直观的感受,实验使用软件模拟化直观的看出指令的流水,印象十分深刻。实验过程中,我发现流水化的一些疑问,比如说上一条指令的结果是下一条指令的源,这样在流水化过程中就会出现错误,这个问题在exercise8,exercise10,可以直观的看到,并且exercise10通过引入了NOP,很好的实现了等待,结果不会出现错误。另外一个疑问就是关于指令格式,上一次实验我们学习了一些指令格式,但是有一些指令格式是没有目的寄存器的,关于这个问题exercise4和exercise6都有类似的问题。实际上,硬件对每一条指令处理都按照相同的机制,比如说无论什么类型的指令,都要生成一个目的寄存器Rd,都根据16位立即数,生成一个跳转的目的地址,等等,在实现的过程中,有的被选择是正确的,比如执行跳转指令,16位立即数是有用的,有的在选择的时候被舍弃,比如执行ADD指令,就算计算出来跳转目的地址也被舍弃,如exercise2。所以对于硬件来说,所有的指令都是“一视同仁”的。
本文标题:作业2—lab2指令集流水化实验—计算机体系结构
链接地址:https://www.777doc.com/doc-4706418 .html