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又给到哪里去了,该如何进一步的设计,就需要各位看官自己吸收理解了。

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

    关注

    30

    文章

    5037

    浏览量

    117764
  • 变换器
    +关注

    关注

    17

    文章

    2027

    浏览量

    108399
  • 锁存器
    +关注

    关注

    8

    文章

    747

    浏览量

    41042
  • 状态机
    +关注

    关注

    2

    文章

    486

    浏览量

    27184
  • HDL语言
    +关注

    关注

    0

    文章

    46

    浏览量

    8871
收藏 人收藏

    评论

    相关推荐

    【labview毕业论文】基于labview的三段式距离保护研究

    保护试验系统开发。主要是三段式距离保护试验系统的软件设计方案及设计方法,分模块介绍了保护系统的软件构成,以及功能结构、可视效果等。[hide] [/hide]`
    发表于 12-31 10:32

    问个关于状态机的问题

    问个关于状态机的问题,书上说的三段式状态机的第三段,同步时序的状态输出部分的状态到底是当前态还是
    发表于 09-22 20:42

    不同形式的状态机占用资源问题

    最近在CPLD里面做了一个4通道的模块,每个模块内都有一个状态机,开始我是用的一段式状态机写发,资源不够,然后我将状态机的写法改为3段式,(
    发表于 01-21 14:07

    【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

    三段式过电流保护的模型

    我通过SIMULINK建立三段式过电流保护的模型,如下所示,但是仿真难结果不对,请大神指点一下哪里错了。
    发表于 06-30 17:23

    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 972次阅读

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

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

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

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

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

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

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

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