讲解“有限状态机”最简单最易懂的例子,来自《数学之美》

以下内容摘自吴军的《数学之美》第113页:

一个有限状态机是一个特殊的有向图,它包括一些状态(节点)和连接这些状态的有向弧。下图是一个识别中国地址的有限状态机的简单例子。

每一个有限状态机都有一个开始状态和一个终止状态,以及若干中间状态,每一条弧上带有从一个状态进入下一个状态的条件。比如,在上图中,当前的状态是“省”,如果遇到一个词组和(区)县名有关,就进入状态“区县”;如果遇到的下一个词组和城市有关,那么我们就进入“市”的状态,如此等等。如果一条地址能从状态机的起始状态经过状态机的若干中间状态,走到终止状态,那么这条地址则有效,否则无效。比如说,“北京市双清路83号”对于上面的有限状态来讲有效,而“上海市辽宁省马家庄”则无效(因为无法从“市”走回到“省”)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个带注释讲解的 VHDL 状态机代码示例: ```vhdl library ieee; use ieee.std_logic_1164.all; entity state_machine is port ( clk : in std_logic; -- 时钟输入 reset : in std_logic; -- 复位信号输入 input : in std_logic_vector(1 downto 0); -- 状态机输入 output : out std_logic -- 状态机输出 ); end entity; architecture fsm of state_machine is type state_type is (state1, state2, state3); -- 定义枚举类型,表示状态机有三个状态 signal state : state_type := state1; -- 定义状态信号,初始状态为 state1 begin process (clk, reset) begin if reset = '1' then -- 若复位信号为高电平,则将状态设为 state1,输出设为 0 state <= state1; output <= '0'; elsif rising_edge(clk) then -- 若时钟上升沿触发,则进行状态转移 case state is -- 根据当前状态进行状态转移 when state1 => -- 当前状态为 state1 if input = "00" then -- 若输入为 "00",则从 state1 转移到 state2,输出设为 0 state <= state2; output <= '0'; else -- 若输入不为 "00",则仍停留在 state1,输出设为 0 state <= state1; output <= '0'; end if; when state2 => -- 当前状态为 state2 if input = "01" then -- 若输入为 "01",则从 state2 转移到 state3,输出设为 1 state <= state3; output <= '1'; else -- 若输入不为 "01",则从 state2 转移到 state1,输出设为 0 state <= state1; output <= '0'; end if; when state3 => -- 当前状态为 state3 if input = "10" then -- 若输入为 "10",则从 state3 转移到 state1,输出设为 0 state <= state1; output <= '0'; else -- 若输入不为 "10",则仍停留在 state3,输出设为 1 state <= state3; output <= '1'; end if; end case; end if; end process; end architecture; ``` 在这个例子中,我们定义了一个简单状态机,该状态机有三个状态:state1、state2 和 state3。该状态机有一个输入 (input) 和一个输出 (output)。状态机的行为取决于输入和当前的状态。如果 input 的值为 "00",状态机将从 state1 过渡到 state2,并将输出 (output) 设置为 '0'。如果 input 的值为 "01",状态机将从 state2 过渡到 state3,并将输出设置为 '1'。如果 input 的值为 "10",状态机将从 state3 过渡回 state1,并将输出设置为 '0'。在每个状态中,我们还可以设置其他操作。在这个例子中,我们只是简单地将输出设置为 0 或 1。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值