HDLbits--Cs450/history shift

构建一个32位全局历史移位寄存器,包括支持回滚状态,以响应分支预测失误导致的管道刷新。

当进行分支预测时(predict_valid=1),从LSB侧移入predict_taken以更新预测分支的分支历史。(predict_history[0]是最年轻分支的方向。)

当发生分支预测失误时(train_mispredied=1),在预测失误的分支完成后,用历史加载分支历史寄存器。这是预测失误分支(train_history)之前的历史,与分支的实际结果(train_taken)相连。

如果预测和预测失误同时发生,则预测失误优先,因为管道清除也会清除当前正在进行预测的分支。

predict_history是分支历史寄存器的值。

areset是一种异步重置,将历史计数器重置为零。

module top_module(
    input clk,
    input areset,

    input predict_valid,
    input predict_taken,
    output [31:0] predict_history,

    input train_mispredicted,
    input train_taken,
    input [31:0] train_history
);
    always@(posedge clk,posedge areset)
        begin
            if(areset)
                predict_history<=0;
            else
                begin
                    if(train_mispredicted)
                        begin
                            predict_history<={train_history[30:0],train_taken};
                        end
                    else
                        begin
                            if(predict_valid)
                                predict_history<={predict_history[30:0],predict_taken};
                        end
                end
        end

endmodule

猜你喜欢

转载自blog.csdn.net/weixin_49574391/article/details/131509839