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之状态机详细解释(二) 的相关文章

  • Jenkins集成部署java项目

    文章目录 Jenkins简介 安装 Jenkins简介 Jenkins能实时监控集成中存在的错误 提供详细的日志文件和提醒功能 还能用图表的形式形象的展示项目构建的趋势和稳定性 官网 安装 在官网下载windows版本的Jenkins 但是
  • 将枚举转换为逻辑

    考虑以下模块声明 module DFF d q CLK RESET parameter W 2 input W 1 0 d input CLK input RESET output logic W 1 0 q endmodule 当 d 和
  • INT201 形式语言与自动机笔记(上)

    Lec1 Overview Alphabet and String 字母表与字符串 Alphabet 字母表 a finite nonempty set of symbols String word a finite sequence of
  • 一个网工(网络工程师)七年的职业血泪史....

    前言 一个工作了七年的老网工 上家公司待了五年 现在这家公司也快三年了 分享一些我自己学习网络安全路上的一些经历 也算是帮大家少走些弯路 一 如何学习网络安全 1 不要试图以编程为基础去学习网络安全 不要以编程为基础再开始学习网络安全 一般
  • 2020年认证杯SPSSPRO杯数学建模C题(第二阶段)抗击疫情,我们能做什么全过程文档及程序

    2020年认证杯SPSSPRO杯数学建模 C题 抗击疫情 我们能做什么 原题再现 2020 年 3 月 12 日 世界卫生组织 WHO 宣布 席卷全球的冠状病毒引发的病毒性肺炎 COVID 19 是一种大流行病 世卫组织上一次宣布大流行是在
  • 2020年认证杯SPSSPRO杯数学建模D题(第二阶段)让电脑桌面飞起来全过程文档及程序

    2020年认证杯SPSSPRO杯数学建模 D题 让电脑桌面飞起来 原题再现 对于一些必须每天使用电脑工作的白领来说 电脑桌面有着非常特殊的意义 通常一些频繁使用或者比较重要的图标会一直保留在桌面上 但是随着时间的推移 桌面上的图标会越来越多
  • MIT_线性代数笔记:复习二

    目录 第二单元主要内容 例题 第二单元主要内容 正交矩阵 Q 用矩阵形式描述正交性质 投影矩阵 P 最小二乘法 在方程无解时求 最优解 Gram Schmidt 正交化 从任意一组基得到标准正交基 策略是从向量 中减去投影到其它向量方向的分
  • 在逻辑中使用单端端口期待差异对?

    我使用的逻辑被设置为需要一个差分对时钟端口 然而 对于一个特定的应用程序 我只能输入一个单端时钟 由于硬件限制 修改逻辑以接受单端时钟不是一种选择 因为涉及许多文件和代码行 有没有办法可以输入单端端口并以某种方式将其馈送到模块的差异对端口
  • 如何获取值数组作为 plusargs?

    如何获取值数组作为参数 我需要从命令行获取一组未定义大小的命令 如何将这些参数放入数组或队列中 Eg CMDS READ WRITE READ N WRITE 它应该被带到一个数组中 value plusargs不支持数组 但支持字符串 看
  • windows 杀死占用端口的程序

    在Windows上 你可以使用以下命令来查找并杀死占用某个端口 如9200 的程序 打开命令提示符 Command Prompt 或者PowerShell 运行以下命令来查找占用9200端口的程序的进程ID PID netstat ano
  • if 语句导致 Verilog 中的锁存推断?

    我正在编写用于合成算法的 Verilog 代码 我对哪些情况可能导致推断锁存器有点困惑 下面是这样的一段代码 虽然它在模拟中工作得很好 但我担心它可能会导致硬件问题 always b1 or b2 b1 map b2 map m1 map
  • 如何在 Verilog 中综合 While 循环?

    我尝试设计一个 Booth 乘法器 它在所有编译器中运行良好 包括 Modelsim Verilogger Extreme Aldec Active Hdl 和 Xilinx Isim 我知道模拟和综合是两个不同的过程 而且只有少数Veri
  • 在 Mac OS X 10.6.8 上用什么来编译和模拟 Verilog 程序?

    作为教学大纲的一部分 我需要模拟 Verilog 程序 但是 我的大学使用 Xilinx ISE 但它不适用于 Mac 因此 请帮助我提供最好的软件以及有关如何安装和使用它们的一些详细步骤 你可以尝试伊卡洛斯 Verilog http iv
  • FPGA大输入数据

    我正在尝试向 FPGA 发送 4 KB 字符串 最简单的方法是什么 是我正在使用的fpga的链接 我正在使用 Verilog 和 Quartus 您的问题的答案在很大程度上取决于将数据输入 FPGA 的内容 即使没有您需要遵守的特定协议 S
  • 标识符必须用端口模式声明:busy。 (Verilog)

    我有如下所示的 Verilog 代码 当我编译它时 我收到以下错误消息 并且代码的第一行突出显示 Error 标识符必须用端口模式声明 busy Code module main clk rst start busy ready cnt s
  • 如何在Verilog中将二维数组中的所有位设置为0?

    我构建了一个 8 2bits 数组来表示 Verilog 中的一块内存 reg 1 0 m 0 7 该存储器有一个复位信号 如果复位为1 则该存储器中的所有位都应重置为0 但是我不知道如何以简洁的方式设置m的所有位 因为如果有数百个内存中有
  • 在测试台中显示信号名称/文字

    是否可以在 Verilog 中引用 显示信号的名称 文字 对于在 Verilog 测试台中创建通用信号检查功能来说 这将是一个有用的功能 我知道使用 display 时 m 将打印信号的范围 是否有显示信号名称的等效项 在 Verilog
  • reg 声明中的位顺序

    如果我需要使用 4 个 8 位数字 我会声明以下 reg reg 7 0 numbers 3 0 我对第一个和第二个声明 7 0 和 3 0 之间的区别感到很困惑 他们应该按什么顺序来 第一个是保留数字的大小 而第二个是保留数字的数量 还是
  • 如何修复实例上的错误:未定义的变量 B?

    我想编译此 Verilog 代码 但在实例中出现错误B模块中的MultiP module error 1 Undefined variable B error 2 near Adder1 syntax error unexpected ID
  • 学习 Verilog 的资源 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我是 Verilog 新手 有人可以推荐学习资源 书籍 视频 博客或任何他们有良好个人经验并帮助他们更

随机推荐

  • 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 逻辑抽象 得出状态转换图 就是把给出的一个实际逻辑关系表示为时序逻辑函数 可以用状态转换表来描述 也可以用状态转换图来描述 这就需要 分析给定的逻辑问题 确定输入变量 输出变量以及电路的状态数 通常是取原因