|
楼主 |
发表于 2014-2-9 18:37:31
|
显示全部楼层
回复 16# leishangwen
这个地方我用错了,不应该用r.e,它是执行阶段的参数。可以改成v.e,然后
更改如下,
--依据乘法结果,给出新的hilo、whilo的值,以及cnt的值
set_new_hilo(r, v, ex_mul_res, newhilo, hilo_temp, v.m.hilo, v.m.whilo, cnt_temp );
if(r.e.cnt /= "00") then
v.m.whilo := '0';
v.m.wreg := '0';
end if;
-----------------------------------------------------------------------
-- DECODE STAGE
-----------------------------------------------------------------------
--调用过程inst_decode
inst_decode(r.d.inst, v.e.wreg, v.e.rd, v.e.aluop, v.e.alusel,
v.e.rfe1, v.e.rfe2, v.e.rfa1, v.e.rfa2, v.e.imm, v.e.cnt, v.e.inst_valid);
if(v.e.cnt /= "00") then --在inst_decode过程中依据指令设置r.e.cnt的值
ex_stall_for_multicycle_inst := '1'; --对于多周期指令,设置该值为"1",表示流水线因为
--多周期指令而暂停
else
ex_stall_for_multicycle_inst := '0';
end if;
只要出现双周期,就进入该指令的死循环,不停执行该指令。
仿真结果图,7022 0000 指令不停执行,
从上面的结果上看,在译码阶段设置PC 值,确实早了一步,还是在执行阶段设置PC值好一些。 |
|