基于VHDL的自动售货机设计

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

北华大学电子系统综合实习报告

学院 : 电气信息工程学院

专业班级 : 通信工程

姓名 : 闫梦迪

学号 :

指导老师 : 董胜

实习时间 : 2015.11.30 — 12.11

目录

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)、程序框图

( 商品、价

格设定模块)

( 客户端模块程序框图)

五.功能及代码

功能:顾客商品选择、付钱购买、找零,个体商户对商品种类及价格的修改,

商品数量统计

代码:

library ieee;

use ieee.std_logic_arith.all;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity S1 is

port ( clk:in std_logic; --系统时钟

r,set,st,get,finish: in std_logic; --设定、买、选择、完成信号

coin0,coin1: in std_logic_vector(3 downto 0); -- 输入钱数

act0,act1:out std_logic_vector(3 downto 0); --显示、开关信号

y0,y1,y2,y3,y4:out std_logic_vector(6 downto 0)); --输入钱数、商品价格、找零显示数据

end S1;

architecture behav of S1 is

signal item0,item1: std_logic_vector(1 downto 0); --商品种类

signal Q: INTEGER RANGE 20 DOWNTO 0; --找零

signal pri0,pri1,pri2,pri3: std_logic_vector(3 downto 0);

signal quan0:integer:=9;

signal quan1:integer:=9;

signal quan2:integer:=9;

signal quan3:integer:=9; -- 数量

begin -- 设定部分

com0:process(get,st,coin0)

variable C:INTEGER RANGE 20 DOWNTO 0;

begin

if get='1' then

if st'event and st='1' then item0<=item0+1; --对商品进行she zhi

if item0="00" then

act0<="1000";pri0<=coin0;C:=CONV_INTEGER(coin0);--she ding shi,

自动售货机对4种商品的操作

elsif item0="01" then

act0<="0100";pri1<=coin0;C:=CONV_INTEGER(coin0);

elsif item0="10" then

act0<="0010";pri2<=coin0;C:=CONV_INTEGER(coin0);

elsif item0="11" then

act0<="0001";pri3<=coin0;C:=CONV_INTEGER(coin0);

end if;

end if;

else act0<="0000";

end if;

if r='1' C=0;

end if;

case C is --设定价格

when 0 =>y3<="1000000";

when 1 =>y3<="1111001";

when 2 =>y3<="0100100";

when 3 =>y3<="0110000";

when 4 =>y3<="0011001";

when 5 =>y3<="0010010";

when 6 =>y3<="0000010";

when 7 =>y3<="1111000";

when 8 =>y3<="0000000";

when 9 =>y3<="0010000";

when others=>y3<="1111111";

end case;

end process com0;

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

variable A,B,D:INTEGER RANGE 20 DOWNTO 0;

begin

if clk'event and clk='1' then item1<=item1+1; --对商品进行循环选择

if item1="00" then act1<="1000"; B:=CONV_INTEGER(pri0); --

购买时,自动售货机对4种商品的操作

elsif item1="01" then act1<="0100"; B:=CONV_INTEGER(pri1);

elsif item1="10" then act1<="0010"; B:=CONV_INTEGER(pri2);

elsif item1="11" then act1<="0001"; B:=CONV_INTEGER(pri3);

end if;

end if;

A:=CONV_INTEGER(coin1);

if finish'event and finish='1' then

if item1="00" and coin1>=pri0 then Q<=A-B;

D:=quan0-1;quan0<=quan0-1;

elsif item1="01" and coin1>=pri1 then Q<=A-B;

D:=quan1-1;quan1<=quan1-1;

相关文档
最新文档