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