HDLVerilog课程设计报告自动售货机Word下载.docx

上传人:b****6 文档编号:16505757 上传时间:2022-11-24 格式:DOCX 页数:10 大小:234.30KB
下载 相关 举报
HDLVerilog课程设计报告自动售货机Word下载.docx_第1页
第1页 / 共10页
HDLVerilog课程设计报告自动售货机Word下载.docx_第2页
第2页 / 共10页
HDLVerilog课程设计报告自动售货机Word下载.docx_第3页
第3页 / 共10页
HDLVerilog课程设计报告自动售货机Word下载.docx_第4页
第4页 / 共10页
HDLVerilog课程设计报告自动售货机Word下载.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

HDLVerilog课程设计报告自动售货机Word下载.docx

《HDLVerilog课程设计报告自动售货机Word下载.docx》由会员分享,可在线阅读,更多相关《HDLVerilog课程设计报告自动售货机Word下载.docx(10页珍藏版)》请在冰豆网上搜索。

HDLVerilog课程设计报告自动售货机Word下载.docx

4个开关分别代表投入0.5元,1元,2元,5元,统计投入总额。

投入总额与商品价格做比较,如果总额<

商品价格,退钱并返回初始状态如果总额>

=商品价格,则继续执行下面的程序。

找零=总额-商品价格,数码管显示找零金额。

状态图如图2.1所示:

2.2详细状态描述

2.2.1初始状态

各变量都设置为零,按下rst键后,一切恢复到初始状态。

2.2.2选商品状态

分别有价格为0.5元、1元、1.5元和2元的商品,每次选择商品前,设置一个标志位btn_sell表示选择商品状态。

此自动售货机每一次售货时只能一次选择一种商品,当同时选择两种以上时,选择商品无效,数码管显示清零,重新进行商品选择。

选择商品后,数码管显示所选商品价格。

2.2.3投币状态

当选好商品后,开始投币。

同样有一标志位btn_price表示投币金额。

投币口只接受三种面值的钱币0.5元、1元和5元,能够同时投入多种面值钱币。

投完币后,先有一个确认买商品的过程,若投了币但又不购买商品了,就将全部投币金额退回;

若确认购买商品,则进入下一状态——找零状态。

2.2.4找零状态

投完币,并确认购买商品后,进入找零状态。

首先要将所投的金额与所选商品的价格做比较,若所投金额小于商品价格,则退回所投钱币;

若大于等于商品价格,则两者做差,得到需要找零的钱。

第三章软件设计

3.1程序总流程图

3.2程序

moduleseller(clk,rst,dis_mony,btn_ok,btn_mon,btn_sell,led_warn,led,beep);

inputclk,rst,btn_ok;

input[2:

0]btn_mon;

//选择放入的钱

input[3:

0]btn_sell;

//选择商品bbt_5,gz_10,kqs_15,kl_20

output[3:

0]led;

//led_5,led_10,led_15,led_20

outputled_warn;

//钱不足,指示灯

output[10:

0]dis_mony;

//数码管显示投入面值,dia_mony[10:

8]=com位选,dis_mony[7:

0]=段码

outputbeep;

integerr;

regclk_500Hz;

