5.1状态机设计相关语句5.1.2状态机的优势1.状态机克服了纯硬件数字系统顺序方式控制不灵活的缺点;2..由于状态机的结构相对简单,设计方案相对固定3、状态机容易构成性能良好的同步时序逻辑模块;4、与VHDL的其他描述方式相比,状态机的VHDL表述丰富多样、程序层次分明,结构清晰,易读易懂;在排错、修改和模块移植方面也有其独到的好处;5、在高速运算和控制方面,状态机更有其巨大的优势。6、高可靠性
5.1 状态机设计相关语句 5.1.2 状态机的优势 1.状态机克服了纯硬件数字系统顺序方式控制不灵活的缺点; 2.由于状态机的结构相对简单,设计方案相对固定; 3、状态机容易构成性能良好的同步时序逻辑模块; 4、与VHDL的其他描述方式相比,状态机的VHDL表述丰富多样、 程序层次分明,结构清晰,易读易懂;在排错、修改和模块移植 方面也有其独到的好处; 5、在高速运算和控制方面,状态机更有其巨大的优势。 6、高可靠性
5.1状态机设计相关语句5.1.3状态机结构1.说明部分ARCHITECTURE...ISTYPEFSMSTIS(s0,s1,s2,s3);SIGNAL current_ state, next_state: FSM ST;说明部分中使用TYPE语句定义新的数据类型,该类型为枚举型,其元素通常都用状态机的状态名来定义。状态变量应定义成信号,便于信息的传递:并将状态变量的数据类型定义为含有既定状态元素的行定义的数据类型
5.1 状态机设计相关语句 5.1.3 状态机结构 1. 说明部分 说明部分中使用TYPE语句定义新的数据类型,该类 型为枚举型,其元素通常都用状态机的状态名来定义。 状态变量应定义成信号,便于信息的传递;并将状 态变量的数据类型定义为含有既定状态元素的行定义的 数据类型。 ARCHITECTURE .IS TYPE FSM_ST IS (s0,s1,s2,s3); SIGNAL current_state, next_state: FSM_ST;
5.1状态机设计相关语句5.1.3状态机结构2.主控时序进程图5-1一般状态机结构框图
5.1 状态机设计相关语句 5.1.3 状态机结构 2. 主控时序进程 comb_outputs state_inputs resetclk FSM: s_machine COM next_state current_state PROCESS REG PROCESS 图5-1 一般状态机结构框图
5.1状态机设计相关语句5.1.3状态机结构3.主控组合进程4.辅助进程
5.1 状态机设计相关语句 5.1.3 状态机结构 3. 主控组合进程 4. 辅助进程
【例5-1】LIBRARYIEEE:USEIEEE.STD LOGIC 1164.ALL;ENTITY s machineISPORTclk.reset:INSTDLOGIC:state inputs : IN STD _LOGIC_ VECTOR (0 TO 1);comb_outputs : OUT INTEGER RANGE 0 TO 15);END s machine;ARCHITECTUREbehvOFs machineISTYPEFSMSTIS(s0,SL,2,S3)SIGNAL eurrent state,nextstate:FSM STBEGINREG:PROCESS(reset.clk)一主控时序进程BEGINcurrent state<=so;--异步清零IFreset=1THENELSIFcIK-'I'ANDcIK'EVENTTHENcurrent state<-当时钟发生有效跳变时,状态机的状态才发生变化。一般ENDIF:ENDPROCESS程可以不负责下一状态的具体取值,主控时序进程负责状态机的运转和在时钟驱动下负责状态转换的进程状态机是随外部时钟信号,以同步时序方式工作的。因此,状态机中必须包含一个对工作时钟信号敏感的进程,作为状态机的“驱动泵
【例5-1】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY s_machine IS PORT ( clk,reset : IN STD_LOGIC; state_inputs : IN STD_LOGIC_VECTOR (0 TO 1); comb_outputs : OUT INTEGER RANGE 0 TO 15 ); END s_machine; ARCHITECTURE behv OF s_machine IS TYPE FSM_ST IS (s0, s1, s2, s3); SIGNAL current_state, next_state: FSM_ST; BEGIN REG: PROCESS (reset,clk)—主控时序进程 BEGIN IF reset = ‘1’ THEN current_state <= s0; -异步清零 ELSIF clk='1' AND clk'EVENT THEN current_state <= next_state; END IF; END PROCESS; 主控时序进程负责状态机的运转和在时钟驱动下负责状态转换的进程 。状态机是随外部时钟信号,以同步时序方式工作的。因此,状态机中必须 包含一个对工作时钟信号敏感的进程,作为状态机的“驱动泵” 。 当时钟发生有效跳变时,状态机的状态才发生变化。一般地,主控时序进 程可以不负责下一状态的具体取值