歡迎您光臨本站 登入註冊首頁

概述

1引言   有限狀態機FSM(FiniteStateMachine)及其設計技術是實用數字系統設計中實現高效率、高可靠邏輯控制的重要途徑。傳統的狀態機設計方法需進行繁瑣的……

1 引言
    有限狀態機FSM(Finite State Machine)及其設計技術是實用數字系統設計中實現高效率、高可靠邏輯控制的重要途徑。傳統的狀態機設計方法需進行繁瑣的狀態分配、繪製狀態表、化簡次態方程等,而利用VHDL可以避免這些繁瑣的過程,直接利用狀態轉換圖進行狀態機的描述,所有的狀態均可表達為CASE_WHEN結構中的一條CASE語句,而狀態的轉移則通過IF_THEN_ELsE語句實現。此外,與VHDL的其它描述方式相比,狀態機的VHDL表述豐富多樣,程序層次分明,結構清晰,易讀易懂;在排錯、修改和模塊移植方面也有其獨到的特點。

2 自動售貨機控制系統的實現
2.1 自動售貨機功能描述及控制系統組成
    設計一個自動售貨機的邏輯控制電路。它有兩個投幣口分別為一元投幣口和五角投幣口,假設每次只能投入一枚一元或五角硬幣,投入一元五角硬幣后機器自動給出一瓶礦泉水,投入兩元硬幣后,在給出一瓶礦泉水的同時找回一枚五角的硬幣。圖1為自動售貨機控制系統方框圖,由投幣信號處理模塊和功能控制模塊組成。
 
2.2 自動售貨機控制功能的狀態描述
    取投幣信號為輸入邏輯變數,投入一枚一元硬幣時用A=1表示,未投入時A=0。投入一枚五角硬幣用B=1表示,未投入時B=0。給出礦泉水和找錢為兩個輸出變數,分別用Z和Y表示,給出礦泉水時Z=1,不給時Z=0,找回一枚五角硬幣時Y=1,不找時Y=0。
    根據上面的功能描述,可用三個狀態S0,S1,S2表示,未投幣前的初始狀態為S0,投入五角硬幣以後為S1,投入一元硬幣后(包括投入一枚一元硬幣和投入兩枚五角硬幣的情況)為S2,再投入一枚五角硬幣后電路返回S0,同時輸出為Z=1,Y=0;如果投入的是一枚一元硬幣,則電路也應能返回S0,同時輸出為Z=1,Y=1。根據上面的分析可得到狀態轉換圖如圖2所示。
 
2.3 自動售貨機功能控制模塊的VHDL實現
    根據圖2所示的狀態轉換圖,用VHDL語言中的CASE_WHEN結構和IF_THEN_ELSE語句實現控制功能,源程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY shj_ctrl IS
PORT(A,B:IN STD_LOGIC;
clk:IN STD_LOGIC;
Z,Y:OUT STD_LOGIC);
END shj_ctrl
ARCHITECTURE beha OF shi_ctrl IS
TYPE states IS(S0,S1,S2);
SIGNAL state:states;
SIGNAL X:STD_LOGIC_VECTOR(1 DOWNTO 0);
BEGIN
X<=A&B;
PROCESS(x,state)
BEGIN
IF rising_edge(clk) THEN
CASE state IS
WHEN S0=>Z<='0';Y<='0';
IF(X="01")THEN
state<=s1;
ELSIF(X="10")THEN
state<=s2;
ELSE
state<=s0;
END IF;
WHEN S1=>Z<='0';Y<='0';
IF(X="01")THEN
state<=s2;
ELSIF(X="10")THEN
state<=S0;
Z<='1';Y<='0';
ELSE
state<=s1;
END IF;
WHEN S2=>Z<='0';Y<='0';
IF(X="01")THEN
state<=S0;
Z<='1';Y<='0';
ELSIF(X="10")THEN
state<=s0;
Z<='1';Y<='1';
ELSE
state<=s2;
END IF;
END CASE;
END IF;
END PROCESS;
END beha;
    上面程序中,A、B分別為一元硬幣和五角硬幣驅動信號,Z為礦泉水輸出信號,Y為找錢輸出信號。通過對程序分析和模擬可以看出,A和B的驅動信號的持續時間必須控制在clk時鐘周期內,如果驅動信號時間太短,系統檢測不到投幣信號,時間太長,會誤認為是兩次或多次投幣,造成誤操作。因此,要使整個控制系統可靠運行,還必須設計專門投幣輸入信號處理電路。

2.4 投幣輸入信號電路的設計與實現
    自動售貨機的所有信號均由同步時鐘信號clk的正邊沿觸發。由於售貨機的硬幣接受器一般是一個機械設置裝置,投幣時產生的信號要比同步信號clk要慢得多,一般可持續好幾個周期,必須對投幣輸入信號進行處理,使每一次投幣時在clk脈衝周期內只能產生一個脈衝作為功能控制模塊的投幣驅動信號。基於上面的功能要求,設計了如圖3所示的投幣輸入信號的處理電路,其中IN_yuan和IN_jiao作為一元硬幣和五角硬幣的投幣輸入信號,A和B為相應的輸出信號,作為功能控制模塊的輸入信號,而且A、B輸出是在投幣輸入信號IN_yuan和IN_jiao為高電平1之後的一個周期內被設置為1。經過模擬結果如圖4所示,實現了每次投幣后在一個clk周期內只產生一個可靠的脈衝驅動信號。
 

3 自動售貨機控制系統功能模擬
    自動售貨機控制系統模塊之間連接如圖5所示,其中“shuru”為投幣輸入信號處理模塊,其輸出信號作為功能控制模塊“SHJ_CTRL”的輸入驅動信號,OUT為自動售貨機的礦泉水輸出信號,ZHAOQIAN為找錢輸出信號。整個控制系統通過MAX+PLUSII軟體進行編譯和模擬,模擬結果如圖6所示,符合電路設計要求。並把程序下載到晶元MAXEPM7128SLC84-15進行驗證與實際相符。
 

4 結束語
    VHDL語言有限狀態機設計控制電路,可大大降低設計難度和時間,提高設計效率和可靠性,利用語言的靈活性及功能強大的EDA工具,可以輕鬆完成硬體的功能擴充與升級,還可以實現更複雜的數字系統,整個設計過程相對於傳統的設計方法,有較大的突破。VHDL語言作為現代數字系統的重要設計工具,以其靈活、簡潔的設計風格在電路設計中發揮著越來越重要的作用。


[admin via 研發互助社區 ] 自動售貨機控制系統VHDL有限狀態機實現已經有3132次圍觀

http://cocdig.com/docs/show-post-43081.html