時序邏輯有「記憶」,輸出依當前輸入 + 過去狀態。是 CPU、計數器、狀態機的基礎。
一、Latch 與 Flip-Flop
SR Latch(最簡單的記憶元件)
由兩個 NOR 或 NAND 互鎖:
S──┐
│NAND
┌──┘ Q
────┤
│
────┤ !Q
│
R──┘NAND
| S | R | Q(下一狀態) |
|---|---|---|
| 0 | 0 | 不變 |
| 0 | 1 | 0(reset) |
| 1 | 0 | 1(set) |
| 1 | 1 | 不允許 |
D Latch(電平觸發)
Data ── D ──┐
│
├── Q
│
Enable ── G ──
當 G=1:Q 跟隨 D 當 G=0:Q 鎖住
D Flip-Flop(邊緣觸發)
最常用的記憶元件,只在時鐘邊緣取樣:
D ──→ D ──┐
│
├── Q
│
CLK ──→ ▲──
(rising edge)
只在 CLK 上升沿(rising edge)讀取 D,其他時間 Q 保持。
JK Flip-Flop
更通用的觸發器:
| J | K | Q(t+1) |
|---|---|---|
| 0 | 0 | Q(t) |
| 0 | 1 | 0 |
| 1 | 0 | 1 |
| 1 | 1 | !Q(t)(toggle) |
T Flip-Flop(Toggle)
T = 1 時翻轉,T = 0 時保持。 用於分頻器(÷2)。
Master-Slave Flip-Flop
兩個 latch 串聯,避免「透通」(race-around)。 現代 D-FF 都是 Master-Slave 結構。
二、時序電路的關鍵時序參數
1. Setup time(建立時間)
CLK 邊緣前,D 必須穩定的時間。
2. Hold time(保持時間)
CLK 邊緣後,D 必須保持的時間。
3. Clock-to-Q(傳播延遲)
CLK 邊緣到 Q 出現新值的時間。
違反 Setup/Hold 的後果
訊號可能進入「亞穩態」(Metastable): - Q 介於 0 與 1 之間 - 持續時間不定(µs–ms 級) - 邏輯誤判
解決:跨時鐘域
不同時鐘域的訊號要透過 同步器(兩級 D-FF)才能安全使用。
三、計數器(Counter)
非同步計數器(Ripple Counter)
T-FF 串聯,每級 ÷2:
CLK──→T-FF──→T-FF──→T-FF──→T-FF
Q0 Q1 Q2 Q3
簡單但有累積延遲,最大頻率受限。
同步計數器
所有 FF 同時被一個時鐘觸發:
CLK ──┬──┬──┬──┬──
│ │ │ │
FF0 FF1 FF2 FF3
+ 組合邏輯(決定下一狀態)
無累積延遲,適合高頻。
經典計數器 IC
- 74HC161:4-bit 同步計數器,可預載
- 74HC393:雙 4-bit 計數器
- 74HC4040:12-bit 計數器
四、暫存器(Register)
並列暫存器(Parallel Register)
n 個 D-FF 共用時鐘,存 n 位資料。
74HC273:8-bit register
移位暫存器(Shift Register)
每個 CLK 邊緣資料移動一位:
In──[D-FF]──[D-FF]──[D-FF]──[D-FF]──Out
Q0 Q1 Q2 Q3
應用
- 串並轉換:UART、SPI 接收端
- 並串轉換:UART 傳送端
- 延遲線
- PRBS(偽隨機序列)產生
經典 IC
- 74HC164:SIPO(Serial In Parallel Out)
- 74HC165:PISO(Parallel In Serial Out)
- 74HC595:常用於擴展 GPIO(SPI 介面)
五、有限狀態機(FSM, Finite State Machine)
數位系統的「演算法表達」。
兩種型態
Mealy 機
輸出依「狀態 + 當前輸入」。
Moore 機
輸出只依「狀態」。
設計流程
- 畫狀態圖(State Diagram)
- 列狀態轉移表
- 編碼狀態(二進位、One-Hot、Gray code)
- 推導 next-state 邏輯
- 寫 HDL 或畫電路圖
Verilog 範例:簡單 FSM
module fsm_example (
input clk, rst, x,
output reg y
);
reg [1:0] state, next_state;
parameter S0 = 2'b00, S1 = 2'b01, S2 = 2'b10;
always @(posedge clk or posedge rst)
if (rst) state <= S0;
else state <= next_state;
always @(*) begin
case (state)
S0: next_state = x ? S1 : S0;
S1: next_state = x ? S2 : S0;
S2: next_state = S0;
default: next_state = S0;
endcase
end
always @(*) y = (state == S2);
endmodule
六、計時與分頻
分頻器
用 T-FF 串聯:每級頻率減半。 8 個 T-FF → ÷256
計數分頻
要 ÷N(不是 2 的次方):
設計同步計數器,當計到 N-1 時 reset。
PLL 倍頻
從低頻產生高頻(見 04-振盪器章)。
七、時鐘樹(Clock Tree)
複雜系統有大量 FF 需要同時被時鐘觸發:
Skew(時鐘偏斜)
不同 FF 收到時鐘的時間不同: - 走線長度差異 - 緩衝器延遲差 - 環境影響
Clock Tree Synthesis (CTS)
EDA 工具自動插入緩衝器,使 skew 最小。
Jitter(抖動)
時鐘週期的隨機變化。 影響:高速通訊(SerDes)、ADC 取樣。
八、常見時序電路範例
1. 紅綠燈控制器
3 個狀態(紅、黃、綠),FSM 設計。 配合計數器計時切換。
2. PWM 產生器
計數器 + 比較器: - 計數器從 0 計到 N - 與 duty value 比較,輸出 0/1
3. UART 接收器
- 偵測 start bit(下降沿)
- 開始計時
- 取樣中央時刻
- 移位暫存器收 8 位
- 檢查 stop bit
- 輸出 byte
4. SPI 控制器
- 8-bit 移位暫存器
- 時鐘控制
- 片選邏輯
- DMA 整合
九、本章總結
✅ 您應該掌握:
- [x] Latch 與 Flip-Flop 的差別
- [x] D/JK/T Flip-Flop
- [x] Setup/Hold/Clock-to-Q 時序參數
- [x] 亞穩態與同步器
- [x] 計數器、暫存器、移位暫存器
- [x] FSM(有限狀態機)設計
- [x] 時鐘樹、Skew、Jitter
下一章
09-記憶體.md — 各種記憶體技術。