状态机分类:

通常, 状态机的状态数量有限, 称为有限状态机(FSM) 。由于状态机所有触发器的时钟由同一脉冲边沿触发, 故也称之为同步状态机。 根据状态机的输出信号是否与电路的输入有关分为 Mealy 型状态机和 Moore 型状态机。

Mealy 型状态机:

电路的输出信号不仅与电路当前状态有关, 还与电路的输入有关。

Moore 型状态机:

   电路的输出仅仅与各触发器的状态, 不受电路输入信号影响或无输入。

三段式状态机的一般结构:

  1)利用参数定义语句 parameter 描述状态机各个状态名称, 即状态编码。一般采用独热码。

2)用时序always模块,格式化描述次态寄存器(下一个状态的寄存器)迁移到现态寄存器。

  3)用组合逻辑always模块,描述状态转移条件判断或者状态转移规律。

  4)同步时序always模块,格式化描述各个状态的输出。

实现代码:

module test(
input clk,
input rst_n,
output reg out
); //reg define
reg q; //第一步,状态声明和状态编码
reg [:] current_state;
reg [:] next_state;
parameter [:] S0='b0000;
parameter [:] S1='b0010;
parameter [:] S2='b0100;
parameter [:] S3='b1000; //第二部,时序逻辑: 描述状态转换,格式固定
always@(posedge clk)
begin
if(!rst_n)
current_state <= ;
else
current_state <= next_state;
end //第三部,组合逻辑: 描述状态转移条件,即只考虑状态之间的跳转,也就是说各个状态机之间跳转关系。
always @ (current_state or .... ) //电平触发,
begin
next_state = x; //要初始化,使得系统复位后能进入正确的状态
case(current_state)
S0: if(...)
next_state = S1; //阻塞赋值
else
......
S1: if(...)
next_state = S2; //阻塞赋值
else
......
.
.
.
default : .....
endcase
end //第四部,用时序always块输出逻辑: 让输出 out, 经过寄存器 q 锁存后输出, 消除毛刺
always@(posedge clk)
begin
if(!rst_n)
out<='b0;
else
begin
case(current_state)
S0:
out<='b0;
S1:
out<='b1;
.
.
.
default : ....
endcase
end
end
assign q = ou; //让输出 out, 经过寄存器 q 锁存后输出, 消除毛刺
endmodule

