名稱:自動(dòng)售貨機(jī)設(shè)計(jì)VHDL代碼ISE仿真
軟件:ISE
語(yǔ)言:VHDL
代碼功能:
設(shè)計(jì)內(nèi)容
在EDA環(huán)境下,使用VHDL語(yǔ)言設(shè)計(jì)一個(gè)自動(dòng)飲料售賣機(jī)
設(shè)計(jì)任務(wù)和目標(biāo):
1.使用VHDL語(yǔ)言描述一個(gè)自動(dòng)飲料售賣機(jī),能夠接收5角以上10元以下共4種面額的貨幣,進(jìn)行飲料的購(gòu)買,并根據(jù)實(shí)際情況找零。
2.飲料共6種,對(duì)應(yīng)6個(gè)按鍵。飲料售價(jià)分為1元、1.5元、2元和3元,存在兩種或兩種以上的飲料對(duì)應(yīng)相同售價(jià)的情況。
3.編寫合適的 testbench文件,對(duì)上述系統(tǒng)進(jìn)行測(cè)試并仿真。
4.完成該系統(tǒng)的ⅦHDL模塊化描述,注意使用分層次設(shè)計(jì),并在頂層設(shè)計(jì)中采用元件例化的方式指定模塊間的硬件連接方式。
FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com
演示視頻:
設(shè)計(jì)文檔:
1. 自動(dòng)售貨機(jī)功能描述
2. 工程文件
3. 程序文件
4. 程序編譯
5. RTL圖
6. Testbench
7. 仿真圖
整體仿真圖
按鍵下降沿檢測(cè)模塊仿真
售貨機(jī)控制模塊仿真
數(shù)碼管顯示模塊仿真
部分代碼展示:
LIBRARY?ieee; ???USE?ieee.std_logic_1164.all; ENTITY?auto_sell?IS ???PORT?( ??????clk_50M????????:?IN?STD_LOGIC;--時(shí)鐘 ??????reset_n????????:?IN?STD_LOGIC;--復(fù)位 ??????select_1???:?IN?STD_LOGIC;--商品選擇按鍵1--價(jià)錢1.0 select_2???:?IN?STD_LOGIC;--商品選擇按鍵2--價(jià)錢1.5 select_3???:?IN?STD_LOGIC;--商品選擇按鍵3--價(jià)錢2.0 select_4???:?IN?STD_LOGIC;--商品選擇按鍵4--價(jià)錢3.0 select_5???:?IN?STD_LOGIC;--商品選擇按鍵5--價(jià)錢1.0 select_6???:?IN?STD_LOGIC;--商品選擇按鍵6--價(jià)錢2.0 ??????confirm_key_n??:?IN?STD_LOGIC;--確認(rèn)按鍵 ??????cancel_key_n???:?IN?STD_LOGIC;--取消按鍵 ??????coin_1_n???????:?IN?STD_LOGIC;--投幣1元 ??????coin_2_n???????:?IN?STD_LOGIC;--投幣0.5元 ??????coin_5_n???????:?IN?STD_LOGIC;--投幣5元 coin_10_n???????:?IN?STD_LOGIC;--投幣10元 ?????? ??????buy_succeed????:?OUT?STD_LOGIC;--購(gòu)買成功 ??????bit_select?????:?OUT?STD_LOGIC_VECTOR(3?DOWNTO?0);--數(shù)碼管位選 ??????seg_select?????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0)--數(shù)碼管段選 ???); END?auto_sell; ARCHITECTURE?trans?OF?auto_sell?IS --售貨控制模塊 component?sell_ctrl?IS ???PORT?( ??????clk????????????:?IN?STD_LOGIC; ??????reset_n????????:?IN?STD_LOGIC; ?????? ??????confirm_p??????:?IN?STD_LOGIC; ??????concel_p???????:?IN?STD_LOGIC; ??????select_1???:?IN?STD_LOGIC;--商品選擇按鍵1--價(jià)錢1.0 select_2???:?IN?STD_LOGIC;--商品選擇按鍵2--價(jià)錢1.5 select_3???:?IN?STD_LOGIC;--商品選擇按鍵3--價(jià)錢2.0 select_4???:?IN?STD_LOGIC;--商品選擇按鍵4--價(jià)錢3.0 select_5???:?IN?STD_LOGIC;--商品選擇按鍵5--價(jià)錢1.0 select_6???:?IN?STD_LOGIC;--商品選擇按鍵6--價(jià)錢2.0 ?????? ??????coin_1_p???????:?IN?STD_LOGIC; ??????coin_2_p???????:?IN?STD_LOGIC; ??????coin_5_p???????:?IN?STD_LOGIC; coin_10_p???????:?IN?STD_LOGIC;--投幣10元 ?????? ??????buy_succeed????:?OUT?STD_LOGIC; ??????select_num?????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0); ??????input_money????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0); ??????refound_money??:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0) ???); END?component; --按鍵下降沿檢測(cè)模塊 component?key_jitter?IS ???PORT?( ??????clkin????????:?IN?STD_LOGIC; ??????key_in???????:?IN?STD_LOGIC; ??????key_negedge??:?OUT?STD_LOGIC ???); END?component; --顯示模塊 component?display?IS ???PORT?( ??????clk????????????:?IN?STD_LOGIC; ?????? ??????select_num?????:?IN?STD_LOGIC_VECTOR(7?DOWNTO?0); ??????input_money????:?IN?STD_LOGIC_VECTOR(7?DOWNTO?0); ??????refound_money??:?IN?STD_LOGIC_VECTOR(7?DOWNTO?0); ?????? ??????bit_select?????:?OUT?STD_LOGIC_VECTOR(3?DOWNTO?0); ??????seg_select?????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0) ???); END?component; ???SIGNAL?select_num????????:?STD_LOGIC_VECTOR(7?DOWNTO?0); ???SIGNAL?input_money???????:?STD_LOGIC_VECTOR(7?DOWNTO?0); ???SIGNAL?refound_money?????:?STD_LOGIC_VECTOR(7?DOWNTO?0); ??? ???SIGNAL?confirm_p?????????:?STD_LOGIC; ???SIGNAL?concel_p??????????:?STD_LOGIC; ??? ???SIGNAL?coin_1_p??????????:?STD_LOGIC; ???SIGNAL?coin_2_p??????????:?STD_LOGIC; ???SIGNAL?coin_5_p??????????:?STD_LOGIC; SIGNAL?coin_10_p??????????:?STD_LOGIC; ??? ???--?Declare?intermediate?signals?for?referenced?outputs ???SIGNAL?buy_succeed_buf?:?STD_LOGIC; ???SIGNAL?bit_select_buf??:?STD_LOGIC_VECTOR(3?DOWNTO?0); ???SIGNAL?seg_select_buf??:?STD_LOGIC_VECTOR(7?DOWNTO?0); BEGIN ???buy_succeed?<=?buy_succeed_buf; ???bit_select?<=?bit_select_buf; ???seg_select?<=?seg_select_buf; ????? --調(diào)用按鍵下降沿檢測(cè)模塊??? ???i1_key_jitter?:?key_jitter ??????PORT?MAP?( ?????????clkin????????=>?clk_50M, ?????????key_in???????=>?confirm_key_n, ?????????key_negedge??=>?confirm_p ??????); ??? ??? --調(diào)用按鍵下降沿檢測(cè)模塊? ???i2_key_jitter?:?key_jitter ??????PORT?MAP?( ?????????clkin????????=>?clk_50M, ?????????key_in???????=>?cancel_key_n, ?????????key_negedge??=>?concel_p ??????); ??? ??? --調(diào)用按鍵下降沿檢測(cè)模塊? ???i3_key_jitter?:?key_jitter ??????PORT?MAP?( ?????????clkin????????=>?clk_50M, ?????????key_in???????=>?coin_1_n, ?????????key_negedge??=>?coin_1_p ??????); ??? ??? --調(diào)用按鍵下降沿檢測(cè)模塊? ???i4_key_jitter?:?key_jitter ??????PORT?MAP?( ?????????clkin????????=>?clk_50M, ?????????key_in???????=>?coin_2_n, ?????????key_negedge??=>?coin_2_p ??????); ??? --調(diào)用按鍵下降沿檢測(cè)模塊? ???i5_key_jitter?:?key_jitter ??????PORT?MAP?( ?????????clkin????????=>?clk_50M, ?????????key_in???????=>?coin_5_n, ?????????key_negedge??=>?coin_5_p ??????); --調(diào)用按鍵下降沿檢測(cè)模塊?? ???i6_key_jitter?:?key_jitter ??????PORT?MAP?( ?????????clkin????????=>?clk_50M, ?????????key_in???????=>?coin_10_n, ?????????key_negedge??=>?coin_10_p ??????); ??? ?--調(diào)用售貨控制模塊?? ???i_sell_ctrl?:?sell_ctrl ??????PORT?MAP?( ?????????clk????????????=>?clk_50M, ?????????reset_n????????=>?reset_n, ????????? ?????????confirm_p??????=>?confirm_p, ?????????concel_p???????=>?concel_p, select_1???????=>?select_1, select_2???????=>?select_2, select_3???????=>?select_3, select_4???????=>?select_4, select_5???????=>?select_5, select_6???????=>?select_6,????????? ?????????coin_1_p???????=>?coin_1_p, ?????????coin_2_p???????=>?coin_2_p, ?????????coin_5_p???????=>?coin_5_p, coin_10_p??????=>?coin_10_p, ????????? ?????????buy_succeed????=>?buy_succeed_buf, ?????????select_num?????=>?select_num, ?????????input_money????=>?input_money, ?????????refound_money??=>?refound_money ??????); ??? ??? ?--調(diào)用顯示模塊?? ???i_display?:?display ??????PORT?MAP?( ?????????clk????????????=>?clk_50M, ????????? ?????????select_num?????=>?select_num, ?????????input_money????=>?input_money, ?????????refound_money??=>?refound_money, ????????? ?????????bit_select?????=>?bit_select_buf, ?????????seg_select?????=>?seg_select_buf ??????); ??? END?trans;
點(diǎn)擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=486