作者 IC_learner 在此特別鳴謝
主要內(nèi)容:
·雙穩(wěn)態(tài)器件
·鎖存器常見結構
·鎖存器的應用
·觸發(fā)器
·觸發(fā)器的建立時間和保持時間
1、雙穩(wěn)態(tài)器件
**雙穩(wěn)態(tài)器件**是指穩(wěn)定狀態(tài)有兩種,一種是0,一種是1的器件;雙穩(wěn)態(tài)器件是存儲器件的基本模塊,雙穩(wěn)器件的的一種電路結構是:交叉耦合反相器 結構,如下圖所示:
連個反相器連在一起,這就構成了一個雙穩(wěn)態(tài)器件,為什么是雙穩(wěn)態(tài)呢?我們現(xiàn)在就來分析一下:
由于沒有輸入,于是我們就假設I1的輸出先為1,即Q=1;那么I2的輸入為1,Q’就為0,于是反饋給Q的輸入,導致Q的輸出為1,也就是使得Q的狀態(tài)穩(wěn)定為1,因此這個器件有一個穩(wěn)定的狀態(tài)為1.如下圖所示:
我們再假設I1的輸出先為0,即Q=0;那么I2的輸入為0,Q’就為1,于是反饋給Q的輸入,導致Q的輸出為0,也就是使得Q的狀態(tài)穩(wěn)定為0,因此這個器件還有一個穩(wěn)定的狀態(tài)為0.如下圖所示:
由此可見,這種交叉耦合反相器的器件是雙穩(wěn)態(tài)器件。但是需要注意的是,電路有可能存在第三種狀態(tài),稱為 亞穩(wěn)態(tài) ,它不是一種穩(wěn)定的狀態(tài),關于亞穩(wěn)態(tài)我們后面會進行介紹。
為什么介紹雙穩(wěn)態(tài)器件呢?那是因為鎖存器、寄存器都是雙穩(wěn)態(tài)器件,它們都有兩個穩(wěn)定狀態(tài)1和0。正是因為它們有兩個穩(wěn)定的狀態(tài),因此才可以拿它們來存儲數(shù)據(jù),也就是說雙穩(wěn)態(tài)電路(比如交叉耦合反相器、鎖存器和寄存器)可以存儲數(shù)據(jù)。下面我們就來看看鎖存器和寄存器吧。
2、常見的鎖存器結構
很顯然,上面的那種交叉耦合反相器沒有輸入,是存儲不了輸入的數(shù)據(jù)的了,因此就需要有輸入的類似“ 交叉耦合反相器 ”結構的雙穩(wěn)態(tài)電路,鎖存器應運而生了,最常見最基本的鎖存器是S-R鎖存器,然后常見常用的鎖存器是D鎖存器,下面就逐步看看他們的結構和工作原理吧。
①SR鎖存器
在數(shù)字電路里面,SR鎖存器是最簡單的時序單元,它由一對交叉耦合的或非門構成,如下所示:
主要功能就是通過輸入的S、R端分別控制Q進行置位(set)和復位(reset)。下面我們就對這個電路的分析:
二輸入或非門的功能是,只要有一個輸入為1,輸出就為了0。這SR鎖存電路在正常情況下,輸入RS的組合之一4種可能,即00、01、10和11,下面我們就來看看這4種輸入對輸出Q的影響:
· 輸入R=0,S=0時:對于或非門N1,輸入是0和Q’,由于Q’不知道是0還是1,因此Q的輸出不能確定;對于或非門N2,輸入是0和Q,由于不知道Q的值,因此Q’也不能確定...這就無限循環(huán)下去了,于是我們像**交叉耦合反相器**那樣進行輸出假設:
**A** ,假設原來的狀態(tài)Q=0時,對應的原來狀態(tài)就是Q’=1;那么N2的輸入就是0和0,輸出Q’=1,這樣子就鞏固了原來的狀態(tài)Q’=1;Q’=1,對于N2,輸入就是0和1,輸出Q=0,也鞏固了原來的狀態(tài),也就是與原來的假設一致。所以這個狀態(tài)可以穩(wěn)定下來,也就是當輸入SR=00時,輸出Q=1,Q’=0是可以存在的,如下圖所示:
B ,假設原來的狀態(tài)Q=1時,對應的原來狀態(tài)就是Q’=0;那么N2的輸入就是0和1,輸出Q’=0,這樣子就鞏固了原來的狀態(tài)Q’=0;Q’=0,對于N2,輸入就是0和0,輸出Q=1,也鞏固了原來的狀態(tài),也就是與原來的假設一致。所以這個狀態(tài)可以穩(wěn)定下來,也就是當輸入SR=00時,輸出Q=0,Q’=1是也是可以存在的,如下圖所示:
由此可見,只要原來的狀態(tài)一定了,那么輸入SR=00時,輸出也就是原來的狀態(tài)。
·輸入S=1,R=0時,根據(jù)或非門的功能,由于S=1,N2的輸出Q’= 0;于是N1的輸入就是00,輸出Q就等于1;然后Q=1反饋回N2的輸入,讓N2的輸出穩(wěn)定為0,從而讓Q的輸出穩(wěn)定為1;輸入SR=10時,輸出Q=1,稱為置位功能。(這里我們看一下,在SR=10時,S的信號穩(wěn)定多久輸出Q和Q’才穩(wěn)定下來:S=1到來,首先經(jīng)過N2的門延時t1,然后是Q’反饋回N1的線延時t2,接著是N1的門延時t3,再然后是Q反饋回N2的門延時t4,也就是有2個門延時和兩個線延時,這是對于Q’的;對于Q還有增加一個N2門延時和一個Q’反饋回N1輸入的線延時)如下圖所示:
從上面的分析中,我們知道輸入S=1,R=0時,輸出Q=1,也就是置位的功能。
·當S=0,R=1時,這種情況跟SR=10類似,只不過是輸出Q=0,也就是復位的功能。
·當S=1,R=1時,根據(jù)或非門的功能知道,輸出Q=0,Q’=0。很顯然這時候Q=Q’了,這跟我們給輸出取值的字面意義是相反的,我們把這種狀態(tài)稱為**錯誤**輸出,這是要注意的。這里需要說明的是,S和R都有效是沒有意義的,鎖存器不能同時被復位和置位,這樣會引起輸出都是0的混亂電路反應。
通過上面的分析,我們知道,SR鎖存器可以具有鎖存數(shù)據(jù)的功能:在S有效時,復位輸出Q=1;在R有效時,輸出復位Q=0;當S和R都無效時,就會保持前一個狀態(tài)的輸出。
②D鎖存器
雖然SR鎖存器可以鎖存數(shù)據(jù),電路結構也簡單,但是有一個毛病就是S和R同時有效時,輸出錯誤,使用不夠方便;還有一個問題就是某個時候存某個數(shù)據(jù)分不開,相當于時間和內(nèi)容不夠清晰。因此就因此了D鎖存器,D鎖存的功能是在時鐘高/低電平的時候通過數(shù)據(jù),在時鐘低/高電平的時候鎖存數(shù)據(jù)(這樣就明確地說明了什么時候鎖存什么數(shù)據(jù),而不是像SR鎖存器一樣,不知道鎖存什么數(shù)據(jù)),具體的結構圖和分析如下所示:
D鎖存器常見結構和電路符號圖如下所示:
可以看到,D鎖存器可以分為前級門電路(兩個與門和一個非門)和后級SR鎖存器組成,(PS:反相器2個晶體管,兩個與門共12個晶體管,兩個或非門共8個晶體管,D鎖存器一個22個晶體管)下面我們就來分析一下它的功能:
輸入是Clk和D,也就是輸入有四種可能:
·當clk=0時,紅S紅R都為0,也就是SR鎖存器的輸入為00,根據(jù)SR鎖存器的功能,輸出Q和Q’將保持原來的狀態(tài);因此clk=0時,不管D是什么,輸出Q和Q’都不隨D變化,只與原來的狀態(tài)有關,也就是保持。
·當clk=1時,R=(1·D’)=D’;S=(1·D)=D。
也就是說,當clk=1的時候,SR鎖存的輸入是互補的,不會出現(xiàn)S和R同時有效的情況。當D=1時,S=1,置位有效,輸出Q=1;當D=0時,R=1,復位有效,輸出Q=0;因此就可以知道,在clk=1時,輸出Q=D,也就是輸出等于輸入。
通過上面的分析,上面的D鎖存器結構功能為:在clk=1時,數(shù)據(jù)通過D鎖存器流到了Q;在Clk=0時,Q保持原來的值不變。這樣的鎖存器也稱為透明鎖存器或者**電平**敏感鎖存器(這里需要注意的是,上面結構中 **電平敏感鎖存器是高電平敏感** ,**也是就是高電平有效,這里的有效不是指“鎖存”的這個功能有效,而是指輸出發(fā)生變化即輸入信號得以傳送到輸出,方便后面的鎖存操作**)。然后低電平敏感的D鎖存器的電路結構這里就不介紹了。
3、D鎖存器的應用
鎖存器用來鎖存數(shù)據(jù),這是初始的功能應用,這里來聊聊鎖存的其他的簡單應用吧。
①鎖存器的常用應用就是用來防電路毛刺了,具體的應用就是門控時鐘了,這里請查看我的另外一篇博文,那里有較為詳細的關于門控電路的描述。
②此外,鎖存器可以用來構造觸發(fā)器,這個我們在后面的觸發(fā)器中進行介紹。
③鎖存器的一種叫做鎖定鎖存器( lockup latch)的玩意用于修復掃描鏈插入時引起的時鐘偏移問題,幫助修復保持時間違規(guī)
④類似通過修復保持時間來增強性能、鎖存器流水線的應用,這些應用很難三言兩語的說明,有些我也不是完全掌握,以后有時間再進行撰寫。
4、(D)觸發(fā)器
觸發(fā)器有很多類型,比如J-K觸發(fā)器、T觸發(fā)器、D觸發(fā)。前面我們也說了,鎖存器的應用之一就是構成觸發(fā)器,這里我們只聊最簡單的觸發(fā)器——D觸發(fā)器,D觸發(fā)器的結構和電路符號圖如下所示:
D觸發(fā)器可以由兩個D鎖存器構成,驅動時鐘的相位相反(也就是),前面的D鎖存器稱為主鎖存器,后面的D鎖存器稱為從鎖存器,因此D觸發(fā)器也可以稱為主從觸發(fā)器(PS:兩個D鎖存器共44個晶體管,非門2個晶體管,因此D觸發(fā)器46個晶體管)。下面我們分析一下D觸發(fā)的功能:
假設要傳輸?shù)臄?shù)據(jù)D=D1:在(clock簡稱clk)**clk=0**的時候,主鎖存打開進行傳輸數(shù)據(jù),把輸入傳送到從到從鎖存器的輸入端,即Qm = D1。然后**clk從0→1**的時候,主鎖存器準備關閉,保持原來的值D1,與此同時從鎖存器準備打開,把Qm的值傳輸?shù)捷敵鯭s,也就是Qs=Qm=D1。在**clk=1**的時候,主鎖存器是關閉的,Qm保持D1不變,即Qm=D1;從鎖存器是打開的,Qs=Qm=D1。接著**clk從1→0**的時候,主鎖存器準備打開,準備傳輸數(shù)據(jù);而從鎖存器準備關閉。在clk=0的時候,主鎖存打開進行傳輸數(shù)據(jù),把輸入傳送到從到從鎖存器的輸入端,即Qm *= D2;與此 **同時** ,從鎖存器關閉,由于新的Qm即Qm*還沒有到達從鎖存器的D端,因此在從鎖存器關閉的時候,從鎖存器鎖存的是原來的值即D1,因此輸出Qs =D1。然后接下來上升沿就傳輸D2....
從上面的分析可以找到,D觸發(fā)器在時鐘上升沿的時候鎖存在時鐘上升沿采到的值,并且保持一個時鐘周期。這種在時鐘上升沿鎖存數(shù)據(jù)的觸發(fā)器稱為正邊沿觸發(fā)器,與此對應的還有負邊沿觸發(fā)的觸發(fā)器,這里就不進行介紹了。
由D觸發(fā)器延伸出去的知識點還有很多,比如寄存器,寄存器由多個D觸發(fā)器構成(一個D觸發(fā)器可以看做1位的寄存器);比如帶使能的觸發(fā)器:
帶復位的觸發(fā)器:
OK,觸發(fā)器的結果和功能就聊到這里,接下來我們來聊聊觸發(fā)器的建立時間(setup time)和保持時間(hold time).
5、(D)觸發(fā)器的建立時間和保持時間
首先我們來看看建立時間和保持時間的定義,然后再看看為什么會這樣。
**建立時間** :時鐘有效沿到來之前的某段時間內(nèi),數(shù)據(jù)必須穩(wěn)定,否則觸發(fā)器鎖存不住數(shù)據(jù),這段時間成為建立時間,用Tsetup或者Tsu表示,也就是說要鎖存的數(shù)據(jù)必須比上升沿早來時間必須大于建立時間。
**保持時間** :時鐘有效沿到來之后的某段時間內(nèi),數(shù)據(jù)也必須穩(wěn)定,否則觸發(fā)器鎖存不住數(shù)據(jù),這段時間成為保持時間,用Thold或者Th表示。也就是說,要鎖存的數(shù)據(jù),在上升沿到來之后,還要停留比保持時間大的時間。
如下圖所示:
在第二個時鐘上升沿的時候,要鎖存住輸入端D的高電平,D1是滿足了建立時間和保持時間的情況;而D2則是建立時間沒有滿足,因此不能成功鎖存住輸入的高電平;D3保持時間不滿足,也不能成功鎖存輸入的高電平。
下面我們就來探討一下為什么會會有建立時間和保持時間的要求(別跟我說不滿足要求就不能鎖存正確數(shù)據(jù),我要的是根本原因,不是后果,也就是為什么不滿足建立/保持時間會導致不能捕獲正確鎖存數(shù)據(jù)的原因):
首先D觸發(fā)器的門級結果如下所示:
我們知道D觸發(fā)器是在(上升)邊沿進行鎖存數(shù)據(jù)的,也就是clk從在0→1的時候鎖存數(shù)據(jù),那我們就看看這個上升沿的時候發(fā)生了什么:
假設原來的數(shù)據(jù)是1(也就是從鎖存器鎖存的數(shù)據(jù)是1),然后我們要鎖存的數(shù)據(jù)是0。我是這么理解建立時間和保持時間的:
首先,要讓時鐘上升沿之后Q輸出為了,就是要讓從鎖存器輸出為0,即是要主鎖存器在時鐘上升沿之后穩(wěn)定地鎖存住0,換個角度看就是:在上升沿到來以及到來之后,主鎖存器負責鎖存數(shù)據(jù),而從鎖存器則是負責傳輸 主鎖存器所鎖存好的 數(shù)據(jù);這樣一來,我們的研究重點就放在了 主鎖存器 。
對于主鎖存器,我們可以看這個圖:
在時鐘上升沿到來后,我們要讓 Q輸出0 。假如數(shù)據(jù)的建立時間不足,會發(fā)生什么呢,也就是數(shù)據(jù)(0)相對于時鐘上升沿來得太晚了會怎么樣呢?
假設在T=0ns的時候,clk從0變成1(為方便分析,假設時鐘是理想的,沒有跳變延時)。我們假設一個數(shù)據(jù)D1=0在 **T=-0.7ns(即比時鐘上升沿提前0.7s)** 的時候到達數(shù)據(jù)的端口,然后另一個數(shù)據(jù)D2=0在**T=-0.3ns**的時候才來到數(shù)據(jù)端口(也就是說,D1來得早,而D2來得比較晚即建立時間不足)。然后D1這個0翻山越嶺越過了反相器,變成1,經(jīng)過了與門(由于與門的另一個輸入為1)變成了1,經(jīng)過或非門之后,使輸出Q變成了0,也就是變成了從鎖存器要鎖存的0值。然后主鎖存器Q剛輸出0的時候,還不穩(wěn)定,需要通過反饋使得自己的或非門的輸入為1就是需要t1+t2+t3的時間(如下圖所示)進行維持Q的穩(wěn)定。
然后我們再看看D2數(shù)據(jù)翻山越嶺,剛剛翻到與門那里,時鐘沿就來了,它都 沒有成功到達或非門輸入 。于是D2就肯定達不到目標了,也就是變不成了從鎖存器要鎖存的0值,這就是建立時間不足的引起鎖存不住值的問題。
接著我們看一下 保持時間 ,還是從主鎖存器這邊看。加入0時刻時鐘clk發(fā)生0→1的上升沿跳變時候,clk的1信號首先需要經(jīng)過反相器(inst10)變成0信號后傳到后面的與門(inst13和inst14)。信號從時鐘端口到達與門需要經(jīng)過t1的延遲時間(如下圖所示)即他t1時刻與門的輸入就為低電平0。那么在這個t1時刻之前,與門的輸入端clk始終保持高電平1; 在t1時刻之前 ,如果輸入端D發(fā)生跳變,也就是從0變成1(也就是低電平0這個信號保持得不夠久,由于某些原因被沖成了高電平1),變換后的數(shù)據(jù)端高電平1經(jīng)過t2延時之后,到達與門的另一個輸入端。當t2 因此我們需要輸入D在時鐘沿跳變之后保持不變,這個保持時間的實質(zhì)就是這個t1與t2的差值,即數(shù)據(jù)到達之后,要保持t1-t2。假如這跟導線很長,即t2的延遲很長,比t1還長,那么保持時間就是一個負值,這時候就完全沒有必要關注保持時間了,而是關注建立時間了。 從上面的分析可以知道,保持時間一般情況下會比建立時間小。
-
CMOS
+關注
關注
58文章
5710瀏覽量
235417 -
時鐘
+關注
關注
10文章
1733瀏覽量
131447 -
鎖存器
+關注
關注
8文章
906瀏覽量
41496 -
D觸發(fā)器
+關注
關注
3文章
164瀏覽量
47902 -
觸發(fā)器
+關注
關注
14文章
2000瀏覽量
61132
發(fā)布評論請先 登錄
相關推薦
評論