已看第五章VHDL有限狀態(tài)機設計_第1頁
已看第五章VHDL有限狀態(tài)機設計_第2頁
已看第五章VHDL有限狀態(tài)機設計_第3頁
已看第五章VHDL有限狀態(tài)機設計_第4頁
已看第五章VHDL有限狀態(tài)機設計_第5頁
已閱讀5頁,還剩101頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

VHDL有限狀態(tài)機設計內容有限狀態(tài)機的基本概念狀態(tài)機的基本描述方式VHDL語言描述狀態(tài)機狀態(tài)機設計舉例三種進程描述狀態(tài)機方式對比毛刺信號的數(shù)字排除方式1有限狀態(tài)機的基本概念狀態(tài)機是一種思想方法狀態(tài)機的本質就是對具有邏輯順序或時序規(guī)律事件的一種描述方法。具有邏輯順序和時序規(guī)律的事件都適合用狀態(tài)機描述。1有限狀態(tài)機的基本概念某學生在學校的學習生活可以簡單地概括為宿舍、教室、食堂之間的周而復始。1有限狀態(tài)機的基本概念右圖也是一張標準的狀態(tài)轉移圖,通過狀態(tài)機的方式我們再次清晰地描述另一個學生的在校生活方式。1有限狀態(tài)機的基本概念例:設計一個以秒為單位的4位流水燈。要求:每秒只能點亮1個LED,點亮方式為高電平有效。例:設計一個串行數(shù)據(jù)流檢測器。要求:輸入連續(xù)的二進制數(shù),當檢測到連續(xù)“1”的個數(shù)大于2個的時候,輸出“1”;其他狀態(tài)輸出“0”。1有限狀態(tài)機的基本概念有限狀態(tài)機的定義所謂有限狀態(tài)機是指那些輸出取決于過去輸入部分和當前輸入部分的時序邏輯電路。1有限狀態(tài)機的基本概念狀態(tài)機的本質對具有“邏輯順序”和“時序規(guī)律”事件的一種描述方法。應用思路從狀態(tài)變量入手,分析每個狀態(tài)的輸入,狀態(tài)轉移和輸出,從而完成電路的功能。首先明確電路的輸出關系,這些輸出相當于狀態(tài)的輸出,回溯規(guī)劃每個狀態(tài)和狀態(tài)轉移條件與狀態(tài)輸入。1有限狀態(tài)機的基本概念狀態(tài)機的基本要素狀態(tài):也叫狀態(tài)變量。在邏輯設計中,使用狀態(tài)劃分邏輯順序和時序規(guī)律。輸出:輸出指在某一個狀態(tài)時特定發(fā)生的事件。輸入:指狀態(tài)機中進入每個狀態(tài)的條件,有的狀態(tài)機沒有輸入條件,其中的狀態(tài)轉移較為簡單,有的狀態(tài)機有輸入條件,當某個輸入條件存在時才能轉移到相應的狀態(tài)。1有限狀態(tài)機的基本概念有限狀態(tài)機的組成組合邏輯組合邏輯又可分為次態(tài)邏輯和輸出邏輯兩個部分。其中:次態(tài)邏輯的功能是用來確定有限狀態(tài)機的下一個狀態(tài);輸出邏輯是用來確定有限狀態(tài)機的輸出。時序邏輯時序邏輯:同步時序方式工作下運轉及狀態(tài)轉換。寄存器邏輯寄存器邏輯的功能:用來存儲有限狀態(tài)機的內部狀態(tài)。1有限狀態(tài)機的基本概念狀態(tài)機實現(xiàn)三個功能狀態(tài)譯碼:根據(jù)輸入以及系統(tǒng)當前的狀態(tài),

由狀態(tài)方程來決定下一狀態(tài)的狀態(tài)碼。狀態(tài)輸出:根據(jù)當前的狀態(tài)碼決定電路當前輸出。狀態(tài)轉換:將下一狀態(tài)轉變?yōu)楫斍盃顟B(tài)。1有限狀態(tài)機的基本概念1.說明部分

