资源描述
北华大学
电子系统综合实习报告
学 院 : 电气信息工程学院
专业班级 :通信工程
姓名 : 闫梦迪
学 号 :
指导老师 :董胜
实习时间: 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)、程序框图
开始
开始
商品选择
Y
返还输入钱数
Y
N
商品选择
价格设定
输入钱数
钱数>=单价?
N
结束
重新输入钱数?
确认、找零
( 商品、价格设定模块)
交易完成
结束
( 客户端模块程序框图)
五。功能及代码
功能:顾客商品选择、付钱购买、找零,个体商户对商品种类及价格的修改,商品数量统计
代码:
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种商品的操作
elsifitem0="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;
elsif item1="10” and coin1〉=pri2 then Q〈=A-B; D:=quan2—1;quan2〈=quan2—1;
elsif item1="11" and coin1〉=pri3 then Q〈=A—B; D:=quan3—1;quan3〈=quan3-1;
else Q〈=A-B;
end if;
end if;
if set='1' then item1〈=”00";act1〈=”0000”;Q〈=0;B:=0;
end if;
case coin1 is ——设定钱数
when "0000”=>y0〈=”1000000”;
when "0001”=〉y0〈=”1111001";
when ”0010”=〉y0〈=”0100100";
when ”0011”=〉y0<=”0110000”;
when ”0100"=>y0<=”0011001”;
when ”0101"=>y0〈=”0010010”;
when ”0110”=>y0〈="0000010";
when ”0111”=〉y0〈=”1111000";
when "1000”=>y0〈=”0000000”;
when ”1001”=>y0〈=”0010000";
when others=>y0<="1111111”;
end case;
case B is —-单价钱数
when 0 =>y1〈=”1000000”;
when 1 =>y1<=”1111001";
when 2 =〉y1<="0100100”;
when 3 =〉y1<=”0110000”;
when 4 =>y1〈="0011001”;
when 5 =>y1〈="0010010";
when 6 =〉y1〈="0000010";
when 7 =〉y1〈="1111000”;
when 8 =>y1<=”0000000”;
when 9 =〉y1〈=”0010000”;
when others=〉y1〈=”1111111”;
end case;
case Q is --返还钱数
when 0 =〉y2<="1000000”;
when 1 =>y2<=”1111001”;
when 2 =〉y2〈=”0100100";
when 3 =〉y2〈=”0110000";
when 4 =>y2〈="0011001";
when 5 =>y2<=”0010010";
when 6 =>y2〈="0000010”;
when 7 =〉y2〈=”1111000";
when 8 =〉y2〈="0000000”;
when 9 =〉y2<="0010000";
when others=〉y2<=”1111111";
end case;
case D is —-剩余数量
when 0 =〉y4〈=”1000000”;
when 1 =>y4<=”1111001”;
when 2 =〉y4<=”0100100";
when 3 =>y4〈=”0110000";
when 4 =〉y4〈=”0011001”;
when 5 =>y4〈="0010010”;
when 6 =〉y4〈=”0000010”;
when 7 =〉y4<="1111000";
when 8 =>y4〈=”0000000”;
when 9 =>y4<=”0010000”;
when others=〉y4〈=”1111111";
end case;
end process com1;
end behav;
六。仿真及硬件测试
1)、引脚锁定
2)、RTL电路图
3)、时序仿真
4)、硬件测试
1。get=’1’ 设定内部价格
2。隐藏内部设定价格
3。输入8元 单价3元 找零5元 显示剩余数量8个
7。实习心得
在这次实验中,通过老师的介绍和我们自己的学习,我们学会了VHDL程序的基本语法和操作,熟悉了程序的基本结构和设计,学会了quartus软件的操作和系统的功能仿真。
我们小组的组员进行了合理的分工和良好的沟通,这对程序的实验十分重要。在这次的程序设计中,通过实验我们完成了程序,达到了学习的目的.
经过这次对自动售货机系统的设计,让我对EDA设计有了更一步的认识,同时也对EDA这门课程有了更深入的了解。这次设计让我了解了关于自动售货机的原理与设计理念,要设计一个电路先进行软件模拟仿真再进行实际的硬件电路测试。
当然这个设计存在许多的不足,比如在预览商品时只能顺序浏览,而不能随机点击浏览,这也是为了排除程序的糅杂。并且每次卖完一种商品都得复位,不能进行连续的购买,而且在购买时遇到的情况考虑不周到。
这次设计提高了我们的逻辑思维能力,使我们在程序的改写和运用上有了很大的进步。加深了我们对VHDL硬件语言的认识,进一步增进了对一些常见器件的了解。另外,我们还更加充分的认识到,EDA这门课程在科学发展中的至关重要性.查阅参考书的独立思考的能力以及培养非常重要,我们在设计电路时,遇到很多不理解的东西,有的我们通过查阅参考书弄明白,有的通过网络查到,但由于时间和资料有限我们更多的还是独立思考。
相互讨论共同研究也是很重要的,经常出现一些问题,经过和同组同学讨论和资料的查询最终得到了解决。锻炼了我们的团队合作精神及分工合作的能力。在调试程序过程中遇到很多这样那样的问题,最后都解决了.特此感谢老师和同学们对我的辛勤指导,能让我在困境中找到解决难题的办法,并且对EDA有了更深刻的认识。
8. 教师评语
教师:
8
展开阅读全文