文档介绍:EDA 技术实用教程
第 8 章
状态机设计
一般有限状态机设计
KX康芯科技
数据类型定义语句
TYPE语句的用法如下:
TYPE 数据类型名 IS 数据类型定义 OF 基本数据类型;
或
TYPE 数据类型名 IS 数据类型定义;
TYPE st1 IS ARRAY ( 0 TO 15 ) OF STD_LOGIC ;
TYPE week IS (sun,mon,tue,wed,thu,fri,sat) ;
一般有限状态机设计
KX康芯科技
数据类型定义语句
TYPE m_state IS ( st0,st1,st2,st3,st4,st5 ) ;
SIGNAL present_state,next_state : m_state ;
TYPE BOOLEAN IS (FALSE,TRUE) ;
TYPE my_logic IS ( '1' ,'Z' ,'U' ,'0' ) ;
SIGNAL s1 : my_logic ;
s1 <= 'Z' ;
SUBTYPE 子类型名 IS 基本数据类型 RANGE 约束范围;
SUBTYPE digits IS INTEGER RANGE 0 to 9 ;
一般有限状态机设计
KX康芯科技
为什么要使用状态机
状态机克服了纯硬件数字系统顺序方式控制不灵活的缺点
状态机可以定义符号化枚举类型的状态
状态机容易构成性能良好的同步时序逻辑模块
状态机的VHDL表述丰富多样、程序层次分明,易读易懂
在高速运算和控制方面,状态机更有其巨大的优势
高可靠性
一般有限状态机设计
KX康芯科技
一般有限状态机的设计
1. 说明部分
ARCHITECTURE ...IS
TYPE FSM_ST IS (s0,s1,s2,s3);
SIGNAL current_state, next_state: FSM_ST;
...
一般有限状态机设计
KX康芯科技
一般有限状态机的设计
2. 主控时序进程
图8-1 一般状态机结构框图
一般有限状态机设计
KX康芯科技
一般有限状态机的设计
3. 主控组合进程
4. 辅助进程
【例8-1】
LIBRARY IEEE;
USE ;
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) --主控时序进程
(接下页)
KX康芯科技
BEGIN
IF reset = '1' THEN current_state <= s0;--检测异步复位信号
ELSIF clk='1' AND clk'EVENT THEN
current_state <= next_state;
END IF;
END PROCESS;
COM:PROCESS(current_state, state_Inputs) --主控组合进程
BEGIN
CASE current_state IS
WHEN s0 => comb_outputs<= 5;
IF state_inputs = "00" THEN next_state<=s0;
ELSE next_state<=s1;
END IF;
WHEN s1 => comb_outputs<= 8;
IF state_inputs = "00" THEN next_state<=s1;
ELSE next_state<=s2;
END IF;
WHEN s2 => comb_outputs<= 12;
IF state_inputs = "11" THEN next_state <= s0;
ELSE next_state <= s3;
END IF;
WHEN s3 => comb_outputs <= 14;
IF sta