(三段式)有限状态机【原理+实例】
状态机的基本要素:输入、输出、状态。
状态机根据状态变化是否与输入条件有关分为两类:即Moore型状态机和Mealy型状态机。
Moore型状态机的状态变化仅和当前状态有关,而与输入条件无关;
Mealy型状态机的状态变化不仅和当前状态有关,还取决于当前的输入条件。
一段式状态机是把所有的逻辑都放在一个always块内,不易维护,状态复杂容易出错。
二段式状态机是把时序逻辑和组合逻辑分开,时序逻辑里进行当前状态和下一状态的切换,组合逻辑里是新各个输入、输出以及状态判断,相对容易维护,但是组合逻辑容易出现毛刺。
三段式状态机用时序逻辑去描述输出,解决毛刺问题,但是资源也耗费多一些【三段式状态机也可以用组合逻辑去描述输出】。模板代码如下:
//时序逻辑描述状态更新always @ (posedge clk or negedge rst_n)
if(~rst_n)current_state <= S1;
elsecurrent_state <= next_state; //组合逻辑描述状态转移always @ (*) beginnext_state = x; //初始化case(current_state)S1: if(...)next_state = S2;S2: if(...)next_state = S3;...endcase
end//时序逻辑描述次态寄存器输出always @ (posedge clk or negedge rst_n) beginif(~rst_n) beginout <= 2'b00;end else begincase(next_state)S1:out <= 2'b01;S2:out <= 2'b11;default:out <= 2'b11;endcaseend
end
对于状态较多的设计,可以参考如下状态定义方式:
typedef enum reg [6:0] {S_IDLE,S_DATA,S_S0,S_S1,S_S2,....,S_ACK} STATE_FSM;STATE_FSM current_state;
STATE_FSM next_state;
========================================================================
示例:
描述
某同步时序电路的状态转换图如下,→上表示“C/Y”,圆圈内为现态,→指向次态。
请使用D触发器和必要的逻辑门实现此同步时序电路,用Verilog语言描述。
module FSM(input C ,input clk ,input rst_n,output wire Y
);parameter ST0 = 2'b00;parameter ST1 = 2'b01;parameter ST2 = 2'b10;parameter ST3 = 2'b11;reg[1:0] cur_state;reg[1:0] next_state;reg Y_r;always@(posedge clk or negedge rst_n)if(!rst_n)cur_state <= ST0;elsecur_state <= next_state;always@(*)case (cur_state)ST0: next_state = C? ST1:ST0;ST1: next_state = C? ST1:ST3;ST2: next_state = C? ST2:ST0;ST3: next_state = C? ST2:ST3;endcasealways@(*)case (cur_state)ST0: Y_r = 1'b0;ST1: Y_r = 1'b0;ST2: Y_r = C? 1'b1:1'b0;ST3: Y_r = 1'b1;endcaseassign Y = Y_r;
endmodule
【题目来自牛客网】
(三段式)有限状态机【原理+实例】相关推荐
- Verilog实现二段式和三段式有限状态机
有限状态机(Finite State Machine,FSM)又称为状态机,为时序逻辑电路中常采用的一种形式,也是时序电路的通用模型任何时序电路,都可以表示为有限状态机. 1.状态机的概述 状态机一般 ...
- Verilog有限状态机三段式描述方法【原创*改进】
1.好的状态机标准 好的状态机的标准很多,最重要的几个方面如下: 第一,状态机要安全,是指FSM不会进入死循环,特别是不会进入非预知的状态,而且由于某些扰动进入非设计状态,也能很快的恢复到正常的状态循 ...
- 彻底搞懂状态机(一段式、两段式、三段式)
转自:https://blog.csdn.net/wordwarwordwar/article/details/78509445 实例:FSM实现10010串的检测 状态转移图:初始状态S0,a = ...
- DSP嵌入式C语言状态机,三段式状态机描述及模版
三段式状态机描述及模版 [复制链接] 本帖最后由 Aguilera 于 2018-11-10 20:23 编辑 时序电路的状态是一个状态变量集合,这些状态变量在任意时刻的值都包含了为确定电路的未来行为 ...
- 一段式、两段式以及三段式状态机(FSM)设计实例
一段式.二段式以及三段式状态机(FSM)设计实例 状态机(FSM)分类 状态转移的三种编码方式 一段式.两段式状态机(FSM)区别 vivado与modelsim联调显示状态机 设计实例 状态转移图 ...
- Verilog描述有限状态机(一段式、二段式、三段式)
有限状态机(FSM)的输出取决于过去状态以及当前输入,是时序逻辑电路.适合描述那些发生有先后顺序或者有逻辑规律的事情,状态机的本质就是对具有逻辑顺序或时序规律的事件进行描述的一种方法,广泛用于多种场合 ...
- verilog中一文搞懂有限状态机(FSM)Mealy和Moore状态机(及一段式,二段式,三段式)
三段式 1.什么是有限状态机 2.Mealy 状态机 2.Moore FSM 3.Mealy 和 Moore的区别 4.Encoding 风格 设计原则 5. 一段式状态机 6. 二段式状态机 控制c ...
- 数电和Verilog-时序逻辑实例四:状态机(三段式描述)
A.20 时序逻辑实例四:状态机(三段式描述) 什么叫做三段式描述的状态机? 三段,可以理解为三个always程序块. (1)第一个always程序块 采用同步时序逻辑电路描述状态转移. (2)第二个 ...
- 三段式LLVM编译器
三段式LLVM编译器 目录 概述 LLVM技术生态之编译器 一.传统编译器的设计 二.传统编译器模式的实现 三.LLVM的三段式实现 四.LLVM's Code Representation:LLVM ...
最新文章
- iOS之CAEmitterLayer粒子引擎
- 大尺寸3D打印机:不再是“围城”!工业级3D打印的瞬发时代已来!
- 理性教育~值得借鉴~
- javaone_JavaOne正在重建动力
- 6个步骤卸载wine
- codeforces 1073E
- 最长高地(51Nod-2509)
- 【转】子窗体刷新父窗体使用接口模式 父窗口关闭子窗口
- 给 WordPress 博客添加 Tabs 标签切换功能
- ldconfig为空时会清已有的链接?
- linux装逼指南-数字雨
- matlab时变函数,MATLAB在《复变函数》教学中的应用(图文)
- 微软易升级服务器,通过“微软Windows10易升”升级Win10 1803全程图解
- Vue + ElementUI 实现全国各个省份相对应城市的联动选择
- 学习:使用python+selenium实现路由器登陆账号密码爆破
- 单片机自学需要买开发板嘛?初学者如何使用单片机开发板?
- opengl简单模拟行星运转
- 【富文本】亿图思维导图MindMaster Pro限时赠送正版
- AQS(AbstractQueuedSynchronizer)同步器
- Linux gdb调试(4):多进程与多线程调试