ARCHITECTURE...ISTYPEFSM_STIS(s0,s1,s2,s3);SIGNALcurrent_state,next_state:FSM_ST;2.主控時序進程負責狀態(tài)機運轉和在時鐘驅動下的狀態(tài)轉換,隨外部時鐘信號,以同步時序方式工作。3.主控組合進程通過pr_state的改變,進入主控組合進程,根據(jù)外部輸入信號確定輸出和下一狀態(tài)的走向(nx_state)4.輔助進程1有限狀態(tài)機的基本概念有限狀態(tài)機的類型從信號輸出方式上分Mealy型狀態(tài)機Moore型狀態(tài)機從結構上分單進程狀態(tài)機兩進程狀態(tài)機三進程狀態(tài)機從表達方式上分符號化狀態(tài)機確定狀態(tài)編碼的狀態(tài)機從編碼方式上分順序編碼狀態(tài)機獨熱碼狀態(tài)機格雷碼狀態(tài)機1有限狀態(tài)機的基本概念Moore型有限狀態(tài)機是指那些輸出信號僅與當前狀態(tài)有關的有限狀態(tài)機,即可以把Moore型有限狀態(tài)機的輸出看成是當前狀態(tài)的函數(shù)。Moore型有限狀態(tài)機框圖:1有限狀態(tài)機的基本概念Mealy型有限狀態(tài)機是指那些輸出信號不僅與當前狀態(tài)有關,而且還與所有的輸入信號有關的有限狀態(tài)機,即可以把Mealy有限狀態(tài)機的輸出看作當前狀態(tài)和所有輸入信號的函數(shù)??梢姡琈ealy有限狀態(tài)機要比Moore有限狀態(tài)機復雜一些。Mealy有限狀態(tài)機框圖:1有限狀態(tài)機的基本概念Moore型和Mealy型有限狀態(tài)機的區(qū)別:Moore型有限狀態(tài)機僅與當前狀態(tài)有關,而與輸入信號無關;Mealy型有限狀態(tài)機不但與當前狀態(tài)有關,而且還與狀態(tài)機的輸入信號有關。1有限狀態(tài)機的基本概念采用何種有限狀態(tài)機的判別條件:Moore型有限狀態(tài)機可能要比相應的Mealy型有限狀態(tài)機需要更多的狀態(tài)。Moore型有限狀態(tài)機的輸出與當前的輸入部分無關,因此當前輸入產生的任何效果將會延遲到下一個時鐘周期。可見,Moore型狀態(tài)機的最大優(yōu)點就是可以將輸入部分和輸出部分隔離開。對于Mealy型有限狀態(tài)機來說,由于它的輸出是輸入信號的函數(shù),因此如果輸入信號發(fā)生改變,那么輸出可以在一個時鐘周期內發(fā)生改變。1有限狀態(tài)機的基本概念單進程狀態(tài)機整個狀態(tài)機的描述在一個進程中完成雙進程狀態(tài)機將組合邏輯部分和時序邏輯部分分開描述,放在結構體的說明部分三進程狀態(tài)機將組合邏輯部分再分為產生次態(tài)的組合邏輯部分和產生輸出的組合邏輯部分,與時序邏輯部分一起放在結構體的說明部分1有限狀態(tài)機的基本概念符號化狀態(tài)機所謂符號化狀態(tài)機,就是在程序的說明部分使用TYPE語句定義枚舉類型,其元素用狀態(tài)機的狀態(tài)名來定義。狀態(tài)變量(如狀態(tài)機的現(xiàn)態(tài)和次態(tài))定義為變量或信號,并將狀態(tài)變量的數(shù)據(jù)類型定義為含有既定狀態(tài)元素的枚舉類型。在使用多進程時,為便于信息傳遞,要將狀態(tài)變量定義為信號。1有限狀態(tài)機的基本概念類型定義語句TYPE數(shù)據(jù)類型名IS數(shù)據(jù)類型定義OF基本數(shù)據(jù)類型;

