基于FPGA状态机的自动售货机功能实现

本文介绍了一款基于FPGA的自动售货机设计方案,利用状态机实现了商品选购、投币验证、出货及报警等功能,并详细阐述了各模块的工作原理。

用FPGA制作一个简单的自动售货机

这篇博客讲了如何用FPGA模拟实现自动售卖机的功能。


1. 程序功能和总体框架详解

程序功能:

  • 按键K3为复位信号,led0,led1控制led等,siren控制蜂鸣器,seg_sel和seg_led分别控制数码管的片选和位选信号
  • 有两个商品cnt_40和cnt_50,分别价值40元和50元,K1,K2连接按键,每按一下,代表要购买的cnt_40和cnt_50加1,例如:买2个cnt_40,1个cnt_50,则按2下K1和1下K2,选好商品后,按K4确认;
  • 确认后开始投币,投币时K1,K2分别代表投入10元硬币和20元硬币,按K4确认;
  • 用4个数码管分别显示2个商品购买个数和2种硬币投入个数
  • 若硬币价钱和商品价钱相等,则出货:两个led灯的闪烁次数表示两个商品的出货个数
  • 若不相等,蜂鸣器报警
    框架
    整体框架的代码如下所示:
module top(input k1,input k2,input k4,input k3,input clk,output led1,output led2,output [5:0] seg_sel,output [7:0] seg_led,output siren);
wire key1,key2,key4,le,sir,f1hz;
wire [3:0] cnt_40;
wire [3:0] cnt_50;
wire [3:0] coin_10;
wire [3:0] coin_20;
wire [2:0] cnt;
wire [15:0] data;
assign data={
   
   cnt_40[3:0],cnt_50[3:0],coin_10[3:0],coin_20[3:0]};
debounce  d1 (.rst(k3),.clock(clk),.noisy(k1),.clean(key1));  //Debounce模块
debounce  d2 (.rst(k3),.clock(clk),.noisy(k2),.clean(key2));
debounce  d3 (.rst(k3),.clock(clk),.noisy(k4),.clean(key4));
fsm f1(.clock(f1hz),.k1(key1),.k2(key2),.k3(k3),.k4(key4),.led(le),.siren(sir),.cnt_40(cnt_40),.cnt_50(cnt_50),.coin_10(coin_10),.coin_20(coin_20));
divider  di1(.clock(clk),.rst(k3),.wave(f1hz)); //对应图中FSM模块
led  l1(.clk(clk),.cnt_40(cnt_40),
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮皮宽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值