用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),

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

1万+

被折叠的 条评论
为什么被折叠?



