




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VHDL有限状态机设计内容有限状态机的基本概念状态机的基本描述方式VHDL语言描述状态机状态机设计举例三种进程描述状态机方式对比毛刺信号的数字排除方式1有限状态机的基本概念状态机是一种思想方法状态机的本质就是对具有逻辑顺序或时序规律事件的一种描述方法。具有逻辑顺序和时序规律的事件都适合用状态机描述。1有限状态机的基本概念某学生在学校的学习生活可以简单地概括为宿舍、教室、食堂之间的周而复始。1有限状态机的基本概念右图也是一张标准的状态转移图,通过状态机的方式我们再次清晰地描述另一个学生的在校生活方式。1有限状态机的基本概念例:设计一个以秒为单位的4位流水灯。要求:每秒只能点亮1个LED,点亮方式为高电平有效。例:设计一个串行数据流检测器。要求:输入连续的二进制数,当检测到连续“1”的个数大于2个的时候,输出“1”;其他状态输出“0”。1有限状态机的基本概念有限状态机的定义所谓有限状态机是指那些输出取决于过去输入部分和当前输入部分的时序逻辑电路。1有限状态机的基本概念状态机的本质对具有“逻辑顺序”和“时序规律”事件的一种描述方法。应用思路从状态变量入手,分析每个状态的输入,状态转移和输出,从而完成电路的功能。首先明确电路的输出关系,这些输出相当于状态的输出,回溯规划每个状态和状态转移条件与状态输入。1有限状态机的基本概念状态机的基本要素状态:也叫状态变量。在逻辑设计中,使用状态划分逻辑顺序和时序规律。输出:输出指在某一个状态时特定发生的事件。输入:指状态机中进入每个状态的条件,有的状态机没有输入条件,其中的状态转移较为简单,有的状态机有输入条件,当某个输入条件存在时才能转移到相应的状态。1有限状态机的基本概念有限状态机的组成组合逻辑组合逻辑又可分为次态逻辑和输出逻辑两个部分。其中:次态逻辑的功能是用来确定有限状态机的下一个状态;输出逻辑是用来确定有限状态机的输出。时序逻辑时序逻辑:同步时序方式工作下运转及状态转换。寄存器逻辑寄存器逻辑的功能:用来存储有限状态机的内部状态。1有限状态机的基本概念状态机实现三个功能状态译码:根据输入以及系统当前的状态,
由状态方程来决定下一状态的状态码。状态输出:根据当前的状态码决定电路当前输出。状态转换:将下一状态转变为当前状态。1有限状态机的基本概念1.说明部分
ARCHITECTURE...ISTYPEFSM_STIS(s0,s1,s2,s3);SIGNALcurrent_state,next_state:FSM_ST;2.主控时序进程负责状态机运转和在时钟驱动下的状态转换,随外部时钟信号,以同步时序方式工作。3.主控组合进程通过pr_state的改变,进入主控组合进程,根据外部输入信号确定输出和下一状态的走向(nx_state)4.辅助进程1有限状态机的基本概念有限状态机的类型从信号输出方式上分Mealy型状态机Moore型状态机从结构上分单进程状态机两进程状态机三进程状态机从表达方式上分符号化状态机确定状态编码的状态机从编码方式上分顺序编码状态机独热码状态机格雷码状态机1有限状态机的基本概念Moore型有限状态机是指那些输出信号仅与当前状态有关的有限状态机,即可以把Moore型有限状态机的输出看成是当前状态的函数。Moore型有限状态机框图:1有限状态机的基本概念Mealy型有限状态机是指那些输出信号不仅与当前状态有关,而且还与所有的输入信号有关的有限状态机,即可以把Mealy有限状态机的输出看作当前状态和所有输入信号的函数。可见,Mealy有限状态机要比Moore有限状态机复杂一些。Mealy有限状态机框图:1有限状态机的基本概念Moore型和Mealy型有限状态机的区别:Moore型有限状态机仅与当前状态有关,而与输入信号无关;Mealy型有限状态机不但与当前状态有关,而且还与状态机的输入信号有关。1有限状态机的基本概念采用何种有限状态机的判别条件:Moore型有限状态机可能要比相应的Mealy型有限状态机需要更多的状态。Moore型有限状态机的输出与当前的输入部分无关,因此当前输入产生的任何效果将会延迟到下一个时钟周期。可见,Moore型状态机的最大优点就是可以将输入部分和输出部分隔离开。对于Mealy型有限状态机来说,由于它的输出是输入信号的函数,因此如果输入信号发生改变,那么输出可以在一个时钟周期内发生改变。1有限状态机的基本概念单进程状态机整个状态机的描述在一个进程中完成双进程状态机将组合逻辑部分和时序逻辑部分分开描述,放在结构体的说明部分三进程状态机将组合逻辑部分再分为产生次态的组合逻辑部分和产生输出的组合逻辑部分,与时序逻辑部分一起放在结构体的说明部分1有限状态机的基本概念符号化状态机所谓符号化状态机,就是在程序的说明部分使用TYPE语句定义枚举类型,其元素用状态机的状态名来定义。状态变量(如状态机的现态和次态)定义为变量或信号,并将状态变量的数据类型定义为含有既定状态元素的枚举类型。在使用多进程时,为便于信息传递,要将状态变量定义为信号。1有限状态机的基本概念类型定义语句TYPE数据类型名IS数据类型定义OF基本数据类型;
或
TYPE数据类型名IS数据类型定义;例:TYPEst1ISARRAY(0TO15)OFSTD_LOGIC;TYPEweekIS(sun,mon,tue,wed,thu,fri,sat);符号化状态机应用TYPEm_stateIS(st0,st1,st2,st3,st4,st5);SIGNALpresent_state,next_state:m_state;1有限状态机的基本概念确定状态编码的状态机使用符号化定义的枚举类型,枚举类型文字元素的编码通常是自动设置的,综合器根据优化情况、优化控制的设置或设计者的特殊设定来确定各元素具体编码的二进制位数、数值及元素间编码的顺序。也可以在程序中指明编码方式。常用的编码方式2进制编码格雷码编码One-hot编码1有限状态机的基本概念2进制编码状态机的每一个状态用二进制位来编码例:实现4状态的状态机,其其二进制编码可为状态1=“00”状态2=“01”状态3=“10”状态4=“11”需要的寄存器数量最少,有n个寄存器就可以对2^n个状态进行编码。需要更多的外部辅助逻辑,并且速度较慢。1有限状态机的基本概念格雷码状态机编码格雷码编码每次仅一个状态位的值发生变化例:实现4状态的状态机,其格雷码编码可为状态1=“00”状态2=“01”状态3=“11”状态4=“10”特点:触发器使用较少,速度较慢,不会产生两位同时翻转的情况。当状态位的输出被异步应用时,格雷码编码是有益的。1有限状态机的基本概念One-hot状态机编码Onehot的编码方案对每一个状态采用一个触发器,即4个状态的状态机需4个触发器。同一时间仅1个状态位处于有效电平(如逻辑“1”)例:实现4状态的状态机,其onehot编码可为状态1=“0001”状态2=“0010”状态3=“0100”状态4=“1000”特点:触发器使用较多,但逻辑简单,速度快。1有限状态机的基本概念关于one-hot、gray-code、binary编码使用说明Binary、gray-code编码使用较少的触发器,较多的组合逻辑,而one-hot编码反之。由于CPLD更多的提供组合逻辑,而FPGA更多的提供触发器资源,所以CPLD多使用gray-code,而FPGA多使用one-hot编码。对于小型设计使用gray-code和binary编码更有效,而大型状态机使用one-hot编码更有效。1有限状态机的基本概念程序中指明编码方式ARCHITECTUREBEHAVOFBINARYISTYPESTATE_TYPEIS(S1,S2,S3,S4,S5,S6,S7);ATTRIBUTEENUM_ENCODING:
STRING;ATTRIBUTEENUM_ENCODINGOFSTATE_TYPE:
TYPE
IS
"001010011100101110111";ARCHITECTUREBEHAVOFONE_HOTISTYPESTATE_TYPEIS(S1,S2,S3,S4,S5,S6,S7);ATTRIBUTEENUM_ENCODING:
STRING;ATTRIBUTEENUM_ENCODINGOFSTATE_TYPE:
TYPE
IS
"0000000100000010000001000000100000010000001000000100000010000000";Binary编码One-hot编码1有限状态机的基本概念程序中指明编码方式2状态机的基本描述方式设计状态机的步骤:①分析设计要求,列出状态机的全部可能状态,并对每一个状态进行编码。②根据状态转移关系和输出函数画出状态转移图。③由状态转移图,用VHDL语句对状态机描述。
2状态机的基本描述方式状态转移图状态转移图是状态机描述的最自然的方式,下图是使用HDLDesigner设计的一个简单的状态转移图。2状态机的基本描述方式状态转移列表状态转移列表使用列表的方式描述状态机,是数字逻辑电路常用的设计方法之一,经常被用于对状态化简,对于可编程逻辑设计,由于可用逻辑资源比较丰富,而且状态编码要考虑设计的稳定性、安全性等因素,所以并不经常使用状态转移列表优化状态。状态\输入a=‘1’b=‘1’defaultS0S1S2S1S2S0S2S02状态机的基本描述方式HDL语言描述状态机使用HDL语言描述状态机有一定的灵活性,但是决不是天马行空,而是有章可循的。通过一些规范的描述方法,可以使HDL语言描述的状态机更安全、稳定、高效、易于维护。下面是使用“HDLDesigner”软件,通过以上的状态转移图自动生成的VHDL描述的状态机代码。自动生成的代码的形式,是严格按照三进程状态机描述风格实现的。
2状态机的基本描述方式1.说明部分
ARCHITECTURE...ISTYPEFSM_STIS(s0,s1,s2,s3);SIGNALcurrent_state,next_state:FSM_ST;2.主控时序进程负责状态机运转和在时钟驱动下的状态转换,随外部时钟信号,以同步时序方式工作。3.主控组合进程通过pr_state的改变,进入主控组合进程,根据外部输入信号确定输出和下一状态的走向(nx_state)4.辅助进程ENTITYsmtestIS
PORT(
a:
IN
std_logic;b:
IN
std_logic;clk:
IN
std_logic;rst:
IN
std_logic;x:
OUT
std_logic;y:
OUT
std_logic
);--DeclarationsENDsmtest;LIBRARY
ieee;USE
ieee.std_logic_1164.all;USE
ieee.std_logic_arith.all;
ARCHITECTUREfsmOFsmtestIS
TYPESTATE_TYPEIS
(s0,s1,s2
);
--Declarecurrentandnextstatesignals
SIGNALcurrent_state:STATE_TYPE;
SIGNALnext_state:STATE_TYPE;BEGIN
-----------------------------------------------------------------clocked_proc:
PROCESS
(
clk,rst
)
-----------------------------------------------------------------
BEGIN
IF
(rst='0')
THENcurrent_state<=s0;
ELSIF
(clk'EVENT
ANDclk='1')
THENcurrent_state<=next_state;
END
IF;
END
PROCESSclocked_proc;
-----------------------------------------------------------------nextstate_proc:
PROCESS
(
a,b,current_state
)
--------------------------------------------------------------
BEGIN
CASEcurrent_stateIS
WHENs0=>
IF
(b='1')
THEN
next_state<=s2;
ELSIF
(a='1')
THEN
next_state<=s1;
ELSEnext_state<=s0;
END
IF;
WHENs1=>
IF
(a='1')
THEN
next_state<=s2;
ELSIF
(b='1')
THEN
next_state<=s0;
ELSEnext_state<=s1;
END
IF;
WHENs2=>
next_state<=s0;
WHEN
OTHERS
=>next_state<=s0;
END
CASE;
END
PROCESSnextstate_proc;
--------------------------------------------------------------output_proc:
PROCESS
(
current_state
)
--------------------------------------------------------------
BEGIN
--CombinedActions
CASEcurrent_stateIS
WHENs1=>
x<='1';
WHENs2=>
y<='1';
WHEN
OTHERS
=>
NULL;
END
CASE;
END
PROCESSoutput_proc;
ENDfsm;状态类型定义时序逻辑进程输入组合逻辑进程输出组合逻辑进程3VHDL语言描述状态机RTL级FSM描述评判标准安全,稳定性高所谓FSM安全是指FSM不会进入死循环,特别是不会进入非预知状态,而且由于某些扰动进入非设计状态,也能很快的恢复到正常的状态循环中来。这里面有两层含义,第一:要求该FSM的综合实现结果无毛刺等异常扰动;第二:要求状态机要完备,即使收到异常扰动进入非设计状态,也能很快恢复到正常状态。速度快,满足设计的频率要求任何RLT设计都应该满足设计的频率要求。面积小,满足设计的面积要求任何RTL设计都应该满足设计的面积要求。FSM设计要清晰易懂、易维护不规范的FSM写法上很难让其他人解读,甚至过一段时间后设计者也发现很难维护。3VHDL语言描述状态机时序逻辑设计由右图可知,clock和reset
作为时序逻辑部分的输入, Nx_state也使输入之一。 Pr_state作为其输出。可以
描述如下PROCESS
(reset,clock)BEGIN
IF
(reset='1')
THEN pr_state<=state0;
ELSIF
(clock'EVENT
ANDclock='1')
THEN pr_state<=nx_state;
END
IF;END
PROCESS;3VHDL语言描述状态机组合逻辑设计右图所示的上部分是完全组合逻辑电路,所以可以很好的应用并行特性来设计。不过,在下面给出的示例代码中,使用了顺序编码的方式,主要使用VHDL语言中的CASE语句进行设计。下页给出示例代码。3VHDL语言描述状态机PROCESS
(input,pr_state)BEGIN
CASEpr_stateIS
WHENstate0=>
IF
(input=...)
THEN nx_state<=state1;
ELSIF
...
END
IF;
WHENstate1=>
IF
(input=...)
THEN nx_state<=state2;
ELSIF
...
END
IF;
WHENstate2=>
IF
(input=...)
THEN nx_state<=state3;
ELSIF
...
END
IF;
...
END
CASE;END
PROCESS;PROCESS
(input,pr_state)BEGINIF(input=...ANDpr_state=...)
THENoutput<=
<value>;ELSIF...ENDIF;ENDPROCESS;ROCESS
(pr_state)BEGINIF(pr_state=...)
THENoutput<=
<value>;ELSIF...ENDIF;ENDPROCESS;3VHDL语言描述状态机通过以上分析,我们在这里给出使用VHDL语言描述状态机的两个一般性的“套路”。3VHDL语言描述状态机模板一LIBRARY
IEEE;USE
IEEE.STD_LOGIC_1164.ALL;-----------------------------------------ENTITY
<entity_name>
IS
PORT
(input:
IN<data_type>; reset,clock:
IN
STD_LOGIC; output:
OUT<data_type>);END
<entity_name>;-----------------------------------------ARCHITECTURE
<arch_name>OF<entity_name>IS
TYPEstateIS
(state0,state1,state2,state3,
...);
SIGNALpr_state,nx_state:state;BEGIN------------Lowersection----------------
PROCESS
(reset,clock)
BEGIN
IF
(reset='1')
THEN pr_state<=state0;
ELSIF
(clock'EVENT
ANDclock='1')
THEN pr_state<=nx_state;
END
IF;
END
PROCESS;------------Uppersection-----------------
PROCESS
(input,pr_state)
BEGIN
CASEpr_stateIS
WHENstate0=>
IF
(input=...)
THEN outpur<=
<value>; nx_state<=state1; ELSI...
END
IF;
WHENstate1=>
IF
(input=...)
THEN output<=
<value>; nx_state<=state2; ELSI...
END
IF;
WHENstate2=>
IF
(input=...)
THEN outpur<=
<value>; nx_state<=state3; ELSI...
END
IF;
...
END
CASE;
END
PROCESS;END
<arch_name>;3VHDL语言描述状态机模板二LIBRARY
ieee;USE
ieee.std_logic_1164.all;-------------------------------------------ENTITY
<ent_name>
IS
PORT
(input:
IN
<data_type>; reset,clock:
IN
STD_LOGIC; output:
OUT
<data_type>);END
<ent_name>;------------------------------------------ARCHITECTURE
<arch_name>OF<ent_name>IS
TYPEstatesIS
(state0,state1,state2,state3,
...);
SIGNALpr_state,nx_state:states;
SIGNALtemp:
<data_type>;BEGIN---------------Lowersection:-----------
PROCESS
(reset,clock)
BEGIN
IF
(reset='1')
THEN pr_state<=state0;
ELSIF
(clock'EVENT
ANDclock='1')
THEN output<=temp; pr_state<=nx_state;
END
IF;
END
PROCESS;---------------Uppersection:----------
PROCESS
(pr_state)
BEGIN
CASEpr_stateIS
WHENstate0=> temp<=
<value>;
IF
(condition)
THEN
nx_state<=state1;
...
END
IF;
WHENstate1=> temp<=
<value>;
IF
(condition)
THEN
nx_state<=state2;
...
END
IF;
WHENstate2=> temp<=
<value>;
IF
(condition)
THEN
nx_state<=state3;
...
END
IF;
...
END
CASE;
END
PROCESS;END
<arch_name>;仅一个寄存器3VHDL语言描述状态机举例(模板一)------------------------------------------------LIBRARY
ieee;USE
ieee.std_logic_1164.all;-----------------------------------------------ENTITYsimple_fsmIS
PORT
(a,b,d,clk,rst:
IN
BIT; x:
OUT
BIT);ENDsimple_fsm;-----------------------------------------------ARCHITECTUREsimple_fsmOFsimple_fsmIS
TYPEstateIS
(stateA,stateB);
SIGNALpr_state,nx_state:state;BEGIN----------Lowersection:----------------------
PROCESS
(rst,clk)
BEGIN
IF
(rst='1')
THEN pr_state<=stateA;
ELSIF
(clk'EVENT
ANDclk='1')
THEN pr_state<=nx_state;
END
IF;
END
PROCESS;-------------Uppersection:--------------------
PROCESS
(a,b,d,pr_state)
BEGIN
CASEpr_stateIS
WHENstateA=> x<=a;
IF
(d='1')
THEN nx_state<=stateB;
ELSE nx_state<=stateA;
END
IF;
WHENstateB=> x<=b;
IF
(d='1')
THEN
nx_state<=stateA;
ELSE nx_state<=stateB;
END
IF;
END
CASE;
END
PROCESS;ENDsimple_fsm;
使用synplify综合后的RTL图3VHDL语言描述状态机举例(模板二)------------------------------------------------LIBRARY
ieee;USE
ieee.std_logic_1164.all;-----------------------------------------------ENTITYsimple_fsmIS
PORT
(a,b,d,clk,rst:
IN
BIT; x:
OUT
BIT);ENDsimple_fsm;-----------------------------------------------ARCHITECTUREsimple_fsmOFsimple_fsmIS
TYPEstateIS
(stateA,stateB);
SIGNALpr_state,nx_state:state;
SIGNALtemp:
BIT
:='0';BEGIN----------Lowersection:----------------------
PROCESS
(rst,clk)
BEGIN
IF
(rst='1')
THEN pr_state<=stateA;
ELSIF
(clk'EVENT
ANDclk='1')
THEN x<=temp; pr_state<=nx_state;
END
IF;
END
PROCESS;-------------Uppersection:--------------------
PROCESS
(a,b,d,pr_state)
BEGIN
CASEpr_stateIS
WHENstateA=> temp<=a;
IF
(d='1')
THEN nx_state<=stateB;
ELSE nx_state<=stateA;
END
IF;
WHENstateB=> temp<=b;
IF
(d='1')
THEN
nx_state<=stateA;
ELSE nx_state<=stateB;
END
IF;
END
CASE;
END
PROCESS;ENDsimple_fsm;
使用synplify综合后的RTL图多出一个输出寄存器3VHDL语言描述状态机两种方式的仿真结果对比模板一方式实现的Mealy型状态机,其输出结果与时钟不同步。模板二方式实现的同样的状态机,其输出结果与时钟是同步的。3VHDL语言描述状态机结论从形式上看:模板一只存储了pr_state;而模板二同时存储了output。对于Mealy型状态机,为了时序同步,必须采用模板二的方式。而moore型状态机,则不需要使用模板二的描述方式。模板一模板二4Moore型状态机举例上例是一个Mealy型状态机。下面我们来设计一个Moore型状态机。例:设计一个串行数据流检测器。要求:输入连续的二进制数,当检测到连续“1”的个数大于2个的时候,输出“1”;其他状态输出“0”。分析:确定所需的状态数,取决于数据流中出现连续“1”的个数,应该为4个状态。4Moore型状态机举例画出状态转移图zero(q=0)one(q=0)two(q=0)three(q=1)rstd=0d=1d=0d=0d=0d=1d=1d=14Moore型状态机举例根据状态转移图,写出VHDL代码----------------------------------------LIBRARY
ieee;USE
ieee.std_logic_1164.all;----------------------------------------ENTITYstring_detectorIS
PORT
(d,clk,rst:
IN
BIT; q:
OUT
BIT);ENDstring_detector;---------------------------------------ARCHITECTUREmy_archOFstring_detectorIS
TYPEstateIS
(zero,one,two,three);
SIGNALpr_state,nx_state:state;BEGIN
-----------Lowersection;-----------
PROCESS
(rst,clk)
BEGIN
IF
(rst='1')
THEN pr_state<=zero;
ELSIF
(clk'EVENT
ANDclk='1')
THEN pr_state<=nx_state;
END
IF;
END
PROCESS;
-----------Uppersection:------------
PROCESS
(d,pr_state)
BEGIN
CASEpr_stateIS
WHENzero=> q<='0';4Moore型状态机举例
IF
(d='1')
THEN nx_state<=one;
ELSE nx_state<=zero;
END
IF;
WHENone=> q<='0';
IF
(d='1')
THEN nx_state<=two;
ELSE nx_state<=zero;
END
IF;
WHENtwo=> q<='0';
IF
(d='1')
THEN nx_state<=three;
ELSE nx_state<=zero;
END
IF;
WHENthree=> q<='1';
IF
(d='1')
THEN nx_state<=three;
ELSE nx_state<=zero;
END
IF;
END
CASE;END
PROCESS;ENDmy_arch;
4Moore型状态机举例设计后使用synplify生成的状态转移图如下虽然使用的是模板一的风格描述的状态机,但是输出依然可以保持与时钟上升沿同步。4Moore型状态机举例功能仿真后的结果虽然使用的是模板一的风格描述的状态机,但是输出依然可以保持与时钟上升沿同步。虽然使用的是模板一的风格描述的状态机,但是输出依然可以保持与时钟上升沿同步。可见,对于Moore状态机,不需要对输出进行同步。4Moore型状态机举例使用synplify综合之后,可以看出默认的编码方式是one-hot编码。综合后是one-hot编码方式4Moore型状态机举例如果将在原来的程序的基础上通过attribute语句指定编码方式,即将结构体的声明部分添加如下代码,可将编码方式改为二进制编码:
ATTRIBUTEenum_encoding:
string;
ATTRIBUTEenum_encodingOFstate:
TYPE
IS
"00011011";
综合后是binary码编码方式4Moore型状态机举例以上两种情况是在默认综合的情况下生成的,即没有将“FSMExplorer”的选项勾选。如果将“FSMExplorer”选项勾选,那么即使是在程序中指定了编码方式,其综合后的状态编码也是one-hot编码。因此,在状态机设计的时候,大家要注意软件的使用细节,应当有意识的通过软件进行性能优化。没有勾选“FSMExplorer”5三种进程描述状态机方式对比单进程描述它就是将状态机的三个逻辑单元(状态寄存器、下状态产生逻辑、输出逻辑)合并起来,采用一个进程描述。适用于简单的设计;对于复杂的状态机,可读性差,易出错,不利于EDA软件优化。5三种进程描述状态机方式对比下一状态组合逻辑寄存输出逻辑当前状态时序逻辑单进程描述单进程描述下一状态组合逻辑寄存输出逻辑当前状态时序逻辑5三种进程描述状态机方式对比双进程描述将输出进程和状态转移进程合并起来,采用一个组合逻辑来描述。通常情况下,综合工具可以较好地识别这两部逻辑并进行优化,但建议如果不是输出逻辑非常简单,还是采用两个不同的进程来描述,这样综合工具可以明确下状态转移逻辑,优化效果较好。另一种双进程描述——将下状态转移逻辑和当前状态寄存器描述结合,省略中间变量。5三种进程描述状态机方式对比双进程描述第二个进程(纯组合逻辑),描述状态转移条件的判断。第一个进程(同步时序),格式化地描述次态到现态的转移。一般情况是组合逻辑输出,如果时序允许,尽量插入寄存器输出。5三种进程描述状态机方式对比三进程描述一般可以采用三个进程来描述状态机:描述状态寄存器的时序进程描述下状态产生逻辑的组合进程定义输出的组合逻辑进程5三种进程描述状态机方式对比三进程描述第一个进程(同步时序)格式化描述次态寄存器迁移到现态寄存器第二个进程(纯组合逻辑),描述状态转移条件判断第三个进程(同步时序),格式化描述次态的寄存器输出。5三种进程描述状态机方式对比举例:分别使用单进程、双进程、三进程描述方式如下状态转移图所示的状态机:5三种进程描述状态机方式对比单进程描述的VHDL代码LIBRARY
IEEE;USE
IEEE.STD_LOGIC_1164.ALL;ENTITYs_machine1IS
PORT
(clk,reset:
IN
STD_LOGIC; state_inputs:
IN
STD_LOGIC_VECTOR
(0
TO
1); comb_outputs:
OUT
INTEGER
RANGE
0
TO
15
);ENDs_machine2;ARCHITECTUREbehvOFs_machine1IS TYPEFSM_STIS
(s0,s1,s2,s3);
VARIABLEstate:FSM_ST;BEGIN
PROCESS
(reset,clk,state,state_inputs)
BEGIN
IFreset='1'THEN
state<=s0;
ELSIFclk='1'ANDclk'EVENT
THEN
CASEstateIS
WHENs0=>
comb_outputs<=
5;
IFstate_inputs=
"00"
THEN
state<=s0;
ELSE
state<=s1;
END
IF;
5三种进程描述状态机方式对比(续上页)WHENs1=>
comb_outputs<=
8;
IFstate_inputs=
"00"
THEN
state<=s1;
ELSE
state<=s2;
END
IF;
WHENs2=> comb_outputs<=
12;
IFstate_inputs=
"11"
THEN
state<=s3;
ELSE
state<=s0;
END
IF;
WHENs3=>
comb_outputs<=
14;
IFstate_inputs=
"11"
THEN state<=s3;
ELSE
state<=s0;
END
IF;
END
CASE;
END
IF;
END
PROCESS;ENDbehv;--(完)5三种进程描述状态机方式对比单进程描述RTL图5三种进程描述状态机方式对比双进程描述的VHDL代码LIBRARY
IEEE;USE
IEEE.STD_LOGIC_1164.ALL;ENTITYs_machineIS
PORT
(clk,reset:
IN
STD_LOGIC; state_inputs:
IN
STD_LOGIC_VECTOR
(0
TO
1); comb_outputs:
OUT
INTEGER
RANGE
0
TO
15
);ENDs_machine;ARCHITECTUREbehvOFs_machineIS
TYPEFSM_STIS
(s0,s1,s2,s3);
SIGNALcurrent_state,next_state:FSM_ST;BEGIN REG:
PROCESS
(reset,clk)
BEGIN
IFreset='1'THENcurrent_state<=s0;
ELSIFclk='1'ANDclk'EVENT
THEN current_state<=next_state;
END
IF;
END
PROCESS; COM:
PROCESS
(current_state,state_inputs)
BEGIN
CASEcurrent_stateIS
WHENs0=>
comb_outputs<=
5;
IFstate_inputs=
"00"
THEN
next_state<=s0;
ELSE
5三种进程描述状态机方式对比
next_state<=s1;
END
IF;
WHENs1=>
comb_outputs<=
8;
IFstate_inputs=
"00"
THEN
next_state<=s1;
ELSE
next_state<=s2;
END
IF;
WHENs2=> comb_outputs<=
12;
IFstate_inputs=
"11"
THEN
next_state<=s3;
ELSE
next_state<=s0;
END
IF;
WHENs3=>
comb_outputs<=
14;
IFstate_inputs=
"11"
THEN next_state<=s3;
ELSE
next_state<=s0;
END
IF;
END
CASE;
END
PROCESS;ENDbehv;5三种进程描述状态机方式对比双进程描述产生的RTL图5三种进程描述状态机方式对比三进程描述的VHDL代码LIBRARY
IEEE;USE
IEEE.STD_LOGIC_1164.ALL;ENTITYs_machine2IS
PORT
(clk,reset:
IN
STD_LOGIC; state_inputs:
IN
STD_LOGIC_VECTOR
(0
TO
1); comb_outputs:
OUT
INTEGER
RANGE
0
TO
15
);ENDs_machine2;ARCHITECTUREbehvOFs_machine2IS
TYPEFSM_STIS
(s0,s1,s2,s3);
SIGNALcurrent_state,next_state:FSM_ST;BEGIN REG:
PROCESS
(reset,clk)
BEGIN
IFreset='1'THEN
current_state<=s0;
ELSIFclk='1'ANDclk'EVENT
THEN current_state<=next_state;
END
IF;
END
PROCESS; COM_STATE:
PROCESS(current_state,state_inputs)
BEGIN
CASEcurrent_stateIS
WHENs0=>
IFstate_inputs=
"00"
THEN
next_state<=s0;
ELSE
next_state<=s1;
END
IF;
WHENs1=>
IFstate_inputs=
"01"
THEN
next_state<=s1;5三种进程描述状态机方式对比
ELSE
next_state<=s2;
END
IF;
WHENs2=>
IFstate_inputs=
"10"
THEN
next_state<=s3;
ELSE
next_state<=s0;
END
IF;
WHENs3=>
IFstate_inputs=
"11"
THEN next_state<=s3;
ELSE
next_state<=s0;
END
IF;
END
CASE;
END
PROCESS;COM_OUT:
PROCESS
(current_state)
BEGIN
CASEcurrent_stateIS
WHENs0=> comb_outputs<=
5;
WHENs1=> comb_outputs<=
8;
WHENs2=> comb_outputs<=
12;
WHENs3=> comb_outputs<=
14;
END
CASE;
END
PROCESS;ENDbehv;5三种进程描述状态机方式对比三进程描述产生的RTL图5三种进程描述状态机方式对比从以上一个很简单的状态机设计的对比上,可以看出,采用单进程方式描述的状态机其RTL电路相对于另外两种描述方式多产生了一个寄存器。对于简单的设计,采用双进程和三进程综合结果没有差别。建议描述状态机时使用双进程或者三进程的方式。6ASM图法状态机设计ASM简介ASM本质上是一个有限状态机,主要用于同步系统。ASM精确地表示出状态转换的时间关系。从形式上看,这种流程图类似于描述软件程序的流程图,但它能和实现它的硬件很好的对应起来。6ASM图法状态机设计ASM图的组成状态框用一个矩形框来表示一个状态。状态的名称写在左上角;状态的二进制编码写在右上角;操作内容写在矩形框内。在同步系统中,状态经历的时间至少是一个时钟周期,也可以是几个周期。寄存器操作或输出状态名二进制码R0C=‘1’T10016ASM图法状态机设计ASM图的组成判断框用单入口双出口的菱形或单入口多出口的多边形符号表示。在菱形和多边形框内写检测条件,在分支出口处注明各分支所满足的条件。判断框必须跟着状态框。判断框的执行与状态框在同一时钟周期内。条件01引出分支引出分支6ASM图法状态机设计ASM图组成条件框用椭圆框表示。条件框一定是与判断框的一个转移分支相连接,仅当判断框中判断变量满足相应的转移条件时,才进行条件框中标明的操作和信号输出。虽然条件框和状态框都能执行操作和输出信号,但二者有很大区别。寄存器操作或输出6ASM图法状态机设计ASM图的组成经过状态分配的ASM图状态框判断框条件框状态单元状态单元由一个状态框或条件框组成。状态单元的入口必须是状态框的入口,出口可以有几个,但必须指向状态框。仅包含一个状态框,无判断框和条件框的ASM块是一个简单块。每个状态单元表示一个时钟周期内系统所处的状态,在该状态下完成快内的若干操作。虚线框部分就是一个状态单元,条件框中R0也在这个状态单元内执行。6ASM图法状态机设计用ASM图描述一个系统控制器时,实际上是描述了该控制器的硬件结构和时序工作过程,因此ASM图与硬件有很好的对应关系,ASM图的硬件实现有以下几种方法:用计数器实现ASM图用多路选择器实现ASM图每个状态一个触发器(定序型)基于ROM法实现ASM图(微程序型)ASM图的硬件实现一共有4中方法,这里我们重点介绍用计数器实现ASM图的方法。6ASM图法状态机设计ASM图的状态分配N个状态变量可以描述2^n个状态。该ASM图中有3个状态,所以需要两个状态变量。设两个状态变量为Q2Q1,我们选用2个D触发器。用二进制计数序列依次表示状态。6ASM图法状态机设计状态转换表因为10和11状态与输入X无关,所以X值可作任意值处理。表中01未指定状态,采用计数器实现,因此需考虑因偶然因素出现01状态时,应强迫其次态为00,所以一旦出现01状态后,经过一个时钟周期就可以自动回到有用状态循环。现态次态输出Q2Q1XQ2n+1Q1n+1Z1Z20001011001111001X000010X000011X00006ASM图法状态机设计由状态转换表推导触发器的驱动方程对于复杂的ASM图和相应的状态表可用卡诺图对次态进行化简,得到简化的驱动方程。ASM图除了可以得到状态表和驱动方程外,还可以得到输出方程6ASM图法状态机设计ASM图的硬件实现采用计数器法实现ASM图,一旦ASM图有很小的改动,就需要重新设计与次态相关的组合电路部分。此外,当系统的状态超过8个时,ASM图的硬件实现也很复杂。学习ASM图的硬件实现有助于我们更好的理解后续的内容,下面我们将学习如何使用VHDL实现ASM图。6ASM图法状态机设计MDS(MnemonicDocumentedState)1.MDS图符号Si表示状态图SiSj
只要时钟CP的有效沿到来,状态Si在条件E下转换到状态SjE可以是积项,布尔表达式等。SiSjESiZ↑表示进入状态Si时,输出Z变成有效。SiZ↓表示进入状态Si时,输出Z变成无效。SiZ↑↓表示进入状态Si时,输出Z有效;退出时,输出Z无效。SiZ↑↓=Si•E
如果条件E满足,进入状态Si时,输出Z有效;退出时,输出Z无效。
只要时钟CP的有效沿到来,表示状态Si无条件转换到状态Sj。
MDS图与状态图十分相似,且扩展了状态图的功能,又简练了状态图。MDS图表现设计过程时,方便清晰,具有较大的灵活性。6ASM图法状态机设计状态图到MDS图
这是一个莫尔型电路,三个状态A、B、C和输出Z1Z2依次为01、11、00。说明:A态到B态时,Z1由0变1,Z1有效;B态到C态时,Z1由1变0,Z1无效。Z1↑↓同理:C态到A态时,Z2由0变1,Z2有效;B态到C态时,Z2由1变0,Z2无效。Z2↑Z2↓
加了三个输入X1、X2、X3的情况。A/01B/11C/00ABCABCX1X3X1X1Z2Z2Z1X2X3+X1X26ASM图法状态机设计状态图到MDS图有条件输出的情况
有三个状态A、B、C,当输入为1时,输出为1,A→B;当输入为0时,输出为0,A→C(输入/输出)。到MDS图ABCXXZ=A·XABC1/10/06ASM图法状态机设计ASM图到MDS图的转换ASM图的状态框对应MDS图中的Si。ASM图的判断框构成MDS图的分支控制器的输出是为实现状态框的操作而发出的信息,对应MDS图中状态圈外侧的输出。(A)A(B)BASM图MDS图START?YESNOSTARTSTART计数器复位执行CR↑↓OPR↑↓6ASM图法状态机设计ASM图的条件输出与MDS图的条件输出相对应注:A态返回到A态时,有一条件输出:当X=0,CP=0时,RUN有效。到MDS图X?CPRUN(A)NONOYES(B)YESABXXRUN=A·X·CP6ASM图法状态机设计举例要求设计一套交叉路口交通信号灯,该路口有一条交通干线与支线,支线上装有传感器,当支线有车通过时,传感器输出信号CAR=1。正常的工作状态时干线亮绿灯,支线亮红灯;当CAR=1时,干线亮红灯,支线亮绿灯,并开始计时,START_TIEMR=1,当计时结束,即信号TIMED=1时,重新回到正常工作状态(干线亮绿灯,支线亮红灯)。6ASM图法状态机设计设计步骤根据设计要求,我们先确定系统的输入:clock,car,timed.然后确定系统的输出:start_timer;major_green,minor_green.(枚举类型)分析系统所有可能出现的状态:state=Gmajor_green=1,minor_green=0;state=Rmajor_green=0,minor_green=1;根据题意,画出ASM图:6ASM图法状态机设计单进程状态机PROCESS
(clock,timed,car)
TYPEstate_typeIS(G,R);
VARIABLEstate:state_type;BEGIN
IF(rising_edge(clock))THEN
CASEstateIS
WHENG=> major_green<=‘1’; minor_green<=‘0’;
IF(car=‘1’)THEN start_timer<=‘1’; state:=R;
ENDIF;6ASM图法状态机设计单进程状态机
WHENR=> major_green<=‘0’; minor_green<=‘1’;
IF(timed=‘1’)THEN start_timer<=‘1’; state:=G;
ENDIF;
ENDCASE; ENDIFENDPROCESS;6ASM图法状态机设计单进程状态机:单进程状态变量可以定义为变量类型,放在进程的说明部分一般在进程的开头写上时钟有效边沿的检测语句注意在这里进程敏感参数表中的car和timed可省去rising_edge(clock)也可以写成clock’eventandclock=‘1’条件涵盖不完整的if语句会产生寄存器这是将时序电路和组合电路混合的系统,有时会引入不必要的寄存器。如果将描述时序的部分放在具有边沿检测条件的if语句或wait语句的进程中,而将描述组合电路的语句放在普通的进程中,这样可以有效控制寄存器的引入。6ASM图法状态机设计双进程状态机ARCHITECTUREasm2OFtrafficIS
TYPEstate_typeIS(G,R);
SIGNALpr_state,next_state:state_type;BEGIN seq:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年人力考试题库及答案
- 教师职业认识题目及答案
- 教海探航语文题目及答案
- 应对复杂病例的护理对策查房
- 2025年招行ai面试题库及答案
- 街道给排水管网建设工程规划设计方案
- 2025年防空专业考试题及答案
- 深静脉置管操作安全护理
- 2025年人文医师考试题及答案
- 2025年客服考试题及答案
- 仓储业务基础知识培训课件
- 苏教版二年级数学下册第六单元《三位数的加法笔算》教案
- 7年级数学试卷(有答案)
- 干热河谷优秀课件
- 误吸预防与处理
- 台风过后复工前安全检查表
- GB/T 20840.8-2007互感器第8部分:电子式电流互感器
- GB/T 2007.1-1987散装矿产品取样、制样通则手工取样方法
- 《歌唱祖国》-课件
- 天津临港海洋重工建造基地码头工程(PPT)
- 图像西方与想象西方——《良友》西方形象的重构与呈现
评论
0/150
提交评论