在很多地方都能看到,verilog中if與case語(yǔ)句必須完整,即if要加上else,case后要加上default語(yǔ)句,以防止鎖存器的發(fā)生,接下來(lái)就來(lái)說(shuō)說(shuō)其中原因。
??一,什么是鎖存器?鎖存器與觸發(fā)器的區(qū)別。
??鎖存器與觸發(fā)器最大的區(qū)別在于,鎖存器是電平觸發(fā),而觸發(fā)器是邊沿觸發(fā)。鎖存器在不鎖存數(shù)據(jù)時(shí),輸出隨輸入變化;但一旦數(shù)據(jù)鎖存時(shí),輸入對(duì)輸出不產(chǎn)生任何影響。
二,為什么語(yǔ)句的不完整會(huì)導(dǎo)致鎖存器的產(chǎn)生?
??語(yǔ)句不完整即有某些情況的輸入對(duì)輸出無(wú)任何影響,根據(jù)鎖存器的特征,反映到硬件電路即會(huì)產(chǎn)生鎖存器。
? 舉例說(shuō)明:
?
?
?
????????????????????????????? 圖一 ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
?
圖二
? 這是一段簡(jiǎn)單的組合邏輯代碼。圖一是缺少default的case語(yǔ)句,圖二是完整的case語(yǔ)句。
?圖一綜合后的的級(jí)電路為
?
? 即產(chǎn)生了鎖存器,而且也會(huì)給出警告:
?
而圖二完整的case語(yǔ)句綜合后的級(jí)電路為:
?
?
產(chǎn)生的是普通的門電路,且警告消失。
三,為什么要避免產(chǎn)生鎖存器?
關(guān)于這個(gè)問(wèn)題,我在網(wǎng)上看到很多資料說(shuō)是因?yàn)殒i存器對(duì)毛刺敏感。但其實(shí)不是這個(gè)原因,因?yàn)樵诮M合電路中,即便語(yǔ)句完整了,也會(huì)對(duì)毛刺敏感。而如果你加一個(gè)時(shí)鐘變?yōu)闀r(shí)序電路的話,即便你的語(yǔ)句不完整,產(chǎn)生了鎖存器(其實(shí)在時(shí)序電路中,即便語(yǔ)句不完整,也不會(huì)產(chǎn)生鎖存器),那么也不會(huì)對(duì)毛刺敏感。
真正的原因在于中根本沒(méi)有鎖存器這種東西,也就是說(shuō),如果你產(chǎn)生了鎖存器的話,將耗費(fèi)更多的資源來(lái)構(gòu)成它。
轉(zhuǎn)載自:https://zhidao.baidu.com/question/2053479616852574707.html