關 閉

        新聞中心

        EEPW首頁 > 工控自動化 > 設計應用 > 自動售貨機控制模塊 VHDL 程序設計及 FPGA 實現(xiàn)

        自動售貨機控制模塊 VHDL 程序設計及 FPGA 實現(xiàn)

        作者: 時間:2011-01-02 來源:網(wǎng)絡 收藏

        1)狀態(tài)定義:S0表示初態(tài),S1表示投入5角硬幣,S2表示投入1元硬幣,S3表示投入1元5角硬幣,S4表示投入2元硬幣。

        本文引用地址:http://www.104case.com/article/162525.htm


        2)輸入信號:取投幣信號為輸入邏輯變量,用兩位的矢量state_inputs表示。state_inputs(0)表示投入1元硬幣,state_inputs(1)表示投入5角硬幣。輸入信號為1表示投入硬幣,輸入信號為0表示未投入硬幣。


        3)輸出信號:給出礦泉水和找零為兩個輸出變量,用兩位的矢量comb_outputs表示。comb_outputs(0)表示輸出貨物,comb_outputs(1)表示找5角零錢。輸出信號為1表示輸出貨物或找零,輸出信號為0表示不輸出貨物或不找零。


        根據(jù)圖1所示的狀態(tài)轉換圖,用VHDL中的CASE_WHEN結構和IF_THEN_ELSE語句實現(xiàn)控制功能,源程序如下:
        LIBRARY IEEE; --庫和程序包的使用說明
        USE IEEE.STD_LOGIC_1164.ALL;
        ENTITY sellmachine IS --實體定義
        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 --結構體
        TYPE fsm_st IS (S0,S1,S2,S3,S4); --狀態(tài)枚舉類型定義
        SIGNAL current_state,next_state:fsm_st; --狀態(tài)信號的定義
        BEGIN
        reg:PROCESS(reset,clk) --時序進程
        BEGIN
        IF reset='1' THEN current_state=S0; --異步復位
        ELSIF rising_edge(clk) THEN
        current_state=next_state; --狀態(tài)轉換
        END IF;
        END PROCESS;
        corn:PROCESS(current_state,state_inputs) --組合進程
        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;



        關鍵詞: 收發(fā)器

        評論


        相關推薦

        技術專區(qū)

        關閉
        主站蜘蛛池模板: 衡阳市| 依安县| 上林县| 博乐市| 渭源县| 新竹市| 东乡县| 凉城县| 桃源县| 托克托县| 永胜县| 额尔古纳市| 开阳县| 唐海县| 仪陇县| 陇西县| 许昌县| 民勤县| 崇礼县| 泰宁县| 乳山市| 楚雄市| 九龙县| 宜黄县| 鄄城县| 嵊州市| 盘山县| 望谟县| 佛山市| 镶黄旗| 紫云| 平果县| 阜宁县| 尖扎县| 靖西县| 元氏县| 连平县| 塘沽区| 上林县| 和静县| 梅河口市|