D觸發(fā)器是指由時(shí)鐘邊沿觸發(fā)的存儲器單元,鎖存器指一個(gè)由信號而不是時(shí)鐘控制的電平敏感的設(shè)備,。鎖存器通過鎖存信號控制,,不鎖存數(shù)據(jù)時(shí),輸出端的信號隨輸入信號變化,,就像信號通過緩沖器一樣,,一旦鎖存信號起鎖存作用,則數(shù)據(jù)被鎖住,,輸入信號不起作用,。

鎖存器和D觸發(fā)器實(shí)現(xiàn)的邏輯功能基本相同,都是暫存數(shù)據(jù),。由與非門搭建的話,,鎖存器所耗用的邏輯資源比D觸發(fā)器少,所以使用鎖存器有更高的集成度,,但鎖存器有一下缺點(diǎn):

(1)對毛刺敏感,,毛刺信號會傳遞下去,無異步復(fù)位端,,不能在芯片上電時(shí)處在一個(gè)確定的狀態(tài),;

(2)會使靜態(tài)時(shí)序分析變得復(fù)雜,可測性不好,,不利于設(shè)計(jì)的可重用,,所以當(dāng)今的ASIC設(shè)計(jì)中除了CPU這種甚高速電路,,一般不提倡使用鎖存器;

(3)FPGA器件中有大量的D觸發(fā)器結(jié)構(gòu)而沒有鎖存器這種現(xiàn)成的結(jié)構(gòu),,使用鎖存器會更耗資源,,

如何避免使用鎖存器:

(1)時(shí)序邏輯電路中,可用帶使能端的D觸發(fā)器實(shí)現(xiàn),;

(2)在組合進(jìn)程中賦默認(rèn)值,;

(3)對所有輸入條件賦輸入值,以覆蓋所有條件分支(特別是if..else..和case結(jié)構(gòu)),;

(4)避免產(chǎn)生組合電路反饋,,組合電路反饋會引起精確靜態(tài)時(shí)序分析難以實(shí)現(xiàn)等一系列問題。

在有些設(shè)計(jì)中,,不可避免的需要用到鎖存器,,如在PCI接口設(shè)計(jì)中要完成PCI規(guī)范中對Reset功能的定義??梢酝ㄟ^多位選擇器,,有測試模式管腳做選擇控制位來使設(shè)計(jì)是可測試的。

 

"觸發(fā)器" 泛指一類電路結(jié)構(gòu), 它可以由觸發(fā)信號 (如: 時(shí)鐘, 置位, 復(fù)位等) 改變輸出狀態(tài), 并保持這個(gè)狀態(tài)直到下一個(gè)或另一個(gè)觸發(fā)信號來到時(shí), 觸發(fā)信號可以用電平或邊沿操作. 鎖存器是觸發(fā)器的一種應(yīng)用類型. 在 CMOS 電路中典型的鎖存器 (LATCH) 是由兩個(gè)反相器和兩個(gè)數(shù)據(jù)開關(guān)組成, 其中輸入數(shù)據(jù)開關(guān)在閘門 (GATE) 電平操作下開啟送入數(shù)據(jù). 當(dāng)閘門關(guān)閉后, 另一個(gè)數(shù)據(jù)開關(guān)開啟, 使兩個(gè)反相器的串聯(lián)閉合, 形成 RS 觸發(fā)器類型的正反饋電路, 數(shù)據(jù)保持在這個(gè) RS 觸發(fā)器中, 以達(dá)到鎖存的目的, 直到下一個(gè)閘門周期.


