名称:基于FPGA的饮料售卖机设计VHDL代码VIVADO仿真
软件:VIVADO
语言:VHDL
代码功能:
功能:
1、饮料有5元和10元两种,机器能识别的币有5元、10元、20元三种,钞票识别是由收钞机完成,钞票识别模块通过三个开关量信号反馈识别到的钞票,平时全部为高电平,识别到一种有效钞票时,对应开关量信号会出现一个低电平脉冲,若出现不能识别或者不是三种钞票之一的钞票,三个开关量全输出低电平脉冲,售卖机的一个红灯闪烁,到投入正确的钞票为止。
2、售卖过程是:两种饮料分别有一个按钮,当按下对应按钮,该饮料的指示灯亮,等投入对应数量货币时,启动电机,将对应饮料推出,设置一个开关量能检测到饮料已经成功推出,成功推出后,停止电机推出,同时指示灯熄灭。
3、若投入的币大于了对应的销售金额,需要根据实际情况找零,找零是各通过一个开关量信号给收钞机,平时两个信号为低电平,当需要找零时,对应信号线置高,表示需要吐出一张对应的币。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1. 工程文件
2. 程序文件
3. 程序编译
4. RTL图
5. Testbench
6. 仿真图
整体仿真图
分频模块
按键下降沿模块
控制模块
部分代码展示:
library?IEEE; use?IEEE.STD_LOGIC_1164.ALL; --顶层模块 entity?top?is ????port ( clk?:in??std_logic;--clk rst_n?:in??std_logic;--复位 btn_in?:in??std_logic_vector(5?downto?0);--btn_n(0)5元饮料,btn_n(1)10元饮料,btn_n(2)5元,btn_n(3)10元,btn_n(4)20元,btn_n(5)饮料推出 LED?:out?std_logic_vector(4?downto?0)?--LED(0)红灯闪烁,LED(1)售卖5元指示灯,LED(2)售卖10元指示灯,LED(3)5元找零信号,LED(4)10元找零信号 ); end?top; architecture?Behavioral?of?top?is --分频模块 component?clk_gen?is port ( clk_in?:in??std_logic;--clk_in?50MHz clk_1Hz??:out?std_logic?--1Hz信号输出 ); end?component; --按键下降沿检测 component?button_jit?is port ( clk_in???:in??std_logic;--clk_in btn_in?????:in??std_logic;--按键信号输入 btn_keep?:out?std_logic;?--按键值输出 btn_n??:out?std_logic?--按键标志信号输出 ); end?component; --控制模块 entity?control?is ????port ( clk_in???:in??std_logic;--clk_in rst_n???:in??std_logic;--rst低有效 btn_n??:in??std_logic_vector(5?downto?0);--btn_n(0)5元饮料,btn_n(1)10元饮料,btn_n(2)5元,btn_n(3)10元,btn_n(4)20元,btn_n(5)检测饮料推出 btn_keep?:in??std_logic_vector(5?downto?0);--按键值信号输入 clk_1Hz???:in??std_logic;--1Hz时钟输入 LED???????:out?std_logic_vector(4?downto?0)--LED(0)红灯闪烁,LED(1)售卖5元指示灯,LED(2)售卖10元指示灯,LED(3)5元找零信号,LED(4)10元找零信号 ); end?control; ???? ????signal?clk_1Hz:std_logic; signal?clk_in:std_logic; ????signal?btn_n:?std_logic_vector(5?downto?0); signal?btn_keep:?std_logic_vector(5?downto?0); begin --分频模块 U_clk_gen:?clk_gen port?map ( clk_in?=>?clk_in,--clk?50MHz clk_1Hz?=>?clk_1Hz?--1Hz信号输出 ); --按键下降沿检测 U0_button_jit?button_jit port?map ( clk_in=>?clk_in,--clk_in btn_in=>?btn_in(0),--按键信号输入 btn_keep=>?btn_keep(0),?--按键值输出 btn_n=>?btn_n(0)?--按键标志信号输出 ); --按键下降沿检测 U1_button_jit?button_jit port?map ( clk_in=>?clk_in,--clk_in btn_in=>?btn_in(1),--按键信号输入 btn_keep=>?btn_keep(1),?--按键值输出 btn_n=>?btn_n(1)?--按键标志信号输出 ); --按键下降沿检测 U2_button_jit?button_jit port?map ( clk_in=>?clk_in,--clk_in btn_in=>?btn_in(2),--按键信号输入 btn_keep=>?btn_keep(2),?--按键值输出 btn_n=>?btn_n(2)?--按键标志信号输出 ); --按键下降沿检测 U3_button_jit?button_jit port?map ( clk_in=>?clk_in,--clk_in btn_in=>?btn_in(3),--按键信号输入 btn_keep=>?btn_keep(3),?--按键值输出 btn_n=>?btn_n(3)?--按键标志信号输出 ); --按键下降沿检测 U4_button_jit?button_jit port?map ( clk_in=>?clk_in,--clk_in btn_in=>?btn_in(4),--按键信号输入 btn_keep=>?btn_keep(4),?--按键值输出 btn_n=>?btn_n(4)?--按键标志信号输出 );
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=849
223