0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

状态机的设计方法和三段式描述

冬至子 来源:梧桐芯语 作者:孙荣荣 2023-07-13 16:11 次阅读

通过数据路径的逐步穿透,设计模块,是一种常见的设计方法。而从另外一种常规思想来看,电路的另一种表现形式,是状态的转换。往往在设计有模式变换,且组合关系较复杂的电路时,使用状态机描述电路,比数据路径穿透的方法更加直接。

比如说,某个电路存在S0、S1、S2、S3、S4、S5六种状态,电路上电后处于一个特定的状态,只有当发生输入变换时,才会切换到其他的状态。这种电路,直观上无法用数据路径穿透设计,但如果使用状态机设计,则会简单很多。

状态机设计,一般先把3种类型的信号(状态)整理出来:

  1. 状态信号,表示当前状态机处于什么状态下
  2. 条件信号,状态机在不同条件下的跳转,需要不同的信号
  3. 输出信号,根据状态的不同,输出相应的结果

接着就可以把状态机的状态变化描述图整理出来,如下图所示:

图片

以上状态机的状态信号一共6种,S0~S5,而条件信号为a。可以看出不同状态下,a的变换决定了状态的下一次跳转会向哪个方向跳。这里有2个必须理解的点:

  1. a没有变换的时候,无论多少个时钟信号,状态都会保持不变
  2. a的到来应该是脉冲型信号(单个时钟周期),以确保状态的变换是按照时钟周期进行的。

Z则是输出信号,在不同状态下,其输出会有所不同。

根据以上状态图的描述,我们可以开始用Verilog HDL进行电路描述了(状态机跳转图,可视为电路图)。一般的状态机描述,我们称为三段式描述,实际上就是刚才说的,分别对三种不同信号的描述。

第一部分是状态跳转的描述,采用时序逻辑与组合逻辑分离的描述方式,将状态信号看成寄存器

1.jpg

以上状态的定义,使用的是顺序编码,如果根据实际情况,采用格雷码设计,跳转频率高的尽量减少跳转,则可以相应减少一些功耗。

接着第二部分,描述条件对状态的影响,属于组合逻辑,一般来说我们用case语句结构来实现,需要注意的是,必须加上default条件,其实就是说其他条件不满足的话,nextstate就保持在上一个状态。如果没有default语句,且条件不完整,则synthesis工具会生成一个锁存器来实现case语句,那样的话,与我们的设计初衷就不同了,要避免:

1.jpg

条件语句,其实也可以用数据路径来设计,但那样的话就会有优先级出现,需要根据实际情况来分析。

第三部分,就是根据状态的变换,为输出值Z赋值。根据状态图分析,只有处于S5的时候,Z才输出1'b1,否则都是1'b0:

1.jpg

所以输出仍然可以使用数据路径描述方式。

由此三段式描述状态机的方式,就完成了。至于条件a怎么来的,输出Z又给到哪里去了,该如何进一步的设计,就需要各位看官自己吸收理解了。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5377

    浏览量

    121394
  • 变换器
    +关注

    关注

    17

    文章

    2110

    浏览量

    109630
  • 锁存器
    +关注

    关注

    8

    文章

    915

    浏览量

    41682
  • 状态机
    +关注

    关注

    2

    文章

    492

    浏览量

    27690
  • HDL语言
    +关注

    关注

    0

    文章

    47

    浏览量

    8962