基于FPGA的三段式状态机的更多相关文章

  1. FPGA三段式状态机的思维陷阱

    用三段式描述状态机的好处,国内外各位大牛都已经说的很多了,大致可归为以下三点: 1.将组合逻辑和时序逻辑分开,利于综合器分析优化和程序维护; 2.更符合设计的思维习惯; 3.代码少,比一段式状态机更简 ...

  2. 简单三段式状态机实验2-LCD12864

    此实验是在“基于I2C EPPRPM(AT24C02B) + LCD12864实验”基础上,把LCD模块里的一段式状态机改成三段式,I2C EPPROM模块暂时未改出来,一步一步来吧,改完后代码下载到 ...

  3. 简单三段式状态机实验1-SOS

    一直想从一段式状态机切换到三段式状态机,从书上和网上不断搜寻三段式案例及方法,感觉很简单,就想拿之前做过的实验把一段式改成三段式,可是写起来并非那么简单,很棘手,改完后也没有成功,尤其状态机里面的计数 ...

  4. Verilog笔记.三段式状态机

    之前都是用的一段式状态机,逻辑与输出混在一起,复杂点的就比较吃力了. 所以就开始着手三段式状态机. 组合逻辑与时序逻辑分开,这样就能简单许多了. 但是两者在思考方式上也有着很大的区别. 三段式,分作: ...

  5. 10010序列检测器的三段式状态机实现(verilog)

    序列检测器是时序数字电路设计中经典的教学范例,夏宇闻的<verilog数字系统设计教程>一书中有这个例子,用verilog设计一个“10010”序列的检测器.看完后我觉得F和G两个状态多余 ...

  6. 三段式状态机 [CPLD/FPGA]

    状态机的组成其实比较简单,要素大致有三个:输入,输出,还有状态. 状态机描述时关键是要描述清楚前面提高的几个状态机的要素,即如何进行状态转移:每个状态的输出是什么:状态转移是否和输入条件相关等. 有人 ...

  7. Verilog三段式状态机描述

    时序电路的状态是一个状态变量集合,这些状态变量在任意时刻的值都包含了为确定电路的未来行为而必需考虑的所有历史信息. 状态机采用VerilogHDL语言编码,建议分为三个always段完成. 三段式建模 ...

  8. verilog 三段式状态机的技巧

    三段式代码多,但是有时钟同步,延时少,组合逻辑跟时序逻辑分开并行出错少. (1)同步状态转移 (2)当前状态判断接下来的状态 (3)动作输出 如果程序复杂可以不止三个always   .always ...

  9. (原创)Verilog三段式状态机

    下面以上图一个简单的FSM说明三段式Verilog状态机范式: `timescale 1ns / 1ps module FSM( clk,rst_n, in1,in2, out1,out2, CS,N ...

随机推荐

  1. MOOC(15)- 接口异常处理

    首先通过fiddler拿到正确的传参 把value复制下来,存到json数据中,传参时通过键去json的值即可 但是运行请求的时候报错了 再运行,还是出错 查看fiddler结果 修改,从fiddle ...

  2. AndroidP推出多项AI功能,会不会引发新的隐私担忧?

    让谷歌很"伤心"的是,相比苹果iOS系统的统一,Android系统的碎片化态势实在太严重了.就像已经发布一年多的Android O,其占有率仅有4.6%.主要是因为很多手机厂商都会 ...

  3. Python接口自动化测试-下载文件

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Author : shenqiang ''' 注意:定义类的时候,内部方法之间的互调 步骤: 1.按照 ...

  4. linux上python3的安装

    我这里使用的时centos7-mini,centos系统本身默认安装有python2.x,版本x根据不同版本系统有所不同,可通过 python --V 或 python --version 查看系统自 ...

  5. LG_3457_[POI2007]POW-The Flood

    题目描述 Description 你手头有一张该市的地图.这张地图是边长为 m∗n 的矩形,被划分为m∗n个1∗1的小正方形.对于每个小正方形,地图上已经标注了它的海拔高度以及它是否是该市的一个组成部 ...

  6. 洛谷 P1220 关路灯 题解

    Description 有 $n$ 盏路灯,每盏路灯有坐标(单位 $m$)和功率(单位 $J$).从第 $c$ 盏路灯开始,可以向左或向右关闭路灯.速度是 $1m/s$.求所有路灯的最少耗电.输入保证 ...

  7. 解析Maven的settings.xml文件

    一.镜像问题 1.为什么需要配置maven国内镜像? 在不配置镜像的情况下,maven默认会使用中央库.--https://repo.maven.apache.org/maven2 maven中央库在 ...

  8. HBase完全分布式集群搭建

    HBase完全分布式集群搭建 hbase和hadoop一样也分为单机版,伪分布式版和完全分布式集群版,此文介绍如何搭建完全分布式集群环境搭建.hbase依赖于hadoop环境,搭建habase之前首先 ...

  9. api安全规范

    1. API签名的目的 校验API调用者的身份,是否有权访问    校验请求的数据完整性,防止被中间人篡改    防止重放攻击 2.基本概念 AccessKey: API使用者向API提供方申请的Ac ...

  10. 图形用户界面(GUI)应用程序开发——菜鸟的第一步

    参考资源:贺老师博文 在看完贺老师的博文后,我就照葫芦画瓢的做了个求三角形面积的程序.这是我写的一篇所用时间最长博文(两个多小时,真心挺累,或许是我太笨吧),为了尽可能详细的把步骤写明白我截了二十一张 ...