有限状态机(Finite State Machine,FSM)又称为状态机,为时序逻辑电路中常采用的一种形式,也是时序电路的通用模型任何时序电路,都可以表示为有限状态机。

1、状态机的概述

状态机一般由寄存器和组合逻辑两部分组成,寄存器主要是存储状态,而组合逻辑主要用于产生输出和激励信号。
状态机,根据输出信号是否当前的输入信号,分为米利型(Mealy)和穆尔型(Moore)。米利型状态机的输出由状态机的当前状态和当前输入一起决定,当输入信号不与时钟同步时输出也不与时钟同步。而穆尔型状态机的输出状态只取决于当前状态,与当前的输入状态无关,输出的改变需要等待一个时钟周期才能体现在输出上。

2、状态编码

为了适应不同的应用场景,状态机有着不同的编码方式,常见的编码有:8421BCD码,格雷码,约翰逊码,独热码。编码方式对比如表2-1所示:
表2-1

BCD码将状态,表示成2进制数,这种编码方式可以减少触发器的使用。
而格雷码和约翰逊码,每一个状态只有一位不同,可以有效减少电路噪声。
独热码每一位需要一个单独的触发器,可以有效地减少编码和译码的组合逻辑电路大小。但对触发器数量要求较大。

3、二段式状态机

Verilog语言中,常常采用二段式和三段式描述状态机。其本质是对应状态机的激励方程,状态转换方程和输出方程。三段式每一段对应一个方程,二段式则是将输出方程和激励方程合并在一起描述。
二段式描述五位计数器

module counter_5 (clk,rst,Q);input clk,rst;output Q;reg Q;reg [2:0]pre_state,nex_state;parameter s0=3'b000,s1=3'b001,s2=3'b010,s3=3'b011,s4=3'b100;always@(posedge clk or posedge rst)beginif (rst==1'b1) pre_state<=s0;else pre_state<=nex_state;endalways@(pre_state)beginnex_state<=3'bxxx;Q<=1'b0;case (pre_state)s0:begin nex_state<=s1;Q<=1'b0;ends1:begin nex_state<=s2;Q<=1'b0;ends2:begin nex_state<=s3;Q<=1'b0;ends3:begin nex_state<=s4;Q<=1'b0;ends4:begin nex_state<=s0;Q<=1'b1;enddefault:begin nex_state<=s0;Q<=1'b0;endendcaseend
endmodule

测试代码:

module counter_5_t;reg clk,rst;wire Q;initialbeginclk=1'b0;forever #10 clk=~clk;endinitial beginrst=1'b0;#10 rst=1'b1;#10 rst=1'b0;endcounter_5 u1(.clk(clk),.rst(rst),.Q(Q));
endmodule

3、三段式

module counter3_5 (clk,rst,Q);input clk,rst;output Q;reg Q;reg [2:0] pre_state,nex_state;parameter s0=3'b000,s1=3'b001,s2=3'b010,s3=3'b011,s4=3'b100;always@(posedge clk or posedge rst)beginif (rst==1'b1) pre_state<=s0;else pre_state<=nex_state;endalways@(pre_state)beginnex_state<=3'bxxx;case (pre_state)s0:nex_state<=s1;s1:nex_state<=s2;s2:nex_state<=s3;s3:nex_state<=s4;s4:nex_state<=s0;default:nex_state<=s0;endcaseendalways@(pre_state)beginQ<=1'b0;case (pre_state)s0:Q<=1'b0;s1:Q<=1'b0;s2:Q<=1'b0;s3:Q<=1'b0;s4:Q<=1'b1;default:Q<=1'b0;endcaseend
endmodule

测试代码可见二段式测试代码
仿真结果如图:

