【代码】状态机从一段式到三段式

11 篇文章 0 订阅
1 篇文章 0 订阅

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

怎么快速把FPGA代码开发中的,二段式和三段式状态换成一段式状态机?


提示:以下是本篇文章正文内容,下面案例可供参考

一、FSM(Finite State Machine)

怎么快速把FPGA代码开发中的,二段式和三段式状态换成一段式状态机?
二段式:状态切换用时序逻辑,次态输出和信号输出用组合逻辑。
三段式:状态切换用时序逻辑,次态输出用组合逻辑,信号输出用时序逻辑。信号输出的pr0cess中,case语句用next state做条件,可以解决比组合逻辑输出慢一拍的问题。
有时候判断次态需要用到计数器怎么办呢(计数器是时序电路,用组合逻辑是实现不了的)?方法是独立实现一个计数器,而在组合逻辑里用使能信号(或清除、置位等)来控制它。

one-process FSM——寄存器输出

one-process FSM——寄存器输出
一段式

mealy状态机比Moore状态机好

米利状态机比摩尔状态机好mealy can do more than moore

Mealy状态机:时序逻辑只的输出不仅取决于当前状态,还与输入(next_state)有关。
mealy:使用Mealy机器有时会导致状态机的状态比Moore机器所需的状态少。这是因为它们可以消除对某些过渡状态的需求。

对输出信号Dout的赋值被移到了if语句的内部。同时,State信号发生变化。这样做的一个优点可以从下面的波形中看到。状态和输出信号同时变化。因此,使调试更容易。

二、two-process state machine——一个用来同步synchronous(控制state跳转到next_state)一个用来组合combinatorial:

虽然这是一个摩尔机,但状态信号将与输出信号对齐。这是由于组合过程设置了额外的NextState信号。在下面的波形中,我们可以看到State和Dout信号是同步的,而NextState信号比它们早一个时钟周期。

delta周期是VHDL模拟器用来模拟组合过程中信号值变化的零时间单位。根据下游数据路径中的逻辑,这可能会影响合成的网络列表。或者它可能导致模拟中的行为与实现设计的行为不同。
(2)在这种双进程状态机的变体中,没有NextState信号。顺序进程完全控制状态信号。组合过程对状态变化敏感,并相应设置输出信号。

也是有delta_cycle(moore_type state)
(3)我们让同步进程控制当前状态信号以及输出信号。这个实现在逻辑上等同于本文开头提到的Moore类型的单进程FSM。通过将状态和输出信号同步到时钟,我们可以确保它们将在寄存器中实现,而不管下游逻辑看起来如何。此外,在状态和输出信号之间没有增量周期延迟。

三、three-process state machine

一些工程师更喜欢将代码分成尽可能多的进程。如果可能的话,每个信号都有自己的处理过程。这种分而治之的策略当然有其优势。流程是一个设计单元,使它们尽可能特殊化是有意义的。

这种Moore类型的FSM使用下一状态逻辑。因此,State和Dout信号看起来是同步的,而Dout信号实际上被一个delta周期延迟了。
它本质上与本文中提到的第一个双进程FSM相同,但是输出信号现在有了自己的组合过程。

  • 24
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你的信号里没有噪声

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值