自动售货机界面操作及显示 VHDL语言
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
自动售货机界面操作及显示VHDL语
言
目录
1摘要...1 2.正文...1 2.1系统设计...1 2.2单元电路设计...1 2.3软件设计...1 2.4系统测试...2 3.结论...4 4.经验体会 (4)
参考文献 (4)
附录A:系统电路原理图及引脚锁定图 (5)
附录B:程序设计的源代码 (6)
摘要
自动售货机是根据投入的钱币自动付货的机器,是一种全新的商业零售形式。本论文主要介绍了VHDL的特点和应用;以自动售货机的设计为例,详细说明了其实现过程,并给出了实现代码和时序仿真波形。主要创新点是可以实现多种商品的选择(这里是四种),而且价格和数量都是可调的;并可显示机器内商品剩余数量。
关键词:电子设计自动化;超高速集成电路硬件描述语言;自动售货机
正文
2.1.系统设计
设计一台自动售货机,要求具备货物信息存储、进程控制、硬币处理、余额计算、自动找零、状态显示等功能。预先设定该自动售货机可自动出售4种不同的商品,基本货币单位为1元。
2.2.单元电路设计
分析系统设计要求,不然得知自动售货机系统可以通过多进程设计的方法
实现。其中,最主要也是最核心的进程控制自动售货机的货物信息储备、购买、价格计算、找币等功能,其他进程则负责选择商品种类、消费品种单价和剩余
数量、消费余额的显示译码等。
自动售货机的系统框图如下图所示:
其中,clk为输入时钟脉冲信号,set为货物信息存储信号,get为购买信号,sel为货物品种选择信号,finish为购买完成信号,coin为1元的投币,price[3.0]和quantity[3.0]分别为商品的价格和剩余数量。
输出信号中,item[3.0]为商品种类并译码输出,act[3.0]为提示是否可购买的译码输出,y0[3.0]、y1[3.0]、y3[3.0]分别为商品的单价译码输出、剩余商品的数量显示、投币的硬币数量。
2.3.软件设计(如果用到软件要写)
设计平台:QuartusII 7.2
自动售货机的工作流程如下:
当置数信号set为高电平时,对商品的单价、数量进行相应的设置;在每
一次购买前,先对投入的硬币数量进行清零;购买时,首先以1元为基本单位
对投入的硬币数量进行计数并在数码管上进行显示;当选择信号sel高电平有
效时,选择所要购买的商品种类;当get信号高电平有效时,购买所选择的商品;当finish信号高电平有效时,结束交易并完成找币操作;当get信号为低电平是,则显示商品的单价及其剩余数量和剩余的钱数。
系统流程方框图如下所示:
开始
初始化
各项要求的设置以及set设置为高电平
投币
2.4.系统测试
总的仿真波形图如下所示:
部分图:
自动售货机的商品选择功能仿真图如上所示。当商品选择信号sel为高电
平时,对要购买的商品种类进行选择。每个时钟周期的上升沿都对商品对应的
编号进行加1操作,从而实现4种商品的循环选择。
投币及购买和找币功能如上图所示,当coin1为高电平时,每来一个上升
沿就表示投入1元,当get为高电平时,则说明对选择的商品种类进行购买,
计算剩余的商品数量和钱数;当购买完成信号finish为高电平是,根据计算得到的钱数给出应找的硬币数量,并显示余额和商品的剩余数量。
系统的性能参数:
3.结论
虽然VHDL的语法规则与其他计算机高级语言如C语言在很多方面很类似,但它毕竟是硬件描述语言,其本质作用在于描述硬件,因而会受到硬件环境的
限制。因此,为了达到设计的预期效果,在代码编写前,应做到对硬件电路心
中有数,不能一味地追求代码的完美,而应该以实现的硬件电路的性能优劣为
标准。
通过对仿真结果进行详细分析可以看出,本篇设计的自动售货机功能正确,符合系统设计的要求。
4.经验体会
通过本次设计,让我更加熟练掌握多进程控制的方法,并能够在数字系统
设计中巧妙地应用多进程控制技术来取代若干模块之间的例化和级联。
参考文献:
[1]刘欲晓等.EDA技术与VHDL--
---电路开发应用实践[M].北京:电子工业出版社,2009.
[2]潘松等.EDA技术与VHDL(第2版)[M].北京:清华大学出版社,2008. 附录A:系统电路原理总图以及引脚锁定
系统电路原理总图:
引脚锁定图:
附录B:程序设计的源代码
源程序:
library ieee;
use ieee.std_logic_arith.all;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity PL_auto1 is port(clk:in std_logic;--系统时钟
set,get,sel,finish:in std_logic;--设定、买、选择、完成信号
coin1:in std_logic;--1元硬币
price,quantity:in std_logic_vector(3 downto 0);--价格、数量数据item0,act:out std_logic_vector(3 downto 0);--显示、开关信号
y0,y1,y3:out std_logic_vector(3 downto 0));
end PL_auto1;
architecture behav of PL_auto1 is type ram_type is array(3 downto 0)of std_logic_vector(7 downto 0);
signal ram:ram_type;--定义RAM signal item:std_logic_vector(1 downto 0);--商品种类
signal coin:std_logic_vector(3 downto 0);--币数计数器
signal pri,qua:std_logic_vector(3 downto 0);--商品单价、数量
begin com:process(set,clk)
variable quan:std_logic_vector(3 downto 0);
begin if set='1'then ram(conv_integer(item))=price&quantity;
act="0000";
--把商品的单价、数量置入到RAM elsif clk'event and clk='1'then
y1=coin;
if coin1='1'then if coin"1001"then coin=coin+1;y1=coin;
act="0000";--投入1元硬币,coin自加1 else coin="0000";act="0001";
end if;
elsif sel='1'then item=item+1;--对商品进行循环选择
elsif get='1'then--对商品进行购买
if qua"0000"and coin=pri then coin=coin-pri;quan:=quan-1;--
act="0000";
ram(conv_integer(item))=pri&quan;
else act="0001";
end if;