网站搜索:
第1节 有限状态机(FSM)设计
文章出处:与非网
更新于2008-05-18 02:52:09

第1节 有限状态机(FSM)设计

  •  有限状态机是重要的逻辑设计方法,通过状态转移图可以将复杂的控制时序分解为状态之间的转换关系。
  • 状态机类型:
    --Moore型:状态机的输出仅是当前状态的函数,且仅在时钟跳变时发生变化;
    --Mealy型:状态机的输出是当前状态和当前输入的函数,任何输入信号的变化都可能引起输出信号的变化,不与时钟同步。
  • 状态机的编码:
    --二进制编码 vs. One-Hot编码
        --例:4个状态
            -二进制编码:00, 01, 10, 11(或格雷码等)
            -One-Hot编码:0001, 0010, 0100, 1000
    --二进制编码使用较少的触发器和较多的组合逻辑;适用于CPLD和小型状态机设计;
    --One-Hot编码使用较多的触发器和较少的组合逻辑;适用于FPGA和大型状态机设计;
    --可通过设置软件的选项来选择状态机编码;
  • 有限状态机设计的方法有两大类:
    --将状态转移和状态操作和判断写在一个模块里;
    --将状态转移写成一个单独的模块,将状态的操作和判断写到另一个模块中;
  • 状态机较复杂时,后者是比较好的设计方式。
    --便于阅读、理解、维护;
    --状态转移是用寄存器实现的,是同步时序部分;状态的判断是组合逻辑;
        --利于综合工具优化代码;
        --利于用户添加时序约束;
        --利于布局布线软件对设计的实现。
  • 一个健壮的状态机应该具备初始化状态和默认状态(缺省状态);
    --当芯片加电或复位后,状态机应该能够自动将所有判断条件复位,并进入初始化状态;
    --状态机应该有一个默认状态,当转移条件不满足或状态发生突变时,保证逻辑不会陷入死循环。这就要求尽量使用完备的条件判断语句。
        --VHDL中,使用case语句时,要用when others建立默认状态,使用if…then…else语句时,用else指定默认状态;
        --Verilog中,使用case语句时,要用default建立默认状态,使用if…else语句时也要完备。
  • 指定默认的输出值:
    --能够防止无意生成的锁存器;
    --输出经过一个寄存器,以获得更好的时序环境;
  • 状态机输出逻辑复用
    --如果在状态机中有多个状态都会执行某项操作,则可以在状态机外部定义这个操作的具体内容,在状态机中仅仅调用这个操作即可。
    --相当于前面提到的资源共享。

  


<<上一节  下一节>>



关于OpenHW | OpenHW使用说明 | FAQ | 相关法律 | 版权声明 | 网站地图
联系邮件:xiaoquan@eefocus.com  联系电话: 010-58859035-8012
Powered by eefocus.com