由兩個(gè)這樣的鎖存器可以級聯(lián)成主從結(jié)構(gòu), 并執(zhí)行互補(bǔ)的操作. 即前一個(gè)送入數(shù)據(jù)時(shí), 后一個(gè)保持先前的數(shù)據(jù), 而前一個(gè)鎖存數(shù)據(jù)時(shí), 后一個(gè)送入這個(gè)新數(shù)據(jù)到輸出端. 形成一個(gè)邊沿觸發(fā)的 D 觸發(fā)器, 而閘門控制信號成為觸發(fā)器的時(shí)鐘. 也可以認(rèn)為 D 觸發(fā)器是用時(shí)鐘邊沿鎖存數(shù)據(jù)的, 但習(xí)慣上不稱其為鎖存器 LATCH.
在 CMOS 芯片內(nèi)部經(jīng)常使用鎖存器, 但是在 PCB 板級結(jié)構(gòu)上, 建議用觸發(fā)器在時(shí)鐘邊沿上鎖存數(shù)據(jù). 這是因?yàn)樵阪i存器閘門開啟期間數(shù)據(jù)的變化會直接反映到輸出端, 所以要注意控制閘門信號的脈沖寬度. 而對于觸發(fā)器, 只考慮時(shí)鐘的邊沿

 

 

latch和flip-flop都是時(shí)序邏輯,,區(qū)別為:latch同其所有的輸入信號相關(guān),,當(dāng)輸入信號變化時(shí)latch就變化,沒有時(shí)鐘端,;flip-flop受時(shí)鐘控制,,只有在時(shí)鐘觸發(fā)時(shí)才采樣當(dāng)前的輸入,產(chǎn)生輸出,。當(dāng)然因?yàn)槎叨际菚r(shí)序邏輯,,所以輸出不但同當(dāng)前的輸入相關(guān)還同上一時(shí)間的輸出相關(guān)。

latch缺點(diǎn):

1,、沒有時(shí)鐘端,,不受系統(tǒng)同步時(shí)鐘的控制,無法實(shí)現(xiàn)同步操作,,和當(dāng)前我們盡可能采用時(shí)序電路的設(shè)計(jì)思路不符,;

2、latch對毛刺敏感,,受布線延遲影響較大,,很難保證輸出沒有毛刺產(chǎn)生;latch是電平觸發(fā),,相當(dāng)于有一個(gè)使能端,,且在激活之后(在使能電平的時(shí)候)相當(dāng)于導(dǎo)線了,隨輸出而變化,,在非使能狀態(tài)下是保持原來的信號,,這就可以看出和flip-flop的差別,,其實(shí)很多時(shí)候latch是不能代替ff的。如果使用門電路來搭建latch和ff,,則latch消耗的門資源比ff要少,,這是latch比ff優(yōu)越的地方。

3.在ASIC中使用latch的集成度比DFF高,,但在FPGA中正好相反,,因?yàn)镕PGA中沒有標(biāo)準(zhǔn)的latch單元,,但有DFF單元,,一個(gè)LATCH需要多個(gè)LE才能實(shí)現(xiàn)。

4.latch將靜態(tài)時(shí)序分析變得極為復(fù)雜,,目前l(fā)atch只在極高端電的路中使用,,如intel 的P4等CPU。

 

一般的設(shè)計(jì)規(guī)則是:在絕大多數(shù)設(shè)計(jì)中避免產(chǎn)生LATCH.它會讓您設(shè)計(jì)的時(shí)序完蛋,,并且它的隱蔽性很強(qiáng),,非老手不能查出.latch最大的危害在于不能過濾毛刺。這對于下一級電路是極其危險(xiǎn)的,。所以,,只要能用D觸發(fā)器的地方,就不用latch,。有些地方?jīng)]有時(shí)鐘,,也只能用latch了。

組合邏輯避免產(chǎn)生latch的一種常用做法,。 在process里面的最開頭對組合邏輯的輸出賦初值,。

舉例說明如下:

              process (Rd_lenth,Wr_Addr_En,Rd_Addr_En,MRd_En,MWr_En,lm_Ack_n)

         begin

            next_state<=cur_state;

             case cur_state is

                     when idle=>

                         if(x) then

                            next_state<=busy;

                            else

                              ........

                            end if;

                            ........

              End process;

相當(dāng)?shù)碾娐肥窃诿總€(gè)狀態(tài)底下,,如果下一個(gè)clk到來時(shí),,下一個(gè)狀態(tài)條件沒滿足,狀態(tài)機(jī)繼續(xù)留在原狀態(tài),,相當(dāng)于在cur_state的寄存器前面做了一個(gè)選擇器,。在if語句和case不全很容易產(chǎn)生latch。