我必须根据我的“funsel”信号更新我的寄存器。当我在 funsel 为 00 或 01 时更新它们时它起作用(00 是清除的,01 是将输入加载到寄存器。)。但在其他情况下,它不起作用。当我尝试模拟时,它卡住了(它说当前时间:625 ns)。这是我的漏斗代码:
always @*
case(funsel)
2'b00: begin
data1 = 0;
data2 = 0;
data3 = 0;
data4 = 0;
end
2'b01: begin
data1 = in;
data2 = in;
data3 = in;
data4 = in;
end
2'b10: begin
data1 = (PC - 1);
data2 = (AR - 1);
data3 = (SP - 1);
data4 = (PCPast - 1);
end
2'b11: begin
data1 = (PC + 1);
data2 = (AR + 1);
data3 = (SP + 1);
data4 = (PCPast + 1);
end
endcase
PC、AR、SP 和 PCPast 是我尝试更新的寄存器。在这个代码块之后,我编写了这样的表达式:
4'b0010: SP = data3;
4'b0011: begin
PCPast = data4;
SP = data3;
end
4'b0100: AR = data2;
正如我所说,它在 funsel 为 00 和 01 时起作用。毕竟我的输出是 AR、PC、PCPast 或 SP。所以基本上我更新它们并将它们作为输出。