收藏 分销(赏)

基于VHDL的自动售货机设计.doc

上传人:精*** 文档编号:3999029 上传时间:2024-07-24 格式:DOC 页数:8 大小:45.54KB 下载积分:6 金币
下载 相关 举报
基于VHDL的自动售货机设计.doc_第1页
第1页 / 共8页
基于VHDL的自动售货机设计.doc_第2页
第2页 / 共8页


点击查看更多>>
资源描述
北华大学 电子系统综合实习报告 学 院 : 电气信息工程学院 专业班级 :通信工程 姓名 : 闫梦迪 学 号 : 指导老师 :董胜 实习时间: 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
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服