1、状态机的概述
状态机是一种数学模型,用于描述系统的行为。它由一组状态、输入和输出以及转换规则组成。状态机可以分为有限状态机和无限状态机两种类型。有限状态机在任意时刻只能处于有限的状态集合中,而无限状态机可以处于无限个状态中。
在有限状态机中,状态之间的转换是根据输入和转移规则进行的。输入可以来自外部环境或内部逻辑条件,转移规则指定了在哪些输入下从一个状态转移到另一个状态。每个状态都可以关联一个输出,表示在该状态下系统的行为。
状态机可以用于描述各种系统,如计算机程序、自动控制系统、通信协议等。在计算机程序中,状态机可以用于解决一些复杂的问题,如语法分析、编译器设计、网络协议实现等。
2、有限状态机可以分为以下几种类型:
-
Moore机:在Moore机中,每个状态都有一个特定的输出,输出只与当前状态有关,与输入无关。
-
Mealy机:与Moore机不同,Mealy机的输出不仅取决于当前状态,也取决于输入。因此,Mealy机输出的变化更加灵活。
3、采用明德扬四段式实现1101序列检测
.第一段:
与Verilog代码一样采用时序逻辑表示state_n与stata_c的关系
--one
PROCESS (clk, rst_n)
BEGIN
IF (rst_n = '0') THEN
state_c <= IDLE;
ELSIF (clk'EVENT AND clk = '1') THEN
state_c <= state_n;
END IF;
END PROCESS;
第二段:状态转移段
PROCESS (state_c,idle2s1_start,s12idle_start,s12s2_start,s22s3_start,s32idle_start)
BEGIN
CASE state_c IS
WHEN IDLE =>
IF (idle2s1_start = '1') THEN
state_n <= S1;
ELSE
state_n <= state_c;
END IF;
WHEN S1 =>
IF (s12s2_start = '1') THEN
state_n <= S2;
ELSIF (s12idle_start = '1') THEN
state_n <= IDLE;
ELSE
state_n <= state_c;
END IF;
WHEN S2 =>
IF (s22s3_start = '1') THEN
state_n <= S3;
ELSE
state_n <= state_c;
END IF;
WHEN S3=>
IF (s32idle_start = '1') THEN
state_n <= IDLE;
ELSE
state_n <= state_c;
END IF;
WHEN OTHERS =>
state_n <= IDLE;
END CASE;
END PROCESS;
第三段:状态转移条件
idle2s1_start <= '1' WHEN state_c = IDLE AND din = '1' ELSE '0';
s12idle_start <= '1' WHEN state_c = S1 AND din = '0' ELSE '0';
s12s2_start <= '1' WHEN state_c = S1 AND din = '1' ELSE '0';
s22s3_start <= '1' WHEN state_c = S2 AND din = '0' ELSE '0';
s32idle_start <= '1' WHEN state_c =S3 ELSE '0';
第四段:可以用时序逻辑或者组合逻辑表示输出
--output
PROCESS (clk, rst_n)
BEGIN
IF (rst_n = '0') THEN
dout <= '0';
ELSIF (clk'EVENT AND clk = '1') THEN
IF (state_c = S3 AND din = '1') THEN
dout <= '1';
ELSE
dout <= '0';
END IF;
END IF;
END PROCESS;
Quartus编译后查看状态转移图:
参考:明德扬四段状态机