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