verilog之状态机设计

1、状态机的原理

状态机,就是基于状态变化而设计的硬件模块,是一种常见的设计思路。掌握状态机的使用,是初步建立复杂逻辑设计能力的开始。所谓的状态机,和高级语言程序的流程图十分类似,具有逐步执行,步步递进的特点。由于硬件的特殊性,一般的状态机都是闭环的,要求能够回到初始状态。状态机就是硬件流程图,将并行执行的硬件结构通过时序控制转化为有效地顺序执行。

这一点体现在verilog中就是状态机通过一个状态块和一个条件块,将高级语言中的逐步特性短暂地建立于硬件中,是设计者可以有效地分析信号当前处于的区域。简而言之,状态机就是C语言中的while(1),不断地执行不同状态下的模块功能。当然,设计的语句比较复杂,实现每条语句的方法也是需要采用模块化设计。这里和软件上的设计思路还是有所区别的。

个人理解,状态机的作用是有效地减少了设计者在信号转化过程中需要不断考虑的时序问题,以及在条件转化中的约束问题。由于状态的限定,使得条件约束变得简单。当然,对于熟练的硬件设计者来说,自定义条件约束也是可以实现的。

2、状态机的组成

状态机由三部分组成:状态、驱动和输出。状态,这就不用多说,就是状态机名字的由来。通过数字或者其他标识,将每一段时间区分于一个状态。驱动,就是状态变化的条件。这个是状态机设计的关键。一般在设计状态机前会先绘制关系图,目的就是明确驱动。至于输出,就是根据状态区分条件从而达到控制输出的目的。

首先看一下状态的声明。一般而言,状态只需要有现在状态和下一状态,通过组合逻辑关联即可实现。最简单的就是状态1的下一状态为状态2,状态2的下一状态为状态1。采用组合关联而非时序关联,主要是减少时序冗余和可能的状态自锁。时序冗余好理解,组合逻辑总是比时序逻辑用的资源少。时序自锁,也就是状态延时变化可能导致的问题。比如前面的简单状态转化。在1->2时,现状态转化为2,在现状态保持2的第一个周期内,下一状态还是2,这就导致状态一直处于2.当然,这只是一个极端的情况。

至于驱动,就是根据每个状态下的条件判断出状态的变化。常用的有某信号出现高电平、某计数器计时到位、多个信号复杂条件等。驱动的最稳妥的方法就是画出状态图,以防遗漏。

输出,就是将运行成功的状态机的状态转化为标准的控制信号。这里的输出和单纯使用时钟外加控制线的方式输出的优势在于可以自动区分条件。比如,在状态1中的控制条件只会作用于状态1,而不会影响其他状态。这好比认为构建了一个局部条件。在信号越来越复杂的情况下,局部条件显然具有重要的优势。在设计比较大的模块时,随着信号变化的区分度越来越高,单纯使用转化信号来控制是困难的。

一般的状态机的写法也是基于这三部分来写的,可以合并。计数器可以认为是三合一的状态机,只不过大部分人只会使用计数到达或者计数不足两个状态,所以就直接合并在一起。对于直接输出状态的设计而言,只需要两个部分即可。

3、状态机的作用

在学习硬件设计时,状态机无疑是重要的一环。掌握状态机的设计,可以从逻辑思维过渡到硬件分析。掌握状态机,才能逐步地接触到硬件设计中的组合与时序的转化。可以说,状态机是组合逻辑和时序逻辑的标准搭配,如同集成电路中的CMOS单元一样基础。学习了状态机,就可以初步的了解状态和时序的搭配方法,为后面更为复杂的设计打下基础。

