该题链接:https://hdlbits.01xz.net/wiki/Cs450/gshare
(相关资料图)
这题主要是看不懂题目,没法理解题目意思,而且对cpu的gshare预测分支不了解,所以做不出来。
当train_valid=1时,PHT的位置由train_pc与train_history异或得到,而PHT的值则是由状态机或者说由train_taken来决定。状态机是之前题目中的饱和计数器,当状态是11或10时,会决定predict_taken为1. predict_taken的值有PHT的状态决定。
其中寄存器代码编写与上题差不多。
module top_module(
input clk,
input areset,
input predict_valid,
input [6:0] predict_pc,
output predict_taken,
output [6:0] predict_history,
input train_valid,
input train_taken,
input train_mispredicted,
input [6:0] train_history,
input [6:0] train_pc
);
reg pht1[127:0],pht0[127:0];//定义128个1位寄存器pht1
wire [6:0]ad,ad2;
assign predict_taken=pht1[ad2];
assign ad=train_history^train_pc;
assign ad2=predict_history^predict_pc;
always@(posedge clk or posedge areset)begin
if(areset)
for(int i=0;i<128;i++)begin
pht1[i]=0;pht0[i]=1;end
else if(train_valid&train_taken)begin
if({pht1[ad],pht0[ad]}==2'b11)
{pht1[ad],pht0[ad]}<=2'b11;
else
{pht1[ad],pht0[ad]}<={pht1[ad],pht0[ad]}+1;
end
else if(train_valid&~train_taken)begin
if({pht1[ad],pht0[ad]}==2'b00)
{pht1[ad],pht0[ad]}<=2'b00;
else
{pht1[ad],pht0[ad]}<={pht1[ad],pht0[ad]}-1;
end//之前的饱和计数器
end
always@(posedge clk or posedge areset)begin
if(areset)
predict_history<=0;
else if(train_mispredicted & train_valid)
predict_history <= {train_history[5:0],train_taken};
else if(predict_valid )
predict_history <= {predict_history[5:0],predict_taken};
end
endmodule
下一篇:最后一页
7月8日,北京市文化和旅游局发布2021年北京市文化和旅游业统计报告,2021年北京接待市民在京游人数1 26亿人次,较上年增长45 9%,较2019年
5月14日,郑州经开区第五大街一地铁口,一个核酸采样舱已布点就位,市民有序进行核酸采样。郑州经开区宣传部供图近日,河南省发布《河南省
稳就业保民生。由人力资源和社会保障部主办,河南省人力资源和社会保障厅承办的河南省2022年百日千万网络招聘专项行动将于5月16日启动,持
政策内容由河南省(郑州市)12320卫生健康热线整理(截至2022年5月15日上午9时)01进入郑州市市域外入(返)郑人员须查验两码一证,即健康
5月15日是全国公安机关5 15打击和防范经济犯罪宣传日,河南省公安厅公布一批经济犯罪案件,作案手法曝光。信阳宋某等人组织领导传销活动案2
X 关闭
X 关闭