任务要求

任务拆分

首先是要划分不同的状态,不投币,投了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的可乐自动贩卖机的实现相关推荐

  1. c语言自动贩卖机设计报告,自动贩卖机课程设计.doc

    自动贩卖机课程设计.doc 课程设计名称电子技术课程设计题目基于MULTISIM12仿真软件的自动贩卖机的设计学期20132014学年第2学期专业自动化班级12级3班姓名温亮学号1205010321指 ...

  2. java学习之路2--简单工厂模式实现饮料自动贩卖机

    java学习之路2 用简单工厂模式实现饮料自动贩卖机 功能简介 具体实现 1.简单工厂模式 2.代码 总结 用简单工厂模式实现饮料自动贩卖机) 功能简介 接收用户输入的信息,选择购买的饮料. 可供选择 ...

  3. java商品自动贩卖机

    文章目录 目录 前言 一.创建类: customer , goods , shopping 1.customer类,主入口函数 2.goods类 (算作商品父类,子类我也写在里面的) 3.shoppi ...

  4. 饮品自动贩卖机系统 c语言,自动贩卖机控制系统自动贩卖机控制系统.doc

    自动贩卖机控制系统自动贩卖机控制系统 综合训练项目四"自动贩卖机控制系统" 专 业: 自动化 班 级: 12-1班 姓 名: 白琼 学 号: 1205010102 指导教师: 谢国 ...

  5. 自动贩卖机也能买药?24小时智能药柜背后的黑科技了解一下!

    药品购买,能否像自动贩卖机一样,在急需时即可在自助机柜直接下单立刻拿到?传统上,我们依赖24小时营业的药房,而24小时药房的形式也因运营成本高,依然在很多城市覆盖度不够,无法为用户提供及时的医药服务. ...

  6. 快手团队长文解读:基于FPGA加速的自动语音识别在大规模直播和短视频场景的应用...

    来源:机器之心 本文约6000字,建议阅读10分钟 本文介绍了基于FPGA加速的自动语音识别在大规模直播和短视频场景的应用. 典型的实时流式自动语音识别业务如语音搜索.语音输入等和用户操作相关,直接影 ...

  7. 从自动贩卖机找零看Python中的动态规划问题

    原文:http://www.jianshu.com/p/144db81341a3 从自动贩卖机找零看Python中的动态规划问题 问题描述 假设在某国存在[1,x1,x2,x3,...,xn]多种货币 ...

  8. python找零方案_从自动贩卖机找零看Python中的动态规划问题

    原文:http://www.jianshu.com/p/144db81341a3 从自动贩卖机找零看Python中的动态规划问题 问题描述 假设在某国存在[1,x1,x2,x3,...,xn]多种货币 ...

  9. 《Java程序小作业之自动贩卖机》#谭子

    第一次写博客有点小小紧张哈,刚入门Java这门语言没多久,博主现在还在打基础中.这里为大伙们分享一下程序课的模拟作业,大概内容也不是很多,图一乐看个热闹就好了,如果需要借鉴的话,当然可以把这里的源码拿 ...

最新文章

  1. java代码操作git_JGit--实现Git命令操作的Java API
  2. html div数据替换,javascript – 将html添加到div而不替换其中的当前内容
  3. 【Android 内存优化】垃圾回收算法 ( 分代收集算法 | Serial 收集器 | ParNew 收集器 | Parallel Scavenge 收集器 | CMS 并发标记清除收集器 )
  4. 解决在 IntelliJ IDEA 中,输入代码时突然不会自动显示下拉框提示
  5. REST framework 权限管理源码分析
  6. 【Java】I/O阻塞下的守护线程与程序计数
  7. Windows下通过c++调用训练好的tf模型
  8. javascript自制函数图像生成器
  9. 湖州机器人上课时间_【倒计时5天】燃到炸!湖州吾悦广场10月30日开业狂欢指南,请收下...
  10. nginx强制下载txt等文件
  11. k8s节点假死排查记录
  12. java 编写metro风格_纯Javascript实现Windows 8 Metro风格实现
  13. Windows 窗口层次关系及窗口层次说明
  14. 邮储银行的规模有多大?凭什么可以成为第6大国有银行?
  15. 数模备战——基础知识笔记
  16. 关于android(安卓)模拟器加速
  17. 浅入浅出linux中断子系统
  18. 集算器读写 json
  19. 求助大神 VMware 卸载
  20. CMD打开IIS,重启iis等

热门文章

  1. 用python制作魔都头像生成器
  2. Maven Web项目构建
  3. Android Jetpack组件DataStore之Proto与Preferences存储详解与使用
  4. 2021年9月PMP认证考试招生火热进行中!
  5. 微信小程序自带的referer (附:微信,头条,支付宝,百度小程序的自带referer)
  6. 天赋有限,又达不到那样的高度···面试一线大厂,分享我最重要的两次
  7. vue下载blob无法获取响应头里面的Content-Disposition来提取文件名
  8. Windows XP系统自带工具应用详解(内容比较老,但还算实用)
  9. 启悦高速公路噪音测试软件,启悦基础隔音,新手第一次发贴,有不足之处请见谅[已完更]...
  10. SpringMvc方法获取和返回参数源码探究