如何写好状态机

2024-08-26 00:52
文章标签 状态机

本文主要是介绍如何写好状态机,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

如何写好状态机


文章目录

  • 如何写好状态机
  • 前言
  • 一、状态机的编码方式
  • 二、状态机编码
  • 三、使得综合工具能识别
  • 总结


前言

标准状态机分为两种

  • 摩尔moore:状态机输出只和当前状态值有关系
  • mealy:状态输出和当前有关还和输入有关

状态机可能会遇以下几个问题:

  • 状态转换的时候出现过渡状态
  • 进入非法状态
  • 器件不同,综合出来的情况不同
  • 占用资源过多

一、状态机的编码方式

独热码:每一个状态分配一个触发器,一个bit就是一个状态
顺序码:二进制编码。转换过程中出现过过渡状态:不同bit的反转时间不一致,当值出现不期望的数值。如果没有该状态,就会进入非法
格雷码:相邻只有一个变化。如果当前状态跳转方向多于一个,那么格雷码就没优势了

二、状态机编码

  • 一段
  • 二段
  • 三段
  • 两个都是时序逻辑的二段

三、使得综合工具能识别

tip:让综合工具识别了,才能被优化

原则:

  • 有默认值
  • 算法逻辑和数据路径分离
  • 不要在状态机跳转的逻辑中用太多运算,或者把这个运算放在外面去用
  • 使用简单的复位机制,用复杂了综合工具不能识别

总结

状态机的注意事项有两个,一个是避免出现非法状态(编码设计、状态切换的布局布线,即组合逻辑和计算影响切换速度,导致时序不满足,出现过度状态),另一个是资源使用。

思考状态机的不同段式的结构:编码状态机内部跳转减少跳转过程的组合逻辑、让综合工具能识别到这些来考虑

这篇关于如何写好状态机的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1107087

相关文章

STM32F4按键状态机--单击、双击、长按

STM32F4按键状态机--单击、双击、长按 一、状态机的三要素二、使用状态机原因2.1资源占用方面2.2 执行效率方面:2.3 按键抖动方面: 三、状态机实现3.1 状态机分析3.1 程序实现 百度解析的状态机概念如下 状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作、完成特定操作的控制中心。有限状态机简写为FSM(

Spring 状态机

文章目录 使用 Spring 状态机构建订单处理系统什么是 Spring 状态机?示例场景:订单处理系统步骤 1: 添加依赖步骤 2: 定义状态和事件步骤 3: 配置状态机步骤 4: 使用状态机步骤 5: 测试状态机Spring 状态机原理详细说明核心概念实现机制 使用 Spring 状态机构建订单处理系统 在构建复杂的业务流程时,状态机是一种强大的工具。它帮助我们定义状态、

【C++ 前缀和 状态机dp】2826. 将三个组排序

本文涉及的基础知识点 C++算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 C++动态规划 LeetCode2826. 将三个组排序 给你一个整数数组 nums 。nums 的每个元素是 1,2 或 3。在每次操作中,你可以删除 nums 中的一个元素。返回使 nums 成为 非递减 顺序所需操作数的 最小值。 示例 1: 输入:nums = [2,1,3,2,1] 输

C++ 有限元状态机

测试  #include <iostream>#include "state_machine.h"class Context {public:char input;};class TurnOn : public sm::Event<Context> {public:bool triggered() {if(context->input=='1') {std::cout << "switc

Unity教程(十三)敌人状态机

Unity开发2D类银河恶魔城游戏学习笔记 Unity教程(零)Unity和VS的使用相关内容 Unity教程(一)开始学习状态机 Unity教程(二)角色移动的实现 Unity教程(三)角色跳跃的实现 Unity教程(四)碰撞检测 Unity教程(五)角色冲刺的实现 Unity教程(六)角色滑墙的实现 Unity教程(七)角色蹬墙跳的实现 Unity教程(八)角色攻击的基本实现 Unity教程

PCIe物理层LTSSM状态机解析

目录 1、Detect 2、Polling 3、Configuration 4、L0 5、Recovery 6、L0s/L1/L2 7、Hot Reset 8、Disabled 9、Loopback 在PCIe链路可以正常工作之前,需要对PCIe链路进行链路训练,在这个过程中,就会用LTSSM状态机。LTSSM全称是Link Training and Status St

基于smach的状态机设计【1】

smach是ros中的一种状态机的功能包,这里面我们将来深入认识一下这个状态机的运行和各种动作的设计过程。 安装samch的相关内容: sudo apt install ros-noetic-executive-smach* 首先我们来看一下官方的例子 去git所有的源码来: git clone https://github.com/lizhiwei0304/ROS_SMACH_TUTOR

Unity3D 大型游戏 MOBA类手机游戏 状态机在游戏中的应用(18)

本文固定链接 http://blog.csdn.net/u013108312/article/details/78824724 状态机在游戏中应用还是比较广泛的,在我以前博客中关于游戏框架中有介绍,感兴趣的朋友可以去看看。那个框架是企鹅公司里面的游戏框架,好了废话不多说,直接进入今天的主题,状态机的应用。 using UnityEngine;using System.Collections

经验笔记:状态机与下推自动机的理解与应用场景

经验笔记:状态机与下推自动机的理解与应用场景 引言 在软件开发和计算机科学领域,状态机和下推自动机是两个重要的概念,它们帮助我们理解和设计各种类型的系统。本文将简要介绍这两种模型,并详细探讨它们的应用场景。 状态机概述 状态机是一种数学模型,它通过一组状态、事件、转移条件以及动作来描述一个系统的动态行为。状态机的核心在于它的状态转换机制,即在给定条件满足时,系统如何从一个状态转移到另一个状

状态机实践入门

状态机实践入门 原文转自:http://www.cnblogs.com/pang123hui/archive/2012/02/04/2338275.html  不用怀疑,单片机的万能语言就是状态机。还希望大家不要条件反射式的看到状态机就 以为我要讲什么VHDL的东西——状态机是一种思维模式,是计算机理论的立足之本(不 相信请参考清华大学出版社的《自动机理论与应用》)——因此状态