🔄 Flip-Flop 基礎教學 - D、T、JK 完全解析
🎯 什麼是 Flip-Flop?
Flip-Flop 是數位電路中最基本的記憶元件,能夠儲存1個bit的資訊。
它們是構成 Register 和 Counter 的基本積木!
1. 基本概念
🔑 重要特性
- 雙穩態 (Bistable): 有兩個穩定狀態 (0 或 1)
- 記憶功能: 能保持狀態直到下次觸發
- 時脈控制: 通常由 Clock 信號控制狀態改變
- 邊緣觸發: 在 Clock 的上升緣或下降緣改變狀態
🔍 Clock Edge 說明
- 正緣觸發 (Positive Edge): Clock 從 0→1 時動作 (符號: ▲)
- 負緣觸發 (Negative Edge): Clock 從 1→0 時動作 (符號: ▼)
2. D Flip-Flop (Data Flip-Flop)
📋 基本符號
📊 真值表 (Truth Table)
| CLK |
D |
Q(next) |
說明 |
| ↑ |
0 |
0 |
輸出變為 0 |
| ↑ |
1 |
1 |
輸出變為 1 |
| 0 或 1 |
X |
Q |
無 Clock edge 時保持不變 |
D Flip-Flop 特性方程式:
Q(next) = D
🔍 工作原理
- D = Data: D 輸入決定下一個狀態
- 簡單直接: 輸出就是輸入的延遲版本
- 無競爭: 不會有不確定狀態
- Clock 控制: 只有在 Clock edge 時才改變
時序圖 (Timing Diagram)
🎯 主要應用
- 資料儲存: 最基本的記憶體元件
- Register 構建: 多個 D FF 組成 Register
- 資料同步: 確保資料在正確時間點更新
- Pipeline: 流水線設計中的延遲元件
3. T Flip-Flop (Toggle Flip-Flop)
📋 基本符號
📊 真值表 (Truth Table)
| CLK |
T |
Q(next) |
說明 |
| ↑ |
0 |
Q |
保持不變 |
| ↑ |
1 |
Q' |
切換狀態 (Toggle) |
| 0 或 1 |
X |
Q |
無 Clock edge 時保持不變 |
T Flip-Flop 特性方程式:
Q(next) = T ⊕ Q = T·Q' + T'·Q
🔍 工作原理
- T = Toggle: 控制是否切換狀態
- T=0: 保持原狀態不變
- T=1: 切換狀態 (0→1 或 1→0)
- 計數功能: 很適合做計數器
時序圖 - T=1 的情況
🎯 主要應用
- 二進位計數器: 每個 clock 計數 +1
- 頻率除法器: 輸出頻率 = 輸入頻率 ÷ 2
- Ripple Counter: 串聯多個 T FF
- 狀態切換: 需要交替狀態的場合
4. JK Flip-Flop (最通用的正反器)
📋 基本符號
📊 真值表 (Truth Table)
| CLK |
J |
K |
Q(next) |
說明 |
| ↑ |
0 |
0 |
Q |
保持不變 (Hold) |
| ↑ |
0 |
1 |
0 |
重置為 0 (Reset) |
| ↑ |
1 |
0 |
1 |
設定為 1 (Set) |
| ↑ |
1 |
1 |
Q' |
切換狀態 (Toggle) |
| 0 或 1 |
X |
X |
Q |
無 Clock edge 時保持不變 |
JK Flip-Flop 特性方程式:
Q(next) = J·Q' + K'·Q
🔍 工作原理
- J=0, K=0: Hold (保持) - 狀態不變
- J=0, K=1: Reset (重置) - 輸出變為 0
- J=1, K=0: Set (設定) - 輸出變為 1
- J=1, K=1: Toggle (切換) - 狀態反轉
🌟 JK Flip-Flop 的優點
- 最通用: 可以實現所有其他 FF 的功能
- 無禁止狀態: 所有輸入組合都有明確定義
- 功能豐富: Hold, Set, Reset, Toggle 都可以
- 設計靈活: 適合複雜的序向電路設計
時序圖 - 展示所有功能
🎯 主要應用
- 通用計數器: 可設計任意進制計數器
- 序向電路設計: 狀態機的基本元件
- 控制邏輯: 複雜的控制序列
- 其他 FF 模擬: 可以模擬 D FF 和 T FF
5. Flip-Flop 之間的轉換
🔄 如何用 JK 實現其他 FF
JK → D Flip-Flop
J = D, K = D'
(D 接到 J,D 的反相接到 K)
JK → T Flip-Flop
J = T, K = T
(T 同時接到 J 和 K)
D → T Flip-Flop
D = T ⊕ Q
(需要額外的 XOR gate)
6. 總比較表
| 特性 |
D Flip-Flop |
T Flip-Flop |
JK Flip-Flop |
| 輸入數量 |
1 個 (D) |
1 個 (T) |
2 個 (J, K) |
| 主要功能 |
資料儲存 |
狀態切換 |
通用控制 |
| 特性方程式 |
Q+ = D |
Q+ = T ⊕ Q |
Q+ = J·Q' + K'·Q |
| 最適合應用 |
Register, 資料同步 |
計數器, 分頻器 |
序向電路設計 |
| 設計複雜度 |
簡單 |
簡單 |
中等 |
| 功能多樣性 |
低 |
低 |
高 |
7. 在 Chapter 6 中的應用
🎯 Register 應用
- D Flip-Flop: 基本 register 的構建元件
- Parallel Load Register: 使用 D FF + 控制邏輯
- Shift Register: D FF 串聯實現移位功能
⚡ Counter 應用
- T Flip-Flop: Ripple Counter 的基本元件
- JK Flip-Flop: Synchronous Counter 的通用元件
- D Flip-Flop: 可用於 Ring Counter 和 Johnson Counter
⚠️ 常見錯誤提醒
- Edge Triggering: 只有在 clock edge 時才改變,平常時間保持不變
- Setup/Hold Time: 輸入必須在 clock edge 前後穩定一段時間
- Race Condition: 避免組合邏輯回饋造成的競爭
- 初始狀態: 上電時 FF 狀態不確定,需要 Reset
🧠 記憶口訣
D = Data (資料直通車) 🚗
T = Toggle (切換開關) 🔄
JK = Just Kool (萬能工具) 🛠️
應用記憶法:
📝 Register 用 D (Data storage)
🔢 Counter 用 T (Toggle counting)
🎛️ 複雜設計用 JK (Just Kool for everything)
📚 小考重點整理
🎯 必須會的:
- 每種 FF 的符號和真值表
- 特性方程式的記憶和應用
- Clock edge triggering 的概念
- 各種 FF 在 Register/Counter 中的角色
- JK 轉換為其他 FF 的方法
⚡ 解題技巧:
- 看到 資料儲存 → 想到 D FF
- 看到 計數/切換 → 想到 T FF
- 看到 複雜控制 → 想到 JK FF
- 分析時序圖時,只在 clock edge 時刻檢查變化
- 設計電路時,先確定需要什麼功能,再選擇適當的 FF