名称:Quartus自动售货机VHDL代码
软件:Quartus
语言:VHDL
代码功能:
自动售货机,三种币值、两种商品,注意定义和设计的合理性。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1. 代码文件
2. 程序
3. 编译
4. Testbench
5. 仿真图
整体仿真图
分频模块
按键检测模块
状态机控制模块
从仿真图中可以分析得到,购买5元商品,投入10元,找零5元;从控制模块的仿真中可以分析得到,购买10元商品,先投入5元,再投入10元,一共投入15元,找零5元;从仿真结果中可以看出设计的符合要求。
红灯闪烁模块
售卖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元找零信号,10元找零信号 ); 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信号输出 clk_1Hz :out std_logic --1Hz信号输出 ); end component; --按键检测模块 component key_detect is port ( clk_1KHz :in std_logic;--clk_1KHz key_in :in std_logic_vector(5 downto 0);--按键信号输入 key_buf :out std_logic_vector(5 downto 0); --按键值输出 key_n :out std_logic_vector(5 downto 0) --按键标志信号输出 ); end component; --状态机控制模块 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);--按键值信号输入 state_o :out std_logic_vector(2 downto 0);--状态输出 led_charge :out std_logic_vector(1 downto 0)--5元找零信号,10元找零信号 ); 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);--按键值信号输入 state_o :in std_logic_vector(2 downto 0);--状态输出 clk_1Hz :in std_logic;--1Hz时钟输入 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);--状态输入 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);--状态输出 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信号输出 clk_1Hz => clk_1Hz --1Hz信号输出 ); --按键检测模块 U_key_detect:key_detect port map ( clk_1KHz => clk_1KHz, --1KHz信号输出 key_in =>key_in,--按键信号输入 key_buf =>key_buf, --按键值输出 key_n =>key_n--按键标志信号输出 ); --状态机控制模块 U_state_ctrl:state_ctrl port map ( clk_1KHz => clk_1KHz, --1KHz信号输出 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, --按键值信号输入 state_o => state_o,--状态输出 led_charge => led_charge--5元找零信号,10元找零信号 ); --红灯闪烁控制模块 U_red_led_ctrl: red_led_ctrl port map ( clk_1KHz => clk_1KHz, --1KHz信号 rst_n => rst_n, --rst低有效 key_buf =>key_buf, --按键值信号输入 state_o => state_o,--状态 clk_1Hz => clk_1Hz, --1Hz信号输出 led_red =>led_red--红灯闪烁 ); --售卖led控制 U_sell_led: sell_led port map ( clk_1KHz => clk_1KHz, --1KHz信号 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,--状态 led_5Y =>led_5Y,--售卖5元指示灯 led_10Y =>led_10Y--售卖10元指示灯 ); end Behavioral;
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=416
阅读全文
836