基于VHDL的自动售货机设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;