verilog之状态机
verilog之状态机设计
1、状态机的原理
状态机,就是基于状态变化而设计的硬件模块,是一种常见的设计思路。掌握状态机的使用,是初步建立复杂逻辑设计能力的开始。所谓的状态机,和高级语言程序的流程图十分类似,具有逐步执行,步步递进的特点。由于硬件的特殊性,一般的状态机都是闭环的,要求能够回到初始状态。状态机就是硬件流程图,将并行执行的硬件结构通过时序控制转化为有效地顺序执行。
这一点体现在verilog中就是状态机通过一个状态块和一个条件块,将高级语言中的逐步特性短暂地建立于硬件中,是设计者可以有效地分析信号当前处于的区域。简而言之,状态机就是C语言中的while(1),不断地执行不同状态下的模块功能。当然,设计的语句比较复杂,实现每条语句的方法也是需要采用模块化设计。这里和软件上的设计思路还是有所区别的。
个人理解,状态机的作用是有效地减少了设计者在信号转化过程中需要不断考虑的时序问题,以及在条件转化中的约束问题。由于状态的限定,使得条件约束变得简单。当然,对于熟练的硬件设计者来说,自定义条件约束也是可以实现的。
2、状态机的组成
状态机由三部分组成:状态、驱动和输出。状态,这就不用多说,就是状态机名字的由来。通过数字或者其他标识,将每一段时间区分于一个状态。驱动,就是状态变化的条件。这个是状态机设计的关键。一般在设计状态机前会先绘制关系图,目的就是明确驱动。至于输出,就是根据状态区分条件从而达到控制输出的目的。
首先看一下状态的声明。一般而言,状态只需要有现在状态和下一状态,通过组合逻辑关联即可实现。最简单的就是状态1的下一状态为状态2,状态2的下一状态为状态1。采用组合关联而非时序关联,主要是减少时序冗余和可能的状态自锁。时序冗余好理解,组合逻辑总是比时序逻辑用的资源少。时序自锁,也就是状态延时变化可能导致的问题。比如前面的简单状态转化。在1->2时,现状态转化为2,在现状态保持2的第一个周期内,下一状态还是2,这就导致状态一直处于2.当然,这只是一个极端的情况。
至于驱动,就是根据每个状态下的条件判断出状态的变化。常用的有某信号出现高电平、某计数器计时到位、多个信号复杂条件等。驱动的最稳妥的方法就是画出状态图,以防遗漏。
输出,就是将运行成功的状态机的状态转化为标准的控制信号。这里的输出和单纯使用时钟外加控制线的方式输出的优势在于可以自动区分条件。比如,在状态1中的控制条件只会作用于状态1,而不会影响其他状态。这好比认为构建了一个局部条件。在信号越来越复杂的情况下,局部条件显然具有重要的优势。在设计比较大的模块时,随着信号变化的区分度越来越高,单纯使用转化信号来控制是困难的。
一般的状态机的写法也是基于这三部分来写的,可以合并。计数器可以认为是三合一的状态机,只不过大部分人只会使用计数到达或者计数不足两个状态,所以就直接合并在一起。对于直接输出状态的设计而言,只需要两个部分即可。
3、状态机的作用
在学习硬件设计时,状态机无疑是重要的一环。掌握状态机的设计,可以从逻辑思维过渡到硬件分析。掌握状态机,才能逐步地接触到硬件设计中的组合与时序的转化。可以说,状态机是组合逻辑和时序逻辑的标准搭配,如同集成电路中的CMOS单元一样基础。学习了状态机,就可以初步的了解状态和时序的搭配方法,为后面更为复杂的设计打下基础。
verilog之状态机的更多相关文章
- Verilog 加法器和减法器(7)
在计算机中浮点数 表示通常采用IEEE754规定的格式,具体参考以下文章. https://www.cnblogs.com/mikewolf2002/p/10095995.html 下面我们在Veri ...
- 目标反射回波检测算法及其FPGA实现(准备篇): 用Verilog-HDL状态机控制硬件接口
基于FPGA的目标反射回波检测算法及其实现(准备篇) :用Verilog-HDL状态机控制硬件接口 前段时间,开发了一个简单的目标反射回波信号识别算法,我会分几篇文章分享这个基于FPGA的回波识别算法 ...
- FSM之三--代码风格
FSM设计之一http://www.cnblogs.com/qiweiwang/archive/2010/11/28/1890244.html Moore型状态机与mealy型状态机相比,由于其状态输 ...
- (原创)Verilog三段式状态机
下面以上图一个简单的FSM说明三段式Verilog状态机范式: `timescale 1ns / 1ps module FSM( clk,rst_n, in1,in2, out1,out2, CS,N ...
- i2c状态机方法设计-verilog
2010-09-05 21:04:00 verilog语言基础学的差不多了.接着就是看看华为的语言编写规范.状态机设计方法是fpga的重要设计方法.所以我要记上一笔. 只要会FSM方法,用fpga编写 ...
- 10010序列检测器的三段式状态机实现(verilog)
序列检测器是时序数字电路设计中经典的教学范例,夏宇闻的<verilog数字系统设计教程>一书中有这个例子,用verilog设计一个“10010”序列的检测器.看完后我觉得F和G两个状态多余 ...
- 状态机的Verilog写法
“硬件设计很讲究并行设计思想,虽然用Verilog描述的电路大都是并行实现的,但是对于实际的工程应用,往往需要让硬件来实现一些具有一定顺序的工作,这就要用到状态机思想.什么是状态机呢?简单的说,就是通 ...
- FPGA 状态机-序列检测器verilog
实现功能:检测出串行输入数据4位Data二进制序列0101,当检测到该序列的时候,out=1,否则out=0 (1)给出状态编码,画出状态图 (2)门电路实现 (3)verilog实现 首先规定Q3Q ...
- Verilog学习笔记设计和验证篇(四)...............状态机的置位与复位
1)状态机的异步置位和复位 异步置位与复位是于时钟无关的.当异步置位或复位信号来临时,他们立即分别置触发器的输出为1或0,不需要等待时钟沿的到来.要将他们列入always块的事件控制信号内就能触发al ...
- 信号滤波模块verilog代码---UNLOCK,LOCK状态机方式
信号滤波模块verilog代码 `timescale 1ns / 1ps /////////////////////////////////////////////////////////////// ...
随机推荐
- Direct2D CreateHwndRenderTarget 和 CreateDCRenderTarget
前段时间稍微看了点Direct3D, 觉得挺有意思的,但是想着要有3D得先从2D开始.故开始了D2D旅行. 如标题所示,CreateHwndRenderTarget 是在用来创建一个渲染到窗口的渲染目 ...
- 2021-07-30 JavaScript中常用数据的判断
为什么要判断一个变量的常用数据? 实际业务场景里,一个变量的数据是否合法或符合预期,会影响到项目中用到的UI组件库特定组件的运行.比如element-ui中的el-select组件,单选时绑定的数据不 ...
- 50从零开始用Rust编写nginx,原来TLS证书还可以这么申请
wmproxy wmproxy已用Rust实现http/https代理, socks5代理, 反向代理, 负载均衡, 静态文件服务器,websocket代理,四层TCP/UDP转发,内网穿透等,会将实 ...
- 项目实战:Qt+FFmpeg录屏应用(支持帧率、清晰度设置)
若该文为原创文章,转载请注明原文出处本文章博客地址:https://blog.csdn.net/qq21497936/article/details/109827936各位读者,知识无穷而人力有穷,要 ...
- docker自定义bridge网络
>>> docker network create -d bridge bridge-net # 创建一个名为bridge-net的网络 # 测试,启动两个容器,并且接入到bridg ...
- 【LeetCode排序专题02】最小k个数,关于快速排序的讨论
最小k个数 https://leetcode.cn/problems/smallest-k-lcci/ 输入整数数组 arr ,找出其中最小的 k 个数.例如,输入4.5.1.6.2.7.3.8这8个 ...
- AI 让观众成为 3D 版《老友记》的导演了?
<老友记>上线 3D 版了? 允许用户旋转镜头,且从近景切换到全景观看故事? 今年出炉的 3D 方向 AI 项目 SitCom3D,能够自动补齐<老友记>原剧中的三维拍摄空间, ...
- DataGear 数据可视化看板整合前端框架Vue
DataGear 看板JS对象的loadUnsolvedCharts()函数,用于异步加载页面端动态生成的图表元素,利用它,可以很方便整合Angular.React.Vue等前端框架. 本文以Vue为 ...
- 【Azure 存储服务】关于Storage Account Queue使用的几个问题
1) 在消费Storage Queue中的数据的时候,如何只过滤出 Subject 为"message/{messageid}"这种,去掉subject为"informa ...
- C++入门编程----C++运算符(8)
什么是运算符 运算符是让程序执行特定的数学或逻辑操作的符号,用来表示针对数据的特定操作,也称之为操作符.C++运算符分别有算术运算符.关系运算符.逻辑运算符.赋值运算符.位运算符.移位运算符.size ...