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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

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

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

ARCHITECTURE...ISTYPEFSM_STIS(s0,s1,s2,s3);SIGNALcurrent_state,next_state:FSM_ST;2.主控時(shí)序進(jìn)程負(fù)責(zé)狀態(tài)機(jī)運(yùn)轉(zhuǎn)和在時(shí)鐘驅(qū)動下的狀態(tài)轉(zhuǎn)換,隨外部時(shí)鐘信號,以同步時(shí)序方式工作。3.主控組合進(jìn)程通過pr_state的改變,進(jìn)入主控組合進(jìn)程,根據(jù)外部輸入信號確定輸出和下一狀態(tài)的走向(nx_state)4.輔助進(jìn)程1有限狀態(tài)機(jī)的基本概念有限狀態(tài)機(jī)的類型從信號輸出方式上分Mealy型狀態(tài)機(jī)Moore型狀態(tài)機(jī)從結(jié)構(gòu)上分單進(jìn)程狀態(tài)機(jī)兩進(jìn)程狀態(tài)機(jī)三進(jìn)程狀態(tài)機(jī)從表達(dá)方式上分符號化狀態(tài)機(jī)確定狀態(tài)編碼的狀態(tài)機(jī)從編碼方式上分順序編碼狀態(tài)機(jī)獨(dú)熱碼狀態(tài)機(jī)格雷碼狀態(tài)機(jī)1有限狀態(tài)機(jī)的基本概念Moore型有限狀態(tài)機(jī)是指那些輸出信號僅與當(dāng)前狀態(tài)有關(guān)的有限狀態(tài)機(jī),即可以把Moore型有限狀態(tài)機(jī)的輸出看成是當(dāng)前狀態(tài)的函數(shù)。Moore型有限狀態(tài)機(jī)框圖:1有限狀態(tài)機(jī)的基本概念Mealy型有限狀態(tài)機(jī)是指那些輸出信號不僅與當(dāng)前狀態(tài)有關(guān),而且還與所有的輸入信號有關(guān)的有限狀態(tài)機(jī),即可以把Mealy有限狀態(tài)機(jī)的輸出看作當(dāng)前狀態(tài)和所有輸入信號的函數(shù)。可見,Mealy有限狀態(tài)機(jī)要比Moore有限狀態(tài)機(jī)復(fù)雜一些。Mealy有限狀態(tài)機(jī)框圖:1有限狀態(tài)機(jī)的基本概念Moore型和Mealy型有限狀態(tài)機(jī)的區(qū)別:Moore型有限狀態(tài)機(jī)僅與當(dāng)前狀態(tài)有關(guān),而與輸入信號無關(guān);Mealy型有限狀態(tài)機(jī)不但與當(dāng)前狀態(tài)有關(guān),而且還與狀態(tài)機(jī)的輸入信號有關(guān)。1有限狀態(tài)機(jī)的基本概念采用何種有限狀態(tài)機(jī)的判別條件:Moore型有限狀態(tài)機(jī)可能要比相應(yīng)的Mealy型有限狀態(tài)機(jī)需要更多的狀態(tài)。Moore型有限狀態(tài)機(jī)的輸出與當(dāng)前的輸入部分無關(guān),因此當(dāng)前輸入產(chǎn)生的任何效果將會延遲到下一個(gè)時(shí)鐘周期。可見,Moore型狀態(tài)機(jī)的最大優(yōu)點(diǎn)就是可以將輸入部分和輸出部分隔離開。對于Mealy型有限狀態(tài)機(jī)來說,由于它的輸出是輸入信號的函數(shù),因此如果輸入信號發(fā)生改變,那么輸出可以在一個(gè)時(shí)鐘周期內(nèi)發(fā)生改變。1有限狀態(tài)機(jī)的基本概念單進(jìn)程狀態(tài)機(jī)整個(gè)狀態(tài)機(jī)的描述在一個(gè)進(jìn)程中完成雙進(jìn)程狀態(tài)機(jī)將組合邏輯部分和時(shí)序邏輯部分分開描述,放在結(jié)構(gòu)體的說明部分三進(jìn)程狀態(tài)機(jī)將組合邏輯部分再分為產(chǎn)生次態(tài)的組合邏輯部分和產(chǎn)生輸出的組合邏輯部分,與時(shí)序邏輯部分一起放在結(jié)構(gòu)體的說明部分1有限狀態(tài)機(jī)的基本概念符號化狀態(tài)機(jī)所謂符號化狀態(tài)機(jī),就是在程序的說明部分使用TYPE語句定義枚舉類型,其元素用狀態(tài)機(jī)的狀態(tài)名來定義。狀態(tài)變量(如狀態(tài)機(jī)的現(xiàn)態(tài)和次態(tài))定義為變量或信號,并將狀態(tài)變量的數(shù)據(jù)類型定義為含有既定狀態(tài)元素的枚舉類型。在使用多進(jìn)程時(shí),為便于信息傳遞,要將狀態(tài)變量定義為信號。1有限狀態(tài)機(jī)的基本概念類型定義語句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)機(jī)應(yīng)用TYPEm_stateIS(st0,st1,st2,st3,st4,st5);SIGNALpresent_state,next_state:m_state;1有限狀態(tài)機(jī)的基本概念確定狀態(tài)編碼的狀態(tài)機(jī)使用符號化定義的枚舉類型,枚舉類型文字元素的編碼通常是自動設(shè)置的,綜合器根據(jù)優(yōu)化情況、優(yōu)化控制的設(shè)置或設(shè)計(jì)者的特殊設(shè)定來確定各元素具體編碼的二進(jìn)制位數(shù)、數(shù)值及元素間編碼的順序。也可以在程序中指明編碼方式。常用的編碼方式2進(jìn)制編碼格雷碼編碼One-hot編碼1有限狀態(tài)機(jī)的基本概念2進(jìn)制編碼狀態(tài)機(jī)的每一個(gè)狀態(tài)用二進(jìn)制位來編碼例:實(shí)現(xiàn)4狀態(tài)的狀態(tài)機(jī),其其二進(jìn)制編碼可為狀態(tài)1=“00”狀態(tài)2=“01”狀態(tài)3=“10”狀態(tài)4=“11”需要的寄存器數(shù)量最少,有n個(gè)寄存器就可以對2^n個(gè)狀態(tài)進(jìn)行編碼。需要更多的外部輔助邏輯,并且速度較慢。1有限狀態(tài)機(jī)的基本概念格雷碼狀態(tài)機(jī)編碼格雷碼編碼每次僅一個(gè)狀態(tài)位的值發(fā)生變化例:實(shí)現(xiàn)4狀態(tài)的狀態(tài)機(jī),其格雷碼編碼可為狀態(tài)1=“00”狀態(tài)2=“01”狀態(tài)3=“11”狀態(tài)4=“10”特點(diǎn):觸發(fā)器使用較少,速度較慢,不會產(chǎn)生兩位同時(shí)翻轉(zhuǎn)的情況。當(dāng)狀態(tài)位的輸出被異步應(yīng)用時(shí),格雷碼編碼是有益的。1有限狀態(tài)機(jī)的基本概念One-hot狀態(tài)機(jī)編碼Onehot的編碼方案對每一個(gè)狀態(tài)采用一個(gè)觸發(fā)器,即4個(gè)狀態(tài)的狀態(tài)機(jī)需4個(gè)觸發(fā)器。同一時(shí)間僅1個(gè)狀態(tài)位處于有效電平(如邏輯“1”)例:實(shí)現(xiàn)4狀態(tài)的狀態(tài)機(jī),其onehot編碼可為狀態(tài)1=“0001”狀態(tài)2=“0010”狀態(tài)3=“0100”狀態(tài)4=“1000”特點(diǎn):觸發(fā)器使用較多,但邏輯簡單,速度快。1有限狀態(tài)機(jī)的基本概念關(guān)于one-hot、gray-code、binary編碼使用說明Binary、gray-code編碼使用較少的觸發(fā)器,較多的組合邏輯,而one-hot編碼反之。由于CPLD更多的提供組合邏輯,而FPGA更多的提供觸發(fā)器資源,所以CPLD多使用gray-code,而FPGA多使用one-hot編碼。對于小型設(shè)計(jì)使用gray-code和binary編碼更有效,而大型狀態(tài)機(jī)使用one-hot編碼更有效。1有限狀態(tài)機(jī)的基本概念程序中指明編碼方式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)機(jī)的基本概念程序中指明編碼方式2狀態(tài)機(jī)的基本描述方式設(shè)計(jì)狀態(tài)機(jī)的步驟:①分析設(shè)計(jì)要求,列出狀態(tài)機(jī)的全部可能狀態(tài),并對每一個(gè)狀態(tài)進(jìn)行編碼。②根據(jù)狀態(tài)轉(zhuǎn)移關(guān)系和輸出函數(shù)畫出狀態(tài)轉(zhuǎn)移圖。③由狀態(tài)轉(zhuǎn)移圖,用VHDL語句對狀態(tài)機(jī)描述。

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

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

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

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

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

