电子科技大学实验报告
结果分析:
观察三到九周期的ealu信号分别为(10,1,1,10,1,10,10),第九个周期的ealu为10,该周期执行的指令是sub r2 r1 r3;可见第一条指令赋值r1=10;第二条指令赋值r2=1;所以最后一条指令sub r1 r1 r2执行后结果为9,符合条件。
当有数据相关时,就会出问题,再观察第五、六、七两个周期,指令的执行结果均为1。
故该程序不能解决数据相关问题。
(二) 汇编器实现
2.1自行设计与所给出的流水线指令的汇编格式,在下表中写出。
指令指令意义Op[31:26] Op2 [25:20] [19:15] [14:10] [9:5] [4:0]
如上图所示,相邻的两条指令中,如果第二条指令的两个源操作数寄存器与上一条指令的目的操作数寄存器相同,那么第二条指令在译码周期从寄存器堆中取源操作数值的时候,上一条指令还只在执行周期,还没有将最后结果写回到相应的寄存器中,因此第二条指令取
如上图所示,在直接相邻的两条产生数据相关的指令之间插入三条空指令,这样在第二条指令译码之前,第一条指令已经将结果写回,第二条指令取到的源操作数的值是最新的值,数据相关就消除了。
以上情况针对相邻的两条产生数据相关指令的分析,而对于中间隔了一条或两条无数据
上图左边部分就是汇编器实现部分的流程图,在此基础上进行扩展,即如箭头所指方向,中间两步替代为右边部分。
)测试程序
指令:
xor r2, r2, r2
add r3, r2, r1
xor r2, r2, r2
addi r1, r1, 20
如上图所示,在产生数据相关的指令前插入了空指令“addi r0 r0 0”。
在xilinx中的仿真结果:。