Cs450/history shift个人解答
表面上本题题干很长且难以理解,其实只需抓住核心部分也就是description部分内容
题目理解
- 第一段:建立一个32bit移位寄存器
- 第二段:当predict_valid = 1时进行移位,将原寄存器数据向左移移位,predict_taken 填充最低位。
- 第三段:当train_mispredicted = 1时需要替换移位寄存器内数据并移位,使用train_history替换原本的数据并左移一位,,train_taken填充至最低位
- 第四段:优先级说明同时出现时train_mispredicted 优先级高
- 第五段:说明输出predict_history[31:0]是移位前的数据。
- 第六段:说明复位,异步复位
因此代码并不复杂
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
);
reg [31:0]shift_reg; //用于32bit移位寄存器
always@(posedge clk,posedge areset)begin
if(areset)
shift_reg <= 31'b0;
else if(train_mispredicted) //优先级高
shift_reg <= {train_history[30:0],train_taken};
else if(predict_valid)
shift_reg <= {shift_reg[30:0],predict_taken};
else
shift_reg <= shift_reg;
end
assign predict_history = shift_reg;
endmodule