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