今天给大侠带来基于FPGA的自动售货机设计,附源码,获取源码,请在“FPGA技术江湖”公众号内回复“ 自动售货机设计源码”,可获取源码文件。话不多说,上货。
一听饮料需要2.5美元,规定只能投入一美元,0.5美元的硬币。
设计框架图:
module sell(clk,rst_n,one_dole,half_dole,descense,back_money);
input clk;
input rst_n;
input one_dole; //输入1美元
input half_dole; //输入0.5美元
output reg descense; //是否买到的标志位
output reg [2:0] back_money; //找回的钱
parameter s0 = 2'b00,s1 = 2'b01,s2 = 2'b10;
reg [1:0] state;
reg [4:0] money;
reg [1:0] state_x;
always @ (posedge clk or negedge rst_n)
if(!rst_n)
begin
state_x <= s0;
end
else
begin
state_x <= state;
end
always @ (posedge clk or negedge rst_n)
if(!rst_n)
begin
money <= 5'b0;
state <= s0;
end
else
begin
case (state)
s0:begin
//判断投入的钱是多少
begin
money <= money + 10;
state <= s1;
end
else if(half_dole)
begin
money <= money + 5;
state <= s1;
end
else
begin
state <= s0;
money <= money;
end
end
//判断和商品的价格是否一样
s1:begin
< 25)
begin
state <= s0;
end
else
begin
state <= s0;
money <= 5'b0;
end
end
endcase
end
reg [1:0] state_s;
always @ (posedge clk or negedge rst_n )
if(!rst_n)
begin
descense <= 1'b0;
back_money <= 3'b0;
state_s <= s0;
end
else
begin
case (state_s)
s0: begin
< 25) //判断输入的钱数
begin
back_money <= 3'b0;
descense <= 1'b0;
end
else
//找回的钱和买到的标志位
begin
back_money <= money - 25;
descense <= 1'b1;
state_s <= s1;
end
end
s1: begin
descense <= 1'b0;
state_s <= s0;
end
endcase
end
endmodule
1ns/1ps //时间精度
module sell_tb();
//定义我们的端口
reg clk;
reg rst_n;
reg one_dole;
reg half_dole;
wire descense;
wire [2:0] back_money;
initial begin
clk = 1'b1;
rst_n = 1'b0;
one_dole = 1'b0;
half_dole = 1'b0;
#200.1 rst_n = 1'b1;
//模拟输入的钱数
#200 one_dole = 1'b1;
#20 one_dole = 1'b0;
#200 one_dole = 1'b1;
#20 one_dole = 1'b0;
#200 one_dole = 1'b1;
#20 one_dole = 1'b0;
#1000.1
#200 half_dole = 1'b1;
#20 half_dole = 1'b0;
#200 one_dole = 1'b1;
#20 one_dole = 1'b0;
#200 one_dole = 1'b1;
#20 one_dole = 1'b0;
# 1000 $stop; //停止仿真
end
always #10 clk = ~ clk;
sell sell_dut( //例化端口
.clk(clk),
.rst_n(rst_n),
.one_dole(one_dole),
.half_dole(half_dole),
.descense(descense),
.back_money(back_money)
);
endmodule
我们从仿真中可以看到当我们的钱数投够的时候,就给一个买到的标志位,如果投的超过商品的价格,那么我们就给一个买的标志位,然后找回我们投的多的钱。
END
往期精选
FPGA技术江湖广发江湖帖
无广告纯净模式,给技术交流一片净土,从初学小白到行业精英业界大佬等,从军工领域到民用企业等,从通信、图像处理到人工智能等各个方向应有尽有,QQ微信双选,FPGA技术江湖打造最纯净最专业的技术交流学习平台。
FPGA技术江湖微信交流群
加群主微信,备注姓名+学校/公司+专业/岗位进群
FPGA技术江湖QQ交流群
备注姓名+学校/公司+专业/岗位进群