Verilog設計中的鎖存器

2021-10-04 06:58:25 字數 1121 閱讀 3663

問題:

什麼是鎖存器?

什麼時候出現鎖存器?

鎖存器對電路有什麼影響?

如何在fpga設計中避免鎖存器?

在fpga設計中應該避免鎖存器.實際上,鎖存器與d觸發器實現的邏輯功能基本相同,都有暫存資料的功能。但如果兩者都由與非門搭建的話,鎖存器耗用的邏輯資源要比d觸發器少(d觸發器需要12個mos管,鎖存器只需6個mos管),鎖存器的整合度更高。所以在的asic設計中會用到鎖存器。但鎖存器對毛刺敏感,無異步復位端,不能讓晶元在上電時處在確定的狀態;另外,鎖存器會使靜態時序分析變得很複雜,不利於設計的可重用,所以,在asic設計中,除了cpu這高速電路,或者ram這種對面積很敏感的電路,一般不提倡用鎖存器。

fpga的底層基本元件是查詢表(lut)和d觸發器,並不存在鎖存器,所以,fpga中綜合出來的鎖存器都是由查詢表和暫存器構成的,反而會更耗資源。

基於以上原因,在fpga設計中,應該避免使用鎖存器。在組合電路中,可以通過讓**覆蓋所有條件分支,或者在組合程序中以賦預設值的方式避免鎖存器。在具體實現中:

always @(*) 這種語句中當條件語句沒有覆蓋到所有分支時將產生鎖存器,即if和case條件不全時綜合器會綜合出鎖存器。

以下是通過在always電平敏感程序中通過賦預設值避免產生鎖存器。

always @(sel or a)

begin

y2 = 3』b000; //賦預設值,避免產生鎖存器

ca***(sel)

3』bxx1: y2 = a[0];

3』bx1x: y2 = a[1];

3』b1xx: y2 = a[2];

endcase

end在寫三段式狀態機時,在寫狀態轉換時也會用到這個技巧:

always @(*)

begin

n_state = c_state; //賦預設值,避免產生鎖存器

case(c_state)

idle:

n_state = rd;

rd:endcase

end注:鎖存器是個時序電路,還是組合電路?

[1] 王鈿, 卓興旺. 基於veriloghdl資料系統應用設計(第2版). 國防工業出版社. 2007,08.

[2] verilog.  2015,08,10.

verilog描述鎖存器和觸發器

1。門口d鎖存器 module d latch clk,d,q input clk,d output reg q always clk,d 注 這裡的敏感訊號為clk和d,因為d也引起q的變化。當clk為高點評時,d的變化也引起輸出q的變化。if clk 1 q d endmodule 2.d觸發器...

FPGA 中的latch 鎖存器

到底什麼是鎖存器,它是怎麼產生的,它到底和暫存器有多少區別,它怎麼消除。為什麼說他不好?一,是什麼 鎖存器是一種在非同步時序電路系統中,對輸入訊號電平敏感的單元,用來儲存資訊。乙個鎖存器可以儲存1bit的資訊,通常,鎖存器會多個一起出現,如4位鎖存器,8位鎖存器。鎖存器在資料未鎖存時,輸出端的訊號隨...

FPGA 中的latch 鎖存器

一直都知道fpga中有latch這麼一回事,但是一直都不太清楚到底什麼是鎖存器,它是怎麼產生的,它到底和暫存器有多少區別,它怎麼消除。為什麼說他不好?一,是什麼 鎖存器是一種在非同步時序電路系統中,對輸入訊號電平敏感的單元,用來儲存資訊。乙個鎖存器可以儲存1bit的資訊,通常,鎖存器會多個一起出現,...