TYPE數(shù)據(jù)類型名IS數(shù)據(jù)類型定義;例:TYPEst1ISARRAY(0TO15)OFSTD_LOGIC;TYPEweekIS(sun,mon,tue,wed,thu,fri,sat);符號化狀態(tài)機應用TYPEm_stateIS(st0,st1,st2,st3,st4,st5);SIGNALpresent_state,next_state:m_state;1有限狀態(tài)機的基本概念確定狀態(tài)編碼的狀態(tài)機使用符號化定義的枚舉類型,枚舉類型文字元素的編碼通常是自動設置的,綜合器根據(jù)優(yōu)化情況、優(yōu)化控制的設置或設計者的特殊設定來確定各元素具體編碼的二進制位數(shù)、數(shù)值及元素間編碼的順序。也可以在程序中指明編碼方式。常用的編碼方式2進制編碼格雷碼編碼One-hot編碼1有限狀態(tài)機的基本概念2進制編碼狀態(tài)機的每一個狀態(tài)用二進制位來編碼例:實現(xiàn)4狀態(tài)的狀態(tài)機,其其二進制編碼可為狀態(tài)1=“00”狀態(tài)2=“01”狀態(tài)3=“10”狀態(tài)4=“11”需要的寄存器數(shù)量最少,有n個寄存器就可以對2^n個狀態(tài)進行編碼。需要更多的外部輔助邏輯,并且速度較慢。1有限狀態(tài)機的基本概念格雷碼狀態(tài)機編碼格雷碼編碼每次僅一個狀態(tài)位的值發(fā)生變化例:實現(xiàn)4狀態(tài)的狀態(tài)機,其格雷碼編碼可為狀態(tài)1=“00”狀態(tài)2=“01”狀態(tài)3=“11”狀態(tài)4=“10”特點:觸發(fā)器使用較少,速度較慢,不會產生兩位同時翻轉的情況。當狀態(tài)位的輸出被異步應用時,格雷碼編碼是有益的。1有限狀態(tài)機的基本概念One-hot狀態(tài)機編碼Onehot的編碼方案對每一個狀態(tài)采用一個觸發(fā)器,即4個狀態(tài)的狀態(tài)機需4個觸發(fā)器。同一時間僅1個狀態(tài)位處于有效電平(如邏輯“1”)例:實現(xiàn)4狀態(tài)的狀態(tài)機,其onehot編碼可為狀態(tài)1=“0001”狀態(tài)2=“0010”狀態(tài)3=“0100”狀態(tài)4=“1000”特點:觸發(fā)器使用較多,但邏輯簡單,速度快。1有限狀態(tài)機的基本概念關于one-hot、gray-code、binary編碼使用說明Binary、gray-code編碼使用較少的觸發(fā)器,較多的組合邏輯,而one-hot編碼反之。由于CPLD更多的提供組合邏輯,而FPGA更多的提供觸發(fā)器資源,所以CPLD多使用gray-code,而FPGA多使用one-hot編碼。對于小型設計使用gray-code和binary編碼更有效,而大型狀態(tài)機使用one-hot編碼更有效。1有限狀態(tài)機的基本概念程序中指明編碼方式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有限狀態(tài)機的基本概念程序中指明編碼方式2狀態(tài)機的基本描述方式設計狀態(tài)機的步驟:①分析設計要求,列出狀態(tài)機的全部可能狀態(tài),并對每一個狀態(tài)進行編碼。②根據(jù)狀態(tài)轉移關系和輸出函數(shù)畫出狀態(tài)轉移圖。③由狀態(tài)轉移圖,用VHDL語句對狀態(tài)機描述。

