π 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
- Π‘ΠΈΡΡΠ΅ΠΌΠ° ΡΡΠ°ΡΡΡΠ΅Ρ ΠΈΠ· ΡΠΎΡΡΠΎΡΠ½ΠΈΡ (s_0).
- ΠΡΠΈ ΠΏΠΎΡΡΡΠΏΠ»Π΅Π½ΠΈΠΈ Π²Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΈΠ³Π½Π°Π»Π° (i \in I), ΡΠΈΡΡΠ΅ΠΌΠ° ΠΏΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ (\delta) ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ (sβ = \delta(s, i)).
- Π Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΈΠΏΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠ°, ΡΠΎΡΠΌΠΈΡΡΠ΅ΡΡΡ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΠΈΠ³Π½Π°Π» (o = \lambda(s)) ΠΈΠ»ΠΈ (o = \lambda(s, i)).
- ΠΡΠΎΡΠ΅ΡΡ ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΡΡΡ ΠΏΡΠΈ Π½ΠΎΠ²ΡΡ Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ .
Π‘Ρ Π΅ΠΌΠ° 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.