基于VHDL的自动售货机设计.docx

上传人:b****7 文档编号:10319599 上传时间:2023-02-10 格式:DOCX 页数:11 大小:310.35KB
下载 相关 举报
基于VHDL的自动售货机设计.docx_第1页
第1页 / 共11页
基于VHDL的自动售货机设计.docx_第2页
第2页 / 共11页
基于VHDL的自动售货机设计.docx_第3页
第3页 / 共11页
基于VHDL的自动售货机设计.docx_第4页
第4页 / 共11页
基于VHDL的自动售货机设计.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

基于VHDL的自动售货机设计.docx

《基于VHDL的自动售货机设计.docx》由会员分享,可在线阅读,更多相关《基于VHDL的自动售货机设计.docx(11页珍藏版)》请在冰豆网上搜索。

基于VHDL的自动售货机设计.docx

基于VHDL的自动售货机设计

北华大学

电子系统综合实习报告

学院:

电气信息工程学院

专业班级:

通信工程

姓名:

闫梦迪

学号:

指导老师:

董胜

实习时间:

1.实习题目……………………………………………………………P3

2.实习目的……………………………………………………………P3

3.实习技术要求………………………………………………………P3

4.实现过程……………………………………………………………P3

5.功能及代码…………………………………………………………P5

6.仿真及硬件测试……………………………………………………P9

7.实习心得…………………………………………………………P12

8.教师评语…………………………………………………………P14

一.实习题目

自动售货机设计

二.实习目的

通过本课题的研究,可以掌握电子控制系统的基本原理与其实现,通过对各个模块的编程及其仿真,对QuartusII软件的使用有所了解。

每个波形模块的VHDL实现加深了硬件描述语言的学习。

最终的顶层文件的调试,更是体现了综合知识的运用。

三.实习技术要求

本设计要实现自动售货机的基本功能,如货物信息存储、商品选择、进程控制、硬币处理、余额计算、显示等功能。

利用软件QuartusII平台,采用VHDL硬件描述语言编程的设计方法设计系统核心电路的硬件程序,与一般的软件开发不同,VHDL编程更需要熟悉一些底层的硬件知识,特别是数字逻辑电路的设计,因此VHDL编程的方法、思路都要更多的与硬件电路联系起来。

完成系统各个功能模块的硬件程序设计后,在软件平台上进行编译和电路仿真,最后生成的目标文件下载到实验台内的FPGA芯片以实现该系统,并在实验台上对设计进行验证。

四.实现过程

1)、根据设计要求实现过程分两部分:

a、面向客户端模块设计

基于Quartus2软件环境下,应用VHEDL语言进行程序设计。

以clk输入端口进行商品选择,coin1输入端口做钱数输入,Finish输入端口做确认,进而完成商品购买。

b、面向个体端模块设计

以Get端口进行对商品价格修改的确认,以ST端口进行选择要修改的商品种类,coin0作为单价输入端口。

2)、整体结构框图

3)、程序框图

 

(商品、价格设定模块)

(客户端模块程序框图)

五.功能及代码

功能:

顾客商品选择、付钱购买、找零,个体商户对商品种类及价格的修改,商品数量统计

代码:

libraryieee;

useS1is

port(clk:

instd_logic;--系统时钟

r,set,st,get,finish:

instd_logic;--设定、买、选择、完成信号

coin0,coin1:

instd_logic_vector(3downto0);--输入钱数

act0,act1:

outstd_logic_vector(3downto0);--显示、开关信号

y0,y1,y2,y3,y4:

outstd_logic_vector(6downto0));--输入钱数、商品价格、找零显示数据

endS1;

architecturebehavofS1is

signalitem0,item1:

std_logic_vector(1downto0);--商品种类

signalQ:

INTEGERRANGE20DOWNTO0;--找零

signalpri0,pri1,pri2,pri3:

std_logic_vector(3downto0);

signalquan0:

integer:

=9;

signalquan1:

integer:

=9;

signalquan2:

integer:

=9;

signalquan3:

integer:

=9;--数量

begin--设定部分

com0:

process(get,st,coin0)

variableC:

INTEGERRANGE20DOWNTO0;

begin

ifget='1'then

ifst'eventandst='1'thenitem0<=item0+1;--对商品进行shezhi

ifitem0="00"thenact0<="1000";pri0<=coin0;C:

=CONV_INTEGER(coin0);--shedingshi,自动售货机对4种商品的操作

elsifitem0="01"thenact0<="0100";pri1<=coin0;C:

=CONV_INTEGER(coin0);

elsifitem0="10"thenact0<="0010";pri2<=coin0;C:

=CONV_INTEGER(coin0);

elsifitem0="11"thenact0<="0001";pri3<=coin0;C:

=CONV_INTEGER(coin0);

endif;

endif;

elseact0<="0000";

endif;

ifr='1'C=0;

endif;

caseCis--设定价格

when0=>y3<="1000000";

when1=>y3<="1111001";

when2=>y3<="0100100";

when3=>y3<="0110000";

when4=>y3<="0011001";

when5=>y3<="0010010";

when6=>y3<="0000010";

when7=>y3<="1111000";

when8=>y3<="0000000";

when9=>y3<="0010000";

whenothers=>y3<="1111111";

endcase;

endprocesscom0;

com1:

