新聞中心

        EEPW首頁(yè) > EDA/PCB > 設(shè)計(jì)應(yīng)用 > 基于VHDL +FPGA 的自動(dòng)售貨機(jī)控制模塊的設(shè)計(jì)與實(shí)現(xiàn)

        基于VHDL +FPGA 的自動(dòng)售貨機(jī)控制模塊的設(shè)計(jì)與實(shí)現(xiàn)

        作者: 時(shí)間:2012-08-21 來(lái)源:網(wǎng)絡(luò) 收藏

        根據(jù)圖1所示的狀態(tài)轉(zhuǎn)換圖,用中的CASE_WHEN結(jié)構(gòu)和IF_THEN_ELSE語(yǔ)句實(shí)現(xiàn)控制功能,源程序如下:

        LIBRARY IEEE; --庫(kù)和程序包的使用說(shuō)明

        USE IEEE.STD_LOGIC_1164.ALL;

        ENTITY sellmachine IS --實(shí)體定義

        PORT(clk,reset: IN std_logic;

        state_inputs:IN std_logic_vector(0 TO 1);

        comb_outputs:OUT std_logic_vector(0 TO 1));

        END sellmachine;

        ARCHITECTURE state OF sellmachine IS --結(jié)構(gòu)體

        TYPE fsm_st IS (S0,S1,S2,S3,S4); --狀態(tài)枚舉類型定義

        SIGNAL current_state,next_state:fsm_st; --狀態(tài)信號(hào)的定義

        BEGIN

        reg:PROCESS(reset,clk) --時(shí)序進(jìn)程

        BEGIN

        IF reset='1' THEN current_state=S0; --異步復(fù)位

        ELSIF rising_edge(clk) THEN

        current_state=next_state; --狀態(tài)轉(zhuǎn)換

        END IF;

        END PROCESS;

        corn:PROCESS(current_state,state_inputs) --組合進(jìn)程

        BEGIN

        CASE current_state IS

        WHEN S0=>comb_outputs=00; --現(xiàn)態(tài)S0

        IF state_inputs=00 THEN next_state=S0; --輸入不同,次態(tài)不同

        ELSIF state_inputs=01 THEN next_state=S1;

        ELSIF state_inputs=10 THEN next_state=S2;

        END IF;

        WHEN S1=>comb_outputs=00; --現(xiàn)態(tài)S1

        IF state_inputs=00 THEN next_state=S1; --輸入不同,次態(tài)不同

        ELSIF state_inputs=01 THEN next_state=S2;

        ELSIF state_inputs=10 THEN next_state=S3;

        END IF;

        WHEN S2=>comb_outputs=00; --現(xiàn)態(tài)S2

        IF state_inputs=00 THEN next_state=S2; --輸入不同,次態(tài)不同

        ELSIF state_inputs=01 THEN next_state=S3;

        ELSIF state_inputs=10 THEN next_state=S4;

        END IF;

        WHEN S3=>comb_outputs=10; --現(xiàn)態(tài)S3

        IF state_inputs=00 THEN next_state=S0; --輸入不同,次態(tài)不同

        ELSIF state_inputs=01 THEN next_state=S1;

        ELSIF state_inputs=10 THEN next_state=S2;

        END IF;

        WHEN S4=>comb_outputs=11; --現(xiàn)態(tài)S4

        IF state_inputs=00 THEN next_state=S0; --輸入不同,次態(tài)不同

        ELSIF state_inputs=01 THEN next_state=S1;

        ELSIF state_inputs=10 THEN next_state=S2;

        END IF;

        END CASE;

        END PROCESS;

        END state;



        評(píng)論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 邵武市| 天全县| 固阳县| 蕉岭县| 神农架林区| 洛川县| 江门市| 姚安县| 泰安市| 眉山市| 温泉县| 安达市| 巴塘县| 沐川县| 凯里市| 眉山市| 申扎县| 临澧县| 惠东县| 盐城市| 平南县| 新昌县| 扎兰屯市| 天祝| 惠东县| 文水县| 搜索| 筠连县| 沧州市| 濮阳县| 栾城县| 武城县| 昌吉市| 明水县| 阳新县| 双流县| 襄垣县| 托克托县| 齐河县| 济阳县| 泗水县|