VIVADO自动售票机售货机verilog代码ego1开发板验证

名称:VIVADO自动售票机售货机verilog代码ego1开发板验证

软件:VIVADO

语言:Verilog

代码功能:

自动售票机 

1、自动售票机只出售1角、2角、5角和1元4种车票

2、只接收1角、5角和1元硬币,每次只能出售1张车 

3、自动售票机具有累加销售额的功能

实验要求 

出售车票用SW0~3分别表示1角、2角、5角、1元4种 ;

投入硬币用S1、S2、S3分别表示1角5角和1元

投币后用开关SW7确认;若投入钱数不够,将硬币退出并报警,D9~D16闪烁,报警3秒

若投币足够,送出车票,用4个不同LED辅出D1、D2、D3、D4显示,若有余额自动找零

所有币额用两位BCD码显

按键和拔码开关需要做消抖处理。

要求.png

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

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

ego1开发板.png

代码下载:VIVADO自动售票机售货机verilog代码ego1开发板验证名称:VIVADO自动售票机售货机verilog代码ego1开发板验证 (代码在文末下载)软件:VIVADO语言:Verilog代码功能:自动售票机 1、自动售票机只出售1角、2角、5角和1元4种车票2、只接收1角、5角和1元硬币,每次只能出售1张车 3、自动售票机具有累加销售额的功能实验要求 出售车票用SW0~3分别表示1角、2角、5角、1元4种 ;投入硬币用S1、S2、S3分别表示1角5角和1icon-default.png?t=N7T8http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=304

设计文档:

1. 工程文件

2. 程序文件

3. 程序编译

4. RTL图

5. 管脚分配

6. Testbench

7. 仿真图

整体仿真图

按键消抖模块仿真

售票机控制模块仿真

数码管显示模块仿真

部分代码展示:

//售货状态控制模块
module state_control(
input clk_in,
input rst,//高电平有效
//按键 高电平有效
input Selection_goods_01,//选商品1,商品分为0.1,0.2,0.5,1.0元
input Selection_goods_02,//选商品2,商品分为0.1,0.2,0.5,1.0元
input Selection_goods_05,//选商品5,商品分为0.1,0.2,0.5,1.0元
input Selection_goods_10,//选商品10,商品分为0.1,0.2,0.5,1.0元
input throw_into_10_down_out,//1.0元
input throw_into_05_down_out,//0.5元
input throw_into_01_down_out,//0.1元
input confirm_button_out,//确认
output [7:0] LED,//闪烁报警(D9~16)
output reg outgo_done_01,//出货指示灯1
output reg outgo_done_02,//出货指示灯2
output reg outgo_done_05,//出货指示灯5
output reg outgo_done_10,//出货指示灯10
output [7:0] total_accumulated_money,//累计卖货额
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_3=4'd3;//投入不足
parameter state_4=4'd4;//等待时间3秒
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://选择商品
begin
if(confirm_button_out==1)
begin
state<=state_1;
end 
else begin 
state<=state_0;
end
end
state_1://投钱
begin
if(confirm_button_out==1)//按确认键
state<=state_2;//找零
else
state<=state_1;//继续投钱
end
state_2://确认购买
begin
if(total_throw_inmoney<total_need_money)//投入不足
state<=state_3;//蜂鸣器提示3秒
else 
begin    //如果投入大于等于所需钱数
state <=state_4;
end
end
state_3://投入不足,蜂鸣器提示
if(wait_second_time==1'd1)
begin
state<=state_0;//回到初始状态
end
else begin
state<=state_3;
end
state_4://等待时间3秒
if(wait_second_time==1'd1)  //保持3s进入下一个状态
state<=state_5;
else
state<=state_4;
state_5://结束
state<=state_0;
default:state<=state_0;
endcase

  • 22
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个基于Vivado自动售货机最简单的项目代码: ```verilog module vending_machine( input clk, // 时钟信号 input rst, // 复位信号 input [3:0] coin, // 投币信号 input [1:0] select, // 选择商品信号 output reg [3:0] price, // 商品价格 output reg [3:0] balance, // 余额 output reg [1:0] status, // 状态 output reg vend // 出货信号 ); // 状态定义 parameter WAIT_SELECT = 2'b00; parameter WAIT_COIN = 2'b01; parameter WAIT_VEND = 2'b10; // 商品价格 reg [3:0] product_price = 4'h1; // 商品库存量 reg [3:0] product_stock = 4'h5; // 硬币检测信号 wire valid_coin = (coin == 4'b0100); // 投币金额 reg [3:0] coin_amount = 4'h0; // 出货计数器 reg [3:0] vend_count = 4'h0; // 状态机 always @(posedge clk or posedge rst) begin if (rst) begin price <= 4'h0; balance <= 4'h0; status <= WAIT_SELECT; vend <= 1'b0; end else begin case (status) WAIT_SELECT: begin price <= product_price; balance <= coin_amount; if (select != 2'b00 && product_stock > 0) begin status <= WAIT_COIN; end end WAIT_COIN: begin price <= 4'h0; balance <= coin_amount + coin; coin_amount <= coin_amount + coin; if (valid_coin && coin_amount >= product_price) begin status <= WAIT_VEND; vend_count <= 4'h5; end end WAIT_VEND: begin price <= 4'h0; balance <= coin_amount - product_price; vend <= 1'b1; vend_count <= vend_count - 1; if (vend_count == 4'h0) begin product_stock <= product_stock - 1; coin_amount <= 4'h0; status <= WAIT_SELECT; vend <= 1'b0; end end endcase end end endmodule ``` 这个代码实现了一个简单的自动售货机,具有显示商品价格和余额信息、选择商品、投币、退币、出货等功能。状态机采用三个状态,包括等待选择商品、等待投币、等待出货。硬件模块包括数码管、红外传感器、电机等。这个代码可以作为学习Vivado自动售货机设计的入门代码,可以帮助学生了解数字电路设计的基本流程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值