求问一个会不会产生latch的问题
时间:10-02
整理:3721RD
点击:
问题如下,谢谢!
有两段verilog程序,判断哪一段会产生latch,并修改
简要的代码如下:
代码A:
input a,b,en;
always@(en or a or b)
begin
if(en)
data = a;
else
data = b;
end
代码B:
input[2:0] data;
always@(data)
case(data)
0: out1 = 1'b1;
1,3 ut2 = 1'b1;
2,4,5,7 ut3 = 1'b1;
default: out4 = 1'b1;
endcase
有两段verilog程序,判断哪一段会产生latch,并修改
简要的代码如下:
代码A:
input a,b,en;
always@(en or a or b)
begin
if(en)
data = a;
else
data = b;
end
代码B:
input[2:0] data;
always@(data)
case(data)
0: out1 = 1'b1;
1,3 ut2 = 1'b1;
2,4,5,7 ut3 = 1'b1;
default: out4 = 1'b1;
endcase
我个人认为是代码B,always条件上要加out1,2,3,4。但室友认为是A,求解答
第一个不会,原因是一个条件语句完整,且状态变量都有。
第二个会,因为每个条件下都是对不同的输出赋值,在这种情况会有锁存器的产生。
同意楼上的,代码B是信号赋值不完整,所以造成latch~
了解了,条件语句不完整会产生latch
