module top_module( input clk, input areset, input train_valid, input train_taken, output [1:0] state ); always @(posedge clk orposedge areset)begin if (areset)begin state <= 2'b01; endelsebegin if (train_valid)begin if (train_taken)begin state <= state < 3 ? state + 1 : 3; endelsebegin state <= state > 0 ? state-1 : 0; end end elsebegin state <= state; end end end endmodule
input train_mispredicted, input train_taken, input [31:0] train_history ); always @(posedge clk orposedge areset)begin if (areset)begin predict_history = 32'd0; end elsebegin if (train_mispredicted)begin predict_history <= {train_history[30:0],train_taken}; end elseif (predict_valid)begin predict_history <= {predict_history[30:0],predict_taken}; end elsebegin predict_history <= predict_history; end end end endmodule
gshare
gshare
根据题意,我们要增加128个2位PHT(pattern history
table,模式匹配表),PHT根据7位train_history与7位train_pc异或结果进行寻址