數位電子入門:什麼是數位電子中的狀態機?
4 分鐘
- 什麼是 State Machine?
- 為什麼 State Machine 在 Digital Electronics 中很重要?
- State Machine 的主要組成
- State Machine 的主要類型
- 如何設計 State Machine?
- State Machine 在 Electronics 與 PCB Design 中的應用
- State Machine 的優點與限制
- Moore 與 Mealy State Machine 的差異
- 結論
有人說,自然界中存在的訊號本質上大多是 Analog(類比)的,而 Digital(數位)則是人類為了簡化資訊表示、儲存與運算而建立的一種方式。
Digital System(數位系統)廣泛應用於 Signal Processing、Data Storage 與各類控制系統。現代 MCU、FPGA 與其他 Digital IC 主要使用數位邏輯進行運算,而在需要處理真實世界的 Analog Signal 時,則可透過 ADC 與 DAC 在類比與數位訊號之間進行轉換。
本文要介紹的是 State Machine(狀態機)。
State Machine 是許多 Digital Control System 的重要基礎。例如 Microcontroller、CPU、FPGA 與 Communication Controller 的控制邏輯中,都可能包含一個或多個 State Machine,用來管理事件順序、Protocol Flow 與系統狀態。
State Machine 的核心概念,是讓系統根據目前的 State(狀態)與 Input(輸入),決定下一個 State,並產生對應的 Output。
換句話說,它透過一組明確規則,控制系統何時從一個狀態轉換到另一個狀態。
無論您是電子工程學生、Embedded Engineer 或 FPGA Designer,理解 State Machine 都是非常重要的 Digital Design 基礎。
什麼是 State Machine?
State Machine(狀態機)是一種用來描述系統行為的數學與邏輯模型。
在 Digital Electronics 中,當系統只有有限數量的 State 時,通常稱為 Finite State Machine(FSM,有限狀態機)。
對一個典型的同步 FSM 而言,在某一個時刻系統會處於其中一個定義好的 State,然後根據:
- 目前 State
- External Input
- Clock Event
- Transition Condition
決定下一個 State,並產生相應的 Output。
例如,可以把 Traffic Light Controller(交通號誌控制器)想像成一個簡單 State Machine:
- 具有不同 State:Red、Yellow、Green。
- 根據 Timer 或 Sensor 等 Input 進行 State Transition。
- 每個 State 決定目前哪一盞燈亮起。
這種結構化設計方式,可以幫助工程師建立更容易預測、驗證與擴充的 Digital System。
為什麼 State Machine 在 Digital Electronics 中很重要?
State Machine 是 Sequential Logic Design(循序邏輯設計)中的核心概念之一。
與 Combinational Logic 不同:
- Combinational Logic:Output 主要由目前 Input 決定。
- Sequential Logic:Output 與下一步行為還會受到目前 State,也就是過去歷史資訊的影響。
State Machine 透過 Flip-Flop、Register 等 Memory Element 儲存目前 State,因此系統能夠「記住」先前發生過的事件。
FSM 之所以重要,是因為:
- 它們是 Microprocessor、MCU、FPGA 與其他 Digital System 中常見的 Control Logic。
- UART、I²C、SPI、CAN 等 Communication Protocol Controller 經常利用 FSM 管理 Handshake、Timing 與 Data Transfer。
- Automation 與 Industrial Electronics 中,可以利用 FSM 建立清楚的 Sequential Controller。
State Machine 的主要組成
一個典型 State Machine 通常包含以下幾個 Building Block:
-
States(狀態)
表示系統目前可能處於的不同條件或操作模式。
-
Transitions(狀態轉移)
定義系統在什麼條件下,從目前 State 移動到另一個 State。
-
Inputs(輸入)
影響 State Transition 或 Output 的外部 Signal。
-
Outputs(輸出)
系統在特定 State 或特定 Input Condition 下產生的 Action/Signal。
-
State Register(狀態暫存器)
通常由 Flip-Flop 組成,用來保存目前 State。
-
Next-State Logic(下一狀態邏輯)
根據 Current State 與 Input 計算下一個 State。
State Machine 的主要類型
Digital Electronics 中常見的 Finite State Machine 可以分成兩大類:
1. Moore State Machine(Moore 型有限狀態機)
在 Moore State Machine 中,Output 只取決於目前 State。
Input 會影響 Next State,但不直接進入 Output Logic。
可以表示為:
Output = f(Current State)
由於 Output 主要由 Registered State 決定,Moore Machine 通常具有較容易分析、較穩定的 Output Behavior。
範例:假設 Elevator Controller 的 Door Control Output 完全由目前 State 決定,例如「停靠並開門」、「移動中」、「關門」等狀態,就可以使用 Moore-Type Architecture 表示。
2. Mealy State Machine(Mealy 型有限狀態機)
在 Mealy State Machine 中,Output 同時取決於:
- Current State
- Current Input
可以表示為:
Output = f(Current State, Input)
因此 Input 發生改變時,Output 可以在不等待 State Transition 的情況下產生反應。
這可能讓 Mealy Machine 使用較少 State 完成某些功能,但 Output Logic 也更需要注意 Input Timing、Combinational Path 與 Glitch。
範例:Serial Data Receiver 的某些 Output,可能同時取決於目前 Receiving State 與即時 Incoming Signal,因此適合使用 Mealy-Type Logic。
如何設計 State Machine?
State Machine 可以從非常簡單的 Sequence Controller,一路延伸到複雜的 Communication Protocol 與 Processor Control Logic。
設計 FSM 時,可以按照以下流程進行。
1. 定義問題與系統功能
首先必須清楚定義:
- 系統要完成什麼功能?
- 有哪些操作模式?
- 每個模式之間如何切換?
- 有哪些特殊或錯誤狀態?
例如設計 Traffic Light Controller 時,首先要確定 Red、Yellow、Green 的順序、Timing,以及 Sensor 或 Button 如何影響控制流程。
2. 定義 Inputs 與 Outputs
接著列出系統所有 Input 與 Output。
以 Traffic Light Controller 為例:
Input 可能包括:
- Clock
- Timer Done
- Vehicle Sensor
- Pedestrian Button
- Reset
Output 可能包括:
- Red LED
- Yellow LED
- Green LED
- Pedestrian Signal
3. 建立 State Diagram
接下來畫出 State Diagram(狀態圖)。
State Diagram 主要用來表示:
- 有哪些 State
- State 之間的 Transition
- 什麼 Input Condition 會觸發 Transition
- 各 State 或 Transition 對應的 Output
透過 State Diagram,可以非常直觀地理解系統如何隨 Input 與 Current State 改變。
4. 建立 State Transition Table
State Transition Table(狀態轉移表)是 State Diagram 的表格化表示。
通常會列出:
- Current State
- Input
- Next State
- Output
透過列出不同 Current State 與 Input Combination,可以清楚確認每一種情況下應該進入哪一個 Next State。
5. 實作 Digital Logic
完成 State Transition Table 後,就可以進一步實作實際 Digital Logic。
典型同步 FSM 通常包含:
- State Register:使用 Flip-Flop 儲存 Current State。
- Next-State Combinational Logic:根據 Current State 與 Input 計算 Next State。
- Output Logic:依 Moore 或 Mealy Architecture 產生 Output。
在 ASIC/Discrete Logic 中,可以利用 Logic Gate 與 Flip-Flop 實作;在 FPGA 中,則通常使用 Verilog、SystemVerilog 或 VHDL 描述 FSM。
State Machine 在 Electronics 與 PCB Design 中的應用
State Machine 廣泛應用於 Digital IC Design、Embedded System 與 PCB System-Level Design。
有些簡單 Control Function 不一定需要完整 Microcontroller,也可以利用 CPLD、FPGA、ASIC 或其他 Digital Logic 實作特定 FSM,以符合 Cost、Latency、Power 或 Size Requirement。
常見應用包括:
- Microcontroller 與 CPU: Processor Control Unit、Instruction Sequencing、Bus Control 等功能常使用 State Machine。
- Communication Protocol: UART、I²C、SPI、CAN Bus 等介面控制器可以使用 FSM 管理 Handshake、Frame State、Error Handling 與 Data Transfer。
- Robotics 與 Automation: 可用於 Sequence Controller、Robot Arm、PLC 與 Industrial Automation。
- Consumer Electronics: Washing Machine、Microwave Oven、Coffee Machine 與其他家電,可利用 FSM 管理不同 Operation Sequence。
State Machine 的優點與限制
State Machine 的主要優勢,是可以把複雜控制流程拆解成明確 State 與 Transition。
主要優點包括:
- Behavior 清楚且容易預測
- Control Logic 結構化
- 方便 Simulation 與 Debugging
- 容易建立 Test Case
- 可以依需求增加更多 State
- 非常適合 ASIC/FPGA Implementation
不過,FSM 也有一些限制。
- State Explosion: 如果系統具有大量彼此相關的 Condition 與 Mode,State 數量可能快速增加,導致 Design、Verification 與 Maintenance 變得困難。
- Moore Output Latency: 因為 Output 依賴 Current State,如果某個事件必須先完成 State Transition 才能反映到 Output,可能相較 Mealy Architecture 多出一個 Clock-Level 的反應延遲。
- Mealy Glitch Risk: Output 直接受到 Input 影響,因此如果 Input 未同步、存在短暫變化,或 Combinational Path Timing 不一致,就可能產生 Glitch。實際設計時常需要 Synchronization 或 Registered Output。
Moore 與 Mealy State Machine 的差異
| 比較項目 | Moore State Machine | Mealy State Machine |
|---|---|---|
| Output 取決於 | Current State | Current State + Input |
| Output 反應 | 通常隨 State 更新 | Input 改變時即可影響 Output |
| State 數量 | 某些設計可能需要較多 State | 某些功能可以使用較少 State |
| Output 穩定性 | 通常較容易控制 | 需要特別注意 Combinational Glitch |
| 設計複雜度 | 通常較直觀 | Output 與 Input 關係較直接,分析可能較複雜 |
| 適合應用 | 需要明確、穩定 State-Based Output 的控制邏輯 | 需要快速回應 Input 的 Control/Protocol Logic |
結論
State Machine 是 Digital Electronics 中非常重要且具有結構化特性的 Control Model。
從簡單的 Vending Machine、Traffic Light Controller,到複雜的 CPU Controller、Communication Protocol 與 FPGA Logic,FSM 都非常常見。
本文介紹了:
- State Machine 的基本概念
- State、Input、Output 與 Transition
- State Register 與 Next-State Logic
- Moore State Machine
- Mealy State Machine
- State Diagram
- State Transition Table
- Digital Logic Implementation
對學生而言,理解 Moore 與 Mealy State Machine,可以建立扎實的 Sequential Logic Design 基礎。
對 Electronics、FPGA 與 PCB Engineer 而言,FSM Knowledge 則可以直接應用於 Control Logic、Protocol Interface、Embedded System 與各種 Digital Hardware Design。
當系統行為可以清楚拆分成有限的 State 與 Transition 時,State Machine 往往就是最直觀、容易驗證且容易維護的設計方法之一。
持續學習
數位電子入門:什麼是數位電子中的狀態機?
有人說,自然界中存在的訊號本質上大多是 Analog(類比)的,而 Digital(數位)則是人類為了簡化資訊表示、儲存與運算而建立的一種方式。 Digital System(數位系統)廣泛應用於 Signal Processing、Data Storage 與各類控制系統。現代 MCU、FPGA 與其他 Digital IC 主要使用數位邏輯進行運算,而在需要處理真實世界的 Analog Signal 時,則可透過 ADC 與 DAC 在類比與數位訊號之間進行轉換。 本文要介紹的是 State Machine(狀態機)。 State Machine 是許多 Digital Control System 的重要基礎。例如 Microcontroller、CPU、FPGA 與 Communication Controller 的控制邏輯中,都可能包含一個或多個 State Machine,用來管理事件順序、Protocol Flow 與系統狀態。 State Machine 的核心概念,是讓系統根據目前的 State(狀態)與 Input(輸入),決定下一個 State,並產生對應的 Output。......
Breadboard vs Protoboard 完整指南:麵包板與洞洞板差異、用途、優缺點與選擇
剛開始接觸電子電路時,我一直很好奇:要怎麼使用不同的電子元件來讓電路正常運作,同時又不必把元件永久焊死,這樣之後還能把它們拆下來,用在其他電路中。 當時教授給我的建議是先使用 Breadboard(麵包板);如果希望連接方式更加固定,再使用 Protoboard。 幾乎每一位電子初學者都會遇到這個經典問題: 「我應該先用 Breadboard,還是 Protoboard?」 其實兩者都沒有絕對的好壞,真正的選擇取決於電路本身的需求。 Breadboard 在 Radio Frequency 或較高頻率下,可能因為內部接點、較長 Jumper Wire 以及寄生電容與寄生電感而引入額外雜訊;改用焊接式 Protoboard,可以在某些情況下降低這些問題。 另一方面,Protoboard 通常需要焊接,而 Breadboard 則是一種接近 Plug-and-Play 的免焊接原型工具。 兩者都能讓您在正式製作 Printed Circuit Board(PCB) 之前先建立與驗證電路,但它們適合的使用階段並不完全相同。 本文將介紹: 什麼是 Breadboard 什麼是 Protoboard Bre......
高速 PCB Via Stub 完整指南:成因、影響、Backdrilling、Blind Via 與對策
重點摘要 Via Stub 是高速 PCB 的重要訊號完整性問題:未使用的 Via Barrel 會形成 Stub,在高速下產生 Reflection、Resonance 與 Jitter。 5–10 Gbps 以上需要特別留意:原文以 15 mil(0.381 mm)作為需要考慮 Stub Mitigation 的經驗門檻之一。 Backdrilling 可有效縮短 Via Stub:依原文資料,JLCPCB 精密背鑽可將 Residual Stub 控制在 0.15 mm 以下,有助於改善 Signal Integrity。 Stackup 最佳化搭配 Backdrilling:相較全面使用 Blind/Buried Via,通常可以在性能、製造複雜度與成本之間取得較佳平衡。 高速 PCB 製造需要穩定的 Via Control:Drill Depth、Via Plating、Registration 與 Impedance Control 都會直接影響高速 Channel 的實際表現。 在高速 PCB 設計中,Via Stub(導通孔殘段)是非常重要的 Signal Integrity 問題......
階層式原理圖設計指南:簡化複雜 PCB Layout 與製造流程
重點摘要 階層式原理圖會將複雜電路整理成頂層功能區塊,再連結至下層 Sub-Sheet,取代難以瀏覽與維護的平面式原理圖。 階層式設計可以降低人為錯誤、支援多人平行開發,並讓已驗證的子電路模組跨專案重複使用。 建議遵循四個主要步驟:規劃頂層功能區塊、定義 Port 方向、管理 Net Scope,最後將各 Sheet 轉換為 PCB Layout。 複製 Sub-Sheet 時,應特別注意 Net Scope 衝突以及 BOM 中重複 Reference Designator 的問題。 JLCPCB 可支援階層式設計從 EasyEDA 原理圖到 2–32 層 PCB 製造與 SMT 組裝的完整流程。 階層式原理圖設計介紹 階層式原理圖(Hierarchical Schematic)透過頂層功能區塊與下層 Sub-Sheet 組織複雜電子設計,而不是將所有電路分散在多張彼此缺乏結構關係的平面式圖紙中。 對現代高密度硬體而言,這種架構化方法非常重要。它可以協助管理複雜訊號路徑、降低連線錯誤,並讓設計更順利地轉換成多層 PCB 製造資料。 什麼是階層式原理圖? 階層式原理圖是一種結構化電路設計方法,專案......
PCB 逆向工程完整指南:BOM、Netlist、X-Ray、HDI 與 Gerber 重建
重點摘要 遵循三階段流程:依序完成 BOM 元件對應、Netlist 提取,最後才進行 DFM 與 PCB Layout 重建。 相信實際量測的 Netlist:所有連接關係都應使用電表直接驗證;當電氣量測結果與影像判讀不一致時,以實際電氣資料為準。 依 PCB 密度選擇成像方式:外層可以使用掃描影像,但對具有盲孔/埋孔的 HDI PCB,應依賴 Micro CT 或逐層去層分析。 重新計算走線阻抗:不要直接複製原板走線寬度,必須根據新的 PCB Stackup 與介電層厚度重新計算。 透過電路環境辨識 IC:沒有標記的晶片可以透過電源腳、Pinout、周圍元件以及通電後訊號來判斷其功能。 每當需要進行 PCB 逆向工程時,最常見的壞消息往往是:PCB 本身仍然可以正常運作,但原供應商已經不存在,而且原始設計檔案也已遺失。您手上只剩下實體電路板,卻沒有任何背後的設計資料。 在本指南中,您將了解: 什麼是 PCB 逆向工程,以及哪些應用情境屬於合理用途 從元件對應到經過驗證 Netlist 的三階段工作流程 應該使用哪種成像方法:平面掃描、X-Ray、CT 或 Delayering 如何分析 HDI......
Raspberry Pi HAT 設計指南:GPIO、EEPROM、電源與 PCB 佈局
Raspberry Pi 是一款功能強大的開發板,但單靠它本身並不足以滿足所有專案需求。有時我們會需要額外功能,例如高功率驅動器、即時時鐘,或更穩定的 UPS 電源系統,為周邊的不同感測器供電。這時,HAT 就成為將 Raspberry Pi 擴充成專用系統最簡單的方式之一。 這正是 Raspberry Pi HAT 如此實用的原因:您可以根據應用需求增加額外電路。當需求改變時,只要拔下 HAT,就能立即讓 Raspberry Pi 恢復原本的狀態。 在本指南中,您將學到: 什麼是 Raspberry Pi HAT Raspberry Pi 5 的主要 HAT+ 規範 如何使用 40-pin GPIO 排針 電源與反向供電需要注意哪些事項 邏輯準位轉換如何保護 Raspberry Pi ID EEPROM 如何讓擴充板成為正式規範的 HAT 如何進行 PCB 佈局並投入製造 閱讀完本指南後,您將掌握一套可重複使用的設計流程,未來設計任何 Raspberry Pi 擴充板時都能套用。不需要從零開始設計,本文最後也提供了可供參考的範本。 什麼是 Raspberry Pi HAT? Raspberry ......