Verilog错误:XXX不是常数

Verilog错误:XXX不是常数,verilog,Verilog,我正在做关于做ALU的家庭作业,我发现了一个错误。我搜索了一下,但没有找到原因。为什么会这样? 错误消息为S2不是常量。大小写({S2,S1,S0}) ``` 在switch case语句中使用assign和module声明。编译器将其视为一个生成语句,即在详细说明设计时,根据选择值,生成的设计将不同 但是,您只能在选择常量(例如参数)时使用generate语句,因为您不能动态地重新生成硬件 你有两件事要做: 将您的输出作为regs传递(在这种情况下,不要使用assign,而是非阻塞分配 mo

我正在做关于做ALU的家庭作业,我发现了一个错误。我搜索了一下,但没有找到原因。为什么会这样? 错误消息为S2不是常量。
大小写({S2,S1,S0})

```


在switch case语句中使用assign和module声明。编译器将其视为一个生成语句,即在详细说明设计时,根据选择值,生成的设计将不同

但是,您只能在选择常量(例如参数)时使用generate语句,因为您不能动态地重新生成硬件

你有两件事要做:

  • 将您的输出作为regs传递(在这种情况下,不要使用
    assign
    ,而是非阻塞分配
    
    
    module ALU(
        input S0,
        input S1,
        input S2,
        input IN1,
        input IN2,
        input IN3,
        output OUT1,
        output OUT2
        );
    
    
    case ({S2,S1,S0})//{S2,S1,S0}
    3'b000:
    begin
        assign OUT1=IN1&IN2;//and a1(OUT1,IN1,IN2);
        assign OUT2 = 1'b0;
    end
    3'b001:
    begin
        assign OUT1=IN1|IN2;//or o1(OUT1,IN1,IN2);
        assign OUT2=1'b0;
    end
    3'b010:
    begin
        assign OUT1=!IN1;
        assign OUT2=1'b0;
    end
    3'b011:
    begin
        assign OUT1=!IN2;
        assign OUT2=1'b0;
    end
    3'b100:
    begin
        assign OUT1=IN1^IN2;
        assign OUT2=1'b0;
    end
    3'b101:FullAdder1 fa(.IN1(IN1),.IN2(IN2),.IN3(IN3),.OUT1(OUT1),.OUT2(OUT2));
    3'b110:FullSubtracter1 fs(.IN1(IN1),.IN2(IN2),.IN3(IN3),.OUT1(OUT1),.OUT2(OUT2));
    3'b111:
    begin
        assign OUT1=1'b0;
        assign OUT2=1'b0;
    end
    default:
    begin
        assign OUT1=1'b0;
        assign OUT2=1'b0;
    end
    endcase
    endmodule
    
    ```