什麼時候會引入鎖存器?

2021-09-09 07:37:12 字數 2531 閱讀 1756

最近在寫verilog**,距離上次寫大的verilog **已經是一年之前了。再次寫,生疏了很多。遇到一些問題,看了一些資料,在這裡記錄一下。

這裡僅做學習總結用,如有侵權,聯絡立刪。

1.if…else語句或者case語句中所列條件不完整,綜合時,會產生鎖存器。

example:

always @ ( en ) begin

if ( en ) dout = 1'b1;

end

當en=0的時候,預設dout的數值保持不變,這個時候就會產生鎖存器。

修改1(壞笑):

always @ ( en ) begin

if ( en ) dout = 1'b1;

else dout = dout;

end

這準確說不能作為修改,因為還是保持原有數值不變,所以還是會有鎖存器。

修改2:

always @ ( en ) begin

if ( en ) dout = 1'b1;

else dout = 1'b0;

end

修改3:

always @ ( posedge clk ) begin

if ( en ) dout = 1'b1;

else dout = 1'b0;

end

修改4:

always @ ( posedge clk ) begin

if ( en ) dout = 1'b1;

else dout = dout;

end

修改5:

always @ ( posedge clk ) begin

if ( en ) dout = 1'b1;

end

上面是缺少else或者default導致分支不完整的情況,還有一種分支不完整容易被忽略,那就是:當使用if-else語句和case語句時,有多個輸出,但在每個分支中只對其中的乙個或者幾個進行賦值,而不是對所有的輸出都有明確的指定。

2.組合邏輯程序中不能直接或者間接出現自己賦值給自己的情況。

example:

always @ ( * ) begin

if ( !rst ) cnt = 8'b0;

else ( !rst ) cnt = cnt + 8'b1;

end

在時序邏輯中這是常用的計數器,就沒有引入鎖存器的現象。

3.組合邏輯的敏感列表不能少

對於always塊中的輸入,在其敏感列表中一定要引入。

不要鎖存器的原因有二:

1、鎖存器容易產生毛刺

2、鎖存器在asic(專用積體電路)設計中應該說比ff(觸發器)要簡單,但是在fpga的資源中,大部分器件沒有鎖存器這個東西,所以需要用乙個邏輯門和ff來組成鎖存器,這樣就浪費了資源。(用cpld(複雜可程式設計邏輯器件)和fpga(現場可程式設計邏輯陣列)來進行asic設計是最為流行的方式之一)

3.靜態時序分析比較複雜

優點:面積小。鎖存器比ff快,所以用在位址鎖存是很合適的,不過一定要保證所有的latch訊號源的質量,鎖存器在cpu設計中很常見,正是由於它的應用使得cpu的速度比外部io部件邏輯快許多。latch完成同乙個功能所需要的門較觸發器要少,所以在asic中用的較多。

一般的設計規則是:在絕大多數設計中避免產生latch。它會讓設計的時序十分困難,並且它的隱蔽性很強,非老手不能查出。latch最大的危害在於不能過濾毛刺。這對於下一級電路是極其危險的。所以,只要能用d觸發器的地方,就不用latch。

有些地方沒有時鐘,也只能用latch了。比如現在用乙個clk接到latch的使能端(假設是高電平使能),這樣需要的setup時間,就是資料在時鐘的下降沿之前需要的時間,但是如果是乙個dff,那麼setup時間就是在時鐘的上公升沿需要的時間。這就說明如果資料晚於控制訊號的情況下,只能用latch,這種情況就是,前面所提到的latch timing borrow。基本上相當於借了乙個高電平時間。也就是說,latch借的時間也是有限的。

Oracle 什麼時候會觸發DBWR

checkpoint會觸發dbwr寫髒塊時是根據checkpoint queue來的,而lru w是負責dbwr的其他寫出條件的觸發。dbwr作為乙個後台程序,只有在某些條件滿足了才會觸發。這些條件包括 當程序在輔助lru鍊錶和主lru鍊錶上掃瞄以查詢可以覆蓋的buffer header時,如果已經...

Log物件什麼時候會更新LEO

leo全程log end offset,就是log最後一條記錄下一條的offset值.log物件初始化的時候,需要建立乙個新的leo物件,並對其進行初始化。寫入新訊息的時候,當不斷向log物件插入訊息時,leo會向指標一樣,不斷的增加。log物件發生日誌切分的時候,當前日誌段物件已滿的時候,會關閉當...

androidid什麼時候會變 什麼是柴犬尷尬期?

一直以來,都能在網上看到很多養柴犬新手家長說自己家的狗子血統不純,越長越難看,然後跑到各種平台上發 詢問等等。最後得出的結論就是幼年柴犬進入了尷尬期,血統還是很純潔的,讓很多家長都虛驚一場。那麼什麼是尷尬期,為什麼會讓眾多新手家長如此擔心呢?今天我們就來聊一聊吧。尷尬期一般是指柴犬在4 8個月大的時...