verilog中这段代码为什么不可综合?
时间:10-02
整理:3721RD
点击:
always @(A or B) case (A)
1'b0: F = B;
1'b1: G = B;
endcase
为什么是不能综合或与预先设想的不一致呢?
难道要这样写?
always @(A or B)
if(!A)
F = B;
else
G = B;
1'b0: F = B;
1'b1: G = B;
endcase
为什么是不能综合或与预先设想的不一致呢?
难道要这样写?
always @(A or B)
if(!A)
F = B;
else
G = B;
很明显,两种写法都是错的,A=0时没有给G赋值,A=1时没有给F赋值,生成了latch。
always @(A or B)
if(!A) begin
F = B;
G = ?
end
else begin
F = ?
G = B;
end
第一种写法使用CASE时,也犯了同样的错误。如果你的代码风格是同一个always里只给一个变量赋值,你就很容易发现这个错误了。
2楼很正确
2樓正解
加個clock 就可以了
2楼怎么对了?综合出latch不算可综合吗?
我有说过latch是不可综合的吗?看清楚小编下面的疑问“与预先设想的不一致”。如果小编的本意就是为了综合得到latch,他就不会在这里问大家了。
是的,要符合相应的Verilog语法和对应的逻辑思维流程才可以的!
你是对的。也许小编只是想搞个组合逻辑出来,我想多啦
兄弟们, 如果把 = 或者 <= 叫“赋值”, 可以转行了
写法错了
请问那应该叫做什么呢?
Software Coder... 当然,“assign” 被中文翻译成“赋值”,谭浩强的感脚
你想让 tool怎么综合~ mux 后边出两条线? ~写之前 想想 写出来的东西 tool能看懂吗~
因为没有时钟,所以tool没法给你补个latch;组合逻辑 还少了 else,可能综合吗?