verilog之状态机的更多相关文章

  1. Verilog 加法器和减法器(7)

    在计算机中浮点数 表示通常采用IEEE754规定的格式,具体参考以下文章. https://www.cnblogs.com/mikewolf2002/p/10095995.html 下面我们在Veri ...

  2. 目标反射回波检测算法及其FPGA实现(准备篇): 用Verilog-HDL状态机控制硬件接口

    基于FPGA的目标反射回波检测算法及其实现(准备篇) :用Verilog-HDL状态机控制硬件接口 前段时间,开发了一个简单的目标反射回波信号识别算法,我会分几篇文章分享这个基于FPGA的回波识别算法 ...

  3. FSM之三--代码风格

    FSM设计之一http://www.cnblogs.com/qiweiwang/archive/2010/11/28/1890244.html Moore型状态机与mealy型状态机相比,由于其状态输 ...

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

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

  5. i2c状态机方法设计-verilog

    2010-09-05 21:04:00 verilog语言基础学的差不多了.接着就是看看华为的语言编写规范.状态机设计方法是fpga的重要设计方法.所以我要记上一笔. 只要会FSM方法,用fpga编写 ...

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

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

  7. 状态机的Verilog写法

    “硬件设计很讲究并行设计思想,虽然用Verilog描述的电路大都是并行实现的,但是对于实际的工程应用,往往需要让硬件来实现一些具有一定顺序的工作,这就要用到状态机思想.什么是状态机呢?简单的说,就是通 ...

  8. FPGA 状态机-序列检测器verilog

    实现功能:检测出串行输入数据4位Data二进制序列0101,当检测到该序列的时候,out=1,否则out=0 (1)给出状态编码,画出状态图 (2)门电路实现 (3)verilog实现 首先规定Q3Q ...

  9. Verilog学习笔记设计和验证篇(四)...............状态机的置位与复位

    1)状态机的异步置位和复位 异步置位与复位是于时钟无关的.当异步置位或复位信号来临时,他们立即分别置触发器的输出为1或0,不需要等待时钟沿的到来.要将他们列入always块的事件控制信号内就能触发al ...

  10. 信号滤波模块verilog代码---UNLOCK,LOCK状态机方式

    信号滤波模块verilog代码 `timescale 1ns / 1ps /////////////////////////////////////////////////////////////// ...

随机推荐

  1. VueRouter导航守卫

    VueRouter导航守卫 vue-router提供的导航守卫主要用来通过跳转或取消的方式守卫导航,简单来说导航守卫就是路由跳转过程中的一些钩子函数,路由跳转是一个大的过程,这个大的过程分为跳转前中后 ...

  2. elasticsearch should实现or功能,设置minimum_should_match

    elasticsearch实现传统数据库中的or功能,需要使用bool下面的should关键字,对于A or B的情况,应该至少返回A和B中的一个,但是如下语句,不仅返回A和B中的至少一个,也返回了没 ...

  3. Java设计模式-装饰者模式Decorator

    介绍 装饰者模式的核心思想是通过创建一个装饰对象(即装饰者),动态扩展目标对象的功能,并且不会改变目标对象的结构,提供了一种比继承更灵活的替代方案.需要注意的是,装饰对象要与目标对象实现相同的接口,或 ...

  4. SpringBoot+Shiro+LayUI权限管理系统项目-7.实现用户管理

    1.说明 只讲解关键部分,详细看源码,文章下方捐赠或QQ联系捐赠获取. 2.功能展示 包括用户增删改查和分配角色. 3.业务模型 @Data @EqualsAndHashCode(callSuper ...

  5. 执行shell脚本过程中传递参数

    假设我有一个shell脚本install.sh,在运行过程中需要终端输入一条指令才能继续执行,例如程序询问是否删除某文件,终端需要输入Y/N.采用下面的方式可以实现自动输入参数,无需人工干预: ech ...

  6. 李宏毅2022机器学习HW3 Image Classification

    Homework3 数据集下载 在本地环境下进行实验总是令人安心,但是又苦于网上找不到数据集,虽然kaggle上有数据集但是下载存在问题 于是有了一个天才的想法,间接从kaggle上下载(利用outp ...

  7. golang 打隧道和端口转发

    `package main import ( "golang.org/x/crypto/ssh" "io" "log" "net& ...

  8. 压测模式该怎么选?RunnerGo五大压测模式详解

    在做性能测试时需要根据性能需求配置不同的压测模式,如:阶梯模式.使用jmeter时我们需要安装插件来配置测试模式,RunnerGo内嵌了压测模式这一选项更方便使用,今天来看看RunnerGo的几种压测 ...

  9. 以二进制文件安装K8S之环境准备

    为了k8s集群能正常运行,需要先完成4项准备工作: 1.关闭防火墙 2.禁用SeLinux 3.关闭Swap 4.安装Docker 关闭防火墙 # 查看防火墙状态 getenforce #关闭防火墙, ...

  10. ABP Suite创建新项目

    启动Abp Suite ********************************************************************** ** Visual Studio ...