if ....else if ...else产生latch的理解

文章讨论了在Verilog编程中,对于组合逻辑电路,使用if-else语句的必要性。如果不使用else,当所有条件都不满足时,输出可能会不确定,因为编译器会自动生成考虑所有情况的冗余逻辑。为了避免这种情况,建议在最后一个if语句后添加else子句,明确指定一个默认的输出状态,以保证逻辑的清晰和效率。
摘要由CSDN通过智能技术生成

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,并任意指定一种确定的输出情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值