作者dinex (Dinex)
看板Electronics
标题[问题] Verilog中的latch?
时间Fri Jun 24 00:41:44 2011
常常在Verilog有时会有latch作怪
通常是因为case或是if写得不完整
但是以下本人设计的状态机output已经将case内的output每一项都列出来了,却发现仍有
latch产生
但产生的却不是全部变数,反而是其中一个,关於此always内所有变数的波行显示出来
A=1,但OUT却显示为0,其他变数则正常无误...
请问有哪位好心大大能解释一下,谢谢!
always@(CS or B)
case(CS)
ST0:begin A=0;OUT=B; end
ST1:begin
if(B==C)
begin
A=1;
OUT=B;
end
else
begin
A=0;
OUT=B;
end
end
ST2:begin A=A;OUT=A;end
endcase
CS为状态机目前state状态,B会随着现在STATE不同而改变
模拟结果OUT没有LATCH,反而A产生LATCH
完整版(若需要进一步资讯再看,整行注解部分删掉即为完整程式码,使用键盘为input):
http://www.mediafire.com/?al59d3uol347ua4
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.160.190.178
※ 编辑: dinex 来自: 114.34.25.243 (06/24 02:12)
1F:推 b9002053:a不能等於a 06/24 02:21
2F:→ dinex:那是要删掉?这样更有LATCH吧(每CASE内指令数不是要相同?) 06/24 02:31
※ 编辑: dinex 来自: 118.160.190.178 (06/24 02:50)
3F:推 Pash77:sensitivity list 没把握写全就用 "*" 代替就好 06/24 03:29
4F:→ Pash77:再多看几次,也许你就知道少了哪一个 06/24 03:29
5F:→ dinex:本人所使用ISE若上述内容没写足似乎会自动补... 06/24 06:37
6F:→ dinex:我指的是sensitive list 06/24 06:51
7F:推 ViewMoon:你可以写 A=A 呀, 只是写了等於没写, 既然等於没写, 你就 06/24 07:11
8F:→ ViewMoon:知道为什麽会是 latch 了 06/24 07:12
9F:→ ViewMoon:更正, 你的完整版, m=m;n=n; 留着会有 comb loop 06/24 08:48
10F:→ ViewMoon:comment out 掉会有 latch 06/24 08:48
11F:→ dinex:谢谢大大们帮忙,本人把ST2重复ST1写法,但OUT=A就好了:) 06/24 08:58