8 VHDL语言状态机汇总
第12讲_VHDL状态机
BEGIN CASE current_state IS WHEN s0 => comb_outputs<= “0101”; IF state_inputs = "00" THEN next_state<=s0; ELSE next_state<=s1; END IF; WHEN s1 => comb_outputs<= “1000”; IF state_inputs = "00" THEN next_state<=s1; ELSE next_state<=s2; END IF; WHEN s2 => comb_outputs<= “1100”; IF state_inputs = "11" THEN next_state <= s0; ELSE next_state <= s3; END IF; WHEN s3 => comb_outputs <= “1110”; IF state_inputs = "11" THEN next_state <= s3; ELSE next_state <= s0; END IF; END case; END PROCESS; END behv;
Company Logo
Moore状态机特点总结 1、多进程Moore状态机程序结构清晰,状态输出 时序与状态转换同步,但由于输出无时序控制, 容易产生毛刺。 在对时序要求较高,而对输出的毛刺不敏感的电 路描述中可用多进程 2、单进程Moore状态机同步完成状态译码,状态 输出和状态转换,避免出现毛刺,但是输出较多 进程状态机晚了一个时钟周期 在对毛刺敏感的电路描述中用单进程,比如将电 路的输出作为下一级电路的参考时钟时
VHDL状态机程序
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY FSM ISPORT(CLK,RESET:IN STD_LOGIC;INA:IN STD_LOGIC_VECTOR(2 DOWNTO 0);OUTA:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END FSM;ARCHITECTURE ONE OF FSM ISTYPE STATES IS (S0,S1,S2,S3);SIGNAL PS:STATES;BEGINPROCESS(CLK,RESET,PS)BEGINIF RESET='1' THEN PS<=S0;ELSIF RISING_EDGE(CLK) THENCASE PS ISWHEN S0=>OUTA<="0010";IF INA="101" THEN PS<=S1;ELSE PS<=S0;END IF;WHEN S1=>OUTA<="1001";IF INA="110" THEN PS<=S2;ELSE PS<=S1;END IF;WHEN S2=>OUTA<="1111";IF INA="010" THEN PS<=S3;ELSIF INA="011" THEN PS<=S1;ELSE PS<=S2;END IF;WHEN S3=>OUTA<="1101";IF INA="001" THEN PS<=S3;ELSE PS<=S0;END IF;WHEN OTHERS=>PS<=S0;END CASE;END IF;END PROCESS;END ONE;仿真图:图C:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY C ISPORT(CLK,RESET:IN STD_LOGIC;INA:IN STD_LOGIC_VECTOR(2 DOWNTO 0);OUTA:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END C;ARCHITECTURE ONE OF C ISTYPE STATES IS(S0,S1,S2,S3);SIGNAL PS,NEXT_STATE:STA TES;BEGINREG:PROCESS(CLK,RESET) BEGINIF RESET='1' THEN PS<=S0;ELSIF CLK'EVENT AND CLK='1' THENPS<=NEXT_STA TE;END IF;END PROCESS REG;COM:PROCESS(PS,INA) BEGINCASE PS ISWHEN S0 => OUTA<="0010";IF INA="101" THEN NEXT_STA TE<=S1;ELSE NEXT_STATE<=S0;END IF;WHEN S1 => OUTA<="1001";IF INA="110" THEN NEXT_STATE<=S2;ELSE NEXT_STATE<=S1;END IF;WHEN S2 => OUTA<="1111";IF INA="010" THEN NEXT_STATE<=S3;ELSIF INA="011" THEN NEXT_STATE<=S1;ELSE NEXT_STATE<=S2;END IF;WHEN S3 => OUTA<="1101";IF INA="001" THEN NEXT_STATE<=S3;ELSE NEXT_STATE<=S0;END IF ;END CASE;END PROCESS COM ;END ONE;仿真图:三种编码形式实现方式:一位热码:ARCHITECTURE ONE OF C ISTYPE states IS (S0, S1, S2, S3);attribute enum_encoding :string;attribute enum_encoding of states:type is "one_hot";SIGNAL PS: states;顺序编码:ARCHITECTURE ONE OF C ISTYPE states IS (S0, S1, S2, S3);attribute enum_encoding :string;attribute enum_encoding of states:type is "sequential";SIGNAL PS: states;约翰逊码:ARCHITECTURE ONE OF C ISTYPE states IS (S0, S1, S2, S3);attribute enum_encoding :string;attribute enum_encoding of states:type is "johnson"; SIGNAL PS: states;程序其它部分不变。
VHDL 状态机
集大信息
图5-2 例5-1状态机的工作时序
集大信息
5.2 Moore状态机
5.2.1 多进程状态机
图5-3 ADC0809工作时序
集大信息
Moore状态机的应用实例---A/D采样控制器设计 一般传统方法用CPU或单片机完成,编程简单,控制
灵活,但是控制周期长、速度慢。尤其当A/D本身速度 比较快时,单片机或CPU的速度极大限制了A/D高速性 能的应用。以AD674为例:
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;--将现态和次态定义为新
态,并在此状态中根据外部信号指令,如stata_inpits等 向内或外发出控制信号,如comb_outputs,同时确定 下一个状态的走向,也就是向next_state中附入相应的 状态值。此状态值通过next_state传给REG时序进程, 直到下一个时钟到来再进入另一次的状态转换周期。
4. 辅助进程 用于配合状态机工作的组合进程或时序进程。比如:
WHEN st2=> ALE<='0';START<='0';LOCK<='0';OE<='0'; IF (EOC=‘1’) THEN next_state <= st3; --EOC=1表明转换结束
VHDL语法简单总结
VHDL语法简单总结一个VHDL程序代码包含实体(entity)、结构体(architecture)、配置(configuration)、程序包(package)、库(library)等。
一、数据类型1.用户自定义数据类型使用关键字TYPE,例如:TYPE my_integer IS RANGE -32 TO 32;–用户自定义的整数类型的子集TYPE student_grade IS RANGE 0 TO 100;–用户自定义的自然数类型的子集TYPE state IS (idle, forward, backward, stop);–枚举数据类型,常用于有限状态机的状态定义一般来说,枚举类型的数据自动按顺序依次编码。
2.子类型在原有已定义数据类型上加一些约束条件,可以定义该数据类型的子类型。
VHDL不允许不同类型的数据直接进行操作运算,而某个数据类型的子类型则可以和原有类型数据直接进行操作运算。
子类型定义使用SUBTYPE关键字。
3.数组(ARRAY)ARRAY是将相同数据类型的数据集合在一起形成的一种新的数据类型。
TYPE type_name IS ARRAY (specification) OF data_type;–定义新的数组类型语法结构SIGNAL signal_name: type_name [:= initial_value];–使用新的数组类型对SIGNAL,CONSTANT, VARIABLE进行声明例如:TYPE delay_lines IS ARRAY (L-2 DOWNTO 0) OF SIGNED (W_IN-1 DOWNTO 0);–滤波器输入延迟链类型定义TYPE coeffs IS ARRAY (L-1 DOWNTO 0) OF SIGNED (W_COEF-1 DOWNTO 0);–滤波器系数类型定义SIGNAL delay_regs: delay_lines; –信号延迟寄存器声明CONSTANT coef: coeffs := ( ); –常量系数声明并赋初值4.端口数组在定义电路的输入/输出端口时,有时需把端口定义为矢量阵列,而在ENTITY中不允许使用TYPE进行类型定义,所以必须在包集(PACKAGE)中根据端口的具体信号特征建立用户自定义的数据类型,该数据类型可以供包括ENTITY在内的整个设计使用。
状态机VHDL讲解
VHDL的结构非常适合编写状态机,而且编写方式不唯一,电路的集成也会随着编写的方式而改变。
状态机的设计主要用到case when 和if else 两种语句。
Case when 用来指定并行的行为,而if then else 用来设计优先度的编码逻辑。
分析状态机有如下特点:1.对于状态的描述一般先声明一个枚举数据类型,语句如下:Type state_type is(idle,tap1,tap2,tap3,tap4);2.对于存储当前状态的对象一般用是一个信号,即:Signal state: state_type;3.对于状态机的下一个状态的判断一般是通过对时钟上升沿判断的if then else 语句内嵌case when 语句4.对于状态机的输出则可以用一个条件或者选择信号声明语句,或者再用一个case语句来实现信号输出。
状态机分为三大类型:1.Moore状态机:次态=f(现状),输出=f(现状),即输出信号是直接由状态寄存器译码得到2.Mealy状态机:次态=f(现状,输入),输出=f(现状,输入),即以现时的输入信号结合即将变成次态的现状编码成信号输出。
3.混合型状态机我们用一个序列信号发生器的实例来做练习。
(状态机将在以后的很多实例中加以运用,请掌握其编写方法)序列信号就是一些串行的周期性信号,这些信号在每个循环周期内1和0数码按一定的规则顺序排列。
下面所讲解的序列发生器能够按规定输出8位’0’,’1’序列。
代码如下:逐行解释:10:清零复位信号,高电平复位清零。
12:序列信号输出。
因为是8位的端口,但序列信号是串行的,所以相当于有8路的序列信号,任取一位端口就是一个序列信号输出。
17:用type声明一种枚举类型。
共8中状态,每个状态都对应唯一的一种输出,至于在什么状态输出什么信号则由程序决定。
18:定义一个state类型信号量,其初始的状态为s0。
19-26:用constant定义一些常量,这些常量将作为在不同状态时的输出信号。
VHDL状态机
ST0 ST1
ST2
ST3 ST4
42
st0 对0809初始化
LOCK:
0-→1 由LOCK 信号锁 存转换 好的数
据
st4 OE=’1'
st1
数据输出 有效
采样周 期等待
st3
st2
启动AD 转换 EOC=
‘0’正 在转换
EOC=‘1'转换结束
图8-6 控制ADC0809采样状态图
43
PROCESS
30
31
32
33
34
35
36
37
38
以下以ADC0809为例 ,说明状态机的设计 方法。用状态机对 0809进行采样控制首 先必须了解工作时序 ,然后据此作出状态 图,最后写出相应的 VHDL代码。
ADC0809 ALE
sin START OE
clk ADDA EOC D[7..0]
VHDL状态机设计
1
2
3
4
5
6
Moore型有限状态机的结构图
7
Mealy型有限状态机的结构图
8
9
10
11
12
13
14
用户自定义数据类型定义语句
这里介绍与有限状态机设计有重要联 系的其它语法现象,即用户自定义数据类 型定义语句及相关的语法现象。如枚举型 、整数类型、数组类型、记录类型、时间 类型、实数类型等。
39
ADC0809工作时序 地址锁存信号
转换启动控制 进入转换状态 转换状态结束
输出有效控制
输出数据 稳定 40
时序图中,START为转换启动控制 信号,高电平有效;ALE为模拟信号输 入选通端口地址锁存信号,上升沿有效; 一旦START信号有效后,状态信号EOC 即变为低电平,表示进入转换状态。转换 结束后,EOC将变为高电平。此后外部 控制可以使OE由低电平变为高电平(输 出有效),此时,0809的输出数据总线 D[7..0]从原来的高阻态变为输出数据有效 。
8 VHDL语言状态机
0000_0000_0000_0001
0000_0000_0000_0010 0000_0000_0000_0100 0000_0000_0000_1000 0000_0000_0001_0000 0000_0000_0010_0000 0000_0000_0100_0000 0000_0000_1000_0000 0000_0001_0000_0000 0000_0010_0000_0000 0000_0100_0000_0000 0000_1000_0000_0000 0001_0000_0000_0000 0010_0000_0000_0000 0100_0000_0000_0000 1000_0000_0000_0000
3.摩尔状态机
Moore状态机的输出只与有限状态自动机的当
前状态有关,与输入信号的当前值无关。 Moore有限状态机在时钟CLOCK脉冲的有效 边沿后的有限个门延后,输出达到稳定值。即 使在一个时钟周期内输入信号发生变化,输出也 会在一个完整的时钟周期内保持稳定值而不变。 输入对输出的影响要到下一个时钟周期才能反 映出来。
Mealy型有限状态机的结构图
1 状态机分类
FSM的设计要点
定义枚举类型表达不同的状态特点;
设置信号表达现有状态和转换的状态;
对每一个现态,利用选择语句,根据控制条
件x决定转换次态;
根据现态和x决定输出y。
1 状态机分类 状态机的基本操作
状态机内部状态转换。状态机的下一个状态
由译码器根据当前状态和输入条件决定。 产生输出信号序列。输出信号由输出译码器 根据当前状态和输入条件决定。
0000
0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
第八章 状态机在vhdl中的实现
第八章状态机在vhdl中的实现数字电路分为组合逻辑和时序逻辑两大类。
组合逻辑电路的输出只与当前的输入有关;而时序逻辑电路的输出则不仅与当前的输入有关,而且还与过去的一系列输入有关。
组合逻辑电路就像老式的按扭式电扇,按1输入弱风,按2输出中等强度的风,按3则输出强风。
输出风力的大小(输出值)完全取决于按下的按扭值(输入值)。
时序逻辑电路则更像空调遥控器中靠“+”键和“-”键调节温度的控制电路,无法单凭当前按下的键(输入值)来判断将设定的温度(输出值),显然必须知道遥控器当前设定的温度,即遥控器目前的状态。
状态机(State Machine)可以说是一个广义的时序电路,触发器、计数器、移位寄存器等都算是他的特殊功能类型的一种。
实际时序电路的状态数是有限的,因此又叫做有限状态机(FSM,Finite State Machine)。
用VHDL设计状态机不必知道其电路具体实现的细节,而只需要描述在逻辑上加以描述。
因此本书在提到状态机一词时,更多地是指对状态及状态转移的总体描述,而不是一个具体的时序电路。
状态机又分为Moore型与Mealy型,前者的输出仅取决于其所处状态;而后者的输出则不仅与当前所处的状态有关,同时也与当前的输入有关。
(区别这两种状态机的简单方法就是看状态图中,输出信号是在状态图的圈内还是圈外)下面分别介绍这两种状态机在VHDL中的实现。
8.1 Moore状态机的VHDL描述Moore状态机的输出仅由状态决定,一个典型的Moore状态机的状态转移图如图8—1所示,其对应的VHDL程序(带异步复位信号)见例程8—1。
例程8—1的仿真波形如图8—2所示。
图8—1 Moore状态机的状态转移图例程8—1实现Moore状态机的状态转移library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity Moore isport(Reset: IN Std_logic;Clock: IN Std_logic;DIN: IN Std_logic;DOUT: OUT Std_Logic_vector(2 downto 0));end;architecture Mooremachine of Moore ISTYPE State_type IS (S0,S1,S2,S3); --用枚举类型来表示状态,使程序更具可读性SIGNAL State:State_type;BEGINChange_State:PROCESS(Reset,Clock)BEGINIF Reset='1' THENState<=S0;ELSIF rising_edge(Clock) THENcase sTATE ISWHEN S0=>IF DIN='1' THENState<=S1;END IF;WHEN S1=>IF DIN='1' THENState<=S2;END IF;WHEN S2=>IF DIN='1' THENState<=S3;END IF;WHEN S3=>IF DIN='1' THENState<=S0;ELSEState<=S1;END IF;END CASE;END IF;end PROCESS;Output_Process: --此进程决定输出值PROCESS(State)BEGINCASE State ISWHEN S0=>DOUT<="001";WHEN S1=>DOUT<="011";WHEN S2=>DOUT<="101";WHEN S3=>DOUT<="111";END CASE;END PROCESS;END;图8—2 例程8—1仿真波形图例8—1是MAX+plu sII默认的状态机描述格式之一,因此其仿真波形图中将State以状态名的形式表示出来,使仿真波形十分直观、易懂。
《VHDL状态机》课件
总结与展望
1 VHDL 状态机对数字电路设计的重要性
VHDL状态机能够将数字电路行为直观地表示出来,提高设计效率。
2 VHDL 状态机在工业自动化控制中的作用
VHDL状态机在自动化控制系统中扮演着重要的角色,提高系统的智能化。
3 VHDL 状态机的发展前景
随着数字电路和自动化技术的不断发展,VHDL状态机将继续发挥重要作用。
《VHDL状态机》PPT课件
VHDL状态机是一种描述数字电路行为的建模语言,本课件将介绍VHDL状态机 的定义、作用以及其在数字电路设计中的重要性。
什么是 VHDL 状态机
定义
VHDL状态机是一种用于描述数字电路中组合逻辑与时序逻辑之间关系的建模方法。
作用
VHDL状态机能够将数字电路行为清晰地表示出来,方便设计者进行分析和调试。
VHDL 状态机的设计方法
1
状态定义
确定所需的状态数量,并为每个状态指定一个唯一的编码。
2
状态转移
根据输入信号和当前状态,定义状态之间的转移条件。
3
输出定义
根据当前状态和输入信号,定义对应的输出信号。
1 VHDL 状态机设计实例
设计一个灯泡控制系统,根据不同输入信号以及当前状态控制灯泡的亮、灭。
VHDL 状态机的调试技巧
VHDL 状态机的基本结构
状态寄存器
用于存储当前状态信息,决 定下一状态的变化。
组合逻辑
根据输入信号和当前状态, 决定下一状态。
输出逻辑
根据当前状态和输入信号, 产生输出信号。
1 VHDL 状态机的两种类型
Moore 状态机:输出只与当前状态有关;Mealy 状态机:输出与当前状态和输入信号有关。
第八章 VHDL状态机
例8-1 函数体的定义
Package body packexp is function max(a,b:in std_logic_vector) --定义函数体 return std_logic_vector is begin if a>b then return a; else return b; end if; end function max; end; 函数体的定义放在程序包的内容声明部分
Architecture bhv of axamp is begin out1<=max(data1,data2); process(data3,data4) begin out2<=max(data3,data4); end process; end; 调用函数,可顺序, 调用函数,可顺序,可并 行
子程序(SUBPROGRAM)是一个VHDL程序 模块。该模块利用顺序语句来完成定义和某些 算法描述。(类似于进程) 子程序可以作为一个模块被定义在程序包、结 构体和进程中。
8.3.1 VHDL函数
用户自定义函数和库中预定义函数 自定义函数格式
索引
FUNCTION 函数名(参数表) RETURN 数据类型 - -函数首 函数名(参数表) 函数首 FUNCTION 函数名(参数表) RETURN 数据类型 IS - -函数体 函数名(参数表) 函数体 [说明部分 说明部分] 说明部分 Mux21 BEGIN “*” 实物 顺序语句 END FUNCTION 函数名; 函数名; 在进程或结构体中定义的函数不必定义函数首, 在进程或结构体中定义的函数不必定义函数首,在程序包中必须定 义函数首
8.3.2 VHDL重载函数
运算符的重载 --如何由来?
重载函数
第6章 VHDL状态机
Company Logo
什么是状态机?
状态机就是在有效状态内,在时钟的驱动下,通 过给定初始状态,能够自动完成状态间的循环和 相应状态的输出的时序逻辑电路。
状态机分为状态译码部分:根据输入以及系统当 前的状态,由状态方程来决定下一状态的状态码; 状态输出部分:根据当前的状态码决定电路的当 前输出;状态转换部分:将下一状态转变为当前 状态。
Company Logo
与状态机相关的语法语句 类型定义语句 已定义数据类型:BIT,STD_LOGIC,BOOLEAN…… 用户自己定义新的数据类型:枚举,数组,记录, 时间,实数等 如何自定义数据类型? TYPE 数据类型名 IS 数据类型定义; TYPE 数据类型名 IS 数据类型定义 OF 基本数 据类型;
Company Logo
【例6-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;
VHDL之状态机学习笔记
VHDL之状态机学习笔记由于平时比较忙,没有时间系统的学习,所以一般情况下只能周末稍微系统的学习一下。
前几周主要学习了一下如何用VHDL来实现一个状态机。
因为状态机的应用实在是太广泛了,例如各种存储器的控制,AD的控制外部器件的控制,也包括内部电路的控制,到了非学不可的地步了。
对于状态机的理论没有涉及太多,只有几点需要注意:(1)moore和mealy的区别在于输出是否只和当前状态有关。
(2)状态机的两种基本操作:一是状态机内部状态的转换,另一是产生输出信号序列。
(3)状态机的分析可以从状态图入手,同样,状态机的设计也可以从状态图入手。
在集成电路设计时,通常可以将整个系统划分为两部分,一部分是数据单元,另一部分是控制单元。
数据单元包含保存运算数据和运算结果的数据寄存器,也包括完成数据运算的组合逻辑。
控制单元用来产生信号序列,以决定何时进行何种数据运算,控制单元要从数据单元得到条件信号,以决定继续进行那些数据运算。
数据单元要产生输出信号,数据运算状态等有用信号。
数据单元和控制单元中,有两个非常重要的信号,即复位信号和时钟信号。
复位信号保证了系统初始状态的确定性,时钟信号则是时序系统工作的必要条件。
状态机通常在复位信号到来的时候恢复到初始状态,每个时钟到来的时候内部状态发生变化。
正如上面的(3)提到的,设计状态机时一般先构造出状态图。
构造状态图的一般方法是从一个比较容易描述的状态开始,通常初始态是一个很好开始的状态,也就是状态机复位以后开始的状态。
在建立每个状态时最好都清楚的写出关于这个状态的文字描述,为硬件设计过程提供清晰的参考资料,也为最后完成的设计提供完整的设计文档。
下面给出一个用VHDL实现ADC0804控制器的完整设计过程。
首先根据ADC0804的时序图分析所有可能的状态,并且建立起来状态图。
时序图:/album_pic/2005/09/12/b15fe2073e48e1bb3780e 6431f695e8c?%75%4e%6f%44%6a%77%49%71%6d%744个状态如下:idle: CS="0",WR=0,RD=1 启动AD0804开始转换convert:CS=1,WR=1,RD=1,AD0804进行数据转换read1: CS="1",WR=1,RD=1,INTR,转换结束,开始读read2: CS="1",WR=1,RD=0,读取数据。
VHDL状态机
current_state next_state
PROCESS COM
comb_outputs
图5-1 一般状态机结构框图
第14页/共80页
• 主控时序进程是负责有限状态机状态转化的进程。有限状态机是随外部时 钟信号以同步时序方式工作的。主控时序进程就是保证状态的跳变与时钟 信号同步,即保证在时钟发生有效跳变时,有限状态机的状态才发生变化。 一般地,主控时序进程负责系统的初始和复位的状态设置,不负责下一状 态的具体状态取值。当复位信号到来时,主控时序进程将同步或异步复位 状态;当时钟的有效跳变到来时,时序进程只是机械地将代表次态的信号 next_st中的内容送入到现态的信号cur_st中,而信号next_st中的内容完 全由其他的进程根据实际情况来决定。主控时序进程的设计比较固定、单 一和简单。
第20页/共80页
【例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);
TYPE BOOLEAN IS (FALSE,TRUE) ;
第7页/共80页
5.1 状态机设计相关语句
5.1.1 类型定义语句
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 ;
VHDL语言中状态机的应用
[知识拓展]VHDL语言中的状态机应用在数字系统设计时,通常将一个较大较复杂的系统划分成数个相对独立的较小较简单模块实现,最简单最基本的模块设计可使用本书项目P1和P3中介绍的组合逻辑电路和时序逻辑电路的设计方法,但这种设计方法仅适用于非常简单的模块设计,当设计比较复杂时,这种设计方法就显得过于复杂而失去了实际功效。
实际设计中,比较复杂的时序逻辑电路的设计可用有限状态机(finited state machine)来实现。
有限状态机没有固定的形式,实现的方式非常接近人们的逻辑思维,通常用于描述数字系统工作的一个完整过程,它具有以下特征:●状态变量定义有限个状态,这些状态概括了系统的工作的完整过程;●具有时钟;●能够进行状态转移控制;在具有外部输入控制信号时,状态的转移由当前状态、时钟与外部输入控制信号共同控制,称为米勒(mealy)型状态机;在没有外部输入控制信号时,状态的转移只受当前状态和时钟的控制,称为摩尔型(moore)状态机;●在不同的状态下对输出信号进行不同的控制;●在系统复位时,指定系统的初始状态并指定在初始状态时系统的各个输出信号的值;在使用VHDL语言实现状态机时,通常先用枚举变量定义系统工作时可能出现的有限个状态,然后在1个或数个进程中用if语句和case语句实现状态的转移控制和输出信号的控制,下面以十字路口的交通灯控制为例,具体说明有限状态机的使用。
在某个十字路口,共有东、西、南、北4个方向的交通信号灯。
其中东西向的信号灯动作完全一致、可由同一个控制器控制,南北向的信号灯动作完全一致,可由另一个控制器控制,即只要东西、南北2组控制信号即可;在每一个路口有左转、直行、右转三组信号灯,每组信号灯均由红、黄、绿3个灯组成,此外还有一个最大99秒的秒计时器。
表4.11包含了交通灯系统所有的工作状态及各个状态下信号灯和秒计时器的状态。
交通灯的工作状态共有10种,按照时间顺序分别为东西向直行(east_a)、东西向直行加右转(east_a_r)、东西向直行变信号(east_a_change)、东西向左转(east_l)、东西向左转变信号(east_l_change)、南北向直行(south_a)、南北向直行加右转(south_a_r)、南北向直行变信号(south_a_change)、南北向左转(south_l)、南北向左转变信号(south_l_change),之后又进入东西向直行状态,在这10状态内反复循环。
第八讲 状态机的VHDL设计
时序逻辑进程
其中,组合逻辑进程用于实现状态机的 状态选择和信号输出。该进程根据当前 状态信号current_state的值确定输出信 号,同时确定下一个状态,即next_state 的取值。
组合逻辑进程的VHDL代码
process(input,current_state) begin case current_state is when state0=> if (input=...) then output<=value; next_state<=state1; else ... end if; when state1=> if (input=...) then output<=value; next_state<=state2; else ... end if; ... end case; end process;
简单状态机的VHDL程序
--学习简单的状态机,有8个状态,数码管输出当前状态的编号-- state0--state1--state2--state3--state4--state5--state6-state7--state0 library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY state_machine ISPORT (clk : IN std_logic;rst : IN std_logic;c : OUT std_logic_vector(7 DOWNTO 0);en : OUT std_logic_vector(7 DOWNTO 0));END state_machine;ARCHITECTURE arch OF state_machine ISCONSTANT state0 : std_logic_vector(2 DOWNTO 0) := "000";CONSTANT state1 : std_logic_vector(2 DOWNTO 0) := "001";CONSTANT state2 : std_logic_vector(2 DOWNTO 0) := "010";CONSTANT state3 : std_logic_vector(2 DOWNTO 0) := "011";CONSTANT state4 : std_logic_vector(2 DOWNTO 0) := "100";CONSTANT state5 : std_logic_vector(2 DOWNTO 0) := "101";CONSTANT state6 : std_logic_vector(2 DOWNTO 0) := "110";CONSTANT state7 : std_logic_vector(2 DOWNTO 0) := "111";SIGNAL state : std_logic_vector(2 DOWNTO 0);SIGNAL cnt : std_logic_vector(23 DOWNTO 0);BEGINen <= "00000000" ;PROCESS(clk,rst)BEGINIF (NOT rst = '1') THENstate <= state0;cnt <= "000000000000000000000000";ELSIF(clk'EVENT AND clk='1')THENcnt <= cnt + "000000000000000000000001";IF (cnt = "111111111111111111111111") THENCASE state ISWHEN state0 =>state <= state1;WHEN state1 =>state <= state2;WHEN state2 =>state <= state3;WHEN state3 =>state <= state4;WHEN state4 =>state <= state5;WHEN state5 =>state <= state6;WHEN state6 =>state <= state7;WHEN state7 =>state <= state0;WHEN OTHERS =>NULL;END CASE;END IF;END IF;END PROCESS;PROCESS(state)BEGINCASE state ISWHEN state0 =>c <= "11000000";WHEN state1 =>c <= "11111001";WHEN state2 =>c <= "10100100";WHEN state3 =>c <= "10110000";WHEN state4 =>c <= "10011001";WHEN state5 =>c <= "10010010";WHEN state6 =>c <= "10000010";WHEN state7 =>c <= "11111000";WHEN OTHERS =>NULL;END CASE;END PROCESS; END arch;。
基于状态机的8路彩灯VHDL设计
共 同决定输 出则 选用 Mel ay状态机 。 层次原 理 图设 计方法
自顶 而 下 ( O T O T P OD WN)的 层 次 化 设 计 方
可 以实 现手 动输入变 化花 型 。
2 设 计思路 : )
法在 现代 E DA设 计 中有 着明 显 的优势 ,越 来越 受
到 设计 者 的 欢 迎 。对 于 一 个复 杂 的 设 计 系统 , 运
调 试 方 式 , 即从 模 块调 试 向总 体 调 试 方 向开 展 调
试 工作 ,使 设计 中出现 的 问题在 模 块级 就能 发现 , 及 时 处 理 ,这 样就 会使 一 个 复 杂 的设 计 变 得 容 易
调试 ,缩短 了设 计时间 。
C L 器 件 为 载 体 , 将 应 用 电 子 技 术 、计 算机 技 PD 术、智能化技术 溶为一体 以实现 I C设 计 、 电 子
关键词 :8 路彩灯 ;V D ;状态机 H L 中图分类号 :T 3 21 U 5 .1 文献标识码 :B 文章编号 :1 0 - 1 4 2 1 ) ( -O 7-0 9 0 3 ( 0 11 下) l 6 3 0
D i 1 . 9 9 J is .0 9 1 4 2 1 . ( ) 6 o : 3 6 / . n 1 0 -0 3 . 0 1 1 下 . O 0 s
态机 要 限 据设 计 的具 体 情 况决 定 ,输 出 只 由当前
生 活 常用 的 电器 , 电子 彩灯 控 制 电路 的设 计要 求
也越 来越 高 。要 求我 们设 计 的彩灯 花 样 品种 更多 , 控 制更 加 方 便 ,灵 活 性 高 ,可 靠 性 高 。采 用 传 统 数 字 电路 设 计 的 彩灯 控 制 器 电 路 复 杂、设 计 周 期
基于VHDL语言的状态机设计
摘要 :V DL语言 是一 种硬 件描 述 语言 ,用 于描 述硬件 的行 为和 结构 。与软 件 编程语 言被 翻译 成机 器 指令 不 同 ,V DL语 言是被 H H 翻译 成 数 字 电路 结 构 ,最终在 可 编程 器件 或 专用 集成 电路 A I 中 以电路 结构 的形 式 实现程 序所 描 述的功 能 。在设 计 中 ,状 态机是 最 SC
es lek: =k : +1
n e di i f
e ndi: f e r c s ndp o e s;
( ) 型循 环控 制模 块 : 型循 环控 制模 块是 系统 的核心 部 2花 花 分 ,它 主控 着 8 彩灯 的花 型 。循 环彩 灯控 制模块 主 要 由状态 机 路 设 计 ,用状态 机 设计 灵活 性强 。 按 设计 的要 求实现 8种花 型 : 0 0 1 1 1 0 0 0 、 1 0 0 1 00 11 、00 00 0 10 1 、
数 字 电路 分为 组合 逻辑 电路 和 时序 逻辑 电路 。组 合 逻辑 电路 的输 出只与 当前 输 入有 关 ,时序 逻辑 电路 的输 出不仅 与 当前 输入 有关 ,还与 过 去 的输入 有关 。状 态机 是 一种 广义 的时序 电路 ,它 的输 出不仅 与 当前输 入 信号有 关 ,还 与 当前 的状态 有 关 。 状 态机 有 三个 基本 要素 :状 态 、输 入 、输 出 状 态 是状 态机 中最 根本 的要素 。状 态机 的最 基 本特 点就 是 寄 存 器 中存储 的状态 按照 一 定 的条 件 或规 律进 行 转移 , 并输 出特 定 信号。 输 入信 号 作为 状态 机状 态转 移 的条 件 , 即状 态机 根 据输 入信 号和 当前状 态 决定 下一 个转 移 的状态 。 输 出信 号 一般 由当前状 态和 当前输 入信 号 决定 ,也 可只 由当 前状 态 决定 。 二、状 态机 的特点 ( )状态 机 的结 构模 式相 对简 单 ,设计 方 案相对 固定 。 1 ( )状 态机 的 V L设 计层 次分 明,结构 清晰 ,易读 易懂 。 2 HD () 3 就运 行速 度 而言 ,状态 机 的每一 个状 态 中可 以完成 许 多 并 行 的运算 和控 制 操作 。 ( )就可 靠性 而 言 ,状 态 机也 具有 明显 的优 势 。 4 三 、状 态机 的 分类 状 态机 可 分为 有 限状态 机和 无 限状 态机 ,在 这 里只 讨论 有 限 状态 机 。按 照输 出信号 是否 与输 入信 号 有关 ,可将有 限状态 机分 为 Mor 型和 Mel 型 。Mor 型状 态机 的输 出只与 当前 状态 有 oe ay oe 关 ,Mel 型状 态机 的输 出 不仅 与当 前状 态有 关 ,还 与当 前输 入 a y 有 关 。 oe型和 Me l Mo r a y型状 态机 示 意 图分别 如 图一和 图二 所示 。
VHDL中状态机的简介及应用
VHDL中状态机的简介及应用
翟艳磊
【期刊名称】《科技广场》
【年(卷),期】2005(000)008
【摘要】本文主要是关于VHDL中状态机的定义、分类、状态的编码以及状态机的进程描述,并通过一个简单的内存控制器的例子来说明其在实际中的应用.
【总页数】4页(P106-109)
【作者】翟艳磊
【作者单位】东华理工学院电子与机械工程学院,抚州,344000
【正文语种】中文
【中图分类】TN4
【相关文献】
1.VHDL中的有限状态机教学方法研究 [J], 吕高焕;杨亮;邓冠龙
2.VHDL中的有限状态机教学方法研究 [J], 吕高焕;杨亮;邓冠龙
3.VHDL中有限状态机模型的应用 [J], 王科
4.一种应用VHDL语言设计有限状态机控制器的方法 [J], 牛斌;马利;张玉奇
5.有限状态机的VHDL设计方法研究 [J], 张志娟
因版权原因,仅展示原文概要,查看原文内容请购买。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
பைடு நூலகம்
有限状态机FSM的设计
哈尔滨工业大学(威海) 信息工程学院电子工程系
第八章 有限状态机FSM的设计
1.状态机概念 2.一般状态机 3.摩尔状态机 4.米利状态机 5.状态机实例
一 .有限状态机的基本概念
有限状态机:指那些输出取决于过去输入部
分和当前输入部分的时序逻辑电路。有限状 态机一般有三部分:输入部分、输出部分和 状态寄存器。 Moore型有限状态机:输出信号仅与当前状 态有关 Mealy型有限状态机:输出信号不仅与当前 状态有关,而且还与所有的输入信号有关。
时序电路的结构与特点
根据输出函数的形式,可以分为moore机和 mealy机两类。
1 状态机分类
一般状态机 MOORE状态机 MEALY状态机
1 状态机分类
FSM的表达形式
通常采用状态转换图表达电路信号的变化:
Moore: y = f(s)
Mealy: y = f(s0,x)
Moore型有限状态机的结构图
begin process(clk,rst) begin if rst='1' then cur_state<=st0; elsif clk'event and clk='1' then cur_state<=next_state; end if; end process; process(cur_state,next_state) begin case cur_state is when st0=>comb_output<="00"; if state_input="00" then next_state<=st0; else next_state<=st1; end if; when st1=>comb_output<="01"; if state_input="00" then
0000
0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
0000
0001 0011 0010 0110 0111 0101 0100 1100 1101 1111 1110 1011 1010 1001 1000
Mealy型有限状态机的结构图
1 状态机分类
FSM的设计要点
定义枚举类型表达不同的状态特点;
设置信号表达现有状态和转换的状态;
对每一个现态,利用选择语句,根据控制条
件x决定转换次态;
根据现态和x决定输出y。
1 状态机分类 状态机的基本操作
状态机内部状态转换。状态机的下一个状态
由译码器根据当前状态和输入条件决定。 产生输出信号序列。输出信号由输出译码器 根据当前状态和输入条件决定。
状态机的特点
克服了纯硬件数字系统顺序方式控制不灵活的缺
点。 VHDL综合器易于优化 易构成性能良好的时序逻辑模块 结构模式简单、层次分明、易读易懂、易排错 利用同步时序和全局时钟线可实现高速FSM 运行模式类似于CPU,易于进行顺序控制 高可靠性,非法状态易控制
1 状态机分类
一般状态机实例
2.一般状态机
library IEEE; use IEEE.STD_LOGIC_1164.all; entity s_machine is port( clk : in STD_LOGIC; rst : in STD_LOGIC; state_input : in STD_LOGIC_VECTOR(1 downto 0); comb_output : out STD_LOGIC_VECTOR(1 downto 0) ); end s_machine; architecture s_machine of s_machine is type states is (st0,st1,st2,st3); signal cur_state,next_state : states;
状态机的编码方式
Binary、gray-code编码使用最少的触发器, 较多的组合逻辑资源,而one-hot编码反之。 另一方面,对于小型设计使用Binary、 gray-code更有效,而大型状态机使用 one-hot编码更高效。
十位数
二进制码
格林码
独热码
约翰逊
0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0000_0000_0000_0001
0000_0000_0000_0010 0000_0000_0000_0100 0000_0000_0000_1000 0000_0000_0001_0000 0000_0000_0010_0000 0000_0000_0100_0000 0000_0000_1000_0000 0000_0001_0000_0000 0000_0010_0000_0000 0000_0100_0000_0000 0000_1000_0000_0000 0001_0000_0000_0000 0010_0000_0000_0000 0100_0000_0000_0000 1000_0000_0000_0000
2.一般状态机
为了能获得可综合的,高效的vhdl状态描述,
建议使用枚举数据类型来定义状态机的状态, 并使用多进程方式来描述状态机的内部逻辑。 • 一般情况下,一个进程描述时序逻辑,包括状 态寄存器的工作和寄存器状态的输出。另一个 进程描述组合逻辑,包括进程间状态值的传递 逻辑以及状态以及状态转换值的输出。必要时 还可以引入第三个进程完成其他的逻辑功能。
使用两段式状态机设计方法
设计状态机的方法多种多样,但总结起来有两大 类:第一种,将状态转移和状态的操作、判断等 写在一起;另一种是将状态转移单独写成一个部 分,将状态的操作和判断写到另一个部分中。 第二种设计方法较好,将同步时序和组合逻辑 分别放到不同的程序块中实现不仅仅便于阅读、 理解、维护,更有利于综合器优化代码,利于用 户添加合适的时序约束条件,利于布局布线器实 现设计。
0000_0000
0000_0001 0000_0011 0000_0111 0000_1111 0001_1111 0011_1111 0111_1111 1111_1111 1111_1110 111_11100 111_11000 111_10000 111_00000 110_00000 100_00000