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

    电子科大-系统结构实验-解决控制冒险.docx

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

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

    电子科大-系统结构实验-解决控制冒险.docx

    鱼占西故土W实验报告课程名称:计算机系统结构实验学院:计算机科学与工程学院专业:计算机科学与技术指导教师:好老师学生姓名:爱学习的大哥哥实验成绩:日期:2017年5月26日电子科技大学计算机学院实验中心也孑科技大学实验报告一、实验工程名称:解决控制冒险二、实验室名称:主楼A2-412实验时间:2017年5月26日三、实验目的在给出的流水线代码根底上,增加ID级关闭写使能信号,以解决不正确分支指令的影响。通过完成这次实验,加深对控制冒险现象的产生和消除控制冒险的原理的理解,提高编程和测试的能力。四、实验原理(一)转移相关问题转移指令改变程序顺序执行的特性。由于是流水线操作,在转移发生之前,假设干条转移指令的后续指令已被取到流水线处理机中。这就是所谓的转移相关问题(branchhazard),有时也称之为控制相关问题(COntroIhaZard)O回忆我们前面介绍的处理转移相关问题的4种技术:以上任何一种方法都会使硬件固定,编译时会根据硬件机制和转移行为对代码进行调度,以获取最正确性能。(二)消除无条件转移指令的后一条指令影响每条指令在ID时判断在当前在EXE阶段的操作码暂存器的值是否是无条件转移指令:如果是,那么不使能当前在ID阶段的那条指令的WZ、WMEM和WREG的信号,这样这条指令的执行就对程序的逻辑没有影响。(三)条件转移指令条件转移指令的实现思想与无条件转移指令有所类似,但不完全相同。首先对于条件转移指令本身来说,需要判断Z标志是否能用。假设Z标志还没有准备好,那么要暂停流水线一个时钟周期。这一点和判断数据相关极为相似。但由于转移指令只可能改变PC而不改变其它状态,因此用不着封锁WZ,WMEM,WREG(对转移指令来讲,这些信号原本就为OJo因为如果处在译码级的是条件转移指令,而且处在EXE级的是A1.U类型的指令(就要写Z标志到流水线存放器Z了),那么要等到A1.U指令写完Z后,再判断转移与否,为此要暂停一个周期(或者如前所述,插入一条nop指令)。对于条件转移指令的下一条指令的处理方法与无条件指令不同。因为条件转移的下一条指令有可能执行也有可能不执行,需要在对无条件转移指令的处理策略上进行扩展:条件转移的下一条指令在ID时判断在当前在EXE阶段的操作码暂存器的值是否是条件转移指令并且判断是否转移成功(Z的值没变),如果发现成功,那么不使能当前在ID阶段的那条指令的WZ、WMEM和WREG的信号,这条指令的执行就对程序的逻辑没有影响(与无条件处理方式相同);如果发现转移不成功,说明本条指令为有效指令,使能当前在ID阶段的那条指令的WZ、WMEM和WREG的信号,本条指令正常执行。五、实验内容在给出的流水线代码根底上,增加ID级关闭写使能信号,以解决不正确分支指令的影响。六、实验器材(设备、元器件)ISEDeSignSUiteI4.7集成开发环境,编程语言:Verik)gHD1.硬件描述语言七、实验步骤1、新建工程,将上个实验完成的解决数据冒险与数据前推的代码拷贝进来2、在直接跳转中,需要废除跳转指令的下一条(当译码出跳转指令时,下一条已经流出,所以要废除掉);而在条件跳转中,需要根据Z的值来判断是否废除下一条指令。在代码中译码级,PCSoUrCe定义如下assignpcsource=i_jri_ji_ja1;选择下,条指令的地址,00选PC+4,Ol选转移地址,10选存放器内地址,11选跳转地址assignpcsource=i_beq&rsrtequi_bne&-rsrtequi_ji_jal;1.OADDEPEN,BTAKEN,ID_branch);如果是直接跳转,那么一定废除,Pcsource=Il,如果是条件跳转,废除的条件就是pcsource=01,暂不考虑jr指令,那么要废除下一条指令的条件就是pcsource=00;3、在顶层模块添加变量wirewz;/决定是否写Z值wire:exepcsource;/exepcsource主要用在条件跳转WZ需要在id级计算出来,然后传递到exe级,如果废除指令那么WZ=0;exepcsource与之相反,从exe级传递到id级,用来指示下一条指令是否废除。4、增加这两个变量后,顶层模块id级与exe级的代码如下pipeidid_stage(dpc4,inst,/指令译码工D级wrnzwdizwwregzclockrresetn,bpc,jpc,pcsorce,dwreg,dm2reg,dwmem,daluc,daluimmfda,db,dimmfdrn,dshift,djal,Z,ern,mrn,ewreg,InWreg,idadepend,idbdepend,em2reg,wpc,exepcsource,wz);pipeexeexe_stage(wz,ealuc,ealuimm,eazeb,eimm,eshiftzernO,epc4,指令执彳j:EXEejal,ernzealuzZ,malu,wmo,exeadependfexebdepend);5、参加exepcsource后,根据步骤2的分析,如果PCSoUrCe!=OO,就废除掉下一条指令,即wreg、Wmem、WZ全部置0,这里需要注意的是,WZ的值有多种表示方法,由于WZ只在控制冒险中使用,并且在控制冒险中Wreg=Wmem=wz,所以这里可以直接将Wreg的值赋给wz,也可以wz=exepcsource0(pcsource0=i_beq&rsrtequ|i_bne&-rsrtequ|iJiJal,在条件跳转中pcsource0=i_beq&rsrtequ|i_bne)assignwreg=(i_add|i_subi_muli_andi_ori_xori_sll/wreg为1时写存放器堆中某一存放器,否那么不写i_srlIi_srai_addii_mulii_andii_orii_xorii_lwIi_luiIi_jal)&wpc&(exepcsource=)&(exepcsource=);assignwmem=i_sw&wpc&(exepcsource=)&(exepcsource=);/为1时写存储器,否那么不写assignWZ=Wregid级CU模块完整代码如下:modulepipeidcu(rsrtequ,func,op,wreg,m2reg,wmem,aluc,regrt,aluimm,sext,pcsource,shift,jal,”数据前推参加的参数*/exe_rd,mern_rd,exe_wreg,mern_wreg,idadepend,idbdepend,rs,rt,rd,exe_m2reg,wpc,exepcsource,wz);input:exepcsource;input:exe_rd,mem_rd,rs,rt,rd;inputexe_wreg,mern_wreg,exe_m2reg;output:idadepend,idbdepend;outputwpc;/wreg是否写存放器/dm2reg为1时将存储器数据写入存放器,否那么将A1.U结果写入存放器/dwmem为1时写存储器,否那么不写/daluimm为1时A1.Ub输入端使用立即数/dshift为1时A1.Ua输入端使用移位位数/djal为1时执行jal指令,否那么不是inputrsrtequ;input:funczop;outputwzfwregfr112reg,wmem,regrt,aluimmfsext,shiftfjal;output:aluc;output:pcsource;wirei_add,i_sub,i_mul,i_and,i_or,i_xor,i_sll,i_srl,i_sra,i_jr;对指令进行译码wirei_addi,i_muli,i_andi,i_ori,i_xori,i_lw,i_sw,i_beq,i_bne,i_lui,i_j,i_jal;and(i_add,op,op,op,op,op,op,*func,func,func);and(i_sub,op,op,op,op,op,op,*func,func,func);and(i_mulz*op,op,op,op,op,op,*func,func,func)and(i_and,op,op】,op,op,op,op,func,func,func)and(ior,-op,op,op,op,op,op,func,func,-func);and(i_xorz*op,op,op,op,op,op,func,func,*func),and(i_sra,-op,op,op,op,op,op,func,-func,func)fand(isrl,-op,op,op,op,op,op,-func,func,*func)fand(i_sll,-op,op,op,op,op,op,funczfunczfunc);and(ijr,-op,op,op,op,op,op,funcf-func,func);and(i_addi,-op,op,-op,op,op,op);and(i_muli,-op,op,op<op,op1,op);and(i_andi,-op,op,op,op,op,op);and(i_oriz-op,op,op,op,op,op);and(i_xori,-op,op,op,op,op,op);and(i_lw,-op,op,op,op,op,op);and(i_sw,-op,op,op,op,op,op);and(i_beg,op,op,op,oproprop);and(i_bne,-op,op,op,op,op,op);and(i_lui,*op,op,op,op,op,op);and(i_j,-op,op,op,op,op,op);and(i_jal,op,op,op,op,op,op);wirei_rs=i_addi_subi_muli_andi_ori_xori_jri_addii_mu1ii_andii_orii_xorii_lwi_swi_beqi_bne;wirei_rt=i_addi_subi_muli_andi_ori_xori_srai_srli_slli_sw|i_beqi_bne;/控制信号的生成Iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiassignwreg=(i_add|i_subi_muli_andi_ori_xori_sll/wreg为1时写存放器堆中某一存放器,否那么不写i_srlIi_srai_addii_mulii_andii_orii_xorii_lwIi_luiIi_jal)&wpc&(exepcsource=)&(exepcsource=);assignregrt=i_addii_mulii_andii_orii_xorii_lwi_lui;/regrt为1时目的存放器是rt,否那么为rdassign为1时执行jal指令,否那么不是assignm2reg=i_lw;/为1时将存储器数据写入存放器,否那么将A1.U结果写入存放器assignShift=i_sl11i_srli_sra;为1时A1.Ua输入端使用移位位数assignaluimm=i_addii_mulii_andii_orii_xorii_lwi_luii_sw;/为1时A1.Ub输入端使用立即数assignsext=i_addii_mulii_lwi_swi_beqi_bne;为1时符号拓展,否那么零拓展assignaluc=i_sra;/A1.U的控制码assignaluc=i_subi_ori_orii_xori_xorii_srli_srai_beqi_bne;/A1.Ufi¾控制码assignaluc=i_slli_srli_srai_lui;A1.U的控制码assignaluc=i_andi_andii_ori_orii_xori_xorii_beqi_bne;/A1.U的控制码assignaluc=i_muli_mulii_xori_xorii_slli_srli_srai_beqi_bne;/A1.U的控制码assignwmem=i_sw&wpc&(exepcsource=)&(exepcsource=);/为1时写存储器,否那么不写/assignwmem=i_sw&wpcir;判断相关性assignrslIsReg=i_andi_andii_ori_orii_addi_addii_subi_lwIi_swIi_sllIi_srli_sra;assignrs2IsReg=i_andi_ori_addi_subi_slli_srai_srl;assignexe_a_depen=(rs=exe_rd)&(exe_wreg=)&(rslIsReg);assignmem_a_depen=(rs=mem_rd)&(mem_wreg=)&(rslIsReg);assignexe_b_depen=(rt=exe_rd)&(exe_wreg=)&(rs2IsReg)(rd=exe_rd)&(exe_wreg=)(isw);assignmem_b_depen=(rt=mem_rd)&(mern_wreg=)&(rs2IsReg)(rd=mem_rd)&(mem_wreg=)&(i_sw);assignidadepend=(mem_a_depen);assignidadepend=(mem_a_depenexe_a_depen);/a_depen和b_depen信号全部都需要在暂停流水线时候跟随检测assignidbdepend=(mern_b_depenaluimm|);assignidbdepend=(mem_b_depenexe_b_depen);/b_depen00b01imm10mem_wb11wb_cassignstall=(rs=exe_rd)&exe_m2reg&rslIsReg)(rt=exe_rd)&exe_m2reg&rs2IsReg)(rd=exe_rd)&exe_wreg&i_sw)(rd=mem_rd)&mem_wreg&i_sw);assignWZ=Wreg;assignwpc=*stall;assignpcsource=i_jri_ji_jal;/选择卜条指令的地址,00选PC+4,01选转移地址,10选存放器内地址,11选跳转地址assignpcsource=i_beq&rsrtequi_bne&rsrtequi_ji_jal;endmodule八、实验数据及结果分析(一)画出修改后的流水线图(二)写出增加的多路选择器的选择信号逻辑函数增加的多路选择器信号逻辑函数如下:/加上数据前推之后变成四选一的多路器mux4x32alu_ina(ea,sa,malu,wmo,exe_a_depend,aIua);mux4x32alu_inb(eb,eimm,malu,wmo,exe_b_depend,alub);mux2x32save_pc8(ealu,epc8,ejal,ealu);/选择最后A1.U结果的来源,ejal为0时是A1.U内部算出的结果,为1时是PC+8assignern=ernejal;当jal指令执行时,把返回地址写入31号存放器alual_unit(alua,alub,ealuc,ealu,z,wz);/A1.U增加的多路选择器(四选一)的定义如下:modulemux4x32(a,al,a2,a3,s,y);input:a,al,a2,a3;input:s;output:y;assigny=(s=)?a0:(s=)?al:(s=)?a2:a3;四选,endmodule(三)流水线仿真结果,对仿真结果作必要说明1 .首先测试无条件跳转jump指令,代码如下测试branch指令(无条件转移)assignrom,hOC三32h4;/jump,2;跳转到addr3,rl,r2assignrom),hlli2,h28003c62;/orir2,r3,15;assignromj,hO2=2,h02;/addr3,rl,r2;assignrom,h03=-i2,h02;/addr3,rl,r2;assignrom>,hK2,h02;/addr3,rl,r2;assignrom,h05=2,h00000000;在指令中,第一条指令便是一条无条件跳转指令,要跳转到地址为2的指令,控制冒险应废除掉Ori指令,即r2不写入r315(15),到了add指令时,ahi结果应为O运行程序,观察结果分析一下,在30OnS时,计算出Ori指令的值为15,但是并没有写入存放器,因为在400ns时alu的值为0,故证明了无条件跳转的控制冒险消除成功。2 .测试条件跳转branch,代码如下测试branch指令的停顿assignrom='h二:;/luirl,00assignror11'=;/beqnext(beqrlr21)assignrom=;/orir4,rl,8080assignrom'h=2;/subr8,r9,r4fffassignror11=;/addir5,r,44assignrom=;/storer2,OxO(r4)80在代码中,可以看到beq判断rl,2是否相同,因为二者都是0,自然要跳转到下一条语句,也就是SUb语句,因此Ori指令没有执行,Ori指令也正是前面提到要废除的指令,ori中将r4的值设为rl80(80),如果控制冒险消除正确,M的值不会发生改变,也就是执行到sub指令时,alu计算出r8的值仍然为O0运行程序,查看测试结果:接下来,进行分析,在第400ns,alu的值为bf800050(80),但是此时因为检测到了控制冒险,因此该值并没有写入M,这一点从图中在下一个时钟周期(50OnS)alu的值为0可以得到验证,因为如果M写入80,alu的值应为-80,因此,条件转移的控制冒险成功消除。九、总结、改良建议及心得体会(一)总结:经过对代码的改写,包括添加变量、模块参数、修改模块代码、增改连线、反复测试、修改等,成功地通过WZ、WMEM>WREG信号消除了无条件转移语句和条件转移语句的后一条指令的影响,较好的完成了本次实验。(二)改良建议:如果能够有板子可以跑一下,就更有意思了,像之前的计算机组成原理那样,实验的最后一步是下载到板子上运行。(三)心得体会:1、先搞懂原理,画图,再编程2、编写多组指令进行测试,并且注意查看内部存放器的值,而不仅仅是查看结果。

    注意事项

    本文(电子科大-系统结构实验-解决控制冒险.docx)为本站会员(李司机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

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




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开