在本單元(數位電路第三章)中,我們將介紹正反器(Flip-Flop)電路及循序邏輯電路。

何謂循序邏輯電路?

上在上一個單元中,我們討論了組合邏輯電路如何從各種輸入信號的組合,得到單一的輸出結果。這類組合邏輯電路並沒有記憶能力,因為其輸出僅會由目前的輸入值來決定,而不會受到任何先前輸入值的影響。也就是說,其輸出無法反映先前的輸入電位狀態。

相較之下,循序邏輯電路 – 也就是本單元所要討論的主題 – 是有記憶能力的。循序邏輯電路的輸出,會由目前的輸入值和先前的輸入值共同來決定。

循序電路為了將過去的輸入值反映到目前的輸出上,具體上會需要什麼呢?顯然地,它需要一個記憶元素,而這種記憶元素就是所謂的正反器。正反器依據其結構和動作方式,可分為四種基本類型:RS、JK、D、和T型。在本單元中,我們將針對RS和D型正反器進行說明。

為何稱為”正反器”?

前述的這類記憶元素之所以被稱為正反器,是因為它們只會在兩個穩定狀態之間變化,也就是以類似翹翹板的行為,停留在一邊或另一邊。以下,就讓我們利用這個比喻來解釋RS型正反器的動作。

考慮圖2中所示的翹翹板。它有點生鏽,因此當沒有人在上面時,它會保持停留在兩邊中的其中一邊的靜止狀態。請注意以下幾點:

圖1: RS型正反器的電路圖图

圖1: RS型正反器的電路圖

  • 翹翹板的左邊代表輸出Q; 右邊則代表輸出Q#。
  • 兩位先生R和S代表輸入。當其中一人坐上翹翹板時,該輸入會變為邏輯H;當一個人離開翹翹板時,該輸入變為邏輯L(此比喻並不完美:我們不能允許R和S同時在翹翹板上!)。

