verilog之状态机详细解释(二)

2023-11-18

一、有限状态机设计的一般步骤:

1) 逻辑抽象,得出状态转换图


就是把给出的一个实际逻辑关系表示为时序逻辑函数,可以用状态转换表来描述,也可以用状态转换图来描述。这就需要:
• 分析给定的逻辑问题,确定输入变量、输出变量以及电路的状态数。通常是取原因(或条件)作为输入变量,取结果作为输出变量。
• 定义输入、输出逻辑状态的含意,并将电路状态顺序编号。
• 按照要求列出电路的状态转换表或画出状态转换图。这样,就把给定的逻辑问题抽象到一个时序逻辑函数了。


2) 状态化简


如果在状态转换图中出现这样两个状态,它们在相同的输入下转换到同一状态去,并得到一样的输出,则称它们为等价状态。显然等价状态是重复的,可以合并为一个。电路的状态数越少,存储电路也就越简单。状态化简的目的就在于将等价状态尽可能地合并,以得到最简的状态转换图。


3) 状态分配


状态分配又称状态编码。通常有很多编码方法,编码方案选择得当,设计的电路可以简单,反之,选得不好,则设计的电路就会复杂许多。实际设计时,需综合考虑电路复杂度与电路性能之间的折衷,在触发器资源丰富的FPGA或ASIC设计中采用独热编码(one-hot-coding)既可以使电路性能得到保证又可充分利用其触发器数量多的优势。


4) 选定触发器的类型并求出状态方程、驱动方程和输出方程。
5) 按照方程得出逻辑图

二、可综合状态机知道原则

因为大多数FPGA内部的触发器数目相当多,又加上独热码状态机(one hot state machine)的译码逻辑最为简单, 所以在设计采用FPGA实现的状态机时往往采用独热码状态机(即每个状态只有一个寄存器置位的状态机)。
建议采用case,casex,或casez语句来建立状态机的模型, 因为这些语句表达清晰明了,可以方便地从当前状态分支转向下一个状态并设置输出。

不要忘记写上case语句的最后一个分支default,并将状态变量设为'bx,这就等于告知综合器:case语句已经指定了所有的状态,这样综合器就可以删除不需要的译码电路,使生成的电路简洁,并与设计要求一致。

如果将缺省状态设置为某一确定的状态(例如:设置default:state = state1)行不行呢?

回答是这样做有一个问题需要注意。因为尽管综合器产生的逻辑和设置default:state='bx时相同,但是状态机的Verilog HDL模型综合前和综合后的仿真结果会不一致。为什么会是这样呢?

因为启动仿真器时,状态机所有的输入都不确定,因此立即进入default状态,这样的设置便会将状态变量设为state1,但是实际硬件电路的状态机在通电之后,进入的状态是不确定的,很可能不是state1的状态,因此还是设置default: state='bx与实际情况相一致。

但在有多余状态的情况下还是应将缺省状态设置为某一确定的有效状态,因为这样做能使状态机若偶然进入多余状态后还能在下一时钟跳变沿时返回正常工作状态,否则会引起死锁。

状态机应该有一个异步或同步复位端,以便在通电时将硬件电路复位到有效状态,也可以在操作中将硬件电路复位(大多数FPGA结构都允许使用异步复位端)。

目前大多数综合器往往不支持在一个always块中由多个事件触发的状态机(即隐含状态机,implicit state machines), 为了能综合出有效的电路,用Verilog HDL描述的状态机应明确地由唯一时钟触发。

目前大多数综合器不能综合采用Verilog HDL描述的异步状态机。异步状态机是没有确定时钟的状态机,它的状态转移不是由唯一的时钟跳变沿所触发。


千万不要使用综合工具来设计异步状态机。 因为目前大多数综合工具在对异步状态机进行逻辑优化时会胡乱地简化逻辑,使综合后的异步状态机不能正常工作。 如果一定要设计异步状态机,我们建议采用电路图输入的方法,而不要用Verilog HDL输入的方法。

 

什么是同步状态机什么是异步状态机?

同步状态机:同步状态机的时钟是由同一时钟产生的,通过特殊设计的全局时钟网络将唯一的时钟连接到每个触发器的时钟端,使得时钟沿到达每个触发器时钟端的时刻几乎完全相同。

