verilog中的latch到底是個啥??簡直快瘋了!!!!!


在很多地方都能看到,verilog中if與case語句必須完整,即if要加上else,case后要加上default語句,以防止鎖存器的發生,接下來就來說說其中原因。

  一,什么是鎖存器?鎖存器與觸發器的區別。

  鎖存器與觸發器最大的區別在於,鎖存器是電平觸發,而觸發器是邊沿觸發。鎖存器在不鎖存數據時,輸出隨輸入變化;但一旦數據鎖存時,輸入對輸出不產生任何影響。

二,為什么語句的不完整會導致鎖存器的產生?

  語句不完整即有某些情況的輸入對輸出無任何影響,根據鎖存器的特征,反映到硬件電路即會產生鎖存器。

  舉例說明:

 

 

 

                              圖一                                                                            

 

圖二

  這是一段簡單的組合邏輯代碼。圖一是缺少default的case語句,圖二是完整的case語句。

 圖一綜合后的的RTL級電路為

 

  即產生了鎖存器,而且ISE也會給出警告:

 

而圖二完整的case語句綜合后的RTL級電路為:

 

 

產生的是普通的門電路,且警告消失。

三,為什么要避免產生鎖存器?

關於這個問題,我在網上看到很多資料說是因為鎖存器對毛刺敏感。但其實不是這個原因,因為在組合電路中,即便語句完整了,也會對毛刺敏感。而如果你加一個時鍾變為時序電路的話,即便你的語句不完整,產生了鎖存器(其實在時序電路中,即便語句不完整,也不會產生鎖存器),那么也不會對毛刺敏感。

真正的原因在於FPGA中根本沒有鎖存器這種東西,也就是說,如果你產生了鎖存器的話,將耗費更多的資源來構成它。

轉載自:https://zhidao.baidu.com/question/2053479616852574707.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM