售货机基于ego1开发板的自动饮料机verilog代码vivado软件

名称:售货机基于ego1开发板的自动饮料机verilog代码vivado软件

软件:VIVADO

语言:Verilog

代码功能:

设计一个自动饮料机逻辑电路,

它的投币口只能投入一枚五角或一元硬币;

投入一元五角硬币后机器自动给出一杯饮料,投入两元硬币后再给出饮料的同时找回一枚五角硬币;

数码管显示投币金额、商品单价、找零金额;

出货时通过led灯指示。

本代码已在ego1开发板验证,开发板如下,其他开发板可以修改管脚适配:

ego1开发板.png

代码下载:售货机基于ego1开发板的自动饮料机verilog代码vivado软件名称:售货机基于ego1开发板的自动饮料机verilog代码vivado软件(代码在文末下载)软件:VIVADO语言:Verilog代码功能:设计一个自动饮料机逻辑电路,它的投币口只能投入一枚五角或一元硬币;投入一元五角硬币后机器自动给出一杯饮料,投入两元硬币后再给出饮料的同时找回一枚五角硬币;数码管显示投币金额、商品单价、找零金额;出货时通过led灯指示。FPGA代码Verilog/VHDL代码icon-default.png?t=N7T8http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=306

1. 工程文件

2. 程序文件

3. 程序编译

4. RTL图

5. 管脚分配

6. Testbench

7. 仿真图

整体仿真图

按键消抖模块

控制模块

显示模块

部分代码展示:

//售货状态控制模块
module state_control(
input clk_in,
input rst,//高电平有效
input throw_into_10_down_out,//1.0元
input throw_into_05_down_out,//0.5元
output  outgo_done_15,//出货指示灯
output [7:0] total_throw_inmoney_out,//投入总钱币
output [7:0] total_need_money_out,//商品价钱
output [7:0] total_refund_money_out//找零金额
);
parameter state_0=4'd0;//选择商品
parameter state_1=4'd1;//投钱
parameter state_2=4'd2;//确认购买
parameter state_4=4'd4;//等待
parameter state_5=4'd9;//结束
reg [3:0] state=4'd0;
reg [7:0] total_throw_inmoney=8'd0;//投入总钱币
reg [7:0] total_need_money=8'd0;//选中商品价钱
reg [7:0] total_refund_money=8'd0;//找零金额
reg [7:0] accumulated_money=8'd0;//累计卖货额
assign total_throw_inmoney_out=total_throw_inmoney;
assign total_need_money_out=total_need_money;
assign total_refund_money_out=total_refund_money;
assign total_accumulated_money=accumulated_money;
///控制模块:状态机,实现各个状态的转换//
reg wait_second_time=1'd0;
always@(posedge clk_in or posedge rst)
if(rst)
state<=state_0;
else
case(state)
state_0://初始状态
state<=state_1;
state_1://投钱
begin
if(total_throw_inmoney>=total_need_money)//投币足够
state<=state_2;//找零
else
state<=state_1;//继续投钱
end
state_2://确认购买
state <=state_4;
state_4://等待
state<=state_5;
state_5://结束
state<=state_5;
default:state<=state_0;
endcase
reg [7:0] univalence=8'd0;//单价
reg outgo_done=0;
always@(posedge clk_in)
begin
case (state)
state_0: //商品选择
begin
    univalence<=8'd15;//单价一元五角
total_need_money<=univalence;//单价
total_throw_inmoney<=8'd0;
total_refund_money<=8'd0;
outgo_done<=1'd0;
end
state_1:               ///投币输入
begin
if(throw_into_05_down_out ==1'd1)//投入0.5元
total_throw_inmoney<=total_throw_inmoney+8'd5;
else if(throw_into_10_down_out ==1'd1)//投入1.0元
total_throw_inmoney<=total_throw_inmoney+8'd10;
else
total_throw_inmoney<=total_throw_inmoney;
total_need_money<=total_need_money;
total_refund_money<=total_refund_money;
outgo_done<=1'd0;
end
state_2: //计算找零金额
begin
if(total_throw_inmoney>total_need_money) //如果投入大于所需
begin
total_refund_money<=total_throw_inmoney-total_need_money;//找零
end
else if(total_throw_inmoney==total_need_money)//如果投入等于所需
begin
total_refund_money<=8'd0;
end
else
total_refund_money<=total_throw_inmoney;//退币
total_need_money<=total_need_money;
total_throw_inmoney<=total_throw_inmoney;
outgo_done<=1'd0;//
end
state_4,state_5:
begin
total_need_money<=total_need_money;
total_throw_inmoney<=total_throw_inmoney;
total_refund_money<=total_refund_money;
outgo_done<=1'd1;
end

猜你喜欢

转载自blog.csdn.net/diaojiangxue/article/details/134606802