有限状态机

简介: 有限状态机简介有限状态机(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),二进制编码,格雷码以及其他编码。通常,综合工具将确定状态分配的编码,但用户也可以通过更改综合属性来强制特定编码,如下所示。状态分配编码将对状态寄存器中使用的位数产生影响;独热编码使用最多的位数,但解码非常快,二进制编码使用最少的位数,但解码较长。

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

相关文章
|
人工智能 前端开发 数据可视化
2024年低代码趋势洞察——企业最看重的功能有哪些
低代码平台正从“可选”工具转变为数字化转型的“必需品”。预计到2024年,全球超70%企业将引入低代码开发工具。其优势包括简化开发流程、提高效率、降低成本,支持可视化开发、多人协作、快速部署等。平台通过五大核心引擎(SQL、功能、模板、图表、切面)驱动高效开发,并结合AI技术提升智能化水平。此外,丰富的插件生态和开源支持保障了灵活性与扩展性,助力企业在复杂业务场景中实现高效运营与决策。
476 14
|
11月前
|
API 开发者
1688店铺订单接口指南攻略
1688店铺订单接口用于获取订单列表、查询订单详情及操作订单等。首先需注册为1688开放平台开发者,创建应用获取App Key与App Secret。使用API获取订单列表时,要申请订单查询权限,并通过HTTP请求传递参数(如seller_id、page、page_size和access_token)调用接口。此功能适用于管理1688店铺订单数据。
|
5月前
|
人工智能 运维 自然语言处理
有哪些电信行业 Agent 案例?全场景标杆实践与数据解析
凌晨两点流量超支?5G基站突发故障?背后均有电信智能Agent在高效响应。从客服、运维到营销、政企服务,AI智能体正重构电信全业务链,实现降本30%、提效10倍、投诉下降72%。本文全景解析六大核心场景落地案例与技术路径,揭秘如何用实在Agent等产品推动电信智能化跃迁。
906 3
|
SQL Web App开发 数据可视化
2025年最热门的TOP5报表工具排行榜
很多数据项目中都会用报表工具来做报表,怎么选一款好用的工具一直是个难题,今天,我们一起盘点5款热门报表软件,看看每款报表工具的特点,看看哪款更适合您。
|
C语言
【C语言】原码、反码、补码详解 -《码上有道 ! 》
在计算机科学中,整数的表示方式有多种,包括原码、反码和补码。这些表示方式主要用于解决整数的二进制表示和计算问题。本文将详细介绍这三种表示方法,并通过示例来说明它们的原理和应用,特别是它们在C语言中的应用。
2879 5
|
SQL 存储 数据安全/隐私保护
MyBatis-Plus演绎:数据权限控制,优雅至极!
项目使用mybaits-plus,所以在mybaits-plus的基础上增加数据权限的过滤 mybaits-plus自带数据权限支持,但由于系统数据权限相对复杂,通过查看文档发现好像并不适用,且原项目版本低,所以最终还是通过自己的方式实现
2142 1
MyBatis-Plus演绎:数据权限控制,优雅至极!
|
缓存 PHP C语言
宝塔PHP8.1安装fileinfo拓展失败解决办法
在宝塔面板安装PHP8.1后,fileinfo扩展安装失败,手动尝试也报错。通过分析错误信息,在Makefile中修改CFLAGS添加`-std=c99`,并执行`make clean`清除缓存后,重新编译安装成功。最后在php.ini中启用fileinfo扩展并重启PHP服务。注意需调整CFLAGS为`-std=c99 -g`,去掉`-O2`。
2060 0
|
机器学习/深度学习 人工智能 自然语言处理
小说中修仙系统的方向统计_IT修仙_人工智能的底层逻辑
小说中修仙系统的方向统计_IT修仙_人工智能的底层逻辑
428 0
|
机器学习/深度学习 算法 数据挖掘
经典机器学习系列(五)【决策树详解】
经典机器学习系列(五)【决策树详解】
803 0