序向邏輯:會記憶狀態的電路
從一顆正反器到計數器與狀態機,看電路如何學會「記住過去」。
會記憶的電路
到目前為止,我們看過的邏輯閘與組合邏輯都有一個共同點:輸出只取決於「此刻」的輸入。輸入一變,輸出立刻跟著變,電路本身不記得任何事。但真實世界的數位系統需要「記憶」——計算機要記住上一步的結果,紅綠燈要知道現在是第幾個狀態,遊戲機要記得你的分數。
能夠記住過去、保存狀態的電路,就叫做序向邏輯(Sequential Logic)。它的輸出不只看現在的輸入,還看「電路目前處於什麼狀態」。一句話總結兩者的差別:
組合邏輯:輸出 = f(現在的輸入)。 序向邏輯:輸出 = f(現在的輸入,目前的狀態)。

最小的記憶單元:正反器
讓電路「記得住」的祕訣是回授——把輸出繞回去當作輸入。最基本的記憶元件是正反器(Flip-Flop),它能穩定地保存一個位元(0 或 1)。
最常見的是 D 型正反器。它有一個資料輸入 $D$、一個時脈輸入 $\text{CLK}$,以及輸出 $Q$。它的行為非常單純:
在時脈的上升邊緣(從 0 變 1 的那一瞬間),把 $D$ 的值「拍照」存進 $Q$;其餘時間 $Q$ 維持不變。
我們用一個下標表示時間步:$Q_{n+1}$ 代表「下一個時脈邊緣之後」的輸出。D 型正反器的特性方程式簡潔到不行:
$$ Q_{n+1} = D $$
這就像快門:只有按下快門(時脈邊緣)的那一刻才會記錄畫面,平常你怎麼晃動鏡頭都沒關係。這種「只在邊緣動作」的設計,讓整個系統可以靠同一個時脈訊號同步前進,是現代同步數位電路的基石。
多個位元排排站:暫存器
一個正反器存 1 個位元,那存 8 個位元呢?把 8 個 D 型正反器並排,共用同一條時脈線,就得到一個 8 位元暫存器(Register)。CPU 裡的暫存器、記憶體的快取,骨子裡都是成群的正反器。
如果讓正反器「手牽手」——前一個的輸出接到後一個的輸入——資料就會在每個時脈邊緣往前移動一格,這叫移位暫存器(Shift Register),常用於串列/並列資料轉換,例如把一條線傳來的位元一個一個接住,湊滿 8 個再一次輸出。
會數數的電路:計數器
把正反器串起來再加一點回授,就能做出計數器(Counter):每來一個時脈脈衝,輸出的二進位數字就加一。
來看一個帶數字的小範例。假設我們有一個 4 位元二進位計數器,輸出 $Q_3Q_2Q_1Q_0$ 從 $0000$ 開始,每個時脈邊緣加一。
- 第 1 個脈衝後:$0001$(十進位 1)
- 第 2 個脈衝後:$0010$(十進位 2)
- 第 3 個脈衝後:$0011$(十進位 3)
- ……依此類推。
4 個位元能表示的最大值是多少?最高可數到
$$ 2^{4} - 1 = 16 - 1 = 15 $$
也就是 $1111$。再加一就「進位溢位」回到 $0000$,所以這個計數器的循環長度是 $2^4 = 16$ 個狀態(稱為「模 16 計數器」)。
如果輸入時脈頻率是 $f_{\text{in}} = 16\ \text{kHz}$,那麼最高位元 $Q_3$ 每數滿 16 次才翻轉一次,它的輸出頻率就是
$$ f_{Q_3} = \frac{f_{\text{in}}}{2^{4}} = \frac{16\,000}{16} = 1\,000\ \text{Hz} = 1\ \text{kHz} $$
這正說明了計數器的另一個身分:除頻器(Frequency Divider)。每多一級正反器,頻率就被除以 2,這在時脈產生與數位時鐘裡無所不在。
狀態機:把這一切組織起來
當記憶單元(正反器)配上組合邏輯(決定「下一個狀態」與「輸出」),就構成了數位系統的萬用模型——有限狀態機(Finite State Machine,FSM)。電梯控制、自動販賣機、交通號誌、通訊協定,全部都能用「目前在哪個狀態 → 看輸入 → 跳到哪個狀態」來描述。序向邏輯,正是讓電路「有記憶、能依序動作」的根本原因。
深入探討(研究所視角)
從理論計算的角度看,序向邏輯實現的是有限狀態機這個計算模型。FSM 又分兩種:輸出只與目前狀態有關的 Moore 機,輸出為 $\lambda(s)$;以及輸出同時取決於狀態與輸入的 Mealy 機,輸出為 $\lambda(s, x)$。兩者在表達能力上等價,可互相轉換,但 Mealy 機通常用較少狀態、反應更快,Moore 機輸出則較不易出現毛刺(glitch)。FSM 的能力上界正對應 Chomsky 階層中的正規語言(regular language),這也是它無法獨力辨識需要無限記憶的語言(如平衡括號)的根本原因——要做到那種事,得加上外部記憶體成為下推自動機或圖靈機。
在實作層面,狀態指派(state assignment)是一個非平凡的最佳化問題:如何把抽象狀態映射到二進位編碼,會直接影響所需正反器數目與下一狀態組合邏輯的複雜度。常見策略包括最小位元的二進位編碼、抗競賽冒險的格雷碼,以及一狀態一正反器、面積換速度的 one-hot 編碼。經典的化簡理論則有 Huffman–Mealy 狀態最小化,透過尋找等價狀態(對任意輸入序列產生相同輸出)合併狀態表。
序向電路真正的硬骨頭在於時序(timing)。正反器要正確擷取資料,輸入必須在時脈邊緣前後維持穩定,這定義了建立時間 $t_{su}$ 與保持時間 $t_h$。若在此窗口內輸入跳變,正反器可能進入亞穩態(metastability),輸出長時間懸在 0 與 1 之間的不定電位——這在跨時脈域(CDC)的非同步介面特別致命,工程上以同步器與平均無故障時間(MTBF)模型來量化風險。整個系統的最高時脈頻率則受最長路徑限制:
$$ T_{\text{clk}} \ge t_{cq} + t_{\text{comb,max}} + t_{su} $$
其中 $t_{cq}$ 是時脈到輸出延遲、$t_{\text{comb,max}}$ 是兩級正反器間組合邏輯的最大延遲。這條不等式是靜態時序分析(STA)與數位 IC 後端設計的核心,也把抽象的狀態機理論,牢牢釘回了物理世界的電晶體延遲之上。