HDL课程设计报告

上传人:s9****2 文档编号:513680257 上传时间:2022-08-21 格式:DOCX 页数:10 大小:152.08KB
返回 下载 相关 举报
HDL课程设计报告_第1页
第1页 / 共10页
HDL课程设计报告_第2页
第2页 / 共10页
HDL课程设计报告_第3页
第3页 / 共10页
HDL课程设计报告_第4页
第4页 / 共10页
HDL课程设计报告_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《HDL课程设计报告》由会员分享,可在线阅读,更多相关《HDL课程设计报告(10页珍藏版)》请在金锄头文库上搜索。

1、Verilog HDL课程设计报告实 验名称:基于Verilog HDL的自动售货机班 级:信科12-1第一章 系统设计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键后,一切恢复到初始状态。2.2.2 选商品状态分别有价格为 0.5 元、1 元、1.5 元和

3、2 元的商品,每次选择商品前,设置一个标志位 btn_sell 表示选择商品状态。此自动售货机每一次售货时只能一次选择一种商品,当同时选 择两种以上时,选择商品无效,数码管显示清零,重新进行商品选择。选择商品后,数码管 显示所选商品价格。2.2.3 投币状态当选好商品后,开始投币。同样有一标志位btn_price表示投币金额。投币口只接受三 种面值的钱币0.5元、1元和5元,可以同时投入多种面值钱币。投完币后,先有一个确认 买商品的过程,若投了币但又不购买商品了,就将全部投币金额退回;若确认购买商品,则 进入下一状态一一找零状态。2.2.4找零状态投完币,并确认购买商品后,进入找零状态。首先要

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_20output 3:0 led;/led_5,led_10,led_15,led_20outp

5、ut led_warn;钱不足,指示灯output 10:0 dis_mony;数码管显示投入面值,dia_mony10:8=com 位选,dis_mony7:0=段 码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 = 2b00;数码管显示标志位reg beep=0;parameter COUNT1 = 25d

6、10000;/*分频使数码管显示稳定*/always (posedge clk)beginif(counter= 0)begincounter = COUNT1;clk_500Hz = clk_500Hz;endelsecounter = counter-1;end always (negedge rst or posedge clk)beginif (rst=0)beginled = 4b0000;/LED 灭 price_all = 0;/价格清零 led_warn = 0;price = 0;beep = 0;endelsebegin/*三种面值共8种组合*/ case(btn_mon)

7、3b001:begin price_all = 5;end3b010:begin price_all = 10;end3b100:begin price_all = 50;end3b011:begin price_all = 15;end3b101:begin price_all = 55;end3b110:begin price_all = 60;end3b111:begin price_all = 65;end default:begin price_all = 0;end endcasecase(btn_sell)4b0001:begin price = 5;end4b0010:begi

8、n price = 10;end4b0100:begin price = 15;4b1000:begin price = 20;enddefault:begin price = 0;endendcaseif(btn_ok = 1)beginif(price_all price) /放入钱不足beginled_warn = 1;price = 0;endelsebegin /金钱足够price_all = price_all-price;beep = 1;case(price) /LED 灯显示货物卖出5: begin led = 4b0001;end10:begin led = 4b0010;

9、end15:begin led = 4b0100;end20:begin led = 4b1000;endendcaseendendelsebeep = 0;end/*分频后将时钟给数码管,数码管分别显示放入钱的多少、商品价格*/ always (posedge clk_500Hz)begincase(flag)2b00:beginr=price_all%10;case(r)0:begin dis_mony=11b111_0011_1111;end1:begin dis_mony=11b111_0000_0110;end2:begin dis_mony=11b111_0101_1011;end

10、3:begin dis_mony=11b111_0100_1111;end4:begin dis_mony=11b111_0110_0110;end5:begin dis_mony=11b111_0110_1101;end6:begin dis_mony=11b111_0111_1101;end7:begin dis_mony=11b111_0000_0111;end8:begin dis_mony=11b111_0111_1111;end9:begin dis_mony=11b111_0110_1111;end endcaseflag = 2b01;end2b01:beginr=price_

11、all/10;case(r)0:begin dis_mony=11b110_1011_1111;end1:begin dis_mony=11b110_1000_0110;end2:begin dis_mony=11b110_1101_1011;end3:begin dis_mony=11b110_1100_1111;end4:begin dis_mony=11b110_1110_0110;end5:begin dis_mony=11b110_1110_1101;end6:begin dis_mony=11b110_1111_1101;end7:begin dis_mony=11b110_100

12、0_0111;end8:begin dis_mony=11b110_1111_1111;end9:begin dis_mony=11b110_1110_1111;end endcaseflag = 2b00;endendcaseend/*数码管段码表*/function 7:0 led7;input 3:0 dis_input;begincase (dis_input)0 : led7 = 8b0011_1111;1 : led7 = 8b0000_0110;2 : led7 = 8b0101_1011;3 : led7 = 8b0100_1111;4 : led7 = 8b0110_0110

13、;5 : led7 = 8b0110_1101;6 : led7 = 8b0111_1101;7 : led7 = 8b0000_0111;8 : led7 = 8b0111_1111;9 : led7 = 8b0110_1111;default : led7 = 8b0011_1111;endcaseendendfunctionendmodule章 结果与讨论4.1 实验调试4.1.1 调试步骤运行 Quartus II 软件,新建工程。 建立文本文件Verilog HDL File。在文件中写入程序。保存,编译。 分配管脚。保存,编译。 将生成的.sof文件写入FPGA试验箱中。 根据要求

14、选择几种买东西的可能情况,在实验箱上实验,观察记录结果。4.1.2 实验现象选择买 0.5元的商品,投5 元的金额,调试现象如下: 选择 0.5 元商品数码管显示0.5,再选择一种商品,数码管显示清零,重新进行 商品选择。 按下5 元投币键,对应数码管显示5.0。 按下确认购买开关,找零时,对应数码管显示4.5,蜂鸣器响,对应0.5元商品 的 LED 灯亮。选择 1.5 元的商品,投1 元的金额,调试现象如下: 选择1.5元的商品,对应数码管显示1.5。 按下 1 元的投币键,对应数码管显示1。 找零显示1元,退回所投的钱,表示警告的LED灯亮(交易不成功)。4.2 结果与分析调试过程中出现的

15、问题及原因:(1) 本程序 定义了函数,注意函数结构的定义以及函数的调用(函数不能作为单独 的语句进行调用)。(2) 在编写完程序之后,编译运行成功后,注意数码管管脚的连接,参考实验指导书。(3) 后面一切正常后,但是仍然出不了正确的结果,经过和同学的相互讨论,才发现 按钮按下是 0,悬空是 1。最后及时发现并得出了正确的实验结果。第五章 总结经过几次实验,让我对Verilog HDL有了很深刻的认识,从刚开始接触EDA到现在的 VerilogHDL的学习,让我对这些硬件描述语言有了进一步的理解。这些语言和c+, java 软件编程语言比起来都简单的多,所以也很容易上手。实验刚开始,老师首先让我们

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号