时间:2024-07-26 来源:网络搜集 关于我们 0
EDA课程实验安排:
基于FPGA设计实现自动售货机
设计思想:
状态机设计,如何在FPGA中实现状态机
今天咱们大家一起来学习状态机的设计思想,关于状态机基础设计思路咱们接下来一步步讲解;
如何在FPGA中实现状态机
状态机往往是FPGA 开发的主力。选择合适的架构和实现方法将确保您获得一款最佳解决方案。
FPGA 常常用于执行基于序列和控制的行动, 比如实现一个简单的通信协议。对于设计人员来说,满足这些行动和序列要求的最佳方法则是使用状态机。状态机是在数量有限的状态之间进行转换的逻辑结构。一个状态机在某个特定的时间点只处于一种状态。但在一系列触发器的触发下,将在不同状态间进行转换。
理论上讲,状态机可以分为Moore 状态机和Mealy 状态机两大类。它们之间的差异仅在于如何生成状态机的输出。
Moore 状态机的输出仅为当前状态的函数。典型的例子就是计数器。
而Mealy 状态机的输出是当前状态和输入的函数。典型的例子就是Richards 控制器。
MOORE 和MEALY:应该选择哪个?
实现Moore 状态机还是Mealy 状态机,取决于状态机需要实现的功能,以及特定的反应次数要求。两种状态机之间的最大差别在于状态机如何对输入做出反应。在输入和设置的适当输出之间,Moore 状态机一般有一个时钟周期的延迟。这就意味着Moore 状态机无法对输入变化立即做出反应,这点在图3中可以清楚地看到。
而Mealy 状态机则能够立即对输入做出反应,这通常意味着:实现相同的函数,Mealy 状态机比Moore状态机需要更少的状态。Mealy 状态机的不足之处就是在与另一个状态机进行通信时,如果输出出乎意料地严重依赖于其它事件的序列或时序,就可能会发生紊乱情况。
状态机编码:
状态变量存储在触发器中,使用下一时钟边缘上的下一状态进行更新(即使没有状态变化也是如此)。如何使用触发器来表示状态值具体取决于状态的数量和是否选择用某种特定的方法来管理综合工具。状态编码最常见的三种类型是:
• 顺序码——状态编码遵循传统的状态二进制序列。
• 格雷码——除了状态编码使用格雷码,且状态编码串
之间只有一个位变化外,其它基本与顺序编码方法类似。
• 独热码——这种方法在状态机中为每一种状态分配一个触发器。只有一个触发器当前设置为高位,其余均设置为低位。故称为“独热”。
不过对于大多数应用来说,只需要确保状态机能够妥善地处理未使用的状态并在进入非法状态时能够正确地恢复。要做到这一点有两种主要的方法。
第一种方法是使用综合工具实现一个安全的状态机。综合工具通常会插入额外的逻辑,用于检测非法状态并将状态机返回到有效状态。
第二种方法是加强对实现逻辑的控制,声明所有2 的幂次方状态机的状态,并使用另一属性来确保即便是在没有入口条件下,2 的幂次方状态机的状态也不会被优化掉。这意味着除非出错(单粒子翻转等),状态机内部的任何条件都不会进入状态。下面的代码显示了通过使用属性以防止清除未使用的状态。
诸位同学,在以上咱们了解了状态机:
1,什么是状态机。
2,状态机的分类。
3,状态机的编码风格。
4,状态机在整个FPGA设计中的重要性。
5,对于一名成熟的FPGA工程师来讲,运用状态机设计思想很关键,状态机就是FPGA设计的灵魂体现。
今天围绕工程师带领下,我们设计自动售货机实验,通过此实验来掌握学习状态机设计思想和方法。
设计思路:
1,状态机设定,状态转移图。
2,用那种状态机(Moore 状态机还是Mealy状态机)来设计自动售货机。
3,设定自动售货机的跳转条件。
4,一瓶饮料的价位设定,包括找零,整取,出饮料。
简而言之,安全高效的状态机设计对于任何使用FPGA的工程师而言都是一项重要技能。选择Moore 状态机、Mealy
状态机还是混合机取决于整个系统的需求。无论选择哪种类型的状态机,充分掌握实现方案所需的工具和技巧,将确保您实现最佳解决方案。
大家开始动手做实验,跟着我的设计一步步来,先带着大家编写基于FPGA设计实现自动售货机的verilog代码,在做实验过程中有什么疑问,遇到问题及时提出,工程师给予解决。