系列文章目录
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
怎么快速把FPGA代码开发中的,二段式和三段式状态换成一段式状态机?
提示:以下是本篇文章正文内容,下面案例可供参考
一、FSM(Finite State Machine)
怎么快速把FPGA代码开发中的,二段式和三段式状态换成一段式状态机?
二段式:状态切换用时序逻辑,次态输出和信号输出用组合逻辑。
三段式:状态切换用时序逻辑,次态输出用组合逻辑,信号输出用时序逻辑。信号输出的pr0cess中,case语句用next state做条件,可以解决比组合逻辑输出慢一拍的问题。
有时候判断次态需要用到计数器怎么办呢(计数器是时序电路,用组合逻辑是实现不了的)?方法是独立实现一个计数器,而在组合逻辑里用使能信号(或清除、置位等)来控制它。
one-process FSM——寄存器输出
米利状态机比摩尔状态机好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相同,但是输出信号现在有了自己的组合过程。