問題:
什麼是鎖存器?
什麼時候出現鎖存器?
鎖存器對電路有什麼影響?
如何在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的資訊,通常,鎖存器會多個一起出現,...