zoukankan      html  css  js  c++  java
  • 状态机的常见问题

    状态机的常见问题

    一、状态机的常见问题

    标准的状态机包括摩尔状态机和米勒状态机:摩尔状态机的输出只与当前状态有关,而米勒状态机则和输入和状态都有关。状态机能够稳定工作,但是占用资源过多。在摩尔状态机中的时钟偏斜可能会导致状态转换时会出现过渡状态(状态转化出现时序问题),米勒状态机由于输出异步,更加容易出现时序问题。

    二、选择状态机的编码方式

    (1)状态机的定义

    //使用逻辑向量定义状态
    signal current_state: std_logic_vector(1 downto 0);
    signal next_state: std_logic_vector(1 downto 0);
    
    //定义方法二
    type mystate is (st0,std1,std2,std3);
    signal current_state,next_state:mystate;
    
    
    //定义方法三
    constant std0: std_logic_vector(1 downto 0): ="00";
    constant std1: std_logic_vector(1 downto 0): ="01";
    constant std2: std_logic_vector(1 downto 0): ="10";
    constant std3: std_logic_vector(1 downto 0): ="11";
    
    signal current_state,next_state:std_logic_vectro(1 downto 0);

    (2)编码方式

    顺序码:使用二进制序列

    格雷码:二进制数每次只改变一位

    读热码:为状态机中每个状态分配一个触发器,只有当前设置为有效,其他设置均无效。

    三、合理选择单进程和多进程来设计状态机

    单进程使用的不多,主要是可读性较差。单进程状态机一般需要在组合逻辑输出后加上一级时序逻辑缓存。多进程中,双进程的输出描述和某个状态描述混合在一起。三进程中,可以分为组合逻辑输出和时序逻辑输出两种情况。不推荐组合逻辑输出,容易和状态转移的组合逻辑产生毛刺问题。一般使用时序逻辑输出比较好·。

    四、设计工具能够实现的状态机

    设计状态机的基本原则:

    给输出分配默认值,放置产生锁存器;

    状态的状态逻辑和输出逻辑分立;

    多个状态需要使用某个计算逻辑,采用调用形式。

    使用简单的复位逻辑实现状态机的上位状态。

    五、小结

    状态机需要考虑状态转化和逻辑输出,分别设计后可以有效提高数据的可读性和设计的稳定性。具体的操作还是需要在实际的操作中实现。

  • 相关阅读:
    Ajax和Jsonp的工作原理,以及区别。
    git与GitHub
    Cookie的作用以及封装的方法
    关于angular-route后获取路由标签的一些问题
    javascriptDOM节点
    字符串转化为对象的方法
    将"goOd gooD stUdy dAy dAy up"每个单词的首字母转换成大写其余还是小写字母
    利用HashSet对list集合去重
    集合之Iterator迭代器
    java常用API之System类
  • 原文地址:https://www.cnblogs.com/electricdream/p/13646481.html
Copyright © 2011-2022 走看看