名称:基于FPGA的货物自动售货机设计Verilog代码Quartus仿真
软件:Quartus
语言:Verilog
代码功能:
该系统能完成自身的复位。对货物信息的存储、进程控制,硬币处、余额计算、显示等功能
a.机器只接受1元硬币和5角硬币。
b.机器共提供4种货物,价格分别为2元、2元、1.5元、1.5元(可通过调整代码改变每种货物的单价)。
c.顾客先选择需要的一种商品,在确认所选货物后,进入投币状态。当顾客选择的货物售完时,在顾客确认货物之时,提示顾客货物卖光,并返回初始状态(顾客确认货物时,提供确认选择和重新选择两个选项)。
d.若等待30s,顾客不投币,则返回初始状态;顾客投币后,系统自动计算所投钱币。若钱币够,则出货找零。若自客户确认货物之后30s,投币不够,则退币并返回初状态。也可在投币完成时按投币完成按钮快速进入计算钱币状态以及后续状态。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
设计文档:
1. 工程文件
2. 程序文件
3. 程序编译
4. RTL图
5. Testbench
6. 仿真图
整体仿真图
正常购买流程:选择2.0元商品,goods_led低电平亮,指示商品,按下确认键confirm_key后,先后投币1元,0.5元,1元,有显示投币金额input_money_BCD,价钱need_money_BCD,找钱change_money_BCD,还差金额left_money_BCD。
仿真选1.5元商品后30s没有操作,还差金额由1.5变为0,返回初始状态。
仿真选中1.5元商品,投币1元后,30s没有操作,还剩金额由0.5变为0,返回投币1元,退币指示灯coin_return_led亮。
部分代码展示:
module?auto_sell( input?clk_in,//48M input?reset_n,//复位 //按键按下低电平 input?coin_10_key,//投币1元 input?coin_05_key,//投币0.5元 input?price_20_1_key,//2元商品1 input?price_20_2_key,//2元商品2 input?price_15_1_key,//1.5元商品1 input?price_15_2_key,//1.5元商品2 input?confirm_key,//确认 output?succeed_ledn,//购买成功指示灯 output?coin_return_ledn,//退币指示灯 output?[3:0]?goods_ledn,//商品指示灯 output?NO_goods_ledn,//商品缺货指示灯 output?[7:0]?DLA,//数码管位选,低电平选择 output?[7:0]?HEX//数码管段选,低亮 ); wire?[7:0]?input_money_BCD;//投币金额 wire?[7:0]?need_money_BCD;//价钱 wire?[7:0]?change_money_BCD;//找钱 wire?[7:0]?left_money_BCD;//还差金额 wire?coin_10_p;//投币1元 wire?coin_05_p;//投币0.5元 wire?price_20_1_p;//2元商品 wire?price_20_2_p;//2元商品 wire?price_15_1_p;//1.5元商品 wire?price_15_2_p;//1.5元商品 wire?confirm_p;//确认? //按键消抖模块 key_jitter?i0_key_jitter( .?clkin(clk_in),????? .?key_in(coin_10_key),//输入 .?key_negedge(coin_10_p)//消抖后按键下降沿 ); //按键消抖模块 key_jitter?i1_key_jitter( .?clkin(clk_in),????? .?key_in(coin_05_key),//输入 .?key_negedge(coin_05_p)//消抖后按键下降沿 ); //按键消抖模块 key_jitter?i2_key_jitter( .?clkin(clk_in),????? .?key_in(price_20_1_key),//输入 .?key_negedge(price_20_1_p)//消抖后按键下降沿 ); //按键消抖模块 key_jitter?i3_key_jitter( .?clkin(clk_in),????? .?key_in(price_20_2_key),//输入 .?key_negedge(price_20_2_p)//消抖后按键下降沿 ); //按键消抖模块 key_jitter?i4_key_jitter( .?clkin(clk_in),????? .?key_in(price_15_1_key),//输入 .?key_negedge(price_15_1_p)//消抖后按键下降沿 );
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=838
								
								
								
305