2狀態(tài)機的基本描述方式狀態(tài)轉移圖狀態(tài)轉移圖是狀態(tài)機描述的最自然的方式,下圖是使用HDLDesigner設計的一個簡單的狀態(tài)轉移圖。2狀態(tài)機的基本描述方式狀態(tài)轉移列表狀態(tài)轉移列表使用列表的方式描述狀態(tài)機,是數(shù)字邏輯電路常用的設計方法之一,經常被用于對狀態(tài)化簡,對于可編程邏輯設計,由于可用邏輯資源比較豐富,而且狀態(tài)編碼要考慮設計的穩(wěn)定性、安全性等因素,所以并不經常使用狀態(tài)轉移列表優(yōu)化狀態(tài)。狀態(tài)\輸入a=‘1’b=‘1’defaultS0S1S2S1S2S0S2S02狀態(tài)機的基本描述方式HDL語言描述狀態(tài)機使用HDL語言描述狀態(tài)機有一定的靈活性,但是決不是天馬行空,而是有章可循的。通過一些規(guī)范的描述方法,可以使HDL語言描述的狀態(tài)機更安全、穩(wěn)定、高效、易于維護。下面是使用“HDLDesigner”軟件,通過以上的狀態(tài)轉移圖自動生成的VHDL描述的狀態(tài)機代碼。自動生成的代碼的形式,是嚴格按照三進程狀態(tài)機描述風格實現(xiàn)的。

2狀態(tài)機的基本描述方式1.說明部分

