1、不加else的情况
always@(*)
if({in1,in2,in3} == 3'b000)
out = 8'b0000_0001;
else if({in1,in2,in3} ==3'b001)
out = 8'b0000_0010;
else if({in1,in2,in3} ==3'b010)
out = 8'b0000_0100;
else if({in1,in2,in3} ==3'b011)
out = 8'b0000_1000;
else if({in1,in2,in3} ==3'b100)
out = 8'b0001_0000;
else if({in1,in2,in3} ==3'b101)
out = 8'b0010_0000;
else if({in1,in2,in3} ==3'b110)
out = 8'b0100_0000;
else if({in1,in2,in3} ==3'b111)
out = 8'b1000_0000;
endmodule
2、加else
always@(*)
if({in1,in2,in3} == 3'b000)
out = 8'b0000_0001;
else if({in1,in2,in3} ==3'b001)
out = 8'b0000_0010;
else if({in1,in2,in3} ==3'b010)
out = 8'b0000_0100;
else if({in1,in2,in3} ==3'b011)
out = 8'b0000_1000;
else if({in1,in2,in3} ==3'b100)
out = 8'b0001_0000;
else if({in1,in2,in3} ==3'b101)
out = 8'b0010_0000;
else if({in1,in2,in3} ==3'b110)
out = 8'b0100_0000;
else if({in1,in2,in3} ==3'b111)
out = 8'b1000_0000;
else
out = 8'b1000_0000;//else
endmodule
3、总结
不加的话默认情况应该是保持不变,这时候就需要一个锁存器。
RTL识别到你考虑所有情况(即没有写else)所以会自己去考虑所有情况,因此产生了许多冗余逻辑。
所以在组合逻辑中最后一个 if 后一定要加上 else,并任意指定一种确定的输出情况