欢迎来到天天文库
浏览记录
ID:47025327
大小:1013.75 KB
页数:13页
时间:2019-06-28
《电子科大-系统结构实验-解决数据冒险》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验报告课程名称:计算机系统结构实验学 院:计算机科学与工程学院专 业:计算机科学与技术指导教师:好老师学生姓名:爱学习的小学生2014666666666实验成绩:日 期:2017年5月19日电子科技大学计算机学院实验中心12/13电子科技大学实验报告一、实验项目名称:解决数据冒险二、实验室名称:主楼A2-412实验时间:2017年5月19日三、实验目的在给出的流水线代码基础上,增加内部前推数据通路、暂停流水线数据通路和关闭写使能信号的数据通路,解决普通的数据冒险和load数据冒险,通过完成本次实验,更好地理解和掌握解决数据冒险的原理,学以致用,增强编写程序的能力。四
2、、实验原理(一)数据冒险的定义由于流水线上指令重叠执行,改变了原来串行执行的读/写操作数顺序,使得后面依赖前面指令结果的指令得不到准备好的数据,这样的现象叫做数据冒险(数据相关)。回顾数据冒险的程序例子I1:addr1,r2,r3I2:subr4,r1,r5I3:andr6,r7,r1I4:orr8,r1,r9I5:addir10,r1,100I1下面有3条指令不能从寄存器r1读出正确的数据。12/13(一)数据冒险的解决方案1、暂停流水线如上图所示,暂停流水线到最初的指令执行完毕,可以解决数据冒险,但是会涉及到两个问题,即“如何检测出数据冒险”和“如何暂停流水线”。如何检
3、测数据冒险?a.比较器;I1指令写目的寄存器rd,I2和I3的源操作数是寄存器rs1或rs2中的数据,I2、I3的rs1或rs2与I1的目的寄存器号rd相等时才有可能发生数据冒险。b.操作码参与检测;由于指令格式中源寄存器号rs2与立即数部分重叠,而立即数是不会出现冒险的,因此,指令操作码必须要参与检测(区分是寄存器操作数还是立即数)。c.WREG信号也应参与检测(实际上,WREG也是从操作码中得出的);12/13如何暂停流水线?暂停条件判断电路STALL的输入包括OPCODE,ID_rsl,ID_rs2,EXE_rd,EXE_WREG,MEM_rd和MEM_WREG。输出
4、为DEPEN。封锁本条指令所产生的影响的方法是把DEPEN分别和译码器的输出Decoder_WZ,Decoder_WMEM和Decoder_WREG相与,再送到ID级和EXE级之间的流水线寄存器的输入端。因为只有这些写信号才改变处理机或存储器的状态,因而我们不必去封锁其它诸如ALUOP或多路器的选择信号。封锁其后续指令的方法是禁止向IR及PC写入新的数据,即把DEPEN接到IR和PC的写使能端WIR和WPC。当这两个信号为0时,禁止向IR和PC写人数据。1、内部前推技术数据相关本质:一条指令执行时要用到上面指令的计算结果,但这个结果尚未被写入寄存器堆。而实质上,此时结果已经
5、由ALU计算出来了,在流水线寄存器R和C中。由此,我们可以在ALU的两个数据输入端各加一个多路器,使R和C中的数据能被直接送到ALU的输入端,这就是所谓的内部前推。以下是检测数据相关的完整信号:EXE_A_DEPEN=(ID_rs1==EXE_rd)(EXE_WREG==1)(ID_rs1IsReg)EXE_B_DEPEN=(ID_rs2==EXE_rd)(EXE_WREG==1)(ID_rs2IsReg)+(ID_rd==EXE_rd)(EXE_WREG==1)(store)MEM_A_DEPEN=(ID_rs1==MEM_rd)(MEM_WREG==1)(ID_rs1I
6、sReg)MEM_B_DEPEN=(ID_rs2==MEM_rd)(MEM_WREG==1)(ID_rs2IsReg)+(ID_rd==MEM_rd)(MEM_WREG==1)(store)ID_rs1IsReg=and+andi+or+ori+add+addi+sub+subi+load+store12/13ID_rs2IsReg=and+or+add+sub(EXE_WREG==1)表示EXE级的指令确实要更新寄存器,没被取消(ID_rs1IsReg)条件是为了确认是寄存器,而不是立即数EXE_rd表示EXE级的流水线目标寄存器rdDEPEN=A_DEPEN+B_DEP
7、ENA_DEPEN=EXE_A_DEPEN+MEM_A_DEPENB_DEPEN=EXE_B_DEPEN+MEM_B_DEPEN(一)load指令的处理——暂停与内部前推相结合ALU指令在EXE级结束后,结果就出现在流水线寄存器R中,后续指令可以通过内部前推电路来直接使用它。但有一种情况是例外:loadr1,200(r2);12/13addr3,r1,r4;load指令在EXE级结束后,还在忙着访问存储器。在MEM级结束后,结果才出现在流水线寄存器D中,见下图。这时,即使使用内部前推技术也无法消除load指令与它的
此文档下载收益归作者所有