私は以下のコードモジュールを持っています
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に更新されます。