πŸ“Œ FSM

FSM (Finite State Machine, ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚) β€” Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ модСль Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ систСмы ΠΈΠ»ΠΈ процСсса, основанная Π½Π° ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ числС состояний, ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ, опрСдСляСмых Π²Ρ…ΠΎΠ΄Π½Ρ‹ΠΌΠΈ сигналами ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ состояниСм. FSM описываСт ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ систСмы ΠΊΠ°ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ состояний ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ², Ρ‡Ρ‚ΠΎ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠ΅, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚ΡƒΡ€Ρ‹, систСмах управлСния, ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°Ρ… связи, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ процСссов.


🧠 Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ FSM

  • Набор состояний (S): ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ, фиксированный ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ состояний, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ систСма.
  • Π’Ρ…ΠΎΠ΄Π½ΠΎΠΉ Π°Π»Ρ„Π°Π²ΠΈΡ‚ (I): мноТСство Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… сигналов ΠΈΠ»ΠΈ событий, Π²Π»ΠΈΡΡŽΡ‰ΠΈΡ… Π½Π° ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹.
  • Ѐункция ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² (Ξ΄): ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ состояния ΠΈ Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ сигнала Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ состояниС β€”
    Ξ΄: S Γ— I β†’ S.
  • ΠΠ°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ состояниС (sβ‚€): ΠΎΠ΄Π½ΠΎ ΠΈΠ· состояний, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ систСма стартуСт.
  • (ΠžΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ) Набор Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… сигналов (O): опрСдСляСт Ρ€Π΅Π°ΠΊΡ†ΠΈΡŽ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π°.
  • (ΠžΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ) Ѐункция Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠ² (Ξ»): зависимости Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΎΡ‚ состояний ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² β€” Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Ρ‹ Мили ΠΈ ΠœΡƒΡ€Π°.

ΠšΠ»Π°ΡΡΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ FSM

  • Π”Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ (DFA): Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ состоянии ΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²Ρ…ΠΎΠ΄Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½ Ρ€ΠΎΠ²Π½ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄.
  • НСдСтСрминированный ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ (NFA): ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π²Ρ…ΠΎΠ΄Ρƒ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹ Π±Π΅Π· Π²Ρ…ΠΎΠ΄Π° (Ξ΅-ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹).
  • Автомат ΠœΡƒΡ€Π°: Π²Ρ‹Ρ…ΠΎΠ΄Ρ‹ зависят Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ состояния.
  • Автомат Мили: Π²Ρ‹Ρ…ΠΎΠ΄Ρ‹ зависят ΠΎΡ‚ состояния ΠΈ Π²Ρ…ΠΎΠ΄Π°.

Π€ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ описаниС

FSM ΠΌΠΎΠΆΠ½ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ:

[ FSM = (S, I, O, \delta, \lambda, s_0) ]

  • (S) β€” ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ мноТСство состояний,
  • (I) β€” мноТСство Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… символов,
  • (O) β€” мноТСство Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… символов,
  • (\delta: S \times I \to S) β€” функция ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°,
  • (\lambda: S \to O) (для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π° ΠœΡƒΡ€Π°) ΠΈΠ»ΠΈ (\lambda: S \times I \to O) (для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π° Мили),
  • (s_0 \in S) β€” Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ состояниС.

Π Π°Π±ΠΎΡ‚Π° FSM

  1. БистСма стартуСт ΠΈΠ· состояния (s_0).
  2. ΠŸΡ€ΠΈ поступлСнии Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ сигнала (i \in I), систСма ΠΏΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (\delta) ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² состояниС (s’ = \delta(s, i)).
  3. Π’ зависимости ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π°, формируСтся Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ сигнал (o = \lambda(s)) ΠΈΠ»ΠΈ (o = \lambda(s, i)).
  4. ΠŸΡ€ΠΎΡ†Π΅ΡΡ повторяСтся ΠΏΡ€ΠΈ Π½ΠΎΠ²Ρ‹Ρ… Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

Π‘Ρ…Π΅ΠΌΠ° FSM (простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ ΠœΡƒΡ€Π°)

flowchart TD
    S0["S0: Initial"]
    S1["S1"]
    S2["S2"]
    S3["S3"]

    S0 -- "input=0" --> S0
    S0 -- "input=1" --> S1
    S1 -- "input=0" --> S2
    S1 -- "input=1" --> S1
    S2 -- "input=0" --> S0
    S2 -- "input=1" --> S3
    S3 -- "input=0" --> S2
    S3 -- "input=1" --> S1

Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Π°Ρ схСма FSM с Π²Ρ…ΠΎΠ΄Π°ΠΌΠΈ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π°ΠΌΠΈ

stateDiagram-v2
    [*] --> S0
    S0 --> S1 : input=1 / output=0
    S1 --> S2 : input=0 / output=1
    S2 --> S0 : input=0 / output=0
    S2 --> S3 : input=1 / output=1
    S3 --> S2 : input=0 / output=0
    S3 --> S1 : input=1 / output=1

