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