ARCHITECTURE...ISTYPEFSM_STIS(s0,s1,s2,s3);SIGNALcurrent_state,next_state:FSM_ST;2.主控時序進程負責狀態(tài)機運轉和在時鐘驅動下的狀態(tài)轉換,隨外部時鐘信號,以同步時序方式工作。3.主控組合進程通過pr_state的改變,進入主控組合進程,根據(jù)外部輸入信號確定輸出和下一狀態(tài)的走向(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;狀態(tài)類型定義時序邏輯進程輸入組合邏輯進程輸出組合邏輯進程3VHDL語言描述狀態(tài)機RTL級FSM描述評判標準安全,穩(wěn)定性高所謂FSM安全是指FSM不會進入死循環(huán),特別是不會進入非預知狀態(tài),而且由于某些擾動進入非設計狀態(tài),也能很快的恢復到正常的狀態(tài)循環(huán)中來。這里面有兩層含義,第一:要求該FSM的綜合實現(xiàn)結果無毛刺等異常擾動;第二:要求狀態(tài)機要完備,即使收到異常擾動進入非設計狀態(tài),也能很快恢復到正常狀態(tài)。速度快,滿足設計的頻率要求任何RLT設計都應該滿足設計的頻率要求。面積小,滿足設計的面積要求任何RTL設計都應該滿足設計的面積要求。FSM設計要清晰易懂、易維護不規(guī)范的FSM寫法上很難讓其他人解讀,甚至過一段時間后設計者也發(fā)現(xiàn)很難維護。3VHDL語言描述狀態(tài)機時序邏輯設計由右圖可知,clock和reset

作為時序邏輯部分的輸入, Nx_state也使輸入之一。 Pr_state作為其輸出??梢?/p>

描述如下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語言描述狀態(tài)機組合邏輯設計右圖所示的上部分是完全組合邏輯電路,所以可以很好的應用并行特性來設計。不過,在下面給出的示例代碼中,使用了順序編碼的方式,主要使用VHDL語言中的CASE語句進行設計。下頁給出示例代碼。3VHDL語言描述狀態(tài)機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語言描述狀態(tài)機通過以上分析,我們在這里給出使用VHDL語言描述狀態(tài)機的兩個一般性的“套路”。3VHDL語言描述狀態(tài)機模板一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語言描述狀態(tài)機模板二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語言描述狀態(tài)機舉例(模板一)------------------------------------------------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語言描述狀態(tài)機舉例(模板二)------------------------------------------------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語言描述狀態(tài)機兩種方式的仿真結果對比模板一方式實現(xiàn)的Mealy型狀態(tài)機,其輸出結果與時鐘不同步。模板二方式實現(xiàn)的同樣的狀態(tài)機,其輸出結果與時鐘是同步的。3VHDL語言描述狀態(tài)機結論從形式上看:模板一只存儲了pr_state;而模板二同時存儲了output。對于Mealy型狀態(tài)機,為了時序同步,必須采用模板二的方式。而moore型狀態(tài)機,則不需要使用模板二的描述方式。模板一模板二4Moore型狀態(tài)機舉例上例是一個Mealy型狀態(tài)機。下面我們來設計一個Moore型狀態(tài)機。例:設計一個串行數(shù)據(jù)流檢測器。要求:輸入連續(xù)的二進制數(shù),當檢測到連續(xù)“1”的個數(shù)大于2個的時候,輸出“1”;其他狀態(tài)輸出“0”。分析:確定所需的狀態(tài)數(shù),取決于數(shù)據(jù)流中出現(xiàn)連續(xù)“1”的個數(shù),應該為4個狀態(tài)。4Moore型狀態(tài)機舉例畫出狀態(tài)轉移圖zero(q=0)one(q=0)two(q=0)three(q=1)rstd=0d=1d=0d=0d=0d=1d=1d=14Moore型狀態(tài)機舉例根據(jù)狀態(tài)轉移圖,寫出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型狀態(tài)機舉例

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型狀態(tài)機舉例設計后使用synplify生成的狀態(tài)轉移圖如下雖然使用的是模板一的風格描述的狀態(tài)機,但是輸出依然可以保持與時鐘上升沿同步。4Moore型狀態(tài)機舉例功能仿真后的結果雖然使用的是模板一的風格描述的狀態(tài)機,但是輸出依然可以保持與時鐘上升沿同步。雖然使用的是模板一的風格描述的狀態(tài)機,但是輸出依然可以保持與時鐘上升沿同步??梢?,對于Moore狀態(tài)機,不需要對輸出進行同步。4Moore型狀態(tài)機舉例使用synplify綜合之后,可以看出默認的編碼方式是one-hot編碼。綜合后是one-hot編碼方式4Moore型狀態(tài)機舉例如果將在原來的程序的基礎上通過attribute語句指定編碼方式,即將結構體的聲明部分添加如下代碼,可將編碼方式改為二進制編碼:

ATTRIBUTEenum_encoding:

string;

ATTRIBUTEenum_encodingOFstate:

TYPE

IS

"00011011";

綜合后是binary碼編碼方式4Moore型狀態(tài)機舉例以上兩種情況是在默認綜合的情況下生成的,即沒有將“FSMExplorer”的選項勾選。如果將“FSMExplorer”選項勾選,那么即使是在程序中指定了編碼方式,其綜合后的狀態(tài)編碼也是one-hot編碼。因此,在狀態(tài)機設計的時候,大家要注意軟件的使用細節(jié),應當有意識的通過軟件進行性能優(yōu)化。沒有勾選“FSMExplorer”5三種進程描述狀態(tài)機方式對比單進程描述它就是將狀態(tài)機的三個邏輯單元(狀態(tài)寄存器、下狀態(tài)產生邏輯、輸出邏輯)合并起來,采用一個進程描述。適用于簡單的設計;對于復雜的狀態(tài)機,可讀性差,易出錯,不利于EDA軟件優(yōu)化。5三種進程描述狀態(tài)機方式對比下一狀態(tài)組合邏輯寄存輸出邏輯當前狀態(tài)時序邏輯單進程描述單進程描述下一狀態(tài)組合邏輯寄存輸出邏輯當前狀態(tài)時序邏輯5三種進程描述狀態(tài)機方式對比雙進程描述將輸出進程和狀態(tài)轉移進程合并起來,采用一個組合邏輯來描述。通常情況下,綜合工具可以較好地識別這兩部邏輯并進行優(yōu)化,但建議如果不是輸出邏輯非常簡單,還是采用兩個不同的進程來描述,這樣綜合工具可以明確下狀態(tài)轉移邏輯,優(yōu)化效果較好。另一種雙進程描述——將下狀態(tài)轉移邏輯和當前狀態(tài)寄存器描述結合,省略中間變量。5三種進程描述狀態(tài)機方式對比雙進程描述第二個進程(純組合邏輯),描述狀態(tài)轉移條件的判斷。第一個進程(同步時序),格式化地描述次態(tài)到現(xiàn)態(tài)的轉移。一般情況是組合邏輯輸出,如果時序允許,盡量插入寄存器輸出。5三種進程描述狀態(tài)機方式對比三進程描述一般可以采用三個進程來描述狀態(tài)機:描述狀態(tài)寄存器的時序進程描述下狀態(tài)產生邏輯的組合進程定義輸出的組合邏輯進程5三種進程描述狀態(tài)機方式對比三進程描述第一個進程(同步時序)格式化描述次態(tài)寄存器遷移到現(xiàn)態(tài)寄存器第二個進程(純組合邏輯),描述狀態(tài)轉移條件判斷第三個進程(同步時序),格式化描述次態(tài)的寄存器輸出。5三種進程描述狀態(tài)機方式對比舉例:分別使用單進程、雙進程、三進程描述方式如下狀態(tài)轉移圖所示的狀態(tài)機:5三種進程描述狀態(tài)機方式對比單進程描述的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三種進程描述狀態(tài)機方式對比(續(xù)上頁)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三種進程描述狀態(tài)機方式對比單進程描述RTL圖5三種進程描述狀態(tài)機方式對比雙進程描述的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三種進程描述狀態(tài)機方式對比

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三種進程描述狀態(tài)機方式對比雙進程描述產生的RTL圖5三種進程描述狀態(tài)機方式對比三進程描述的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三種進程描述狀態(tài)機方式對比

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三種進程描述狀態(tài)機方式對比三進程描述產生的RTL圖5三種進程描述狀態(tài)機方式對比從以上一個很簡單的狀態(tài)機設計的對比上,可以看出,采用單進程方式描述的狀態(tài)機其RTL電路相對于另外兩種描述方式多產生了一個寄存器。對于簡單的設計,采用雙進程和三進程綜合結果沒有差別。建議描述狀態(tài)機時使用雙進程或者三進程的方式。6ASM圖法狀態(tài)機設計ASM簡介ASM本質上是一個有限狀態(tài)機,主要用于同步系統(tǒng)。ASM精確地表示出狀態(tài)轉換的時間關系。從形式上看,這種流程圖類似于描述軟件程序的流程圖,但它能和實現(xiàn)它的硬件很好的對應起來。6ASM圖法狀態(tài)機設計ASM圖的組成狀態(tài)框用一個矩形框來表示一個狀態(tài)。狀態(tài)的名稱寫在左上角;狀態(tài)的二進制編碼寫在右上角;操作內容寫在矩形框內。在同步系統(tǒng)中,狀態(tài)經歷的時間至少是一個時鐘周期,也可以是幾個周期。寄存器操作或輸出狀態(tài)名二進制碼R0C=‘1’T10016ASM圖法狀態(tài)機設計ASM圖的組成判斷框用單入口雙出口的菱形或單入口多出口的多邊形符號表示。在菱形和多邊形框內寫檢測條件,在分支出口處注明各分支所滿足的條件。判斷框必須跟著狀態(tài)框。判斷框的執(zhí)行與狀態(tài)框在同一時鐘周期內。條件01引出分支引出分支6ASM圖法狀態(tài)機設計ASM圖組成條件框用橢圓框表示。條件框一定是與判斷框的一個轉移分支相連接,僅當判斷框中判斷變量滿足相應的轉移條件時,才進行條件框中標明的操作和信號輸出。雖然條件框和狀態(tài)框都能執(zhí)行操作和輸出信號,但二者有很大區(qū)別。寄存器操作或輸出6ASM圖法狀態(tài)機設計ASM圖的組成經過狀態(tài)分配的ASM圖狀態(tài)框判斷框條件框狀態(tài)單元狀態(tài)單元由一個狀態(tài)框或條件框組成。狀態(tài)單元的入口必須是狀態(tài)框的入口,出口可以有幾個,但必須指向狀態(tài)框。僅包含一個狀態(tài)框,無判斷框和條件框的ASM塊是一個簡單塊。每個狀態(tài)單元表示一個時鐘周期內系統(tǒng)所處的狀態(tài),在該狀態(tài)下完成快內的若干操作。虛線框部分就是一個狀態(tài)單元,條件框中R0也在這個狀態(tài)單元內執(zhí)行。6ASM圖法狀態(tài)機設計用ASM圖描述一個系統(tǒng)控制器時,實際上是描述了該控制器的硬件結構和時序工作過程,因此ASM圖與硬件有很好的對應關系,ASM圖的硬件實現(xiàn)有以下幾種方法:用計數(shù)器實現(xiàn)ASM圖用多路選擇器實現(xiàn)ASM圖每個狀態(tài)一個觸發(fā)器(定序型)基于ROM法實現(xiàn)ASM圖(微程序型)ASM圖的硬件實現(xiàn)一共有4中方法,這里我們重點介紹用計數(shù)器實現(xiàn)ASM圖的方法。6ASM圖法狀態(tài)機設計ASM圖的狀態(tài)分配N個狀態(tài)變量可以描述2^n個狀態(tài)。該ASM圖中有3個狀態(tài),所以需要兩個狀態(tài)變量。設兩個狀態(tài)變量為Q2Q1,我們選用2個D觸發(fā)器。用二進制計數(shù)序列依次表示狀態(tài)。6ASM圖法狀態(tài)機設計狀態(tài)轉換表因為10和11狀態(tài)與輸入X無關,所以X值可作任意值處理。表中01未指定狀態(tài),采用計數(shù)器實現(xiàn),因此需考慮因偶然因素出現(xiàn)01狀態(tài)時,應強迫其次態(tài)為00,所以一旦出現(xiàn)01狀態(tài)后,經過一個時鐘周期就可以自動回到有用狀態(tài)循環(huán)?,F(xiàn)態(tài)次態(tài)輸出Q2Q1XQ2n+1Q1n+1Z1Z20001011001111001X000010X000011X00006ASM圖法狀態(tài)機設計由狀態(tài)轉換表推導觸發(fā)器的驅動方程對于復雜的ASM圖和相應的狀態(tài)表可用卡諾圖對次態(tài)進行化簡,得到簡化的驅動方程。ASM圖除了可以得到狀態(tài)表和驅動方程外,還可以得到輸出方程6ASM圖法狀態(tài)機設計ASM圖的硬件實現(xiàn)采用計數(shù)器法實現(xiàn)ASM圖,一旦ASM圖有很小的改動,就需要重新設計與次態(tài)相關的組合電路部分。此外,當系統(tǒng)的狀態(tài)超過8個時,ASM圖的硬件實現(xiàn)也很復雜。學習ASM圖的硬件實現(xiàn)有助于我們更好的理解后續(xù)的內容,下面我們將學習如何使用VHDL實現(xiàn)ASM圖。6ASM圖法狀態(tài)機設計MDS(MnemonicDocumentedState)1.MDS圖符號Si表示狀態(tài)圖SiSj

只要時鐘CP的有效沿到來,狀態(tài)Si在條件E下轉換到狀態(tài)SjE可以是積項,布爾表達式等。SiSjESiZ↑表示進入狀態(tài)Si時,輸出Z變成有效。SiZ↓表示進入狀態(tài)Si時,輸出Z變成無效。SiZ↑↓表示進入狀態(tài)Si時,輸出Z有效;退出時,輸出Z無效。SiZ↑↓=Si?E

如果條件E滿足,進入狀態(tài)Si時,輸出Z有效;退出時,輸出Z無效。

只要時鐘CP的有效沿到來,表示狀態(tài)Si無條件轉換到狀態(tài)Sj。

MDS圖與狀態(tài)圖十分相似,且擴展了狀態(tài)圖的功能,又簡練了狀態(tài)圖。MDS圖表現(xiàn)設計過程時,方便清晰,具有較大的靈活性。6ASM圖法狀態(tài)機設計狀態(tài)圖到MDS圖

這是一個莫爾型電路,三個狀態(tài)A、B、C和輸出Z1Z2依次為01、11、00。說明:A態(tài)到B態(tài)時,Z1由0變1,Z1有效;B態(tài)到C態(tài)時,Z1由1變0,Z1無效。Z1↑↓同理:C態(tài)到A態(tài)時,Z2由0變1,Z2有效;B態(tài)到C態(tài)時,Z2由1變0,Z2無效。Z2↑Z2↓

加了三個輸入X1、X2、X3的情況。A/01B/11C/00ABCABCX1X3X1X1Z2Z2Z1X2X3+X1X26ASM圖法狀態(tài)機設計狀態(tài)圖到MDS圖有條件輸出的情況

有三個狀態(tài)A、B、C,當輸入為1時,輸出為1,A→B;當輸入為0時,輸出為0,A→C(輸入/輸出)。到MDS圖ABCXXZ=A·XABC1/10/06ASM圖法狀態(tài)機設計ASM圖到MDS圖的轉換ASM圖的狀態(tài)框對應MDS圖中的Si。ASM圖的判斷框構成MDS圖的分支控制器的輸出是為實現(xiàn)狀態(tài)框的操作而發(fā)出的信息,對應MDS圖中狀態(tài)圈外側的輸出。(A)A(B)BASM圖MDS圖START?YESNOSTARTSTART計數(shù)器復位執(zhí)行CR↑↓OPR↑↓6ASM圖法狀態(tài)機設計ASM圖的條件輸出與MDS圖的條件輸出相對應注:A態(tài)返回到A態(tài)時,有一條件輸出:當X=0,CP=0時,RUN有效。到MDS圖X?CPRUN(A)NONOYES(B)YESABXXRUN=A·X·CP6ASM圖法狀態(tài)機設計舉例要求設計一套交叉路口交通信號燈,該路口有一條交通干線與支線,支線上裝有傳感器,當支線有車通過時,傳感器輸出信號CAR=1。正常的工作狀態(tài)時干線亮綠燈,支線亮紅燈;當CAR=1時,干線亮紅燈,支線亮綠燈,并開始計時,START_TIEMR=1,當計時結束,即信號TIMED=1時,重新回到正常工作狀態(tài)(干線亮綠燈,支線亮紅燈)。6ASM圖法狀態(tài)機設計設計步驟根據(jù)設計要求,我們先確定系統(tǒng)的輸入:clock,car,timed.然后確定系統(tǒng)的輸出:start_timer;major_green,minor_green.(枚舉類型)分析系統(tǒng)所有可能出現(xiàn)的狀態(tài):state=Gmajor_green=1,minor_green=0;state=Rmajor_green=0,minor_green=1;根據(jù)題意,畫出ASM圖:6ASM圖法狀態(tài)機設計單進程狀態(tài)機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圖法狀態(tài)機設計單進程狀態(tài)機

WHENR=> major_green<=‘0’; minor_green<=‘1’;

IF(timed=‘1’)THEN start_timer<=‘1’; state:=G;

ENDIF;

ENDCASE; ENDIFENDPROCESS;6ASM圖法狀態(tài)機設計單進程狀態(tài)機:單進程狀態(tài)變量可以定義為變量類型,放在進程的說明部分一般在進程的開頭寫上時鐘有效邊沿的檢測語句注意在這里進程敏感參數(shù)表中的car和timed可省去rising_edge(clock)也可以寫成clock’eventandclock=‘1’條件涵蓋不完整的if語句會產生寄存器這是將時序電路和組合電路混合的系統(tǒng),有時會引入不必要的寄存器。如果將描述時序的部分放在具有邊沿檢測條件的if語句或wait語句的進程中,而將描述組合電路的語句放在普通的進程中,這樣可以有效控制寄存器的引入。6ASM圖法狀態(tài)機設計雙進程狀態(tài)機ARCHITECTUREasm2OFtrafficIS

TYPEstate_typeIS(G,R);

SIGNALpr_state,next_state:state_type;BEGIN seq:

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論