异步状态机:异步状态机没有确定的时钟,它的状态转移不是由唯一的时钟跳变沿所触发。

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

verilog之状态机详细解释(二) 的相关文章

  • ie11对象不支持此属性和方法 ie11的缓存问题

    更改eclipse的js代码 在ie11上调试 发现调用新更改的方法 在ie11的console输出里 一直提示 对象不支持此属性和方法 点击右上角设置图标 然后点击Internet选项 在常规选项卡里的 浏览器历史记录 点击设置 在弹出的
  • 【分布式系统搭建】Zookeeper完全分布式集群的搭建

    Zookeeper完全分布式集群的搭建 一 集群模式 1 单机模式 用于测试环境 在zoo cfg中只配置一个server id就是单机模式了 2 伪分布式 用于测试环境 在zoo cfg中配置多个server id 其中ip都是当前机器
  • AntV-f2开发文档

    安装 浏览器引入 复制代码 npm 安装 安装 npm install antv f2 save复制代码 引入 const F2 require antv f2 复制代码 上手 步骤 创建 Chart 图表对象 指定图表 ID 指定图表的宽
  • Qt开发经验(转载)

    0 前言说明 本文转载于https qtchina blog csdn net type blog feiyangqingyun的博客 感谢大佬的经验分析 1 开发经验 01 001 010 当编译发现大量错误的时候 从第一个看起 一个一个
  • C++ 常量引用

    黑马程序员C P94 常量引用 感觉这部分有很多内容 但目前我的理解就是在形参前加上const 防止误操作 先占个坑后面再补充
  • 第二章节:期货市场组织结构与投资者

    各组织的性质 职能 形式 组织架构 权利 义务等 期货结算制度 期货投资者种类等 第一节 期货交易所 本节考点 一 期货交易所的性质 宗旨与职能 重点掌握 二 期货交易所的组织结构 重点掌握 三 我国境内期货交易所 重点掌握 一 期货交易所
  • Java中的static关键字解析

    一 static关键字的用途 在 Java编程思想 P86页有这样一段话 static方法就是没有this的方法 在static方法内部不能调用非静态方法 反过来是可以的 而且可以在没有创建任何对象的前提下 仅仅通过类本身来调用static