图2:跷跷板的初始状态(Q=L、Q#=H、R=L、S=L)图3:S君坐在跷跷板上的状态(Q=H、Q#=L、R=L、S=H)

圖2:翹翹板的初始狀態(Q=L、Q#=H、R=L、S=L)

當S先生坐上翹翹板(S=H)時,輸出Q就會變成H(Q#變成L)(圖3 )

图3:S君坐在跷跷板上的状态(Q=H、Q#=L、R=L、S=H)

圖3:S先生坐在翹翹板上的狀態(Q=H、Q#=L、R=L、S=H)

即使S先生下來了,翹翹板也不會改變動作(S=L),Q#還是L,不改變(圖4)

图4:S君从跷跷板上下来的状态(Q=H、Q#=L、R=L、S=L)

圖4:S先生從翹翹板上下來的狀態(Q=H、Q#=L、R=L、S=L)

假設R坐上翹翹板而非S,在此情況下,Q會是L(Q#會是H); 當R離開翹翹板後,此狀態將會繼續維持著。從這裡我們可以看到,翹翹板如何”記住”先前是哪一邊的人坐在上面。

圖5中的真值表說明了RS型正反器的動作方式。在此表中,Q0和Q0#是在輸入改變之前的有效輸出值。

RS型正反器是四種正反器類型中最簡單的一種。舉例來說,它經常被使用於防止機械開關的誤動作。

 

Operation S R Q Q#
Set H L H L
Reset L H L H
Hold L L Q0 Q0#
Not allowed H H L L

圖5:RS正反器的真值表

由時脈驅動的D型正反器

D型正反器會在輸入時脈(CK)的上升邊緣(L→H)和/或下降邊緣(H→L)時,捕捉D輸入端的值,並從Q輸出該值。

圖6:D型正反器

圖6:D型正反器

輸入 輸出
CK D Q Q#
L L H
H H L
↑以外 x Q0 Q0#

Q0:輸入變化前的輸出
x:H或L皆可
↑:L向H的轉移

圖7:D型正反器的真值表

讓我們再次使用翹翹板來解釋D型正反器。圖8所示為其初始狀態。當D先生坐上翹翹板時,輸入D進入H狀態;當D先生離開翹翹板時,它會轉變到L狀態。蹺蹺板的另一端,則固定放置一個比D先生輕的重物。與真正的翹翹板不同之處,在於此虛擬的翹翹板只有在接收到時脈的上升邊緣時,才會改變狀態。

Figure 8: Initial State of D Flip-Flop (CK = L, D = H, Q = L, Q# = H)

圖8:D型正反器的初始狀態 (CK=L、D=H、Q=L、Q#=H)

圖8看起來會有一奇怪之處:雖然D先生比重物重,但他仍處於偏高位置,而重物反而在低處。此原因是由於目前CK仍然處於L狀態。當CK變為H時(在信號的上升邊緣),D先生這一方便會下降 - 如圖9所示。

圖9: D型正反器的CK處於上升狀態(D=H、Q=H、Q#=L)

圖9: D型正反器的CK處於上升狀(D=H、Q=H、Q#=L)

目前D先生端已位於低處,而此狀態將會至少維持到下一次CK(時脈)信號從L變為H。換言之,翹翹板會“記住”此狀態,並至少會維持到CK完成其目前的H期間及接著在後的L期間。在這段期間內,無論D先生上下翹翹板多少次,都不會造成影響。

換句話說,D型正反器就是一種時脈同步的循序邏輯電路,它會記住在CK信號最後一次從L變為H瞬間的有效狀態。D型正反器是循序電路的一種基本構建元件,具有很廣泛的用途。它們可以透過多層級的組合方式,實現移位暫存器和時脈除法器等電路,我們也能在CPU的內部暫存器中看到它的蹤跡。

正反器和SRAM

正反器可儲存1位元的資訊:亦即位於H或是L狀態。因此,我們可以將大量正反器排列在一起,並加入必要的選擇電路,來構建出SRAM。由於SRAM的工作速度比DRAM和快閃記億體快得多,因此它通常會被應用於CPU的高速快取記憶體和暫存器上。

但在實務上,CPU的記憶體和暫存器並不會使用那些由RS型正反器所構建出來的邏輯閘,因為電路會變得過於龐大。這類記憶體通常會利用四個或六個FET,來實現一個位元(如圖A所示)。

Figure A: Basic SRAM Circuit

圖A:SRAM的基本電路

為何需要時脈電路

在之前的兩個單元中,我們已介紹了邏輯電路的基礎知識。上一單元中我們討論了組合邏輯電路,這次我們則討論了循序邏輯電路。在結束本單元之前,我們想強調一點,在設計邏輯電路時有很多的因素是必須考慮到的,其中之一是與時脈電路的使用有關。

特別值得一提的是,組合邏輯電路有時會因為信號傳輸上的輕微延遲,而導致輸出上出現一非常短的無效信號。這種無效的輸出(一般也稱為短脈衝假信號(glitch)),可能會造成邏輯電路的誤動作。這類的問題可透過在電路中加入時脈電路來避免,以下我們加以說明。

圖10:使用時鐘同步電路避免短脈衝假信號(glitch)

圖10:使用時鐘同步電路避免短脈衝假信號(glitch)

圖10說明了如何在邏輯電路中加入時脈電路。其中,每個組合邏輯電路區塊都被夾在正反器(FF)之間。由於短脈衝假信號只會存在於組合邏輯電路輸出穩定下來前的短暫期間內,為了加以防止,可先等待輸出穩定,然後才改變時脈狀態,如此一來,便可確保正反器捕獲到預期的輸出值。

到此為止,我們已完成了基本數位電路的系列介紹。回顧本系列,我們從“數位”的定義討論來開始,接著很快地介紹了基本邏輯電路、數位IC、組合邏輯電路,最後以循序邏輯電路的討論來做為結束。
當然,我們的介紹只觸及了非常基礎的內容,還有許多關於電路設計實務的知識是我們未提到的。建議您找時間自行持續研究此一技術領域。

在下一個系列單元中,我們將開始為您介紹微控制器,期待與您再相見。

課程單元列表

  1. 基礎數位電路
  2. 數位IC / 組合邏輯
  3. 循序邏輯