




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Verilog HDL课程设计报告实验名称:基于Verilog HDL的自动售货机指导老师:xx 冠军班级:信科 12-1姓名:xx学号:第一章系统设计1.1 系统设计(1) 用四个发光二极管分别模拟售出价值为 5角、1元、1.5元和 2元的小商 品,购买者可以通过开关选择任意一种标价中的小商品。(2) 灯亮时表示该小商品售出。(3) 用开关分别模拟 5角、1 元硬币和 5元纸币投入,可以用几只发光二极 管(或数码管 )分别代表找回剩余的硬币。(4) 每次只能售出一种小商品,当所投硬币达到或超过购买者所选面值时, 售出货物并找回剩余的硬币,回到初始状态;(5) 当所投硬币值不足面值时,可通过一
2、个复位键退回所投硬币,回到初始 状态。第二章详细设计2.1 自动售货机状态描述判断开关被按下的个数N。若N>=2表示所选本次选择无效,返回初始状 态;若N=1则显示所选商品,并继续执行下面的流程。3个开关分别代表三种商品。 4个开关分别代表投入 0.5元, 1 元, 2元, 5元,统计投入总额。投入总 额与商品价格做比较,如果总额 <商品价格,退钱并返回初始状态如果总额 >=商 品价格,则继续执行下面的程序。找零 =总额-商品价格,数码管显示找零金额。 状态图如图 2.1 所示:2.2 详细状态描述2.2.1 初始状态各变量都设置为零,按下 rst 键后,一切恢复到初始状态。
3、2.2.2 选商品状态分别有价格为 0.5元、 1 元、1.5元和2元的商品,每次选择商品前,设置 一个标志位 btn_sell 表示选择商品状态。此自动售货机每一次售货时只能一次选 择一种商品,当同时选择两种以上时,选择商品无效,数码管显示清零,重新 进行商品选择。选择商品后,数码管显示所选商品价格。2.2.3 投币状态当选好商品后,开始投币。同样有一标志位 btn_price 表示投币金额。投币 口只接受三种面值的钱币 0.5元、 1 元和 5元,可以同时投入多种面值钱币。投 完币后,先有一个确认买商品的过程,若投了币但又不购买商品了,就将全部 投币金额退回;若确认购买商品,则进入下一状态
4、 找零状态。2.2.4 找零状态投完币,并确认购买商品后,进入找零状态。首先要将所投的金额与所选 商品的价格做比较,若所投金额小于商品价格,则退回所投钱币;若大于等于 商品价格,则两者做差,得到需要找零的钱。第三章软件设计3.1 程序总流程图3.2 程序module seller(clk,rst,dis_mony,btn_ok,btn_mon,btn_sell,led_warn,led,beep); input clk,rst,btn_ok;input 2:0 btn_mon;/ 选择放入的钱input 3:0 btn_sell;/ 选择商品 bbt_5,gz_10,kqs_15,kl_20o
5、utput 3:0 led;/led_5,led_10,led_15,led_20output led_warn;/ 钱不足,指示灯output beep;integer r;reg clk_500Hz;reg 3:0 led;/led_5,led_10,led_15,led_20reg led_warn;/ 警告放入钱不足reg 10:0 dis_mony;reg 31:0 counter;reg 9:0 price,price_all;reg 1:0 flag = 2'b00;/ 数码管显示标志位reg beep=0;parameter COUNT1 = 25'd100;/
6、* 分频使数码管显示稳定 */always (posedge clk)beginif(counter= 0)begincounter <= COUNT1;clk_500Hz <= clk_500Hz;endelsecounter <= counter-1;endalways (negedge rst or posedge clk) beginif (rst=0)beginled = 4'b00;/LED 灭price_all = 0;/ 价格清零led_warn = 0;price = 0;beep = 0;endelsebegin/*三种面值共8种组合*/case(
7、btn_mon)3'b001:begin price_all = 5;end3'b010:begin price_all = 10;end3'b100:begin price_all = 50;end3'b011:begin price_all = 15;end3'b101:begin price_all = 55;end3'b110:begin price_all = 60;end3'b111:begin price_all = 65;end default:begin price_all = 0;end endcasecase(btn
8、_sell)4'b0001:begin price = 5;end4'b0010:begin price = 10; end4'b0100:begin price = 15; end4'b1000:begin price = 20; enddefault:begin price = 0;endendcaseif(btn_ok = 1)beginif(price_all < price) / 放入钱不足 beginendelsebegin / 金钱足够price_all = price_all-price;beep = 1;case(price) /LED灯
9、显示货物卖出5: begin led = 4'b0001;end led_warn = 1;price = 0;10:begin led = 4'b0010;end15:begin led = 4'b0100;end20:begin led = 4'b1000;endendcaseendendelsebeep = 0;endend/* 分频后将时钟给数码管,数码管分别显示放入钱的多少、商品价格 */always (posedge clk_500Hz)begincase(flag)2'b00:beginr=price_all%10;case(r)0:beg
10、in dis_mony=11'b111_0011_11;end1:begin dis_mony=11'b111_00_0110;end2:begin dis_mony=11'b111_01_1011;end3:begin dis_mony=11'b111_0100_11;end4:begin dis_mony=11'b111_0110;end5:begin dis_mony=11'b111_0110_1101;end6:begin dis_mony=11'b111_0111_1101;end7:begin dis_mony=11'
11、b111_00_0111;end8:begin dis_mony=11'b111_0111_11;end9:begin dis_mony=11'b111_0110_11;endendcaseflag = 2'b01;end 2'b01: begin r=price_all/10; case(r) 0:begin dis_mony=11'b110_1011_11;end 1:begin dis_mony=11'b110_1000_0110;end 2:begin dis_mony=11'b110_1101_1011;end end 3:be
12、gin dis_mony=11'b110_1100_11;end4:begin dis_mony=11'b110_1110_0110;end5:begin dis_mony=11'b110_1101;end6:begin dis_mony=11'b110_11_1101;end7:begin dis_mony=11'b110_1000_0111;end8:begin dis_mony=11'b110_1111;end9:begin dis_mony=11'b110_1111;endendcaseflag = 2'b00;enden
13、dcase /* 数码管段码表 */ function 7:0 led7; input 3:0 dis_input; begin case (dis_input) 0 :led7 = 8'b0011_11;1 :led7 = 8'b00_0110;2 :led7 = 8'b01_1011;3 :led7 = 8'b0100_11;4 :led7 = 8'b0110_0110;5 :led7 = 8'b0110_1101;6 :led7 = 8'b0111_1101;7 :led7 = 8'b00_0111;8 :led7 = 8&
14、#39;b0111_11;9 :led7 = 8'b0110_11;default :led7 = 8'b0011_11;endcaseendendfunctionendmodule第四章结果与讨论4.1 实验调试4.1.1 调试步骤 运行 Quartus II 软件,新建工程。 建立文本文件Verilog HDL File在文件中写入程序。保存,编译。 分配管脚。保存,编译。 将生成的.sof文件写入FPGA式验箱中。 根据要求选择几种买东西的可能情况,在实验箱上实验,观察记录结 果。4.1.2 实验现象选择买 0.5元的商品,投 5 元的金额,调试现象如下: 选择 0.5
15、元商品数码管显示 0.5,再选择一种商品,数码管显示清零,重 新进行商品选择。 按下 5 元投币键,对应数码管显示 5.0。 按下确认购买开关,找零时,对应数码管显示4.5,蜂鸣器响,对应 0.5兀商品的LED灯亮。选择 1.5 元的商品,投 1元的金额,调试现象如下: 选择 1.5兀的商品,对应数码管显示 1.5。 按下 1 兀的投币键,对应数码管显示 1。 找零显示1元,退回所投的钱,表示警告的LED灯亮(交易不成功)。4.2 结果与分析调试过程中出现的问题及原因:(1) 本程序定义了函数,注意函数结构的定义以及函数的调用(函数不能作 为单独的语句进行调用)。(2) 在编写完程序之后,编译运行成功后,注意数码管管脚的连接,参考实 验指导书。(3) 后面一切正常后,但是仍然出不了正确的结果,经过和同学的相互讨 论,才发现按钮按下是 0,悬空是 1。最后及时发现并得出了正确的实验结果。第五章总结经过几次实验,让我对 Verilog HDL有了很深刻的认识,从刚开始接触 EDA 到现在的Verilog HDL的学习,让我对这些硬件描述语言有了进一步的理解。这 些语言和 c+, j
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医疗销售咨询合同范本
- 供应商尾款合同范本
- 北京拆迁合同范本
- 单人旅游合同范本
- 单位郊区租房合同范本
- 丢车包赔协议合同范本
- 单位电线更换维修合同范例
- 医药调查项目合同范本
- 出钱经营合同范本
- 农业种植股合同范本
- 现代企业服务营销的创新与实践
- 【寒假开学第一课】AI时代做自己的哪吒
- 2025年度光伏电站光伏组件回收处理合同示范文本
- 2025年春季少先队工作计划及安排表(附:少先队每月工作安排表)
- 中央2025年公安部部分直属事业单位招聘84人笔试历年参考题库附带答案详解
- CWAN 0043-2021搅拌摩擦焊搅拌头设计及制造标准
- 教学课件:《公共关系学》(本科)
- 刘聪版在灿烂阳光下钢琴伴奏谱简谱版
- 《教育强国建设规划纲要(2024-2035年)》全文
- 2025年春新人教PEP版英语三年级下册全册教学课件
- 建筑工程项目精益建造实施计划书
评论
0/150
提交评论