写点什么

有限状态机

作者:向阳逐梦
  • 2022-11-19
    四川
  • 本文字数:1406 字

    阅读完需:约 5 分钟

有限状态机简介

有限状态机(FSM)是许多数字系统中用来控制系统和数据流路径行为的时序电路。FSM 的实例包括控制单元和时序。 本实验介绍了两种类型的 FSM(Mealy 和 Moore)的概念,以及开发此类状态机的建模方式。 请参阅 Vivado 教程,了解如何使用 Vivado 工具创建项目和验证数字电路。

Mealy FSM(米利型有限状态机)

有限状态机(FSM)或称简单状态机用于设计计算机程序和时序逻辑电路。它被设想为抽象机器,可以处于有限数量的用户定义状态之一。机器一次只能处于一种状态; 它在任何给定时间所处的状态称为当前状态。 当由触发事件或条件启动时,它可以从一种状态改变为另一种状态; 这称为过渡。特定 FSM 由其状态列表和每个转换的触发条件定义。在现代社会中的许多设备中可以观察到状态机的踪影,这些设备根据发生的事件序列执行预定的动作序列。 简单的例子是自动售货机,当存放硬币的金额达到商品价格时分配产品;电梯在把乘客送达楼上后才会下降;交通灯按一定的时间改变信号来控制车流;以及需要输入一串正确的数字才能打开的组合锁。状态机使用两种基本类型建模–Mealy 和 Moore。 在 Mealy 机器中,输出取决于当前状态和当前输入。在 Moore 机器中,输出仅取决于当前状态。Mealy 型状态机的一般模型由组合过程电路和状态寄存器组成,组合过程电路生成输出和下一个状态,状态寄存器保存当前状态,如下图所示。状态寄存器通常建模为 D 触发器。状态寄存器必须对时钟边缘敏感。其他块可以使用 always 过程块或 always 过程块和 dataflow 建模语句的混合来建模;always 过程块必须对所有输入敏感,并且必须为每个分支定义所有输出,以便将其建模为组合块。两段式 Mealy 机器可以表示为


下面是奇偶校验校验机的状态图和相关模型:



module mealy_2processes(input clk, input reset, input x, output reg parity); reg state, nextstate;parameter S0=0, S1=1;always @(posedge clk or posedge reset)	// always block to update state if (reset)state <= S0;elsestate <= nextstate;
always @(state or x) // always block to compute both output & nextstate beginparity = 1'b0; case(state)S0: if(x)beginparity = 1; nextstate = S1;end elsenextstate = S0;S1: if(x)nextstate = S0;else beginparity = 1; nextstate = S1;




end
end default:nextstate = S0; endcase
endmodule
复制代码

三段式 Mealy 机器的图示及其建模如下:



module mealy_3processes(input clk, input reset, input x, output reg parity); reg state, nextstate;parameter S0=0, S1=1;always @(posedge clk or posedge reset)	// always block to update state if (reset)state <= S0;elsestate <= nextstate;always @(state or x)	// always block to compute output beginparity = 1'b0; case(state)S0: if(x)parity = 1; S1: if(!x)parity = 1;endcase endalways @(state or x)	// always block to compute nextstate beginnextstate = S0; case(state)S0: if(x)nextstate = S1; S1: if(!x)nextstate = S1; endcaseend endmodule
复制代码

状态分配可以使用独热码(one – hot code),二进制编码,格雷码以及其他编码。通常,综合工具将确定状态分配的编码,但用户也可以通过更改综合属性来强制特定编码,如下所示。状态分配编码将对状态寄存器中使用的位数产生影响;独热编码使用最多的位数,但解码非常快,二进制编码使用最少的位数,但解码较长。



发布于: 刚刚阅读数: 3
用户头像

向阳逐梦

关注

人生享受编程,编程造就人生! 2022-06-01 加入

某公司芯片测试工程师,嵌入式开发工程师,InfoQ签约作者,阿里云星级博主,华为云·云享专家。座右铭:向着太阳,追逐梦想!

评论

发布
暂无评论
有限状态机_Verilog_向阳逐梦_InfoQ写作社区