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. eslint+prettier 统一代码风格

    1.实现效果 Eslint校验代码语法,prettier统一格式化代码,按下保存自动修复eslint错误,自动格式化代码. 2.安装vscode插件 Vetur ESLint Prettier - C ...

  2. OCP试题解析之053-61 RMAN set command id to

    61.You frequently have multiple RMAN sessions running, and you want to be able to easily identify ea ...

  3. Direct2D CreateBitmap的使用

    当需要设置位图的混合模式时,应该使用ID2D1DeviceContext而不是ID2D1RenderTarget. 代码如下: #define WIN32_LEAN_AND_MEAN #include ...

  4. 3dMax建模笔记(一):介绍3dMax和创建第一个模型Hello world

    前言   三维模型,虽然淘宝上一抓一大把,但是三维开发人员最好还是具备一定基础的建模能力.本文用hello world模型描述基本的3dMax建模流程.   3dMax   3D Studio Max ...

  5. django中的Case,When,then用法

    # 参考文档 https://docs.djangoproject.com/en/2.2/ref/models/conditional-expressions/ # Case()接受任意数量的When ...

  6. linux虚拟机初始配置

    1- CentOS7配置静态IP地址: iface="网络接口名"cd /etc/sysconfig/network-scripts/; sed -i 's/^/#/' ifcfg ...

  7. Nebula Graph 源码解读系列 | Vol.01 Nebula Graph Overview

    上篇序言中我们讲述了源码解读系列的由来,在 Nebula Graph Overview 篇中我们将带你了解下 Nebula Graph 的架构以及代码仓分布.代码结构和模块规划. 1. 架构 Nebu ...

  8. WireShark学习笔记(一)

    1.从WireShark分析网络层协议的传输 下面是网络接口层协议,从图中可以看到两个相邻设备的MAC地址,因此该网络包才能以接力的方式传送到目的地址. 下面是网络层,在这个包中,主要的任务是把TCP ...

  9. 我的Java面试资料推荐

    看法 每年去大厂试试水,借此来评估自己的能力.价值和不足,或许还能拿到一个好offer,是个合格程序员的职业表现 大厂面试,基本都是:先过算法,检验面试人的智商和逻辑能力:之后才考察语言.设计.中间件 ...

  10. ENVI为遥感影像设置空间坐标系的方法

      本文介绍基于ENVI软件,对不含有任何地理参考信息的栅格遥感影像添加地理坐标系或投影坐标系等地理参考信息的方法.   我们先来看一下本文需要实现的需求.现有以下两景遥感影像,其位于不同的空间位置: ...