一、鎖存器
鎖存器(latch)---對(duì)脈沖電平敏感,在時(shí)鐘脈沖的電平作用下改變狀態(tài) 鎖存器是電平觸發(fā)的存儲(chǔ)單元,數(shù)據(jù)存儲(chǔ)的動(dòng)作取決于輸入時(shí)鐘(或者使能)信號(hào)的電平值,僅當(dāng)鎖存器處于使能狀態(tài)時(shí),輸出才會(huì)隨著數(shù)據(jù)輸入發(fā)生變化。 鎖存器不同于觸發(fā)器,它不在鎖存數(shù)據(jù)時(shí),輸出端的信號(hào)隨輸入信號(hào)變化,就像信號(hào)通過(guò)一個(gè)緩沖器一樣;一旦鎖存信號(hào)起鎖存作用,則數(shù)據(jù)被鎖住,輸入信號(hào)不起作用。鎖存器也稱(chēng)為透明鎖存器,指的是不鎖存時(shí)輸出對(duì)于輸入是透明的。
鎖存器(latch):我聽(tīng)過(guò)的最多的就是它是電平觸發(fā)的,呵呵。鎖存器是電平觸發(fā)的存儲(chǔ)單元,數(shù)據(jù)存儲(chǔ)的動(dòng)作取決于輸入時(shí)鐘(或者使能)信號(hào)的電平值,當(dāng)鎖存器處于使能狀態(tài)時(shí),輸出才會(huì)隨著數(shù)據(jù)輸入發(fā)生變化。(簡(jiǎn)單地說(shuō),它有兩個(gè)輸入,分別是一個(gè)有效信號(hào)EN,一個(gè)輸入數(shù)據(jù)信號(hào)DATA_IN,它有一個(gè)輸出Q,它的功能就是在EN有效的時(shí)候把DATA_IN的值傳給Q,也就是鎖存的過(guò)程)。
應(yīng)用場(chǎng)合:數(shù)據(jù)有效遲后于時(shí)鐘信號(hào)有效。這意味著時(shí)鐘信號(hào)先到,數(shù)據(jù)信號(hào)后到。在某些運(yùn)算器電路中有時(shí)采用鎖存器作為數(shù)據(jù)暫存器。
缺點(diǎn):時(shí)序分析較困難。
不要鎖存器的原因有二:1、鎖存器容易產(chǎn)生毛刺,2、鎖存器在ASIC設(shè)計(jì)中應(yīng)該說(shuō)比f(wàn)f要簡(jiǎn)單,但是在FPGA的資源中,大部分器件沒(méi)有鎖存器這個(gè)東西,所以需要用一個(gè)邏輯門(mén)和ff來(lái)組成鎖存器,這樣就浪費(fèi)了資源。
優(yōu)點(diǎn):面積小。鎖存器比FF快,所以用在地址鎖存是很合適的,不過(guò)一定要保證所有的latch信號(hào)源的質(zhì)量,鎖存器在CPU設(shè)計(jì)中很常見(jiàn),正是由于它的應(yīng)用使得CPU的速度比外部IO部件邏輯快許多。latch完成同一個(gè)功能所需要的門(mén)較觸發(fā)器要少,所以在asic中用的較多。
二、觸發(fā)器
觸發(fā)器(Flip-Flop,簡(jiǎn)寫(xiě)為 FF),也叫雙穩(wěn)態(tài)門(mén),又稱(chēng)雙穩(wěn)態(tài)觸發(fā)器。是一種可以在兩種狀態(tài)下運(yùn)行的數(shù)字邏輯電路。觸發(fā)器一直保持它們的狀態(tài),直到它們收到輸入脈沖,又稱(chēng)為觸發(fā)。當(dāng)收到輸入脈沖時(shí),觸發(fā)器輸出就會(huì)根據(jù)規(guī)則改變狀態(tài),然后保持這種狀態(tài)直到收到另一個(gè)觸發(fā)。
觸發(fā)器(flip-flops)電路相互關(guān)聯(lián),從而為使用內(nèi)存芯片和微處理器的數(shù)字集成電路(IC)形成邏輯門(mén)。它們可用來(lái)存儲(chǔ)一比特的數(shù)據(jù)。該數(shù)據(jù)可表示音序器的狀態(tài)、計(jì)數(shù)器的價(jià)值、在計(jì)算機(jī)內(nèi)存的ASCII字符或任何其他的信息。 有幾種不同類(lèi)型的觸發(fā)器(flip-flops)電路具有指示器,如T(切換)、S-R(設(shè)置/重置)J-K(也可能稱(chēng)為Jack Kilby)和D(延遲)。典型的觸發(fā)器包括零個(gè)、一個(gè)或兩個(gè)輸入信號(hào),以及時(shí)鐘信號(hào)和輸出信號(hào)。一些觸發(fā)器還包括一個(gè)重置當(dāng)前輸出的明確輸入信號(hào)。第一個(gè)電子觸發(fā)器是在1919年由W.H.Eccles和F.W.Jordan發(fā)明的。
觸發(fā)器(flip-flop)---對(duì)脈沖邊沿敏感,其狀態(tài)只在時(shí)鐘脈沖的上升沿或下降沿的瞬間改變。
T觸發(fā)器(Toggle Flip-Flop,or Trigger Flip-Flop)設(shè)有一個(gè)輸入和輸出,當(dāng)時(shí)鐘頻率由0轉(zhuǎn)為1時(shí),如果T和Q不相同時(shí),其輸出值會(huì)是1。輸入端T為1的時(shí)候,輸出端的狀態(tài)Q發(fā)生反轉(zhuǎn);輸入端T為0的時(shí)候,輸出端的狀態(tài)Q保持不變。把JK觸發(fā)器的J和K輸入點(diǎn)連接在一起,即構(gòu)成一個(gè)T觸發(fā)器。
應(yīng)用場(chǎng)合:時(shí)鐘有效遲后于數(shù)據(jù)有效。這意味著數(shù)據(jù)信號(hào)先建立,時(shí)鐘信號(hào)后建立。在CP上升沿時(shí)刻打入到寄存器。 三、寄存器
寄存器(register):用來(lái)存放數(shù)據(jù)的一些小型存儲(chǔ)區(qū)域,用來(lái)暫時(shí)存放參與運(yùn)算的數(shù)據(jù)和運(yùn)算結(jié)果,它被廣泛的用于各類(lèi)數(shù)字系統(tǒng)和計(jì)算機(jī)中。其實(shí)寄存器就是一種常用的時(shí)序邏輯電路,但這種時(shí)序邏輯電路只包含存儲(chǔ)電路。寄存器的存儲(chǔ)電路是由鎖存器或觸發(fā)器構(gòu)成的,因?yàn)橐粋€(gè)鎖存器或觸發(fā)器能存儲(chǔ)1位二進(jìn)制數(shù),所以由N個(gè)鎖存器或觸發(fā)器可以構(gòu)成N位寄存器。 工程中的寄存器一般按計(jì)算機(jī)中字節(jié)的位數(shù)設(shè)計(jì),所以一般有8位寄存器、16位寄存器等。
對(duì)寄存器中的觸發(fā)器只要求它們具有置1、置0的功能即可,因而無(wú)論是用同步RS結(jié)構(gòu)觸發(fā)器,還是用主從結(jié)構(gòu)或邊沿觸發(fā)結(jié)構(gòu)的觸發(fā)器,都可以組成寄存器。一般由D觸發(fā)器組成,有公共輸入/輸出使能控制端和時(shí)鐘,一般把使能控制端作為寄存器電路的選擇信號(hào),把時(shí)鐘控制端作為數(shù)據(jù)輸入控制信號(hào)。
?
鎖存器與觸發(fā)器的區(qū)別
鎖存器和觸發(fā)器是具有記憶功能的二進(jìn)制存貯器件,是組成各種時(shí)序邏輯電路的基本器件之一。區(qū)別為:latch同其所有的輸入信號(hào)相關(guān),當(dāng)輸入信號(hào)變化時(shí)latch就變化,沒(méi)有時(shí)鐘端;flip-flop受時(shí)鐘控制,只有在時(shí)鐘觸發(fā)時(shí)才采樣當(dāng)前的輸入,產(chǎn)生輸出。當(dāng)然因?yàn)閘atch和flip-flop二者都是時(shí)序邏輯,所以輸出不但同當(dāng)前的輸入相關(guān)還同上一時(shí)間的輸出相關(guān)。
1、latch由電平觸發(fā),非同步控制。在使能信號(hào)有效時(shí)latch相當(dāng)于通路,在使能信號(hào)無(wú)效時(shí)latch保持輸出狀態(tài)。DFF由時(shí)鐘沿觸發(fā),同步控制。
2、latch對(duì)輸入電平敏感,受布線(xiàn)延遲影響較大,很難保證輸出沒(méi)有毛刺產(chǎn)生;DFF則不易產(chǎn)生毛刺。
3、如果使用門(mén)電路來(lái)搭建latch和DFF,則latch消耗的門(mén)資源比DFF要少,這是latch比DFF優(yōu)越的地方。所以,在ASIC中使用 latch的集成度比DFF高,但在FPGA中正好相反,因?yàn)镕PGA中沒(méi)有標(biāo)準(zhǔn)的latch單元,但有DFF單元,一個(gè)LATCH需要多個(gè)LE才能實(shí)現(xiàn)。latch是電平觸發(fā),相當(dāng)于有一個(gè)使能端,且在激活之后(在使能電平的時(shí)候)相當(dāng)于導(dǎo)線(xiàn)了,隨輸出而變化。在非使能狀態(tài)下是保持原來(lái)的信號(hào),這就可以看出和flip-flop的差別,其實(shí)很多時(shí)候latch是不能代替ff的。
4、latch將靜態(tài)時(shí)序分析變得極為復(fù)雜。
5、目前l(fā)atch只在極高端的電路中使用,如intel 的P4等CPU。 FPGA中有l(wèi)atch單元,寄存器單元就可以配置成latch單元,在xilinx v2p的手冊(cè)將該單元配置成為register/latch單元,附件是xilinx半個(gè)slice的結(jié)構(gòu)圖。其它型號(hào)和廠(chǎng)家的FPGA沒(méi)有去查證。——個(gè)人認(rèn)為xilinx是能直接配的而altera或許比較麻煩,要幾個(gè)LE才行,然而也非xilinx的器件每個(gè)slice都可以這樣配置,altera的只有DDR接口中有專(zhuān)門(mén)的latch單元,一般也只有高速電路中會(huì)采用latch的設(shè)計(jì)。altera的LE是沒(méi)有l(wèi)atch的結(jié)構(gòu)的,又查了sp3和sp2e,別的不查了,手冊(cè)上說(shuō)支持這種配置。有關(guān)altera的表述wangdian說(shuō)的對(duì),altera的ff不能配置成latch,它使用查找表來(lái)實(shí)現(xiàn)latch。
一般的設(shè)計(jì)規(guī)則是:在絕大多數(shù)設(shè)計(jì)中避免產(chǎn)生latch。它會(huì)讓您設(shè)計(jì)的時(shí)序完蛋,并且它的隱蔽性很強(qiáng),非老手不能查出。latch最大的危害在于不能過(guò)濾毛刺。這對(duì)于下一級(jí)電路是極其危險(xiǎn)的。所以,只要能用D觸發(fā)器的地方,就不用latch。
有些地方?jīng)]有時(shí)鐘,也只能用latch了。比如現(xiàn)在用一個(gè)clk接到latch的使能端(假設(shè)是高電平使能),這樣需要的setup時(shí)間,就是數(shù)據(jù)在時(shí)鐘的下降沿之前需要的時(shí)間,但是如果是一個(gè)DFF,那么setup時(shí)間就是在時(shí)鐘的上升沿需要的時(shí)間。這就說(shuō)明如果數(shù)據(jù)晚于控制信號(hào)的情況下,只能用latch,這種情況就是,前面所提到的latch timing borrow?;旧舷喈?dāng)于借了一個(gè)高電平時(shí)間。也就是說(shuō),latch借的時(shí)間也是有限的。
在if語(yǔ)句和case不全很容易產(chǎn)生latch,需要注意。VIA題目這兩個(gè)代碼哪個(gè)綜合更容易產(chǎn)生latch: 代碼1
always@(enable or ina or inb)
begin
begin
data_out = ina;
end
else
begin
data_out = inb;
end
end
代碼2
input[3:0] data_in;
always@(data_in)
begin
case(data_in)
0 : out1 = 1‘b1;
1,3 : out2 = 1’b1;
2,4,5,6,7 : out3 = 1‘b1;
default: out4 = 1’b1;
endcase
end
答案是代碼2在綜合時(shí)更容易產(chǎn)生latch。
對(duì)latch進(jìn)行STA的分析其實(shí)也是可以,但是要對(duì)工具相當(dāng)熟悉才行,不過(guò)很容易出錯(cuò)。當(dāng)前PrimeTime是支持進(jìn)行l(wèi)atch分析的,現(xiàn)在一些綜合工具內(nèi)置的STA分析功能也支持,比如RTL compiler, Design Compiler。除了ASIC里可以節(jié)省資源以外,latch在同步設(shè)計(jì)里出現(xiàn)的可能還是挺小的,現(xiàn)在處理過(guò)程中大都放在ff里打一下。
鎖存器電平觸發(fā)會(huì)把輸入端的毛刺帶入輸出;而觸發(fā)器由于邊沿作用可以有效抑制輸入端干擾。
在 CMOS 芯片內(nèi)部經(jīng)常使用鎖存器, 但是在PCB板級(jí)結(jié)構(gòu)上, 建議用觸發(fā)器在時(shí)鐘邊沿上鎖存數(shù)據(jù)。這是因?yàn)樵阪i存器閘門(mén)開(kāi)啟期間數(shù)據(jù)的變化會(huì)直接反映到輸出端, 所以要注意控制閘門(mén)信號(hào)的脈沖寬度,而對(duì)于觸發(fā)器,只考慮時(shí)鐘的邊沿。
門(mén)電路是構(gòu)建組合邏輯電路的基礎(chǔ),而鎖存器和觸發(fā)器是構(gòu)建時(shí)序邏輯電路的基礎(chǔ)。門(mén)電路是由晶體管構(gòu)成的,鎖存器是由門(mén)電路構(gòu)成的,而觸發(fā)器是由鎖存器構(gòu)成的。也就是晶體管-》門(mén)電路-》鎖存器-》觸發(fā)器,前一級(jí)是后一級(jí)的基礎(chǔ)。鎖存器和觸發(fā)器它們的輸出都不僅僅取決于目前的輸入,而且和之前的輸入和輸出都有關(guān)系。
它們之間的不同在于:鎖存器沒(méi)有時(shí)鐘信號(hào),而觸發(fā)器常常有時(shí)鐘觸發(fā)信號(hào)。 鎖存器是異步的,就是說(shuō)在輸入信號(hào)改變后,輸出信號(hào)也隨之很快做出改變非常快。而另外一方面,今天許多計(jì)算機(jī)是同步的,這就意味著所有的時(shí)序電路的輸出信號(hào)隨著全局的時(shí)鐘信號(hào)同時(shí)做出改變。觸發(fā)器是一個(gè)同步版鎖存器。 觸發(fā)器泛指一類(lèi)電路結(jié)構(gòu),它可以由觸發(fā)信號(hào) (如: 時(shí)鐘、置位、復(fù)位等) 改變輸出狀態(tài), 并保持這個(gè)狀態(tài)直到下一個(gè)或另一個(gè)觸發(fā)信號(hào)來(lái)到時(shí)。觸發(fā)信號(hào)可以用電平或邊沿操作,鎖存器是觸發(fā)器的一種應(yīng)用類(lèi)型。
寄存器與鎖存器的功能是提供數(shù)據(jù)寄存和鎖存。
寄存功能是指把數(shù)據(jù)暫時(shí)保存,需要時(shí)取出。鎖存功能是指總線(xiàn)電路中,鎖定數(shù)據(jù)輸出,使輸出端不隨輸入端變化。
D觸發(fā)器和D鎖存器的區(qū)別
鐘控D觸發(fā)器其實(shí)就是D鎖存器,邊沿D觸發(fā)器才是真正的D觸發(fā)器,鐘控D觸發(fā)器在使能情況下輸出隨輸入變化,邊沿觸發(fā)器只有在邊沿跳變的情況下輸出才變化。
兩個(gè)鎖存器可以構(gòu)成一個(gè)觸發(fā)器,歸根到底還是dff是邊沿觸發(fā)的,而latch是電平觸發(fā)的。鎖存器的輸出對(duì)輸入透明的,輸入是什么,輸出就是什么,這就是鎖存器不穩(wěn)定的原因,而觸發(fā)器是由兩個(gè)鎖存器構(gòu)成的一個(gè)主從觸發(fā)器,輸出對(duì)輸入是不透明的,必須在時(shí)鐘的上升/下降沿才會(huì)將輸入體現(xiàn)到輸出,所以能夠消除輸入的毛刺信號(hào)。
?
評(píng)論
查看更多