简易售货机石家庄经济学院华信学院

2018-10-21 11:21

石家庄经济华信学院

数字逻辑课程设计报告

题 目 简易售货机的设计与实现B 姓 名 学 号 班 号 指导老师 成 绩

2015年6月

1. 设计内容

(1)自动售货机可销售橡皮(0.5元)、铅笔(1元)、直尺(1.5元)、笔记本(2元)4

种商品,数量无限。

(2)只能投入1元或5角硬币,当投入的币值等于或大于商品的价钱且确认购买时,两个输出口分别输出购买的商品和找零;若取消购买,退回投入的硬币,零币无限;顾客一次只能购买一种商品的一个,若需要更多商品,需要重复操作。 1) 基本功能:商品选择、投币购买、出货及找零或退钱。

2) 显示功能:三个LED数码管显示商品的价格,投入的钱数,找零。

2. 系统总体设计

选择 商品 投币 退钱 enc 出货 找零 ens clr 显示 选择器 reset clk

3. 商品选择模块的设计

(1) 商品选择模块元件图及输入输出描述(包括每个信号名字)

商品选择的元件图符

输入端:reset是复位信号。en是使能端。eraser,pencil,ruler,notebook是商品的种类。

输出端:price为中间变量,是商品的价格。shiwei输出的是价格的十位。gewei输出的是价格的各位。

(2) 商品选择模块功能描述

商品选择模块是对商品进行选择。当reset =0,en=1时,系统正常工作。选择哪种商品,

哪种商品为1,输出的是商品的价格。shiwei输出的是价格的十位。gewei输出的是价格的各位。 (3) 源代码

LIBRARY ieee;

USE ieee.std_logic_1164.ALL; USE ieee.std_logic_unsigned.ALL;

ENTITY select_goods IS PORT (

reset,en,eraser,pencil,ruler,notebook : IN STD_LOGIC;

shiwei: OUT integer range 0 to 9; gewei:OUT integer range 0 to 9 );

END select_goods;

ARCHITECTURE arc1 OF select_goods IS

signal goods:std_logic_vector(3 downto 0); BEGIN

goods<=eraser&pencil&ruler¬ebook; process(reset,en)

VARIABLE prices:integer range 0 to 20; begin

IF reset='0'and en='1' THEN IF goods=\ prices:=5;

ELSIF goods=\ prices:=10;

ELSIF goods=\ prices:=15;

ELSIF goods=\ prices:=20; ELSE

prices:=0; END IF; END IF;

shiwei<=prices/10; gewei<=prices rem 10; end process;

END arc1;

(4) 测试及分析( 如图一)

图一

当en=0,reset=1时,模块正常工作。当eraser=1时,shiwei=0,gewei=5,价钱正好是5角;当notebook=1时,shiwei=2,gewei=0,价钱正好是2元。

4. 投币模块

(1) 投币模块元件图及输入输出描述(包括每个信号名字)

投币模块原件图符

输入端;reset是复位信号,clk是时钟脉冲,en是使能端,coin5表示投进5毛,coin10表示投进1块,

输出端:total是中间变量,表示投进总的钱数。Shiwei1表示总钱数的十位,gewei表示总钱数的各位。

(2) 子模块功能描述

投币模块记录的是投入的总钱数,reset=0,en=1,clk为上升沿是正常工作。投进一个5

毛,总的钱数加5,投进一个1块,总的钱数加10.shiwei1表示总钱数的十位,gewei1表示的是总钱数的各位。

(3) 源代码(若使用系统提供的器件可省略) LIBRARY ieee;

USE ieee.std_logic_1164.ALL; USE ieee.std_logic_arith.ALL; USE ieee.std_logic_unsigned.ALL;

ENTITY coin IS PORT (

reset,clk,en,coin5,coin10 : IN STD_LOGIC;

shiwei1: out integer range 0 to 9; gewei1: out integer range 0 to 9 ); END coin;

ARCHITECTURE arc1 OF coin IS

signal coin15:std_logic_vector(1 downto 0); begin

coin15<=coin5&coin10; process(clk,reset)

VARIABLE total:integer range 0 to 20; begin

if (reset='0' and en='1') then if clk' event and clk='1' then if coin15=10 then total:=total+5; elsif coin15=01 then total:=total+10; else total:=total; end if; end if; end if;

shiwei1<=total/10; gewei1<=total rem 10; end process; END arc1;

(4) 测试及分析(如图2)

图2

当clk为上升沿,en=1,reset=0时,模块正常工作。当coin5=1时,shiwei=0,gewei=1,total=5毛。又投进一个一块,shiwei=1,gewei=5,total=15.

5. 数据选择器模块设计

(1) 数据选择模块元件图及输入输出描述(包括每个信号名字)

数据选择模块元件图符

输入端:a为控制端,d0[3..0], d1[3..0], d2[3..0], d3[3..0]为输入端,f1[3..0],f2[3..0]为输出端。当a=1,f1=d0,f2=d1.当a=0,f1=d2,f2=d3

(2) 子模块功能描述

这是一个4选2的数据选择模块,当a=1,f1=d0,f2=d1.当a=0,f1=d2,f2=d3。

(3) 源代码

LIBRARY ieee;

USE ieee.std_logic_1164.all; ENTITY max42 IS PORT(a:IN BIT;

d0,d1,d2,d3: in integer range 0 to 9; f1,f2:OUT integer range 0 to 9 ); END max42;

ARCHITECTURE arcl OF max42 IS BEGIN

