名稱:Quartus自動(dòng)售貨機(jī)VHDL代碼
軟件:Quartus
語言:VHDL
代碼功能:
自動(dòng)售貨機(jī),三種幣值、兩種商品,注意定義和設(shè)計(jì)的合理性。
FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com
演示視頻:
設(shè)計(jì)文檔:
1. 代碼文件
2. 程序
3. 編譯
4. Testbench
5. 仿真圖
整體仿真圖
分頻模塊
按鍵檢測模塊
狀態(tài)機(jī)控制模塊
從仿真圖中可以分析得到,購買5元商品,投入10元,找零5元;從控制模塊的仿真中可以分析得到,購買10元商品,先投入5元,再投入10元,一共投入15元,找零5元;從仿真結(jié)果中可以看出設(shè)計(jì)的符合要求。
紅燈閃爍模塊
售賣led控制模塊
部分代碼展示:
library?IEEE; use?IEEE.STD_LOGIC_1164.ALL; --頂層模塊 entity?auto_sell?is ????port ( clk?:in??std_logic;--clk rst_n?:in??std_logic;--rst key_in_0?:in??std_logic;--5元商品 key_in_1?:in??std_logic;--10元商品 key_in_2?:in??std_logic;--投幣5元 key_in_3?:in??std_logic;--投幣10元 key_in_4?:in??std_logic;--投幣20元 key_in_5?:in??std_logic;--商品推出 led_red????:out?std_logic;--紅燈閃爍 led_5Y?????:out?std_logic;--售賣5元指示燈 led_10Y?????:out?std_logic;--售賣10元指示燈 led_charge?????:out?std_logic_vector(1?downto?0)--5元找零信號(hào),10元找零信號(hào) ); end?auto_sell; architecture?Behavioral?of?auto_sell?is --分頻模塊 component?fengpin?is port ( clk?:in??std_logic;--clk?50MHz rst?:in??std_logic;--rst低有效 clk_1KHz??:out?std_logic;?--1KHz信號(hào)輸出 clk_1Hz??:out?std_logic?--1Hz信號(hào)輸出 ); end?component; --按鍵檢測模塊 component?key_detect?is port ( clk_1KHz???:in??std_logic;--clk_1KHz key_in?????:in??std_logic_vector(5?downto?0);--按鍵信號(hào)輸入 key_buf?:out?std_logic_vector(5?downto?0);?--按鍵值輸出 key_n??:out?std_logic_vector(5?downto?0)?--按鍵標(biāo)志信號(hào)輸出 ); end?component; --狀態(tài)機(jī)控制模塊 component?state_ctrl?is ????port ( clk_1KHz???:in??std_logic;--clk_1KHz rst_n???:in??std_logic;--rst低有效 key_n??:in??std_logic_vector(5?downto?0);--key_n(0)5元商品,key_n(1)10元商品,key_n(2)5元,key_n(3)10元,key_n(4)20元,key_n(5)檢測商品推出 key_buf?:in??std_logic_vector(5?downto?0);--按鍵值信號(hào)輸入 ????state_o?:out?std_logic_vector(2?downto?0);--狀態(tài)輸出 led_charge?????:out?std_logic_vector(1?downto?0)--5元找零信號(hào),10元找零信號(hào) ); end?component; --紅燈閃爍控制模塊 component?red_led_ctrl?is ????port ( clk_1KHz???:in??std_logic;--clk_1KHz rst_n???:in??std_logic;--rst低有效 key_buf?:in??std_logic_vector(5?downto?0);--按鍵值信號(hào)輸入 ????state_o?:in?std_logic_vector(2?downto?0);--狀態(tài)輸出 clk_1Hz???:in??std_logic;--1Hz時(shí)鐘輸入 led_red????:out?std_logic--紅燈閃爍 ); end?component; --售賣led控制 component?sell_led?is ????port ( clk_1KHz???:in??std_logic;--clk_1KHz rst_n???:in??std_logic;--rst低有效 key_n??:in??std_logic_vector(5?downto?0);--key_n(0)5元商品,key_n(1)10元商品,key_n(2)5元,key_n(3)10元,key_n(4)20元,key_n(5)檢測商品推出 ????state_o?:in?std_logic_vector(2?downto?0);--狀態(tài)輸入 led_5Y?????:out?std_logic;--售賣5元指示燈 led_10Y?????:out?std_logic--售賣10元指示燈 ); end?component; ???? ????signal?clk_1Hz:std_logic; signal?clk_1KHz:std_logic; signal?key_in:?std_logic_vector(5?downto?0); ????signal?key_n:?std_logic_vector(5?downto?0); signal?key_buf:?std_logic_vector(5?downto?0); signal?state_o?:?std_logic_vector(2?downto?0);--狀態(tài)輸出 begin --輸入按鍵拼接為6bit key_in<=key_in_5?&?key_in_4?&?key_in_3?&?key_in_2?&?key_in_1?&?key_in_0; --分頻模塊 U_fengpin:?fengpin port?map ( clk?=>?clk,--clk?50MHz rst?=>?rst_n,--rst低有效 clk_1KHz??=>?clk_1KHz,?--1KHz信號(hào)輸出 clk_1Hz?=>?clk_1Hz?--1Hz信號(hào)輸出 ); --按鍵檢測模塊 U_key_detect:key_detect port?map ( clk_1KHz??=>?clk_1KHz,?--1KHz信號(hào)輸出 key_in????=>key_in,--按鍵信號(hào)輸入 key_buf?=>key_buf,?--按鍵值輸出 key_n??=>key_n--按鍵標(biāo)志信號(hào)輸出 ); --狀態(tài)機(jī)控制模塊 U_state_ctrl:state_ctrl ????port?map ( clk_1KHz??=>?clk_1KHz,?--1KHz信號(hào)輸出 rst_n???=>?rst_n,?--rst低有效 key_n??=>key_n,--key_n(0)5元商品,key_n(1)10元商品,key_n(2)5元,key_n(3)10元,key_n(4)20元,key_n(5)檢測商品推出 key_buf?=>key_buf,?--按鍵值信號(hào)輸入 state_o??=>?state_o,--狀態(tài)輸出 led_charge?=>?led_charge--5元找零信號(hào),10元找零信號(hào) ); --紅燈閃爍控制模塊 U_red_led_ctrl:?red_led_ctrl ????port?map ( clk_1KHz???=>?clk_1KHz,?--1KHz信號(hào) rst_n???=>?rst_n,?--rst低有效 key_buf?=>key_buf,?--按鍵值信號(hào)輸入 ????state_o??=>?state_o,--狀態(tài) clk_1Hz?=>?clk_1Hz,?--1Hz信號(hào)輸出 led_red?=>led_red--紅燈閃爍 ); --售賣led控制 U_sell_led:?sell_led ????port?map ( clk_1KHz??=>?clk_1KHz,?--1KHz信號(hào) rst_n???=>?rst_n,?--rst低有效 key_n??=>key_n,--key_n(0)5元商品,key_n(1)10元商品,key_n(2)5元,key_n(3)10元,key_n(4)20元,key_n(5)檢測商品推出 ????state_o??=>?state_o,--狀態(tài) led_5Y???=>led_5Y,--售賣5元指示燈 led_10Y??=>led_10Y--售賣10元指示燈 ); end?Behavioral;
點(diǎn)擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=416