




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023一年級數學上冊 六 認識圖形第2課時 我說你做教學設計 北師大版
- 2023七年級英語下冊 Unit 7 It's raining Section A 第1課時(1a-2d)教學設計 (新版)人教新目標版
- 七年級地理上冊 第三章 第三節 降水的變化與分布教學設計3 (新版)新人教版
- 2024-2025學年高中物理 第二章 機械波 5 波的干涉、衍射教學設計2 教科版選修3-4
- 10我們愛和平 教學設計
- 4《少讓父母為我操心》教學設計-2023-2024學年道德與法治四年級上冊統編版
- 2024八年級英語下冊 Unit 1 Spring Is ComingLesson 2 It's Getting Warmer教學設計(新版)冀教版
- 三年級信息技術下冊 第5課《描繪美麗的大自然》教學設計2 川教版
- 13 精衛填海教學設計-2024-2025學年四年級上冊語文統編版
- 2024秋三年級英語上冊 Module 4 Unit 2 Its black dog教學設計 外研版(三起)
- 2024工業機器人考試題庫(含答案)
- 物業法律法規指導培訓
- 中華護理學學術壁報課件模板
- 2024年福建省中考歷史試卷(含標準答案及解析)
- GB/T 19822-2024鋁及鋁合金硬質陽極氧化膜規范
- 2024離婚不離家的協議書
- 【永輝超市公司企業績效考核方法的案例分析(12000字論文)】
- 海康威視校招在線測評題庫
- 錳礦供應鏈風險評估與控制
- 學校課間安全教育課件
- 正大鍍鋅鋼管檢測報告
評論
0/150
提交評論