如何在 verilog 中更新我的寄存器?

问题描述 投票:0回答:0

我必须根据我的“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。所以基本上我更新它们并将它们作为输出。

verilog hdl
© www.soinside.com 2019 - 2024. All rights reserved.