ATTRIBUTEenum_encoding:

string;

ATTRIBUTEenum_encodingOFstate:

TYPE

IS

"00011011";

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

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

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

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

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

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

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

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

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

有三個(gè)狀態(tài)A、B、C,當(dāng)輸入為1時(shí),輸出為1,A→B;當(dāng)輸入為0時(shí),輸出為0,A→C(輸入/輸出)。到MDS圖ABCXXZ=A·XABC1/10/06ASM圖法狀態(tài)機(jī)設(shè)計(jì)ASM圖到MDS圖的轉(zhuǎn)換ASM圖的狀態(tài)框?qū)?yīng)MDS圖中的Si。ASM圖的判斷框構(gòu)成MDS圖的分支控制器的輸出是為實(shí)現(xiàn)狀態(tài)框的操作而發(fā)出的信息,對應(yīng)MDS圖中狀態(tài)圈外側(cè)的輸出。(A)A(B)BASM圖MDS圖START?YESNOSTARTSTART計(jì)數(shù)器復(fù)位執(zhí)行CR↑↓OPR↑↓6ASM圖法狀態(tài)機(jī)設(shè)計(jì)ASM圖的條件輸出與MDS圖的條件輸出相對應(yīng)注:A態(tài)返回到A態(tài)時(shí),有一條件輸出:當(dāng)X=0,CP=0時(shí),RUN有效。到MDS圖X?CPRUN(A)NONOYES(B)YESABXXRUN=A·X·CP6ASM圖法狀態(tài)機(jī)設(shè)計(jì)舉例要求設(shè)計(jì)一套交叉路口交通信號燈,該路口有一條交通干線與支線,支線上裝有傳感器,當(dāng)支線有車通過時(shí),傳感器輸出信號CAR=1。正常的工作狀態(tài)時(shí)干線亮綠燈,支線亮紅燈;當(dāng)CAR=1時(shí),干線亮紅燈,支線亮綠燈,并開始計(jì)時(shí),START_TIEMR=1,當(dāng)計(jì)時(shí)結(jié)束,即信號TIMED=1時(shí),重新回到正常工作狀態(tài)(干線亮綠燈,支線亮紅燈)。6ASM圖法狀態(tài)機(jī)設(shè)計(jì)設(shè)計(jì)步驟根據(jù)設(shè)計(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)機(jī)設(shè)計(jì)單進(jìn)程狀態(tài)機(jī)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)機(jī)設(shè)計(jì)單進(jìn)程狀態(tài)機(jī)

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

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

ENDIF;

ENDCASE; ENDIFENDPROCESS;6ASM圖法狀態(tài)機(jī)設(shè)計(jì)單進(jìn)程狀態(tài)機(jī):單進(jìn)程狀態(tài)變量可以定義為變量類型,放在進(jìn)程的說明部分一般在進(jìn)程的開頭寫上時(shí)鐘有效邊沿的檢測語句注意在這里進(jìn)程敏感參數(shù)表中的car和timed可省去rising_edge(clock)也可以寫成clock’eventandclock=‘1’條件涵蓋不完整的if語句會產(chǎn)生寄存器這是將時(shí)序電路和組合電路混合的系統(tǒng),有時(shí)會引入不必要的寄存器。如果將描述時(shí)序的部分放在具有邊沿檢測條件的if語句或wait語句的進(jìn)程中,而將描述組合電路的語句放在普通的進(jìn)程中,這樣可以有效控制寄存器的引入。6ASM圖法狀態(tài)機(jī)設(shè)計(jì)雙進(jìn)程狀態(tài)機(jī)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)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論