作者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)
推 b9002053:a不能等於a 06/24 02:21
→ dinex:那是要刪掉?這樣更有LATCH吧(每CASE內指令數不是要相同?) 06/24 02:31
※ 編輯: dinex 來自: 118.160.190.178 (06/24 02:50)
推 Pash77:sensitivity list 沒把握寫全就用 "*" 代替就好 06/24 03:29
→ Pash77:再多看幾次,也許你就知道少了哪一個 06/24 03:29
→ dinex:本人所使用ISE若上述內容沒寫足似乎會自動補... 06/24 06:37
→ dinex:我指的是sensitive list 06/24 06:51
推 ViewMoon:你可以寫 A=A 呀, 只是寫了等於沒寫, 既然等於沒寫, 你就 06/24 07:11
→ ViewMoon:知道為什麼會是 latch 了 06/24 07:12
→ ViewMoon:更正, 你的完整版, m=m;n=n; 留著會有 comb loop 06/24 08:48
→ ViewMoon:comment out 掉會有 latch 06/24 08:48
→ dinex:謝謝大大們幫忙,本人把ST2重複ST1寫法,但OUT=A就好了:) 06/24 08:58