Bug_Log
1.检测到异常后,未能完全将受害指令之后的指令影响消除
受害指令前后指令“假冲突”产生的阻塞
Stall与Req同时存在时,忽略了增添Req对F_pc写使能的影响,导致Stall单方面使F_pc不可写,F_pc未更新,异常跳转NPC失效。
例: 某时刻 D-E-M : mfhi-syscall-divu;下一周期stall和req同时存在
下方红圈处F_pc值未更新
解决: 顶层Req信号优先级最高,修正IFU的写使能We
错误开始的乘除槽
例: 某时刻 D-E-M : bnez-divu-syscall;req存在,div进入乘除槽HILO开始运算
解决: M级必定能检测出是否发生异常,只有在E级的乘除槽脱离管控;所以异常发生时,受害指令后的指令最多刚刚到乘除槽,所以只需要用Req信号限制乘除槽的运作即可
always @(posedge Clk) begin
if(Rst == 1) begin
HI <= 0;
LO <= 0;
Wait <= 0;
Busy <= 0;
end else if(Req != 1) begin //Req limitation
if(Wait == 0) begin
case(HILOOp)
...
end