有限状态机

简介: 有限状态机简介有限状态机(FSM)是许多数字系统中用来控制系统和数据流路径行为的时序电路。FSM的实例包括控制单元和时序。 本实验介绍了两种类型的FSM(Mealy和Moore)的概念,以及开发此类状态机的建模方式。 请参阅Vivado教程,了解如何使用Vivado工具创建项目和验证数字电路。Mealy FSM(米利型有限状态机)有限状态机(FSM)或称简单状态机用于设计计算机程序和时序逻辑电路。它被设想为抽象机器,可以处于有限数量的用户定义状态之一。机器一次只能处于一种状态; 它在任何给定时间所处的状态称为当前状态。 当由触发事件或条件启动时,它可以从一种状态改变为另一种状态;

有限状态机简介

有限状态机(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;
else
state <= nextstate;
always @(state or x) // always block to compute both output & nextstate begin
parity = 1'b0; case(state)
S0: if(x)
begin
parity = 1; nextstate = S1;
end else
nextstate = S0;
S1: if(x)
nextstate = S0;
else begin
parity = 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;
else
state <= nextstate;
always @(state or x)  // always block to compute output begin
parity = 1'b0; case(state)
S0: if(x)
parity = 1; S1: if(!x)
parity = 1;
endcase end
always @(state or x)  // always block to compute nextstate begin
nextstate = S0; case(state)
S0: if(x)
nextstate = S1; S1: if(!x)
nextstate = S1; endcase
end endmodule

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

网络异常,图片无法展示
|

相关文章
|
4月前
|
API 开发者
1688店铺订单接口指南攻略
1688店铺订单接口用于获取订单列表、查询订单详情及操作订单等。首先需注册为1688开放平台开发者,创建应用获取App Key与App Secret。使用API获取订单列表时,要申请订单查询权限,并通过HTTP请求传递参数(如seller_id、page、page_size和access_token)调用接口。此功能适用于管理1688店铺订单数据。
|
10月前
|
网络协议 安全 Linux
Linux剪裁探索初探
本文深入探讨了Linux剪裁的概念、方法、实践及其好处。Linux剪裁通过移除内核中不必要的模块和功能,减小内核大小、优化系统性能并提升安全性,特别适用于资源受限的设备和特定用途的服务器。文章详细介绍了配置内核选项、模块化和使用工具辅助剪裁的方法,并提供了一个实践示例,最后讨论了剪裁的好处与挑战。
221 15
|
运维 Kubernetes Cloud Native
OAM 深入解读:OAM 为云原生应用带来哪些价值?
OAM 是阿里巴巴联合微软在社区推出的一款用于构建和交付云原生应用的标准规范,旨在通过全新的应用定义、运维、分发与交付模型,推动应用管理技术向“轻运维”的方向迈进,全力开启下一代云原生 DevOps 的技术革命。
OAM 深入解读:OAM 为云原生应用带来哪些价值?
|
人工智能 弹性计算 算法
【云故事探索】NO.5:PETKIT小佩,科技与爱,共绘宠物智能生活新篇章
在数字化浪潮中,中国宠物行业蓬勃发展,国内养宠规模已超2亿,形成千亿市场。成立于2013年的PETKIT小佩,专注智能宠物用品,服务遍布40+国家。面对618、双11等高峰挑战,阿里云ECS弹性扩容助其稳定运行。借助阿里云全球化部署能力,小佩成功出海。最新可视喂食器结合AI算法与OSS存储,提升用户体验。未来,双方将进一步探索AI大模型在宠物行业的应用,持续优化养宠体验。
|
存储 SQL 监控
InfluxDB有哪些新特性?
【5月更文挑战第13天】InfluxDB有哪些新特性?
346 8
|
机器学习/深度学习 数据采集 API
|
传感器 数据可视化 JavaScript
状态机(State Machines):理解、设计和应用有限状态机
状态机(State Machines)是一种强大的计算模型和设计工具,用于建模和控制有限状态的系统和行为。无论是在软件开发、自动化控制、游戏设计还是其他领域,状态机都发挥着关键作用。本博客将深入探讨状态机的概念、工作原理以及如何在不同应用中设计和应用它们。
9127 0
|
druid Java 关系型数据库
SpringBoot 的多数据源配置
SpringBoot 的多数据源配置
2215 0
SpringBoot 的多数据源配置
|
存储 编解码
ENVI_IDL:读取OMI数据(HDF5)并输出为Geotiff文件+详细解析
ENVI_IDL:读取OMI数据(HDF5)并输出为Geotiff文件+详细解析
669 1
EMQ
|
监控 安全 数据可视化
EMQX 5.0 发布:单集群支持 1 亿 MQTT 连接的开源物联网消息服务器
开源分布式物联网 MQTT 消息服务器 EMQX 5.0 版本正式发布!有史以来支持 MQTT 并发连接规模最大、全球首个实现 MQTT over QUIC 的 MQTT Broker。该版本在消息传输的可靠性、产品体验的易用性等方面也进行了大幅优化升级。
EMQ
696 1