process(coin1,clk,Q)--购买部分

variableA,B,D:

INTEGERRANGE20DOWNTO0;

begin

ifclk'eventandclk='1'thenitem1<=item1+1;--对商品进行循环选择

ifitem1="00"thenact1<="1000";B:

=CONV_INTEGER(pri0);--购买时,自动售货机对4种商品的操作

elsifitem1="01"thenact1<="0100";B:

=CONV_INTEGER(pri1);

elsifitem1="10"thenact1<="0010";B:

=CONV_INTEGER(pri2);

elsifitem1="11"thenact1<="0001";B:

=CONV_INTEGER(pri3);

endif;

endif;

A:

=CONV_INTEGER(coin1);

iffinish'eventandfinish='1'then

ifitem1="00"andcoin1>=pri0thenQ<=A-B;D:

=quan0-1;quan0<=quan0-1;

elsifitem1="01"andcoin1>=pri1thenQ<=A-B;D:

=quan1-1;quan1<=quan1-1;

elsifitem1="10"andcoin1>=pri2thenQ<=A-B;D:

=quan2-1;quan2<=quan2-1;

elsifitem1="11"andcoin1>=pri3thenQ<=A-B;D:

=quan3-1;quan3<=quan3-1;

elseQ<=A-B;

endif;

endif;

ifset='1'thenitem1<="00";act1<="0000";Q<=0;B:

=0;

endif;

casecoin1is--设定钱数

when"0000"=>y0<="1000000";

when"0001"=>y0<="1111001";

when"0010"=>y0<="0100100";

when"0011"=>y0<="0110000";

when"0100"=>y0<="0011001";

when"0101"=>y0<="0010010";

when"0110"=>y0<="0000010";

when"0111"=>y0<="1111000";

when"1000"=>y0<="0000000";

when"1001"=>y0<="0010000";

whenothers=>y0<="1111111";

endcase;

caseBis--单价钱数

when0=>y1<="1000000";

when1=>y1<="1111001";

when2=>y1<="0100100";

when3=>y1<="0110000";

when4=>y1<="0011001";

when5=>y1<="0010010";

when6=>y1<="0000010";

when7=>y1<="1111000";

when8=>y1<="0000000";

when9=>y1<="0010000";

whenothers=>y1<="1111111";

endcase;

caseQis--返还钱数

when0=>y2<="1000000";

when1=>y2<="1111001";

when2=>y2<="0100100";

when3=>y2<="0110000";

when4=>y2<="0011001";

when5=>y2<="0010010";

when6=>y2<="0000010";

when7=>y2<="1111000";

when8=>y2<="0000000";

when9=>y2<="0010000";

whenothers=>y2<="1111111";

endcase;

caseDis--剩余数量

when0=>y4<="1000000";

when1=>y4<="1111001";

when2=>y4<="0100100";

when3=>y4<="0110000";

when4=>y4<="0011001";

when5=>y4<="0010010";

when6=>y4<="0000010";

when7=>y4<="1111000";

when8=>y4<="0000000";

when9=>y4<="0010000";

whenothers=>y4<="1111111";

endcase;

endprocesscom1;

endbehav;

六.仿真及硬件测试

1)、引脚锁定

2)、RTL电路图

3)、时序仿真

4)、硬件测试

='1'设定内部价格

2.隐藏内部设定价格

3.输入8元单价3元找零5元显示剩余数量8个

7.实习心得

在这次实验中,通过老师的介绍和我们自己的学习,我们学会了VHDL程序的基本语法和操作,熟悉了程序的基本结构和设计,学会了quartus软件的操作和系统的功能仿真。

我们小组的组员进行了合理的分工和良好的沟通,这对程序的实验十分重要。

在这次的程序设计中,通过实验我们完成了程序,达到了学习的目的。

经过这次对自动售货机系统的设计,让我对EDA设计有了更一步的认识,同时也对EDA这门课程有了更深入的了解。

这次设计让我了解了关于自动售货机的原理与设计理念,要设计一个电路先进行软件模拟仿真再进行实际的硬件电路测试。

当然这个设计存在许多的不足,比如在预览商品时只能顺序浏览,而不能随机点击浏览,这也是为了排除程序的糅杂。

并且每次卖完一种商品都得复位,不能进行连续的购买,而且在购买时遇到的情况考虑不周到。

这次设计提高了我们的逻辑思维能力,使我们在程序的改写和运用上有了很大的进步。

加深了我们对VHDL硬件语言的认识,进一步增进了对一些常见器件的了解。

另外,我们还更加充分的认识到,EDA这门课程在科学发展中的至关重要性。

查阅参考书的独立思考的能力以及培养非常重要,我们在设计电路时,遇到很多不理解的东西,有的我们通过查阅参考书弄明白,有的通过网络查到,但由于时间和资料有限我们更多的还是独立思考。

相互讨论共同研究也是很重要的,经常出现一些问题,经过和同组同学讨论和资料的查询最终得到了解决。

锻炼了我们的团队合作精神及分工合作的能力。

在调试程序过程中遇到很多这样那样的问题,最后都解决了。

特此感谢老师和同学们对我的辛勤指导,能让我在困境中找到解决难题的办法,并且对EDA有了更深刻的认识。

8.教师评语

教师:

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

当前位置:首页 > PPT模板 > 商务科技

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

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