verilog中if與case語句必須完整,即if要加上else,case后要加上default語句,以防止鎖存器的發生,接下來就來說說其中原因。
鎖存器與觸發器最大的區別在于,鎖存器是電平觸發,而觸發器是邊沿觸發。鎖存器在不鎖存數據時,輸出隨輸入變化;但一旦數據鎖存時,輸入對輸出不產生任何影響。
為什么語句的不完整會導致鎖存器的產生?
解:
老阮 (2014-10-21 19:30:10)
1、時序電路,生成觸發器,觸發器是有使能端的,使能端無效時數據不變,這是觸發器的特性。
2、組合邏輯,由于數據要保持不變,只能通過鎖存器來保存。
樓主位的第二個代碼就是在enable為低時,數據不變,因此要生成鎖存器。 第一個代碼,由于是時序邏輯,生成的觸發器在enable無效時就可以保存數據。跟鎖存器無關。
walkman416
個人理解: 所謂生成latch其實是針對使用always語句描述一個組合邏輯而言,因為如果描述時序邏輯總是使用時鐘或者時鐘+復位作為敏感列表條件,所生成的電路總是組合邏輯+DFF;如果是描述組合邏輯,敏感列表中必然沒有時鐘復位,而是組合邏輯的輸入信號。在FPGA設計,避免使用latch,不利于時序分析和仿真。 樓上有提到latch比DFF省資源, 這個在FPGA設計中其實還好, 因為在FPGA中DFF就是一個專用的硬件資源,并且數量也比較多。
使用always描述組合邏輯時,好的習慣是使用always @(*)作為敏感列表, 并且需要檢查每個分支都有明確的賦值,從而避免生成latch.
黎釋注
我是這么理解的,在一份資料看的,
時序電路=組合邏輯電路+儲存電路;
儲存電路有兩個:鎖存器(latch)和觸發器;
邊沿觸發產生觸發器,
電平觸發產生鎖存器,
多個觸發器組成寄存器,
當描述的是時序電路,寄存器變量對應的寄存器,
描述的是完整的組合邏輯電路,對應為硬件連線,
當描述的是不完整組合邏輯,則寄存器對應的是鎖存
總結:
1,存儲單元按照觸發的方式分為電平觸發和邊沿觸發,電平觸發的為鎖存器,邊沿觸發的觸發器。 2,對于if,case的完整性,@老阮已經說的很清楚了,在FPGA建議使用觸發器。
-
存儲單元
+關注
關注
1文章
63瀏覽量
16167 -
時序電路
+關注
關注
1文章
114瀏覽量
21720 -
鎖存器
+關注
關注
8文章
906瀏覽量
41550 -
觸發器
+關注
關注
14文章
2000瀏覽量
61215
發布評論請先 登錄
相關推薦
評論