我有下面的代码模块
always @(posedge Clk) begin
ForwardA = 0;
ForwardB = 0;
//EX Hazard
if (EXMEMRegWrite == 1) begin
if (EXMEMrd != 0)
if (EXMEMrd == IDEXrs)
ForwardA = 2'b10;
if (EXMEMrd == IDEXrt && IDEXTest == 0)
ForwardB = 2'b10;
end
//MEM Hazard
if (MEMWBRegWrite == 1) begin
if (MEMWBrd != 0) begin
if (!(EXMEMRegWrite == 1 && EXMEMrd != 0 && (EXMEMrd == IDEXrs)))
if (MEMWBrd == IDEXrs)
ForwardA = 2'b01;
if (IDEXTest == 0) begin
if (!(EXMEMRegWrite == 1 && EXMEMrd != 0 && (EXMEMrd == IDEXrt)))
if (MEMWBrd == IDEXrt)
ForwardB = 2'b01;
end
end
end
end
问题是输出,即 ForwardA 和 ForwardB 没有在时钟上升沿而不是在下一个时钟上升沿更新......这是为什么?如何解决,以便在相同的正时钟上升沿更新输出?
这就是我的意思: 替代文字 http://img693.imageshack.us/img693/8660/timing.jpg
ForwardA 在下一个时钟上升沿更新为 2,而不是在同一个时钟上升沿