1、状态机编程,FSM设计方法,分析控制器设计指标,建立系统算法模型,即状态转换图; 分析被控对象的时序,确定控制器的有限状态机的各个状态及输入、输出条件; 应用VHDL语言完成状态机的描述。,FSM分类,Moore型:输出信号仅与现态相关 Mealy型:输出信号与现态和输入相关,DFFs,Output Comb. Logic,Feedback Comb. Logic,DFFs,Output Comb. Logic,Feedback Comb. Logic,Moore,Mealy,现态,次态,输入,输出,现态,次态,输出,输入,FSM 构成,FSM用来解决一般时序逻辑电路问题,包括同步/异步时序逻
2、辑 状态寄存器 当前状态(现态)寄存器 组合逻辑电路 下一状态(次态)组合逻辑 输出组合逻辑,Moore和Mealy状态机描述的区别就在于输出逻辑进程,例子:0101序列检测码,例子:0101序列检测码,例子:0101序列检测码,vhdl语言描述FSM的建立过程,定义状态机的状态定义状态变量描述状态机的进程,定义状态机的状态,在使用状态机之前应该定义状态变量的枚举类型,可以定义在状态机描述的源文件中,或者是专门的程序包中。 例子:TYPE state IS (state1,state2);,定义状态变量,定义两个状态机变量:当前状态和次态,其中当前状态描述的是一组寄存器,而下一状态描述的是组合
3、逻辑。 例:signal current_state:state;signal next_state:state;,描述状态机的进程,状态机的描述方式:三进程、二进程、单进程一般采用三个进程来描述状态机描述状态机寄存器的时序进程描述次态产生逻辑的组合逻辑进程描述输出组合逻辑进程,易出错, 可读性差, 不利于优化,状态机寄存器的时序进程,process(reset,clk)beginif reset=1 thencurrent_state=初始状态;elsif rising_edge(clk) thencurrent_state=next_state;end if; end process;,一
4、定要有复位信号,否则状态机处于随机状态,无法开始正常工作,FSM的复位,同步复位 双进程状态机 在第1个进程的开始处用IF THEN 语句判断RESET,在其后的ELSE语句里用CASE语句定义状态转换 或者在第2个进程里定义同步复位 单进程状态机 进程里定义同步复位 异步复位 双进程状态机 在第2个进程里定义异步复位 单进程状态机 进程里定义异步复位,CASE_WHENIF THENELSEPROCESS 1,CLKEVENT AND CLK=1PROCESS 2,次态,现态,输入,输出,次态转移逻辑进程,process(current_state,其他输入信号)beginnext_stat
5、e . next_state . next_state=某个状态; end case; end process;,次态转移逻辑进程,在case语句之前,给nenxt_state赋一个缺省值: next_state=current_state;其意义在于:当case语句中决定下个状态的逻辑比较复杂时,就不用给所有的情况赋值,不关心的情况就保持原状态。,输出逻辑进程,process(current_state,其他输入信号)beginoutput output output=某个值; .end case; end process;,Mealy机就需要其他输入信号,这些信号和当前状态共同决定输出信号
6、; Moore机则不需要,其输出只与当前状态有关。,Stmch1.vhd,library ieee; use ieee.std_logic_1164.all; entity stmch1 isport(clk, in1, rst: in std_logic; out1: out std_logic); end stmch1; architecture behave of stmch1 istype state_values is (sx, s0, s1);signal state, next_state: state_values; beginprocess (clk, rst)beginif
7、 rst = 1 thenstate = s0;elsif rising_edge(clk) thenstate = next_state;end if;end process;,process (state, in1) begin - set defaults for output and state out1 if in1 = 0 then out1 if in1 = 0 then out1 next_state = sx; end case; end process; end behave;,Comb Logic,DFFs,in1 state clk rst,out1 next_stat
8、e,s0/0,s1/1,input=0,Reset=1,input=0,input=1,input=1,statmach.vhd,Library IEEE ; use IEEE.std_logic_1164.all ;ENTITY statmach ISPORT( clk : IN BIT;input : IN BIT;reset : IN BIT;output : OUT BIT); END statmach;,ARCHITECTURE a OF statmach ISTYPE STATE_TYPE IS (s0, s1);SIGNAL state : STATE_TYPE; BEGINPROCESS (clk,reset)BEGINIF reset = 1 THENstate state IF input = 1 THENstate = s0;ELSEstate = s1;END IF;END CASE;END IF;END PROCESS;output = 1 WHEN state = s1 ELSE 0; END a;,s0/0,s1/1,input=1,input=0,Reset=1,