收藏 人收藏

    评论

    相关推荐

    普通三段式充电原理

    普通三段式充电原理   普通三段式铅酸蓄电池充电器,充电过程如下: ① 恒流充电阶段,充电器充电电流保持恒定,充入
    发表于 11-16 14:24 2.9w次阅读

    【Z-turn Board试用体验】有限状态机三段式描述方法(转载)

    ;(2)二段式:用两个always模块来描述状态机,其中一个always模块采用同步时序描述状态转移;另一个模块采用组合逻辑判断
    发表于 05-25 20:33

    彻底搞懂状态机(一段式、两段式三段式)!一个实例,三种方法对比看!!!(程序)

    三段式建模描述FSM的状态机输出时,只需指定case敏感表为次态寄存器,然后直接在每个次态的case分支中描述状态的输出即可,不用考虑
    发表于 06-27 22:13

    关于三段式状态机的疑惑,希望有人来为我解答。(新手求罩)

    本人在学习verilog 与状态机时发现有如下疑惑,希望有人能为我解答。如下,是一部分三段式状态机的代码:always@(posedge clk or negedge rst_n)beginif(!rst_n)cstate
    发表于 11-21 10:57

    Verilog三段式状态机描述及模版

    个always完成。三段式建模描述FSM的状态机输出时,只需指定case敏感表为次态寄存器, 然后直接在每个次态的case分支中
    发表于 07-03 10:13

    Verilog三段式状态机描述及模版

    个always完成。三段式建模描述FSM的状态机输出时,只需指定case敏感表为次态寄存器, 然后直接在每个次态的case分支中
    发表于 07-09 01:55

    三段式和四段式耳机的引脚定义

      耳机插座在我们日常生活中是比较常见的一种电子元件,其耳机插座的类型规格也区分有四段式耳机插座、三段式耳机插座等。三段式和四段式耳机的引脚定义如下:    四
    发表于 12-25 15:26

    Verilog三段式状态机描述(转载)

    建模描述FSM的状态机输出时,只需指定case敏感表为次态寄存器, 然后直接在每个次态的case分支中描述状态的输出即可,不用考虑状态转移
    发表于 02-09 09:42 1186次阅读

    关于使用FPGA三段式状态机点好处,你有什么看法?

    三段式描述状态机的好处,国内外各位大牛都已经说的很多了,大致可归为以下点:
    发表于 08-17 11:43 1.6w次阅读
    关于使用FPGA<b class='flag-5'>三段式</b><b class='flag-5'>状态机</b>的<b class='flag-5'>三</b>点好处,你有什么看法?

    基于FPGA实现状态机的设计

    状态机描述方式:一段式状态机、两段式状态机
    的头像 发表于 08-29 06:09 2910次阅读
    基于FPGA实现<b class='flag-5'>状态机</b>的设计

    三段式充电器的主要参数有哪些

    下面以36V/lOAh蓄电池所用的三段式充电器为例,说明三段式充电器的主要参数。
    发表于 04-05 16:49 6023次阅读
    <b class='flag-5'>三段式</b>充电器的主要参数有哪些

    FPGA三段式描述状态机的好处

    先谈谈第二点关于思维习惯。我发现有些人会有这样一种习惯,先用一段式状态机实现功能,仿真ok后,再将其转成三段式,他们对这种开发方式的解释是一段式更直观,可以更便捷的构建功能框架,但是大
    发表于 07-14 14:59 1565次阅读

    三段式状态机编写问题及三段式状态机各部分功能分析

    在 Verilog的江湖里,流传着一,两三段式状态机的传说。它们各有优劣,本文就书写三段式状态机
    的头像 发表于 06-20 10:35 4487次阅读
    <b class='flag-5'>三段式</b><b class='flag-5'>状态机</b>编写问题及<b class='flag-5'>三段式</b><b class='flag-5'>状态机</b>各部分功能分析

    状态机的一段式、二段式三段式的区别

    本篇文章描述状态机的一段式、二段式三段式区别.
    的头像 发表于 08-21 09:25 9276次阅读
    <b class='flag-5'>状态机</b>的一<b class='flag-5'>段式</b>、二<b class='flag-5'>段式</b>、<b class='flag-5'>三段式</b>的区别

    三段式距离保护和三段式电流保护原理是相同的,它们有哪些区别?

    三段式距离保护和三段式电流保护原理是相同的,它们有哪些区别?  三段式距离保护和三段式电流保护是电气保护系统中常用的两种保护方式,它们在基本原理上是相同的,采用相同的
    的头像 发表于 09-18 09:57 5639次阅读