随机推荐

  • HDU-7304 2023“钉耙编程”杭电多校赛(3)Out of Control

    2023 钉耙编程 中国大学生算法设计超级联赛 3 Out of Control 题目大意 有 n n n个数 x 1 x
  • 区块链三加一:深度论区块链的联盟链意义与作用

    随着区块链技术的发展 越来越受个人及企业的关注 而和区块链联系最为紧密的 恐怕就是金融行业了 然而虽然区块链大受热捧 但毕竟区块链是属于公有区块链 公有区块链有着其不可编辑 不可篡改的特点 这就使得公有链并不适合企业使用了 毕竟如果某金融企
  • UE4右键菜单(上篇ContentBrowser的补充)

    在上篇中我们讲到拓展我们的ContentBrowser的文件夹右键菜单 看回上篇代码可以发现其实真正起实现拓展 看到效果 的代码就只有一行 在代码中我们可以看到 MenuBuilder 这个东西是可以为我们创建一个菜单的 今天我们继续来改造
  • VOC格式数据集转适用YOLOv8格式

    直接设置VOC数据集的文件夹目录 生成的v8格式数据集存放目录以及标签的名字就行了 直接执行后就会是下面这图这样重新创建一个文件夹存放符合yolov8格式的数据集 yolov8直接加载那个yaml文件就行 我下边只有一类 注意最后的yaml
  • 计算机网络物联网论文,物联网对计算机网络技术发展分析

    摘要 随着科学技术和计算机网络技术的快速发展 物联网行业呈现出了巨大的发展潜力并且不断完善 这几年在物联网概念的强力刺激下 很多的公共服务和商业服务也加入到这一技术的应用当中 计算机网络是构成物联网的基础 所以计算机网络技术的发展和物联网是
  • 前端学习之常见标签的使用(2)

    目录 h标签 p标签 br标签 字符实体 img标签 a标签 mailto链接 base标签 锚点 div span video H5新增 audio H5新增 h标签 h标签 标题标签 在HTML中 一共有六级标题标签 h1 h6 在显示
  • 类的分文件编写

    类的分文件编写 point h 1 在开头加上以下代码 pragma once 防止头文件重复包含 include
  • 【Cadence】virtuoso Layout复制版图链接到新的原理图

    稍微记录一下备忘 需求描述 1 假设cell1中含有schematic1和layout1 2 现复制cell1到cell2 3 修改cell2中的schematic2后 需要相应地修改layout2 4 如果打开layout2 会发现链接到
  • 【操作系统】王道考研 p59-60 减少延迟时间的方法、磁盘的管理

    减少延迟时间的方法 磁盘的管理 以下是减少延迟时间的方法的内容 前情回顾 简而言之 如果要读写逻辑上相邻的盘片会延长时间 因为读写完一个盘片后要处理一段时间 处理完已经转过想要读的下一个盘片了 磁盘地址结构的设计 减少寻道时间的方法 物理地
  • mac上使用IntelliJ IDEA运行项目

    一 Mac OSX系统下安装Tomcat 1 下载Tomcat官方下载地址 2 解压Tomcat到目录 Library 中 并把文件夹名由 apache tomcat 6 0 16 改为 Tomcat 3 打开 应用程序 Applicati
  • vue3 中的 toRefs 是什么? 什么时候用?

    定义 toRefs可以将对象 只能接收rective对象 中的属性变成响应式 正常reactive对象数据也是响应式的 如果用toRefs解构出去会更加方便 什么时候用 数据量如果很多 我们一般会用解构来简化代码 那么在vue3 中如果使用
  • 数字电路的时钟(1)-- 时钟抖动和分类

    时钟抖动通常分为时间间隔误差 Time Interval Error 简称TIE 又叫相位抖动 周期抖动 Period Jitter 和相邻周期抖动 cycle to cycle jitter 三种抖动 TIE又称为phase jitter
  • 华为OD机试 - 生日礼物(Java)

    题目描述 小牛的孩子生日快要到了 他打算给孩子买蛋糕和小礼物 蛋糕和小礼物各买一个 他的预算不超过x元 蛋糕cake和小礼物gift都有多种价位的可供选择 请返回小牛共有多少种购买方案 输入描述 第一行表示cake的单价 以逗号分隔 第二行
  • IDEA类和方法的模板注释

    2 1 修改类注释模板 在File gt Settings gt Editor gt File and Code Templates下分别修改Class Interface Enum等注释模板 Class模板部分修改如下 其余的举一反三进行
  • Java字符串左移右移动

    public class MoveTheKnumber public static void main String args String startStr ABCDEF System out println getKnumber lef
  • python plt 绘图详解(plt.版本)

    文章目录 一 plt介绍 二 安装与导入 三 使用说明 1 使用plt plot与plt show绘制并显示图像 1 曲线颜色 color 简写为 c 2 点型 标记marker 3 线型 linestyle 简写为 ls 4 剩余参数说明
  • 基于matlab轴的优化设计,基于MATLAB的转轴可靠性优化设计

    科 技 天 地 56 INTELLIGENCE 基于 MATLAB 的转轴可靠性优化设计 上海理工大学管理学院 郑 红 摘 要 基于 MATLAB 的可靠性优化设计是应用 MATLAB 软件 在优化设计中将设计参数作为随机变量 以产品的可靠
  • 整理了60个 Python 实战例子,拿来即用!

    人生苦短 我用 Python 大家好 最近有一些朋友问我有没有一些 Python 实战小案例 今天我整理排版了一遍 给大家分享一下 喜欢记得点赞 收藏 关注 整理了60个Python小例子 拿来即用 整理了60个 Python 实战例子 拿
  • Ubuntu系统下安装微信

    安装微信实现截图发送图片功能 1 打开终端输入命令 更新软件源 sudo apt get update 2 输入以下命令 一定注意 O 中间是大写字母O 不是0也不是小写o wget O https deepin wine i m dev
  • verilog之状态机详细解释(二)

    一 有限状态机设计的一般步骤 1 逻辑抽象 得出状态转换图 就是把给出的一个实际逻辑关系表示为时序逻辑函数 可以用状态转换表来描述 也可以用状态转换图来描述 这就需要 分析给定的逻辑问题 确定输入变量 输出变量以及电路的状态数 通常是取原因