【2019年整理】verilog大作业_第1页
【2019年整理】verilog大作业_第2页
【2019年整理】verilog大作业_第3页
【2019年整理】verilog大作业_第4页
【2019年整理】verilog大作业_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、西安电子科技大学 Verilog大作业一自动售邮票机 院系:电子工程学院 姓名:李岩 学号:1202121468 专业: 电子与通信工程 自动售邮票机 1. 题目介绍 本设计主要以程序为主,并通过波形仿真来验证程序功能的实现。当选择好 邮票并投币后,数码管显示所选邮票价格及投入钱币价格;按下确认付款开关, 交易成功,数码管显示应找多少钱,蜂鸣器响,对应商品 LED丁亮。若所投钱币 不足所选商品价格,对应警告钱币不足的 LED灯亮;当继续投入钱币直到达到所 选邮票价格,按下确认付款开关,交易同样成功。具体设计要求如下: (1) 机器有一个投币孔,每次只能投入一枚硬币。机器能自动识别硬币金 额,最

2、大为 1 元,最小为 1角。购票者可选择的邮票面值有 1 元和 5角两种, 每次售出 1 枚邮票。 (2) 灯亮时表示该邮票售出。 (3) 用开关分别模拟 1角、5 角硬币和 1 元硬币投入,可以用几只发光二极管 分别代表找回剩余的硬币。 (4) 每次只能售出一种邮票,当所投硬币达到或超过购买者所选面值时,售 出货物并找回剩余的硬币,回到初始状态; (5) 当所投硬币值不足面值时,可通过一个复位键退回所投硬币,回到初始 状态。 2. 程序状态框图 3程序介绍 首先声明,本程序具有完全自主知识产权,是经过多次尝试以及错误之后的 成果。 本程序的核心是利用我们最近刚学的状态机来实现机器不同状态之前

3、的转 换。由于没有实验板,只能使用波形仿真,所以最后的functions ( led显示函 数)注释起来了,但程序还是保留了数码管动态扫描部分。 程序基本可以分为三大模块: (1)状态机模块,这是程序的核心部分。在写程序之前看过网上的一些现有 例程,但都没有解决一个我认为的核心问题,那就是如何解决连续投币问题。后 来经过不断地试错,发现可以使用状态机完美地解决这个问题。 (2) 数码管动态扫描部分,它的作用是按照给定时钟来回点亮四个数码管(两 个dis_money,两个dis_price ),使数码管在人的肉眼看来一直是亮的。这部分 由于没有实验板,所以看不出其发挥出来的功能。 (3)数码管显

4、示函数,用函数的方法可以避免重复,使程序看起来简洁明了, 从而最大程度提高程序编写效率。 4源程序 module work(clk,rst,dis_ mon y_d,dis_ mon y_g,dis_price_d,dis_price_g, btn_ok,btn_ mon ,btn_sell,warn,beep); in put clk,rst,bt n ok; input 2:0 btn_mon;/ 选择放入的钱 input 1:0 btn_sell;/ 选择商品 output warn;/钱不足,指示灯 output 3:0 dis_mo ny_d,dis_mo ny_g;两个数码管显示投

5、入面值,个位和十位 output 3:0 dis_price_d,dis_price_g;/两个数码管显示价钱,同上 output beep;/高电平交易成功 reg warn;/警告放入钱不足 reg 3:0 dis_mony_d,dis_mony_g; reg 3:0 dis_price_d,dis_price_g; reg 3:0 money,money_all,price; reg 1:0 flag = 2b00;/数码管显示标志位 reg beep=0; reg 2:0 state; parameter IDLE=d0, A=d1, B=d2; always (negedge rst

6、 or posedge clk) begin if(!rst) /初始化 begin price=0; money=0; state=IDLE; money_all=0; warn = 0; beep = 0; end else begi n/三种面值 case(btn_mon) 3b001: money = 1; 3b010: money = 5; 3b100: money = 10; default:money = 0; endcase case(btn_sell) /两种 邮票 2b01: price = 5; 2b10: price = 10; default: price= 0; e

7、ndcase casex(state) IDLE:if(btn_sell) begin money_all = money_all +money; state=A; end A: if(btn_ok =0) begin money_all = money_all +money; end else begin money_all = money_all +money; state=price) begin money_all = money_all-price; beep = 1; warn=0; state=IDLE; end else begin warn = 1; state=A; end

8、 default: state=IDLE; endcase end end 、邮票价格*/ /* 将时钟给数码管 ,数码管分别显示放入钱多少 always (posedge clk) begin case(flag) 2b00: begin dis_mony_d =money_all%10; dis_price_d =price%10; flag = 2b01; end 2b01: begin dis_mony_g = money_all/10; dis_price_g tp 1+1 ( 000 X 010 X JQ btnok 1;i 田 btn_sell c 10 elk I St1 L

9、J 13 Ai i_*aTty_d /- 0 DG 15 田 di s_*ony_C I. rc 田 di sjri ce_d G rc S dis_price_g G i ITT rst i wn r (3)按下1元邮票选择键(2b10),当一次投入5角(3b 010 )并按下ok 键时,warn变为高电平,交易失败。继续投入 5角(3b 010)并按下ok键时, beep变为高电平,交易成功,找零 dis_mo ney为零。波形仿真如下图: 5总结 本次大作业断断续续持续了两个星期,但我觉得这个时间值得。通过本次大 作业的编写,我对verilog HDL语言有了更深刻的了解,能够比较灵活地运用它 来实现我所想要实现的功能。在程序编写中,我也遇到了很多挫折,甚至想放弃 这个题目,但是我还是坚持下来了。发现问题(连续投币)所在之后想了很多方 法,甚至是C语言的里面的break语句,最后终于发现原来离我们最近的状

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论