Verilog实现二段式和三段式有限状态机相关推荐

  1. Verilog描述有限状态机(一段式、二段式、三段式)

    有限状态机(FSM)的输出取决于过去状态以及当前输入,是时序逻辑电路.适合描述那些发生有先后顺序或者有逻辑规律的事情,状态机的本质就是对具有逻辑顺序或时序规律的事件进行描述的一种方法,广泛用于多种场合 ...

  2. 状态机的描述方法案例分析(一段式、二段式、三段式)

    上篇博文讲了:FPGA中有限状态机的状态编码采用格雷码还是独热码? 那篇博文讲了状态机的状态编码是用格雷码还是独热码的问题,以及两者之间的优劣.状态机的描述方式采用的是一段式描述方式,也就是将整个状态 ...

  3. FPGA状态机(一段式、二段式、三段式)、摩尔型(Moore)和米勒型(Mealy)

    1.状态机 1.1.理论 FPGA不同于CPU的一点特点就是CPU是顺序执行的,而FPGA是同步执行(并行)的.那么FPGA如何处理明显具有时间上先后顺序的事件呢?这个时候我们就需要使用到状态机了. ...

  4. 一段式、两段式以及三段式状态机(FSM)设计实例

    一段式.二段式以及三段式状态机(FSM)设计实例 状态机(FSM)分类 状态转移的三种编码方式 一段式.两段式状态机(FSM)区别 vivado与modelsim联调显示状态机 设计实例 状态转移图 ...

  5. verilog中一文搞懂有限状态机(FSM)Mealy和Moore状态机(及一段式,二段式,三段式)

    三段式 1.什么是有限状态机 2.Mealy 状态机 2.Moore FSM 3.Mealy 和 Moore的区别 4.Encoding 风格 设计原则 5. 一段式状态机 6. 二段式状态机 控制c ...

  6. 彻底搞懂状态机(一段式、两段式、三段式)

    转自:https://blog.csdn.net/wordwarwordwar/article/details/78509445 实例:FSM实现10010串的检测 状态转移图:初始状态S0,a = ...

  7. 分布式事务之——两段式、三段式

    一.两段式 1.请求阶段(commit-request phase,或称表决阶段,voting phase) 事务询问.协调者向所有参与者发送事务内容,询问是否可以进行事务提交操作,然后就开始等待参与 ...

  8. 状态机设计(一段式、两段式和三段式)

    三段式状态机 第一段,时序always块,状态跳转 第二段,组合always块,状态更新 第三段,时序always块,输出控制 两段式状态机 两段式状态机是把三段式状态机的第二段和第三段合为一段,那么 ...

  9. 一段式、两段式和三段式状态机

    这里写自定义目录标题 一段式 两段式 三段式 这张图片是mealy型状态机的结构,Moore型类似,输出与输入无关. 一段式 module moduleName (input clk,input rs ...

最新文章

  1. 计算机图形学 区域填充,计算机图形学 区域填充算法的实现
  2. 精通python网络爬虫-精通Python网络爬虫:核心技术、框架与项目实战
  3. 公司前台打印机的连接方法(超级简单)
  4. Mac电脑 + Windows机械键盘?功能键映射了解一下
  5. mac安装openjdk
  6. python机器学习库keras——线性回归、逻辑回归、一般逻辑回归
  7. docker pull 私有_Docker系列教程03Docker私有仓库搭建(registry)
  8. ubuntu linux 搭建 webssh 网页ssh远程登录其他服务器
  9. 图解设计模式+代码(一):创建型模式
  10. 喜马拉雅下载文件解决办法
  11. keil出现蓝色小箭头
  12. 4个网页翻译工具,一键就能将网页英文翻译成中文
  13. python stdin stdout_Python子进程:给出stdin,读取stdout,然后给出更多stdin
  14. android电脑手柄游戏平台,玩转PC、安卓TV、Stam平台等多平台的游戏手柄——北通斯巴达2...
  15. plc无法跟计算机通信,无法与PLC通信
  16. Github使用教程(一)--搭建Github环境
  17. bjca数字认证产品报错产品崩溃
  18. 计算机PPT03,职称计算机PowerPoint2003辅导:文件类型和属性
  19. 火车头内容采集规则之【C#代码】数字序号递增
  20. 问题 A: 因数个数

热门文章

  1. 高分辨率影像卫星之美国
  2. Java培训,我为什么选择传智播客
  3. Qt 中使用 VLC-Qt 播放网络视频流(附实例)
  4. spring+springboot认识
  5. 【Unity3D】相机
  6. 封闭式基金周折价率排行表20061013(ZT)
  7. 普通人如何做到“我命由我不由天”
  8. Leetcode 860. 柠檬水找零(贪心) 记录反思
  9. jetty9 spdy使用
  10. vue noVNC实现远程桌面连接