简易售货机的设计数字逻辑课程设计.docx
- 文档编号:29434114
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:12
- 大小:160.16KB
简易售货机的设计数字逻辑课程设计.docx
《简易售货机的设计数字逻辑课程设计.docx》由会员分享,可在线阅读,更多相关《简易售货机的设计数字逻辑课程设计.docx(12页珍藏版)》请在冰豆网上搜索。
简易售货机的设计数字逻辑课程设计
1.课程设计目的
2.开发工具选择
3.设计方案
4.模块描述
5.VHDL实现
6.调试仿真
7.课程设计回顾总结
参考文献
附录
1课程设计目的
(1)设计一个简易售货机,可销售巧克力(0.5元)、纯净水(1元)、牛奶(1.5元)、汉堡(2元)4种商品,数量无限。
(2)只能投入1元或5角硬币,如果投的钱数等于或则大于所购买的商品单价,则自动售货机会给出所购买的商品;如果投的钱数不够,自动售货机不做响应,继续等待顾客的下次操作。
两个输出口分别输出购买的商品和找零,零币无限。
(3)有两个LED数码管显示已经投入的币值或找零数。
顾客一次只能购买一种商品的一个,若需要更多商品,需要重复操作。
2开发工具选择
(1)硬件描述语言
简易售货机的设计采用了功能强大的VHDL语言,它具有很强的行为能力描述,设计方法灵活,可以支持库和模块设计方法。
(2)QuartusII软件开发工具
本设计采用的软件开发工具是美国的Altera公司的QuartusII,它支持多种设计输入方法,包括原理图输入、文本输入。
(3)EDA实验开发系统
本设计采用的EDA实验开发系统,主要用于提供可编程逻辑器件的下载电路及EDA实验开发的外围资源,供硬件验证用。
3设计方案
图3-1状态转换图
图3-2操作流程图
4模块描述
(1)模块一:
选择商品
分别有价格为0.5元、1元、1.5元和2元的商品,此自动售货机每一次售货时只能一次选择一种商品,当同时选择两种以上时,选择商品无效,重新进行商品选择。
选择商品后,数码管显示所选商品价格。
(2)模块二:
投币
当选好商品后,开始投币。
投币口只接受0.5元、1元,投完币后,先有一个确认买商品的过程,若投了币但又不购买商品了,进入退钱的模块;若确认购买商品,则进入出货找零模块。
(3)模块三:
退钱、出货找零
投币后取消购买,退回投入的硬币。
投完币,若大于等于商品价格,进入找零模块,两者做差,得到需要找零的钱。
5VHDL实现
1.选择商品模块
(1)选择商品模块的元件图符
(2)选择商品模块的VHDL描述
LIBRARYieee;
USEieee.std_logic_1164.ALL;
USEieee.std_logic_unsigned.ALL;
ENTITYselect_goodsIS
PORT
(
reset,en,chocolate,water,milk,humberger:
INSTD_LOGIC;
price:
OUTintegerrange0to20
);
ENDselect_goods;
ARCHITECTUREarc1OFselect_goodsIS
signalgoods:
std_logic_vector(3downto0);
BEGIN
goods<=chocolate&water&milk&humberger;
process(reset,en)
begin
IFreset='1'THEN
price<=0;
elsifen='1'then
casegoodsis
when"1000"=>price<=5;
when"0100"=>price<=10;
when"0010"=>price<=15;
when"0001"=>price<=20;
whenothers=>price<=0;
endcase;
endif;
endprocess;
ENDarc1;
2.投币模块
(1)投币模块的元件图符
(2)投币模块的VHDL描述
LIBRARYieee;
USEieee.std_logic_1164.ALL;
USEieee.std_logic_arith.ALL;
USEieee.std_logic_unsigned.ALL;
ENTITYcoinIS
PORT
(
reset,clk,en,coin5,coin10:
INSTD_LOGIC;
total:
bufferintegerrange0to30
);
ENDcoin;
ARCHITECTUREarc1OFcoinIS
begin
process(clk,reset)
begin
if(reset='1'anden='0')then
total<=0;
else
ifclk'eventandclk='1'then
ifen='1'then
ifcoin5='1'then
total<=total+5;
elsifcoin10='1'then
total<=total+10;
endif;
endif;
endif;
endif;
endprocess;
ENDarc1;
3.退钱、出货找零模块
(1)退钱、出货找零模块的元件图符
(2)退钱、出货找零模块的VHDL描述
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.ALL;
ENTITY control IS
PORT
(
clk, start,ok_buy,cancle_buy:
INSTD_LOGIC;
prices,coins:
INinteger range 0 to 30;
engoods,encoin,clrcoin,outgoods:
OUTSTD_LOGIC;
backcoins:
OUTinteger range 0 to 20
);
END control;
ARCHITECTURE arc1 OF control IS
type state_type is(salesgoods,incoins,outgoods_coin,back_coin);
signal state:
state_type;
BEGIN
process(start,clk)
begin
if start='1' then
state<=salesgoods;
elsif clk' event and clk='1' then
case state is
when salesgoods=>
if prices/=0 then
state<=incoins;
end if;
when incoins=>
if (coins>=prices and ok_buy='1') then
state<=outgoods_coin;
else
state<=back_coin;
end if;
when others=>
state<=salesgoods;
end case;
end if;
end process;
process(state,prices,coins)
begin
case state is
when salesgoods=>
engoods<='1';encoin<='0';clrcoin<='1';outgoods<='0';backcoins<=0;
when incoins=>
engoods<='0';encoin<='1';clrcoin<='0';outgoods<='0';backcoins<=0;
when outgoods_coin =>
if coins>=prices then
engoods<='0';encoin<='0';clrcoin<='0';outgoods<='1';backcoins<=coins-prices;
else
engoods<='0';encoin<='0';clrcoin<='0';outgoods<='0';backcoins<=coins;
end if;
when back_coin=>
if coins>=prices and ok_buy='1' then
engoods<='0';encoin<='0';clrcoin<='0';outgoods<='1';backcoins<=coins-prices;
else
engoods<='0';encoin<='0';clrcoin<='0';outgoods<='0';backcoins<=coins;
end if;
end case;
end process;
END arc1;
6调试仿真
1.选择商品模块
图6-1选择商品模块的功能仿真波形图
说明:
当en=1时,选择humberger,此商品的价格为2元,prices=20。
当en=0时,商品选择模块禁止工作,prices保持不变。
2.投币模块
图6-2投币模块的功能仿真波形图
说明:
当en=1时,投入一枚5角、一枚1元、一枚5角硬币,总币值为20即2元。
3.退钱、出货找零模块
图6-3退钱的功能仿真波形图
说明:
选择商品的价格prices为10,投入币值coins为20,当取消购买cancel_buy=1时,outgoods=0表示未出货,backcoins=20表示退回20。
图6-4出货找零的功能仿真波形图
说明:
选择商品的价格prices为10,投入币值coins为20,当确认购买ok_buy=1时,outgoods=1表示出货,backcoins=10表示找零10。
4.自动售货机整体结构图及调试仿真:
(1)自动售货机整体结构
图6-5自动售货机整体结构
(2)仿真结果及说明:
图6-6自动售货机仿真波形图
说明:
(1)选择milk,price=15,投入一枚1元硬币,coins=10,又投入一枚1元硬币,coins=20,之后,选择取消购买,cancel_buy=1,outgoods=0表示未出货,outcoins=20表示退回投入硬币2元。
(2)选择milk,price=15,投入一枚1元硬币,coins=10,又投入一枚1元硬币,coins=20,之后,选择确认购买,ok_buy=1,outgoods=1表示出货,outcoins=5表示找零5角。
(3)选择milk,price=15,投入一枚1元硬币,coins=10,又投入一枚5角硬币,coins=15,之后,选择取消购买,cancel_buy=1,outgoods=0表示未出货,outcoins=15表示退回投入硬币1.5元。
(4)选择milk,price=15,投入一枚1元硬币,coins=10,又投入一枚5角硬币,coins=15,之后,选择确认购买,ok_buy=1,outgoods=1表示出货,outcoins=0表示找零0元。
7课程设计回顾总结
通过这次数字逻辑课程设计,我收获了很多:
在选择课题时,原以为并没有那么难,但是当进行设计时,才知道远远没有自己想象的那么简单。
在进行退钱、出货找零模块的时候出现了很多错误,仿真结果不正确。
在经过请教老师和同学讨论后,才将问题一一解决,最后调试出了正确的结果。
这次课程设计,使我对数字逻辑上课所学习的知识有了更深的巩固,对VHDL语言有了更深刻的理解,对QuartusII软件的使用更加熟练了,对VHDL语言的组成和一些基本语句的使用方法记得更加牢固。
经过这次课程设计,锻炼了我综合运用所学知识,发现问题,提出问题,分析问题,解决问题的能力,将所学到的理论与实际相结合。
从而提高了自己实际动手和独立思考的能力,对以后的学习、工作、生活有很大的帮助。
并且让我深刻体会到遇到问题不能灰心,要冷静下来仔细思考,一部分一部分的检查,成功就是在不断摸索着前进的过程中实现的。
8参考文献
《逻辑与数字系统设计》
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简易 售货 设计 数字 逻辑 课程设计