reg[3:

regled_warn;

//警告放入钱不足

reg[10:

reg[31:

0]counter;

reg[9:

0]price,price_all;

reg[1:

0]flag=2'

b00;

//数码管显示标志位

regbeep=0;

parameterCOUNT1=25'

d10000;

/*分频使数码管显示稳定*/

always@(posedgeclk)

begin

if(counter==0)

begin

counter<

=COUNT1;

clk_500Hz<

=~clk_500Hz;

end

else

=counter-1;

end

always@(negedgerstorposedgeclk)

begin

if(rst==0)

led=4'

b0000;

//LED灭

price_all=0;

//价格清零

led_warn=0;

price=0;

beep=0;

else

begin/*三种面值共8种组合*/

case(btn_mon)

3'

b001:

beginprice_all=5;

end

b010:

beginprice_all=10;

b100:

beginprice_all=50;

b011:

beginprice_all=15;

b101:

beginprice_all=55;

b110:

beginprice_all=60;

b111:

beginprice_all=65;

default:

beginprice_all=0;

endcase

case(btn_sell)

4'

b0001:

beginprice=5;

end

b0010:

beginprice=10;

end

b0100:

beginprice=15;

b1000:

beginprice=20;

beginprice=0;

if(btn_ok==1)

begin

if(price_all<

price)//放入钱不足

led_warn=1;

price=0;

begin//金钱足够

price_all=price_all-price;

beep=1;

case(price)//LED灯显示货物卖出

5:

beginled=4'

b0001;

end

10:

beginled=4'

b0010;

15:

b0100;

20:

b1000;

end

endcase

end

beep=0;

/*分频后将时钟给数码管,数码管分别显示放入钱的多少、商品价格*/

always@(posedgeclk_500Hz)

begin

case(flag)

2'

b00:

r=price_all%10;

case(r)

0:

begindis_mony=11'

b111_0011_1111;

1:

b111_0000_0110;

2:

b111_0101_1011;

3:

b111_0100_1111;

4:

b111_0110_0110;

5:

b111_0110_1101;

6:

b111_0111_1101;

7:

b111_0000_0111;

8:

b111_0111_1111;

9:

b111_0110_1111;

endcase

flag=2'

b01;

b01:

r=price_all/10;

0:

b110_1011_1111;

b110_1000_0110;

b110_1101_1011;

b110_1100_1111;

b110_1110_0110;

b110_1110_1101;

b110_1111_1101;

b110_1000_0111;

b110_1111_1111;

b110_1110_1111;

endcase

/*数码管段码表*/

function[7:

0]led7;

0]dis_input;

case(dis_input)

0:

led7=8'

b0011_1111;

1:

b0000_0110;

2:

b0101_1011;

3:

b0100_1111;

4:

b0110_0110;

5:

b0110_1101;

6:

b0111_1101;

7:

b0000_0111;

8:

b0111_1111;

9:

b0110_1111;

default:

endfunction

endmodule

第四章结果与讨论

4.1实验调试

4.1.1调试步骤

①运行QuartusII软件,新建工程。

②建立文本文件VerilogHDLFile。

在文件中写入程序。

保存,编译。

③分配管脚。

④将生成的.sof文件写入FPGA试验箱中。

⑤根据要求选择几种买东西的可能情况,在实验箱上实验,观察记录结果。

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结果与分析

调试过程中出现的问题及原因:

(1)本程序定义了函数,注意函数结构的定义以及函数的调用(函数不能作为单独的语句进行调用)。

(2)在编写完程序之后,编译运行成功后,注意数码管管脚的连接,参考实验指导书。

(3)后面一切正常后,可是依然出不了正确的结果,经过和同学的相互讨论,才发现按钮按下是0,悬空是1。

最后及时发现并得出了正确的实验结果。

第五章总结

经过几次实验,让我对VerilogHDL有了很深刻的认识,从刚开始接触EDA到现在的

VerilogHDL的学习,让我对这些硬件描述语言有了进一步的理解。

这些语言和c++,java

软件编程语言比起来都简单的多,因此也很容易上手。

实验刚开始,老师首先让我们自己经过输入书上的源程序来熟悉VerilogHDL,后面就

慢慢加大难度,逐渐深入的了解VerilogHDL。

我刚开始选择了出租车计价器,后来由于

时间原因,没有成功。

后来和同学讨论做自动售货机,这个题目相对简单,没有很复杂的

模块设计,甚至没有多模块设计,只需要调用函数和使用过程赋值语句就行了。

经过不断

的试终于在实验结束前做完了。

感谢几节课的实验让我对VerilogHDL有了深入的理解!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 营销活动策划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1