eda课程设计自动售货机的设计文档格式.docx
《eda课程设计自动售货机的设计文档格式.docx》由会员分享,可在线阅读,更多相关《eda课程设计自动售货机的设计文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
![eda课程设计自动售货机的设计文档格式.docx](https://file1.bdocx.com/fileroot1/2022-11/18/e9a119e9-8395-48ca-a4b0-3011aeb48d9d/e9a119e9-8395-48ca-a4b0-3011aeb48d9d1.gif)
(提示:
钱数以5角为单位。
)
任务要求
①根据设计题目要求编写相应程序代码
②对编写的VHDL程序代码进行编译和仿真
③总结设计内容,完成课程设计说明书
参考文献
[1] 焦素敏.EDA课程设计指导书.郑州:
河南工业大学,2008
[2] 潘松,黄继业.EDA技术实用教程.北京:
科学出版社,2002
[3] 王国栋,潘松等.VHDL实用教程.成都:
电子科技大学出版社,2000
[4]张亦华,延明.数字电路EDA入门.北京:
电子工业出版社,2003
[5]中国电子制作网网站
审查意见
指导教师签字
教研室主任签字2012年2月20日
一.设计说明
根据要求可自动出售两种货物,本文设计的自动售货机可销售cola和pepsi两种饮料:
售货机可识别1元和元的两种货币,在一次购买过程中,可购买一个或多个商品,系统会自动计算所需钱数和找零的钱数并自动找零。
另外有3个发光二极管、6个LCD数码管:
两个用来显示所需金额,两个用来显示已付金额,两个用来显示找零数。
流程说明
本文设计的自动售货机当通电时,表示一次销售的开始。
顾客选择一种商品或多种商品后就进入投币状态。
若不投币,则自动返回初始状态。
投币后,系统自动计算所投钱数。
若投币够,则出货并找零。
若投币不够,如果顾客没有继续投币,则退币并回到初始状态。
本系统的投币销售流程图如图所示:
各模块说明
本文设计的自动售货机总体分三个模块:
总控模块,二进制译码模块、BCD码译码模块。
总控模块:
总控模块是本系统最重要的模块,该模块大体有5个输入端口和6个输出端口。
其输入端口包括clk、coin1(投入一元货币)、coin5(投入元货币)、cola(选择cola)、pepsi(选择pepsi),输出端口有paid(已投入多少钱)、needed(还需多少钱)moneyout(找零)、success(灯亮表示交易成功)、failure(灯亮表示交易失败)、showmoneyout(灯亮表示正在找零)。
该模块实现了本系统最重要的交易过程,包括选择商品、投入货币,计算剩余金额,找零出货等。
二进制译码模块:
该模块有一个输入端口和两个输出端口。
输入端口是一个8位的二进制数输出端口bcd0、bcd1是两个4位的BCD码。
该模块的主要的功能是实现将主控模块输出的二进制数(paid、needed、moneyout)转换成BCD码,以便输出到七段数码管上显示出来。
该模块的原理是将一个8位的二进制转换成2个4位的BCD码,分为高四位和低四位。
BCD码译码模块:
该模块有一个输入端口和一个输出端口
程序设计
主控模块完整程序如下:
Libraryieee;
useshouhuojiis
port(clk:
instd_logic;
coin1:
instd_logic;
coin5:
cola:
pepsi:
paid:
outstd_logic_vector(7downto0);
needed:
success:
outstd_logic;
failure:
showmoneyout:
moneyout:
outstd_logic_vector(7downto0));
endshouhuoji;
architecturebehavofshouhuojiis
typestate_typeis(qa,qb,qe,qc,qg,qd,qf);
--定义七个状态
signalcurrent_state:
state_type:
=qa;
signalq:
integerrange0to100;
begin
process(clk)
variablepaidtemp:
std_logic_vector(7downto0);
--定义变量
variableneededtemp:
variablebackmoney:
variablepricetemp:
ifclk'
eventandclk='
1'
then
casecurrent_stateis
whenqa=>
paidtemp:
="
00000000"
;
neededtemp:
backmoney:
pricetemp:
q<
=0;
showmoneyout<
='
0'
moneyout<
paid<
needed<
failure<
success<
ifcola='
orpepsi='
thencurrent_state<
=qb;
thenpricetemp:
=pricetemp+"
00001111"
neededtemp:
=pricetemp;
Else
pricetemp:
00010100"
endif;
paid<
=paidtemp;
=neededtemp;
whenqb=>
ifcoin1='
orcoin5='
ifcoin1='
thenpaidtemp:
=paidtemp+"
00001010"
else
paidtemp:
00000101"
ifpaidtemp>
=pricetempthenbackmoney:
=paidtemp-pricetemp;
current_state<
=qd;
elseneededtemp:
=pricetemp-paidtemp;
backmoney:
current_state<
=qc;
ifq<
8thenq<
=q+1;
thenq<
=neededtemp+"
elsecurrent_state<
=qe;
whenqe=>
4thenq<
whenqc=>
=pricetempthen
ifcoin1/='
andcoin5/='
10thenq<
=qg;
elseq<
whenqg=>
=qf;
success<
whenqd=>
ifbackmoney>
"
thenshowmoneyout<
moneyout<
=backmoney;
whenqf=>
ifq<
endcase;
endprocess;
endbehav;
BCD译码模块完整程序如下:
Libraryieee;
usecode1is
port(
b:
instd_logic_vector(7downto0);
bcd0:
outstd_logic_vector(3downto0);
bcd1:
outstd_logic_vector(3downto0)
);
endcode1;
architectureoneofcode1is
begin
process(b)
begin
casebis
when"
=>
bcd0<
0000"
bcd1<
--译码“0”;
00000001"
0001"
--译码“1”;
00000010"
0010"
--译码“2”;
00000011"
0011"
--译码“3”;
00000100"
0100"