process(a) begin

if a='1' then f1<=d0;

f2<=d1; else

f1<=d2; f2<=d3; end if;

end process; end arcl;

(4)测试及分析(如图3)

图3

当a=1,f1=d0=5,f2=d1=2; 当a=0,f1=d2=1,f2=d3=4.

6. 显示模块分析设计

(1)显示模块元件图及输入输出描述(包括每个信号名字)

bcd[3..0]是输入端,dout[6..0]是输出端。

(2)子模块功能描述

这是一个七段显示模块, 当bcd=0000时,dout[6..0]=1111110,显示的是字符0,当bcd= 0001时,dout[6..0]=1111110 ,显示的是字符1.

(3)源代码

LIBRARY ieee;

USE ieee.std_logic_1164.ALL; ENTITY xianshi IS PORT ( bcd : IN STD_LOGIC_VECTOR(3 DOWNTO 0); dout : OUT STD_LOGIC_VECTOR(6 DOWNTO 0)

);

end xianshi;

ARCHITECTURE a OF xianshi IS BEGIN WITH bcd SELECT dout<=\ \ \ \ \WHEN others; END a;

(4)测试及分析(如图4)

图4

当bcd=5时,dout=1101101,表示的字符是5;当bcd=1时,dout=0110000,表示的字符是1.

7. 控制模块设计

(1)控制模块元件图及输入输出描述(包括每个信号名字)

输入端:start=0,clk为上升沿时正常工作。Ok_buy表示确认购买,cancel_buy表示取消购买,geiwei,shiwei表示的是价格的个位和十位。Gewei和shiwei表示的是投入钱数的个位和十位。 输出端:engoods表示的是允许选商品,encoin表示允许投币,clrcoin表示清零钱数,outgood是出货,backcoins表示的是找零。

(2)子模块功能描述

如图(5)

y 选择品 Selectgoods N Incoins N N 确认购买 取消购买 y y Outgoods_coin backcoin 图5简易售货机的ASM图

(4) 源代码

LIBRARY ieee;

USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all;

ENTITY control is PORT (

start,clk,ok_buy,cancel_buy : IN STD_LOGIC;

gewei,shiwei,gewei1,shiwei1 : IN integer range 0 to 9; engoods,encoin,clrcoin,outgoods: OUT STD_LOGIC; backcoins : OUT integer range 0 to 9 );

END control;

ARCHITECTURE one OF control IS

Type state_type is (selegoods, incoins, outgoods_coin,back_coin); signal state: state_type; BEGIN

PROCESS (start,clk) begin

IF start = '1' THEN state <= selegoods;

ELSIF clk'event AND clk = '1' THEN case state is when selegoods =>

IF (shiwei*10+gewei)=0 THEN state<=selegoods; else

state<= incoins; end if;

when incoins =>

IF ok_buy='1' THEN

state<= outgoods_coin; end if;

IF cancel_buy='1' THEN

state<= back_coin; END IF;

when others => state<=selegoods; end case; end if;

end process;

process(start,shiwei,gewei,shiwei1,gewei1) BEGIN

case state is

when selegoods =>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 (shiwei1*10+gewei1)>= (shiwei*10+gewei)THEN

engoods<='0';encoin<='0';clrcoin<='0';outgoods<='1';backcoins<=((shiwei1*10+gewei1)-(shiwei*10+gewei));

else

engoods<='0';encoin<='0';clrcoin<='0';outgoods<='0';backcoins<=(shiwei1*10+gewei1);

END IF;

when back_coin =>

engoods<='0';encoin<='0';clrcoin<='0';outgoods<='0';backcoins<=(shiwei1*10+gewei1);

end case ; END PROCESS; END one;

8. 顶层模块连线设计

(1) 顶层连线图

(2) 测试及分析(如图6)

图6

当reset=0,clk为上升沿时,系统正常工作。买了一个铅笔,投进了一块钱,找了5毛,在eraser=1,coun10=1,dout0=1111110,dout1=0110000,表示的投进的钱数,outgoods=1.

9. 总结

(1)在写select_goods模块时,保存时没有以实体的名字保存,导致编译失败。改正后,在波形

仿真时,没有把它设置成顶层实体,导致仿真时找不到这个文件,改正后,才仿真成功。

(2)在写coin模块时,用了顺序语句里的if语句,编译失败。通过翻阅了书本之后,发现了错误,知道了else if连用之后,就变成了elsif,用了几个if,就要用几个end if.

(3) 在写control模块时,编译成功,但仿真的结果总是跟我预想的结果不一样。我以为是VHDL语言编写错误,又把我的思路整理了一遍,VHDL稍微做了一些改动,结果还是错,这时我觉得是我的波形图画错了,又重新画了一下波形图之后,终于仿真成功。

通过本次课程设计,我对Verilog HDL语言有了更深刻的了解,能够比较灵活地运用它来实现我们所想要其实现的功能。在实验中,我也遇到了很多困难,不过我通过翻阅资料,请教他人都一一解决了,也对Quartus51软件操作更加熟练。

在设计过程中,自己总是粗心,不注重细节。编写部件的VHDL语言时,太注重形式。 设计成功时很开心,也知道了遇到问题我们不能灰心、烦躁,甚至放弃,而要静下心来仔细思考,分部检查,找出最终的原因进行改正,这样才会有进步,才会一步步向自己的目标靠近,才会取得自己所要追求的成功。


简易售货机石家庄经济学院华信学院.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2018南方新中考强化巩固+专项提升及答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: