我正在做关于制作ALU的功课,我收到了一个错误。我搜索它但没有得到原因。为什么会发生?
错误消息是S2不是常量。case ({S2,S1,S0})
```
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
```
答案 0 :(得分:0)
您在switch-case语句中使用assign和module声明。编译器将其作为生成语句,即在详细说明设计时,根据选择值,生成的设计将有所不同。
但是,您只能使用带有常量(例如参数)选择的generate语句,因为您无法动态地重新生成硬件。
你有两件事要做:
assign
,而是使用非阻止作业<=
)这样做会导致输出连接在由{S2,S1,S0}
控制的多路复用器的输出上,并且在switch-case语句中指定了不同的输入。