自动售饮料机.docx
- 文档编号:28385388
- 上传时间:2023-07-10
- 格式:DOCX
- 页数:10
- 大小:122.06KB
自动售饮料机.docx
《自动售饮料机.docx》由会员分享,可在线阅读,更多相关《自动售饮料机.docx(10页珍藏版)》请在冰豆网上搜索。
自动售饮料机
河北科技大学
课程设计报告
学生姓名:
学号:
专业班级:
课程名称:
EDA技术课程设计
学年学期:
2013—2014学年第1学期
指导教师:
2013年12月
课程设计成绩评定表
学生姓名
学号
成绩
专业班级
起止时间
2013.11.25——2013.12.8
设计题目
自动售饮料机
指
导
教
师
评
语
指导教师:
年月日
目录
一、课程设计目的·········································4
二、课程设计原理·········································4
三、课程设计内容·········································5
四、课程设计结果·········································9
五、心得体会·············································10
1.课程设计目的
通过这次课程设计对自己以前学过的知识加以巩固,再次熟悉EDA设计软件QuartusII的使用方法,掌握EDA的设计流程,更加熟练进行综合、仿真、调试、分配管脚、下载等操作,并再次基础上学会如何设计一个工程,与实际生活结合起来,既锻炼自己的动手能力,又锻炼了自己的思维能力,为以后进行工程的实际问题的研究打下设计基础。
2.课程设计原理
该自动售饮料机设有一个投币孔,通过传感器来识别两种硬币,给出两个不同的信号。
在此用half_dollar和one_dollar分别表示投入0.5元和1.0元硬币后电路接收到的两个信号;三个饮料选择按键choose01表示选择价格为1.5元的饮料,choose10表示选择价格为2.0元的饮料,choose11表示选择价格为2.5元的饮料;rest表示复位按键;有2个输出口分别为饮料出口dispense和找零出口out1;用s0表示初始状态,s1表示投入0.5元硬币时的状态,s2表示投入1.0元硬币时的状态,s3表示投入1.5元硬币时的状态,s4表示投入2.0元时的状态;clk表示时钟信号;机器最多接受的钱币为3.0元。
当投入的钱币到达1.5元或高于1.5元时机器处于出售饮料的状态。
当到达1.5元时如果选择购买1.5元的饮料(choose01)则系统给出一个饮料,即dispense为高电平一次。
如果投入的钱币到达2.0元并且选择购买1.5元的饮料则系统显示给出一个饮料并找出1枚0.5元的硬币,即dispense为高电平一次out1为高电平一次。
如果选择购买2.0元的饮料(choose10),则系统显示给出一个2.0元的饮料,即饮料输出信号dispense为高电平一次。
依次类推。
图1.1为本次设计所构想的状态图。
3.课程设计内容
1.程序设计[3][4]
VHDL(VeryHighSpeedHardwareDescriptionLanguage高速硬件描述语言)是硬件描述语言中应用最广泛的一种。
是由美国国防部于1983年创建,由IEEE进一步发展并在1987年定为“IEEE1076/1987标准版本”。
由于VHDL支持硬件设计、综合、仿真和测试,在电子设计领域得到广泛的应用和普及。
IEEE又于1993年重新对VHDL进行修订,形成了新的标准,即IEEESTD1067-1993。
VHDL具有一系列的优点:
①VHDL具有很强的硬件描述能力,能够从多个层次对数字系统进行建模,从高层次的行为描述到低层次的RTL描述以及门结构描述都能实现,尤其是系统级的描述能力是其他硬件描述语言无法比拟的。
②良好的通用性,用VHDL设计的电路不受硬件电路元件的支配,与开发软件平台无关,具有很强的通用性。
③支持多种设计方法,可以采用自顶向下、自底向上和混合方法三种形式,尤其是自顶向下的设计方法是VHDL独有的。
④便于更新。
⑤结构易读、易懂。
所以这次程序的编写采用VHDL来完成。
根据上述对自动售饮料机逻辑状态的分析,编写程序如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitystmch1is
port(clk,rst,half_dollar,one_dollar:
instd_logic;
choose:
instd_logic_vector(1downto0);
out1,dispense:
outstd_logic);
endstmch1;
architecturebehaveofstmch1is
typestate_valuesis(s2,s0,s1,s3,s4);
signalstate,next_state:
state_values;
begin
process(clk,rst)
begin
ifrst='1'then
state<=s0;
elsif(clk’eventandclk='1')then
state<=next_state;
endif;
endprocess;
process(state,half_dollar,one_dollar,choose)
begin
out1<='0';dispense<='0';
next_state<=s0;
casestateis
whens0=>
if(half_dollar='1')then
next_state<=s1;
elsif(one_dollar='1')then
next_state<=s2;
elsenext_state<=s0;
endif;
whens1=>
if(half_dollar='1')then
next_state<=s2;
elsif(one_dollar='1')then
next_state<=s3;
elsenext_state<=s1;
endif;
whens2=>
if(half_dollar='1')then
if(choose="01")then
dispense<='1';
elsenext_state<=s3;
endif;
elsif(one_dollar='1')then
if(choose="10")then
dispense<='1';
elsenext_state<=s4;
endif;
elsenext_state<=s2;
endif;
whens3=>
if(choose="01")thendispense<='1';
elsif(choose="10")then
if(half_dollar='1')then
dispense<='1';
elsif(one_dollar='1')then
dispense<=’1’;
out1<=’1’;
elsenext_state<=s3;
endif;
elsif(choose="11")then
if(half_dollar='1')then
next_state<=s4;
elsif(one_dollar='1')then
dispense<='1';
elsenext_state<=s3;
endif;
else
next_state<=s3;
endif;
whens4=>
if(choose="01")then
dispense<='1';
out1<='1';
elsif(choose="10")then
dispense<='1';
elsif(choose="11")then
if(half_dollar='1')then
dispense<='1';
elsif(one_dollar='1')then
out1<='1';
dispense<='1';
endif;
elsenext_state<=s4;
endif;
endcase;
endprocess;
endbehave;
4.时序仿真
4.1创建VHDL源文件[5]
先打开MAX+PlusⅡ,进入项目管理界面后,打开“File”→“New”,会弹出一个“NEW”的对话框,选择建立源文件类型。
因为本设计采用VHDL语言来实现,所以选择“TextEditorFile”选项,按“OK”键,进入文本编辑窗口。
在文本编辑窗口中,输入上面的源文件。
再以stmch1.vhd存盘。
存盘后点击“File”→“Project”下选择“SetProjecttoCurrentFile”使得标题的名称变成当前的工程名。
4.2选择合适的器件
设置完工程名后,下一步就是选择合适的器件编译。
选择“Assign”→“Device”,打开如下图所示的窗口,在DeviceFamily对话框中选择FLEX10K,然后选择EPF10K10LC84-4器件。
4.3编译程序
在语言的设计当中,往往会出现一些错误,编译时会出现一些错误提示。
有时尽管只有一、二个小错,但会出现大量的错误信息。
所以在编译时应在编辑窗口中找到第一次出错的提示,并用鼠标拖黑,然后单击上面的“Locate”错误定位键,就可以在出现的文本编译窗口中闪动的光标附近找到错误所在。
纠正后再编译,直至排除错误。
4.4仿真波形
选中“MAX+PLUSⅡ”→“WaveformEditor”并单击,弹出波形编辑窗口。
选中“Node”→“EnterNodeFormSNF”,弹出一个对话框。
在对话框中单击“List”按钮,选中所有信号,然后,单击“=>”按钮,所选信号出现在右边的“SelectedNodes&Groups”窗口中。
如图4.3所示。
选择“Option”→“GridSize”,可以设定时间轴网格的大小。
选中“MAX+PlusⅡ”→“Simulator”,并单击左键,弹出一个对话框,可以设置起始和结束的时间。
单击“Start”按钮进行仿真,仿真完成后,单击“OpenSCF”按钮,就可以打开波形编辑器,观察、分析仿真结果。
4.课程设计结果
仿真波形分析
根据投币信息和购买类型的不同组合,会产生很多种输出波形。
在此仅以几种典型情况为例,给出其仿真波形。
如下图4.5为当选择购买1.5元的饮料并投入两枚1.0元的硬币时的波形。
由图可以看到当投入2.0元时,dispense(饮料机的饮料输出端)给出高电平一次,也就是系统给出一个价值1.5元的饮料和out1(找零的输出端)为高电平一次,即给出0.5元的硬币一枚。
图4.5投两枚1元硬币购买饮料1时的波形
如下图4.6所示为当选择饮料2,即价格为2.0元的饮料时,投入两枚1.0元的硬币时所出现的波形。
因为价格和所投入的钱币相同,所以找零为零,只给出一个价格为2.0元的饮料,即dispense在上升沿到来时变为高电平一次。
图4.6投两枚1元硬币购买饮料2时的波形
如图4.7所示为当选择饮料3时,并投入3枚1.0元的硬币时的波形图。
在这时机器应该给出1个价格为2.5元的饮料的同时给出一枚0.5元的硬币。
在图中我们看到当投入3枚一元的硬币后的第一个上升沿到来后,dispense和out1同时出现高电平一次,即给出一个价格为2.5元的饮料并找出0.5元,这与所设想的一样,说明所编写的程序是正确的。
图4.7投3枚1元硬币购买饮料3时的波形
5.心得体会
通过这次课程设计了解到自己有很多只是还没有学会,思维能力有待提高,这次课程设计与实际生活相联系,通过学习进一步了解到一个工程的设计流程。
再次熟悉了QuartusII的使用方法及其综合、波形仿真、管教分配、编译下载、功能仿真的整个过程,知道了自动售饮料机是怎么设计的,为自己以后的学习打下了基础。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 自动 饮料机