通常,当我们创建电子项目时,我们试图模仿或创建一系列事件。大多数时候,我们希望事件发生的顺序,以及它们发生的时间取决于当前正在发生的事情和一系列外部因素。例如,詹姆斯·科尔文写过西蒙说游戏.在西蒙说,你要么继续下一个挑战,要么失去,取决于你是否正确地执行了行动以及之前的行动。
这是顺序逻辑,并且该示例称为状态机。如果你不懂顺序逻辑,读读这篇文章.状态机是FPGA设计中的一个重要构件。在状态机中,有状态寄存器,它存储当前状态,也就是我前面的例子中的当前事件。如果你不知道收银机是什么,rEAD这篇文章有关寄存器.进入状态寄存器的是下一个状态逻辑,该逻辑根据当前状态和输入指示下一个状态。从状态寄存器中产生当前状态,它也导致输出逻辑。这决定了什么信号具有什么值,取决于当前的状态。您可以在下面看到状态机的框图。框图是将代码和想法分成块的可视化工具,就像流程图一样。
下一个状态逻辑可以用称为状态图的东西表示。例如,我已经包含了我正在制作的抓娃娃机的步进电机控制器的状态图。抓娃娃机是街机里的一个经典游戏,你可以控制一个抓娃娃机试图从盒子里拿一个奖品。
下面你可以看到步进电机控制器的状态图。蓝色的圆圈代表的是他们在步进电机上设定高的4个信号中的哪一个。双色蓝色圆圈表示开始状态。这是复位信号的状态。系统将在此位置自动启动。每个州的紫色文本是输出信号。箭头上的文字表明是哪个信号使机器朝那个方向移动。
为了演示状态图是如何工作的,我将跟踪一条路径。我要跟踪的路径在下面的状态图中用绿色虚线表示。
从状态SIG0开始,电机将关闭,因为启用为0以获得该状态。然后,如果我们转动启用,我们将遵循绿色虚线箭头到Sig1。在SIG1中,电机将逐步一步,因为其中一个引脚现在很高。然后,如果我们离开启用并确保方向为1,我们将移动到Sig2,下一个引脚将高。这将沿同一方向迈出另一个步骤。然后,如果使能和方向保持相同,我们将移动到SIG3,然后移动到SIG4。步骤的方向取决于引脚的方向。只要知道在DigRam中进入这个方向是一个步骤的一个方向,另一个方向是另一个方向。然后,如果我们关闭启用,我们将返回到电机关闭的SIG0。
现在您已经理解了状态机背后的概念,请继续关注如何编写状态机。
有关状态图的更多信息,请访问学习网站页面.
要学习如何使用步进电机与FPGA使用这个状态图,请查看我的教程.

状态机是一个很好的概念,因为它们澄清了程序的流程。由于自动代码生成器可以绘制状态图,因此也减少了代码错误
嗨wojtekss,
我不知道有自动的代码生成器,肯定会派上用场。我发现即使没有那个,也有一个标准结构来代码有助于最小化错误。
我在推特上分享了这个页面的链接https://twitter.com/JKowal7/status/693549741876051968
在哪个软件上绘制状态图。