基于FPGA的可乐自动贩卖机的实现
任务要求
任务拆分
首先是要划分不同的状态,不投币,投了0.5元,投了1元,投了1.5元,投了2元,投了2.5元,投了三元。状态的输入有两个,一个是1元,一个0.5元。输出有三个,一个是给可乐不找零,不给可乐找零,还有led根据不同的输出,实现不同的功能。最后还有延迟的要求,需要按键按下之后,10秒不操作就归零(可乐机吃钱事件)。
verilog代码
module cola_ma_top
#(parameter cnt_20_ms = 'd999_999,parameter cnt_0_5s = 'd24_999_999,parameter cnt_1s = 'd49_999_999
)
(input clk,input rst_n,input key1,//代表5毛input key2,//代表1元output reg [3:0] led,output reg [1:0] out_1 //10表示出水,01表示出找零
);parameter IDLE = 'b0000001;parameter mo_0_5 = 'b0000010; parameter mo_1_0 = 'b0000100; parameter mo_1_5 = 'b0001000; parameter mo_2_0 = 'b0010000; parameter LED_water1 = 'b0100000; //单向流水状态 parameter LED_water2 = 'b1000000; //双向流水状态 reg [6:0]state;wire key1_temp ;wire key2_temp;//按键消抖后的输出值 wire [3:0]led1;//单向流水的led灯wire [3:0]led2;//双向流水的led灯reg [27:0] cnt0;reg work_water;//一个使能信号reg rst;reg cnt_20_flag;//10s的信号//reg filter_en_temp;//wire filter_en;reg cnt_en;reg en_key1_temp;reg en_key2_temp;wire en_key1;wire en_key2;//状态转移always@(posedge clk or negedge rst_n)if(!rst_n || cnt_20_flag)//if(!rst_n ) state <= IDLE;else case(state)IDLE: //if(key1_temp)if(key1_temp)state <= mo_0_5;//else if(key2_temp)else if(key2_temp)state <= mo_1_0; else state <= IDLE;mo_0_5: if(key1_temp)state <= mo_1_0;else if(key2_temp)state <= mo_1_5; else state <= mo_0_5; mo_1_0: if(key1_temp)state <= mo_1_5;else if(key2_temp)state <= mo_2_0; else state <= mo_1_0;mo_1_5: if(key1_temp)state <= mo_2_0;else if(key2_temp)state <= LED_water1; else state <= mo_1_5; mo_2_0: if(key1_temp)state <= LED_water1;else if(key2_temp)state <= LED_water2; else state <= mo_2_0;LED_water1: if(key1_temp) state <= mo_0_5;else if(key2_temp)state <= mo_1_0; else state <= LED_water1; LED_water2: if(key1_temp) state <= mo_0_5;else if(key2_temp)state <= mo_0_5; else state <= LED_water2; default: state <= IDLE;endcasealways@(posedge clk or negedge rst_n)if(!rst_n)led <= 4'd0;else case(state)IDLE: led <= 4'b0000;mo_0_5: led <= 4'b0001;//投入五毛mo_1_0: led <= 4'b0011;//投入1元mo_1_5: led <= 4'b0111;//投入1.5元mo_2_0: led <= 4'b1111;//投入2元LED_water1: led <= led1;LED_water2: led <= led2;default : led <= led;endcase //这边这个outen是为了防止可乐机器一直出可乐reg out_en;always@(posedge clk or negedge rst_n)if(!rst_n)beginout_1 <= 2'b00;out_en <= 1'b1;endelse case(state)IDLE: beginout_1 <= 2'b00;out_en <= 1'b1;endmo_0_5: beginout_1 <= 2'b00;//投入五毛out_en <= 1'b1;end mo_1_0: beginout_1 <= 2'b00;//投入1元out_en <= 1'b1;endmo_1_5: beginout_1 <= 2'b00;//投入1.5元out_en <= 1'b1;end mo_2_0: beginout_1 <= 2'b00;//投入2元out_en <= 1'b1;end LED_water1: if(out_en)beginout_1 <= 2'b10;out_en <= 1'b0;end LED_water2: if(out_en)begin out_1 <= 2'b01;out_en <= 1'b0;end default : beginout_1 <= 2'b00;out_en <= 1'b1;endendcase //这个out输出应该只出现一次,否则就会一直出水 //在上面我们已经记录了输入是如何影响输入的金额,接下来我们需要可视化显示//可视化主要还是led灯//可视化输出一共有3种情况,一个是led灯点亮//一个是led的单向流水点亮//一个是led的双向流水点亮//在这里已经有半秒的计数,always@(posedge clk or negedge rst_n)if(!rst_n)cnt0 <= 28'd0;else if(rst)cnt0 <= 28'd0; else if( cnt0 == cnt_0_5s) cnt0 <= 28'd0;else if( cnt_en )cnt0 <= cnt0 + 1'b1;reg cnt0_flag;always@(posedge clk or negedge rst_n)if(!rst_n)cnt0_flag <= 1'b0;else if( cnt0 == cnt_0_5s-1)cnt0_flag <= 1'b1;else cnt0_flag <= 1'b0 ;reg [4:0]cnt_20; //0.5s表示计数20次,一共10salways@(posedge clk or negedge rst_n)if(!rst_n)cnt_20 <= 5'd0;else if(( cnt_20 == 'd19) || key2_temp || key1_temp)cnt_20 <= 5'd0;else if( cnt0_flag )cnt_20 <= cnt_20 + 1'b1;always@(posedge clk or negedge rst_n)if(!rst_n)cnt_20_flag <= 1'b0;else if( cnt_20 == 'd18)cnt_20_flag <= 1'b1;else cnt_20_flag <= 1'b0 ;//这里有两个done信号//进入流水状态需要持续1s状态然后结束always@(posedge clk or negedge rst_n)if(!rst_n) begincnt_en <= 1'b0;endelse if( key2_temp || key1_temp )cnt_en <= 1'b1 ;else cnt_en <= cnt_en;//按键消抖的模块key_fitter
#(.cnt_20_ms(cnt_20_ms)
)
Q_0_5
(.clk(clk),.rst_n(rst_n),.key_in(key1),// .en(en_key1),.led(key1_temp)
);key_fitter
#(.cnt_20_ms(cnt_20_ms)
)
Q_1
(.clk(clk),.rst_n(rst_n),.key_in(key2),// .en(en_key2),.led(key2_temp));
//LED流水的模块
water_led
#(.cnt_0_5s(cnt_0_5s)
)
w0
(.clk(clk),.rst_n(rst_n),.led(led2)
);water_2_led
#(.cnt_0_5s(cnt_0_5s)
)
w111
(.clk(clk),.rst_n(rst_n),.led(led1)
);
endmodule
基于FPGA的可乐自动贩卖机的实现相关推荐
- c语言自动贩卖机设计报告,自动贩卖机课程设计.doc
自动贩卖机课程设计.doc 课程设计名称电子技术课程设计题目基于MULTISIM12仿真软件的自动贩卖机的设计学期20132014学年第2学期专业自动化班级12级3班姓名温亮学号1205010321指 ...
- java学习之路2--简单工厂模式实现饮料自动贩卖机
java学习之路2 用简单工厂模式实现饮料自动贩卖机 功能简介 具体实现 1.简单工厂模式 2.代码 总结 用简单工厂模式实现饮料自动贩卖机) 功能简介 接收用户输入的信息,选择购买的饮料. 可供选择 ...
- java商品自动贩卖机
文章目录 目录 前言 一.创建类: customer , goods , shopping 1.customer类,主入口函数 2.goods类 (算作商品父类,子类我也写在里面的) 3.shoppi ...
- 饮品自动贩卖机系统 c语言,自动贩卖机控制系统自动贩卖机控制系统.doc
自动贩卖机控制系统自动贩卖机控制系统 综合训练项目四"自动贩卖机控制系统" 专 业: 自动化 班 级: 12-1班 姓 名: 白琼 学 号: 1205010102 指导教师: 谢国 ...
- 自动贩卖机也能买药?24小时智能药柜背后的黑科技了解一下!
药品购买,能否像自动贩卖机一样,在急需时即可在自助机柜直接下单立刻拿到?传统上,我们依赖24小时营业的药房,而24小时药房的形式也因运营成本高,依然在很多城市覆盖度不够,无法为用户提供及时的医药服务. ...
- 快手团队长文解读:基于FPGA加速的自动语音识别在大规模直播和短视频场景的应用...
来源:机器之心 本文约6000字,建议阅读10分钟 本文介绍了基于FPGA加速的自动语音识别在大规模直播和短视频场景的应用. 典型的实时流式自动语音识别业务如语音搜索.语音输入等和用户操作相关,直接影 ...
- 从自动贩卖机找零看Python中的动态规划问题
原文:http://www.jianshu.com/p/144db81341a3 从自动贩卖机找零看Python中的动态规划问题 问题描述 假设在某国存在[1,x1,x2,x3,...,xn]多种货币 ...
- python找零方案_从自动贩卖机找零看Python中的动态规划问题
原文:http://www.jianshu.com/p/144db81341a3 从自动贩卖机找零看Python中的动态规划问题 问题描述 假设在某国存在[1,x1,x2,x3,...,xn]多种货币 ...
- 《Java程序小作业之自动贩卖机》#谭子
第一次写博客有点小小紧张哈,刚入门Java这门语言没多久,博主现在还在打基础中.这里为大伙们分享一下程序课的模拟作业,大概内容也不是很多,图一乐看个热闹就好了,如果需要借鉴的话,当然可以把这里的源码拿 ...
最新文章
- java代码操作git_JGit--实现Git命令操作的Java API
- html div数据替换,javascript – 将html添加到div而不替换其中的当前内容
- 【Android 内存优化】垃圾回收算法 ( 分代收集算法 | Serial 收集器 | ParNew 收集器 | Parallel Scavenge 收集器 | CMS 并发标记清除收集器 )
- 解决在 IntelliJ IDEA 中,输入代码时突然不会自动显示下拉框提示
- REST framework 权限管理源码分析
- 【Java】I/O阻塞下的守护线程与程序计数
- Windows下通过c++调用训练好的tf模型
- javascript自制函数图像生成器
- 湖州机器人上课时间_【倒计时5天】燃到炸!湖州吾悦广场10月30日开业狂欢指南,请收下...
- nginx强制下载txt等文件
- k8s节点假死排查记录
- java 编写metro风格_纯Javascript实现Windows 8 Metro风格实现
- Windows 窗口层次关系及窗口层次说明
- 邮储银行的规模有多大?凭什么可以成为第6大国有银行?
- 数模备战——基础知识笔记
- 关于android(安卓)模拟器加速
- 浅入浅出linux中断子系统
- 集算器读写 json
- 求助大神 VMware 卸载
- CMD打开IIS,重启iis等
热门文章
- 用python制作魔都头像生成器
- Maven Web项目构建
- Android Jetpack组件DataStore之Proto与Preferences存储详解与使用
- 2021年9月PMP认证考试招生火热进行中!
- 微信小程序自带的referer (附:微信,头条,支付宝,百度小程序的自带referer)
- 天赋有限,又达不到那样的高度···面试一线大厂,分享我最重要的两次
- vue下载blob无法获取响应头里面的Content-Disposition来提取文件名
- Windows XP系统自带工具应用详解(内容比较老,但还算实用)
- 启悦高速公路噪音测试软件,启悦基础隔音,新手第一次发贴,有不足之处请见谅[已完更]...
- SpringMvc方法获取和返回参数源码探究