βš™οΈ Π“Π΄Π΅ примСняСтся

  • АппаратноС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅: ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹ΠΌΠΈ схСмами, микропроцСссорами, шинами, ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°ΠΌΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°ΠΌΠΈ памяти.

  • БистСмы Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°: USB, Ethernet, SPI, I2C, UART β€” Π² ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°Ρ… ΠΈ ΠΈΡ… ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°Ρ….

  • ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅: Π°Π½Π°Π»ΠΈΠ· лСксики ΠΈ синтаксиса, распознаваниС ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ², UI, ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΠΈ.

  • Автоматика ΠΈ Ρ€ΠΎΠ±ΠΎΡ‚ΠΎΡ‚Π΅Ρ…Π½ΠΈΠΊΠ°: ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ процСссами, сигнализация, Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΈ, ΠΌΠ°ΡˆΠΈΠ½Ρ‹ состояний.

  • ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€Ρ‹: построСниС парсСров, рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.

  • БистСмы Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ RTOS: ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠΈ, Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρ‹, прСрывания.

  • ВСстированиС ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅: ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π»ΠΎΠ³ΠΈΠΊΠΈ, Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.


βœ… ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°

  • Π”Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ ΠΈ ΠΏΡ€Π΅Π΄ΡΠΊΠ°Π·ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ: Ρ‡Ρ‘Ρ‚ΠΊΠΈΠ΅ состояния ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹, Π»Π΅Π³ΠΊΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

  • ΠŸΡ€ΠΎΡΡ‚ΠΎΡ‚Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ: Π² Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠ΅, Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚ΡƒΡ€Π΅, ПО.

  • ΠœΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ: FSM Π»Π΅Π³ΠΊΠΎ Ρ€Π°Π·Π±ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π° ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡƒΠ»ΠΈ.

  • Высокая ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹: ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ с ΠΌΠ°Π»Ρ‹ΠΌΠΈ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ°ΠΌΠΈ.

  • Π£Π½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: примСняСтся Π²ΠΎ мноТСствС областСй, ΠΎΡ‚ ΠΆΠ΅Π»Π΅Π·Π° Π΄ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ².


❌ НСдостатки

  • ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΡΡ‚ΡŒ: ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ число состояний ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠ΄Π΅Π»ΠΈ.

  • ΠšΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΡ€Π½Ρ‹ΠΉ Π²Π·Ρ€Ρ‹Π²: количСство состояний ΠΌΠΎΠΆΠ΅Ρ‚ расти ΡΠΊΡΠΏΠΎΠ½Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈ услоТнСнии систСмы.

  • Врудности ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ: большиС FSM тяТСло Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

  • ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ памяти: FSM Π½Π΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ состояния (для слоТных Π·Π°Π΄Π°Ρ‡ Π½ΡƒΠΆΠ½Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Π°Ρ Π»ΠΎΠ³ΠΈΠΊΠ°).

  • ΠΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ всС вычислимыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Π’ΡŒΡŽΡ€ΠΈΠ½Π³-машиной.


πŸ”— БвязанныС Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ

Microcontroller, CPU, State Machine, VHDL, Verilog, HDL, Protocol, RTOS, Mealy, Moore, Formal Verification, Parser, Compiler, FPGA


РСзюмС

FSM β€” Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ модСль для описания дискрСтных систСм с ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌ числом состояний ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ², ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ Π² Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚ΡƒΡ€Π΅ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ систСм, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρ‹ ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ управлСния с ясной Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ². ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° ΠΏΠΎ ΠΎΠ±ΡŠΡ‘ΠΌΡƒ памяти ΠΈ слоТностям, Π½ΠΎ ΠΏΡ€ΠΈ Π³Ρ€Π°ΠΌΠΎΡ‚Π½ΠΎΠΌ использовании обСспСчиваСт Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΠΏΡ€Π΅Π΄ΡΠΊΠ°Π·ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹.


ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π°

VHDL: простой FSM Π½Π° 3 состояния

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
 
entity fsm_example is
    Port ( clk : in STD_LOGIC;
           rst : in STD_LOGIC;
           input_signal : in STD_LOGIC;
           output_signal : out STD_LOGIC);
end fsm_example;
 
architecture Behavioral of fsm_example is
    type state_type is (S0, S1, S2);
    signal state, next_state : state_type;
begin
    process(clk, rst)
    begin
        if rst = '1' then
            state <= S0;
        elsif rising_edge(clk) then
            state <= next_state;
        end if;
    end process;
 
    process(state, input_signal)
    begin
        case state is
            when S0 =>
                if input_signal = '1' then
                    next_state <= S1;
                else
                    next_state <= S0;
                end if;
            when S1 =>
                if input_signal = '0' then
                    next_state <= S2;
                else
                    next_state <= S1;
                end if;
            when S2 =>
                next_state <= S0;
            when others =>
                next_state <= S0;
        end case;
    end process;
 
    output_signal <= '1' when state = S2 else '0';
end Behavioral;

C: программная рСализация FSM

typedef enum {S0, S1, S2} State;
 
State fsm(State current, int input) {
    switch(current) {
        case S0:
            return (input == 1) ? S1 : S0;
        case S1:
            return (input == 0) ? S2 : S1;
        case S2:
            return S0;
        default:
            return S0;
    }
}
 
int main() {
    State state = S0;
    int inputs[] = {0,1,0,1,0};
    for (int i = 0; i < 5; i++) {
        state = fsm(state, inputs[i]);
        printf("State: %d\n", state);
    }
    return 0;
}

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠΈ:
Hopcroft & Ullman β€œIntroduction to Automata Theory”, IEEE Std 1016 (UML State Machine), Harel β€œStatecharts”, osdev.org, habr.com, ВикипСдия, Xilinx/Altera FPGA docs, ARM Cortex-M docs, VHDL/Verilog textbooks, ACM publications.