自动售货机VHDL程序与仿真
自动售货机的vhdl实现
自动售货机的VHDL 设计2013-9-10一、设计目标自动售货机设计FPGA 模块模拟自动售货机的工作过程,要求如下(1)售货机有两个进币孔,可以输入硬币和纸币,售货机有两个进币孔,一个是输入硬币,一个是输入纸币,硬币的识别范围是1元的硬币,纸币的识别范围是5 元,10 元,20,50 元,100 元。
乘客可以连续多次投入钱币。
(2)顾客可以选择的商品种类有16 种,价格分别为1-16 元,顾客可以通过输入商品的编号来实现商品的选择。
即有一个小键盘(0-9 按键)来完成,比如输入15 时要先输入1,再输入5。
(3)顾客选择完商品后,可以选择需要的数量。
然后可以继续选择商品及其数量,每次可以选择最多三个商品。
然后显示出所需金额。
顾客此时可以投币,并且显示已经投币的总币值。
当投币值达到或超过所需币值后,售货机出货,并扣除所需金额,并找出多余金额。
二、设计方案本设计方案采用Moore型状态机的设计方案,将整个实现过程拆分成10个具体的状态,个状态描述及相互间的转换关系如下:1、start(系统初始化)系统处于start状态时,当时钟下降沿来临时对进程中数字/数量的高低位临时储存变量进行清零工作,为后续的售货过程做准备,完成后系统跳转至choose_type状态。
2、choose_type(货物种类选择)在本状态进行货物种类的选择,先进行类型低位的选择,完成后跳转至type_sure状态。
3、type_sure(货物类型数字选择的确定)当在choose_type输入了一位数字后即可进行选择是让系统跳转到对应类型的数量选择(ok=’1’)还是进行该类型的高位数字选择(continue=’1’).4、choose_num(货物选择)5、num_sure(数量确定)本状态和上述choose_num与前述的状态choose_type和type_sure类似,故不再重复叙述,完成本状态后跳转到到num_pay状态。
自动售饮料机逻辑电路的设计和仿真
文档从互联网中收集,已重新修正排版,word格式支持编辑,如有帮助欢迎下载支持。
目录引言 (1)1设计要求的提出和功能的构想 (1)2分析设计要求并画出原始状态图 (1)3程序设计 (3)4时序仿真 (6)4.1创建VHDL源文件 (6)4.2 选择合适的器件 (7)4.3 编译程序 (7)4.4 仿真波形 (7)4.5 仿真波形分析 (8)结束语 (9)参考文献 (10)英文摘要 (10)致谢 (10)自动售饮料机逻辑电路的设计和仿真摘要:本文基于VHDL语言对自动售饮料机的逻辑电路进行了逻辑设计和仿真。
该电路可识别1元和5角硬币,实现购买3种不同价格的饮料并且具有找零功能。
本设计在MAX+PLUSⅡ中实现了逻辑仿真并给出正确的仿真波形图。
关键词:MAX+PLUSⅡ;VHDL;自动售饮料机引言随着集成电路技术的快速发展,EDA(Electronic Design Automation电子设计自动化)技术已经成为电路系统分析和设计的有力工具。
EDA技术使得硬件电路设计尤其是数字电路系统的设计变得如同软件设计一样方便快捷、易于修改。
本文采用具有很强硬件描述能力的VHDL语言,对自动售饮料机的逻辑电路进行了设计,并在MAX+PlusⅡ软件中仿真实现。
1设计要求的提出和功能的构想[1][2]①该饮料机能识别0.5元和1.0元两种硬币;②售出3种不同价格的饮料,饮料价格分别为1.5元、2.0元和2.5元;③具有找零功能;④购买者能自主选择所购买的饮料;⑤饮料机在每卖出一次饮料后能自动复位。
因为饮料的价格最高为2.5元,所以设计饮料机最多可接受3.0元的硬币。
2分析设计要求并画出原始状态图该自动售饮料机设有一个投币孔,通过传感器来识别两种硬币,给出两个不同的信号。
在此用half_dollar和one_dollar分别表示投入0.5元和1.0元硬币后电路接收到的两个信号;三个饮料选择按键choose01表示选择价格为1.5元的饮料,choose10表示选择价格为2.0元的饮料,choose11表示选择价格为2.5元的饮料;rest表示复位按键;有2个输出口分别为饮料出口dispense和找零出口out1;用s0表示初始状态,s1表示投入0.5元硬币时的状态,s2表示投入1.0元硬币时的状态,s3表示投入1.5元硬币时的状态,s4表示投入2.0元时的状态;clk 表示时钟信号;机器最多接受的钱币为3.0元。
自动售货机VHL程序与仿真
自动售货机VHL程序与仿真————————————————————————————————作者:————————————————————————————————日期:自动售货机VHDL程序与仿真(1)自动售货机VHDL程序如下:--文件名:pl_auto1.vhd。
--功能:货物信息存储,进程控制,硬币处理,余额计算,显示等功能。
--说明:显示的钱数coin的以5角为单位。
--最后修改日期:2004.3.23。
library ieee;use ieee.std_logic_arith.all;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity PL_auto1 isport ( clk:in std_logic; --系统时钟set,get,sel,finish: in std_logic; --设定、买、选择、完成信号coin0,coin1: in std_logic; --5角硬币、1元硬币price,quantity :in std_logic_vector(3 downto 0); --价格、数量数据item0 , act:out std_logic_vector(3 downto 0); --显示、开关信号y0,y1 :out std_logic_vector(6 downto 0); --钱数、商品数量显示数据act10,act5 :out std_logic); --1元硬币、5角硬币end PL_auto1;architecture behav of PL_auto1 istype ram_type is array(3 downto 0)of std_logic_vector(7 downto 0);signal ram :ram_type; --定义RAMsignal item: std_logic_vector(1 downto 0); --商品种类signal coin: std_logic_vector(3 downto 0); --币数计数器signal pri,qua:std_logic_vector(3 downto 0); --商品单价、数量signal clk1: std_logic; --控制系统的时钟信号begincom:process(set,clk1)variable quan:std_logic_vector(3 downto 0);beginif set='1' then ram(conv_integer(item))<=price & quantity;act<="0000";--把商品的单价、数量置入到RAM elsif clk1'event and clk1='1' then act5<='0'; act10<='0';if coin0='1' thenif coin<"1001"then coin<=coin+1; --投入5角硬币,coin自加1else coin<="0000";end if;elsif coin1='1' thenif coin<"1001"then coin<=coin+2; --投入1元硬币,coin自加2else coin<="0000";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;ram(conv_integer(item))<=pri & quan;if item="00" then act<="1000"; --购买时,自动售货机对4种商品的操作elsif item="01" then act<="0100";elsif item="10" then act<="0010";elsif item="11" then act<="0001";end if;end if;elsif finish='1' then --结束交易,退币(找币)if coin>"0001" then act10<='1';coin<=coin-2; --此IF语句完成找币操作elsif coin>"0000" then act5<='1'; coin<=coin-1;else act5<='0'; act10<='0';end if;elsif get='0' then act<="0000";for i in 4 to 7 looppri(i-4)<=ram (conv_integer(item))(i); --商品单价的读取end loop;for i in 0 to 3 loopquan(i):=ram(conv_integer(item))(i); --商品数量的读取end loop;end if;end if;qua<=quan;end process com;m32:process(clk) --此进程完成对32Mhz的脉冲分频variable q: std_logic_vector( 24 downto 0);beginif clk'event and clk='1' then q:=q+1;end if;if q="111111111111111111111111" then clk1<='1';else clk1<='0';end if;end process m32;code0:process(item) --商品指示灯译码begincase item iswhen "00"=>item0<="0111";when "01"=>item0<="1011";when "10"=>item0<="1101";when others=>item0<="1110";end case;end process;code1: process (coin) --钱数的BCD到七段码的译码begincase coin iswhen "0000"=>y0<="0000001";when "0001"=>y0<="1001111";when "0010"=>y0<="0010010";when "0011"=>y0<="0000110";when "0100"=>y0<="1001100";when "0101"=>y0<="0100100";when "0110"=>y0<="0100000";when "0111"=>y0<="0001111";when "1000"=>y0<="0000000";when "1001"=>y0<="0000100";when others=>y0<="1111111";end case;end process;code2: process (qua) --单价的BCD到七段码的译码begincase qua iswhen "0000"=>y1<="0000001";when "0001"=>y1<="1001111";when "0010"=>y1<="0010010";when "0011"=>y1<="0000110";when "0100"=>y1<="1001100";when "0101"=>y1<="0100100";when "0110"=>y1<="0100000";when "0111"=>y1<="0001111";when "1000"=>y1<="0000000";when "1001"=>y1<="0000100";when others=>y1<="1111111";end case;end process;end behav;(2)程序仿真注:仿真图里没有对clk信号进行分频处理。
基于VHDL语言的地铁自动售票系统设计与实现
摘要本文主要介绍了利用VHDL设计语言和Altera公司的MAX+PLUS II软件开发平台, 来设计实现地铁自动售票系统的核心控制部分的功能:站点选择,票数选择,投币处理,余额计算,自动出票等功能。
在本设计中采用了有限状态机的设计方法,将整个售票系统的控制部分化分为五个状态: 选站状态,选票状态,投币状态,出票状态和余额找零状态。
最后通过对程序的调试以及相应部分功能的仿真,验证了整个系统的原理和本设计方案的正确性。
由于采用了有限状态机的设计方法,使得本系统运行可靠性高,非法状态易控制。
关键词: FPGA,CPLD, VHDL语言,MAX+PLUS II 软件,有限状态机, ,地铁自动售票系统目录第一章绪论 (1)1.1 电子器件的发展和现状 (1)1.2 设计方法的发展 (3)1.3 层次化的设计与VHDL的应用 (5)1.4 本课题的提出与意义 (8)1.5 本课题研究内容 (8)第二章 VHDL语言介绍 (10)2.1什么是VHDL (10)2.2 VHDL语言的特点 (10)2.3 VHDL的设计流程 (11)2.4 VHDL程序的基本结构 (13)第三章 MAX+PLUS II软件介绍 (14)3.1 MAX+PLUS II简介 (14)3.2Max+PlusⅡ开发系统的特点 (15)3.3 Max+PlusⅡ功能简介 (16)3.4 Max+plusⅡ设计过程 (20)第四章地铁售票系统的设计与实现 (23)4.1 课题要求 (23)4.2设计分析 (23)4.3状态机设计 (25)第五章结束语 (32)附录 (33)参考文献 (40)致谢 (41)第一章绪论1.1 电子器件的发展和现状电子技术的发展总是同电子器件的发展密切相关的,由于电子器件的不断更新换代,电子技术得到了飞速发展,当今信息技术被广泛应用在国民经济的方方面面。
多媒体技术的普及、高速宽带网络的建设、数字电视的出现以及与我们日常生活息息相关的各种家用电器,都离不开微处理器、存储器和一些采用行业标准的专用芯片。
自动售货机VHDL程序与仿真
自动售货机VHDL程序与仿真(1)自动售货机VHDL程序如下:--文件名:pl_auto1.vhd。
--功能:货物信息存储,进程控制,硬币处理,余额计算,显示等功能。
--说明:显示的钱数coin的以5角为单位。
--最后修改日期:2004.3.23。
library ieee;use ieee.std_logic_arith.all;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity PL_auto1 isport ( clk:in std_logic; --系统时钟set,get,sel,finish: in std_logic; --设定、买、选择、完成信号coin0,coin1: in std_logic; --5角硬币、1元硬币price,quantity :in std_logic_vector(3 downto 0); --价格、数量数据item0 , act:out std_logic_vector(3 downto 0); --显示、开关信号y0,y1 :out std_logic_vector(6 downto 0); --钱数、商品数量显示数据act10,act5 :out std_logic); --1元硬币、5角硬币end PL_auto1;architecture behav of PL_auto1 istype ram_type is array(3 downto 0)of std_logic_vector(7 downto 0);signal ram :ram_type; --定义RAMsignal item: std_logic_vector(1 downto 0); --商品种类signal coin: std_logic_vector(3 downto 0); --币数计数器signal pri,qua:std_logic_vector(3 downto 0); --商品单价、数量signal clk1: std_logic; --控制系统的时钟信号begincom:process(set,clk1)variable quan:std_logic_vector(3 downto 0);beginif set='1' then ram(conv_integer(item))<=price & quantity;act<="0000";--把商品的单价、数量置入到RAM elsif clk1'event and clk1='1' then act5<='0'; act10<='0';if coin0='1' thenif coin<"1001"then coin<=coin+1; --投入5角硬币,coin自加1else coin<="0000";end if;elsif coin1='1' thenif coin<"1001"then coin<=coin+2; --投入1元硬币,coin自加2else coin<="0000";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;ram(conv_integer(item))<=pri & quan;if item="00" then act<="1000"; --购买时,自动售货机对4种商品的操作elsif item="01" then act<="0100";elsif item="10" then act<="0010";elsif item="11" then act<="0001";end if;end if;elsif finish='1' then --结束交易,退币(找币)if coin>"0001" then act10<='1';coin<=coin-2; --此IF语句完成找币操作elsif coin>"0000" then act5<='1'; coin<=coin-1;else act5<='0'; act10<='0';end if;elsif get='0' then act<="0000";for i in 4 to 7 looppri(i-4)<=ram (conv_integer(item))(i); --商品单价的读取end loop;for i in 0 to 3 loopquan(i):=ram(conv_integer(item))(i); --商品数量的读取end loop;end if;end if;qua<=quan;end process com;m32:process(clk) --此进程完成对32Mhz的脉冲分频variable q: std_logic_vector( 24 downto 0);beginif clk'event and clk='1' then q:=q+1;end if;if q="111111111111111111111111" then clk1<='1';else clk1<='0';end if;end process m32;code0:process(item) --商品指示灯译码begincase item iswhen "00"=>item0<="0111";when "01"=>item0<="1011";when "10"=>item0<="1101";when others=>item0<="1110";end case;end process;code1: process (coin) --钱数的BCD到七段码的译码begincase coin iswhen "0000"=>y0<="0000001";when "0001"=>y0<="1001111";when "0010"=>y0<="0010010";when "0011"=>y0<="0000110";when "0100"=>y0<="1001100";when "0101"=>y0<="0100100";when "0110"=>y0<="0100000";when "0111"=>y0<="0001111";when "1000"=>y0<="0000000";when "1001"=>y0<="0000100";when others=>y0<="1111111";end case;end process;code2: process (qua) --单价的BCD到七段码的译码begincase qua iswhen "0000"=>y1<="0000001";when "0001"=>y1<="1001111";when "0010"=>y1<="0010010";when "0011"=>y1<="0000110";when "0100"=>y1<="1001100";when "0101"=>y1<="0100100";when "0110"=>y1<="0100000";when "0111"=>y1<="0001111";when "1000"=>y1<="0000000";when "1001"=>y1<="0000100";when others=>y1<="1111111";end case;end process;end behav;(2)程序仿真图8.21.2 系统仿真全图图8.21.3 系统仿真图-预置部分图21.4 系统仿真图-商品种类选择部分图8.21.5 系统仿真图-投币部分图8.21.6 系统仿真图-购买、找币结束交易部分。
自动售货机控制模块VHDL程序设计及FPGA实现
自动售货机控制模块VHDL程序设计及FPGA实现 近年来,随着集成电路技术的迅猛发展,特别是可编程逻辑器件的高速发展, EDA(Electronic Design Automation,电子设计自动化)技术成为电子设计工程师的新宠。
EDA技术以计算机为工具完成数字系统的逻辑综合、布局布线和设计仿真等工作。
电路设计者只需要完成对系统功能的描述,就可以由计算机软件进行系统处理,最后得到设计结果,并且修改设计方案如同修改软件一样方便。
利用EDA工具可以极大地提高设计效率。
利用硬件描述语言编程来表示逻辑器件及系统硬件的功能和行为,是EDA设计方法的一个重要特征。
VHDL(Very High Speed Integrated Circuit Hardware Description Language,超高速集成电路硬件描述语言)是硬件描述语言的一种,对系统硬件的描述功能很强而语法又比较简单。
VHDL具有强大的行为描述能力,设计者可以不懂硬件的结构,只需集中精力进行电子系统的设计和性能优化;具有方便的逻辑仿真与调试功能,在设计早期就能查验系统的功能,方便地比较各种方案的可行性及其优劣。
目前,VHDL作为IEEE的工业标准硬件描述语言,得到众多EDA公司的支持,在电子工程领域已经成为事实上通用硬件描述语言。
本文采用VHDL作为工具描述了自动售货机控制模块的逻辑控制电路,并在FPGA上实现。
该自动售货机能够根据投入硬币额度,按预定的要求在投入硬币大于规定值时送出饮料并找零。
设计方案 本文所设计的简易自动售货机可销售矿泉水,假设每瓶1.5元。
设两个投币孔,分别接收1元和5角两种硬币,两个输出口,分别输出购买的商品和找零。
假设每次只能投入一枚1元或5角硬币,投入1元5角硬币后机器自动给出一瓶矿泉水;投入2元硬币后,在给出一瓶矿泉水的同时找回一枚5角的硬币。
另外设置一复位按钮,当复位按钮按下时,自动售货机回到初始状态。
基于Verilog HDL的自动售货机设计与仿真
电子技术Electronic Technology电子技术与软件工程Electronic Technology & Software Engineering 基于Verilog H D L的自动售货机设计与仿真李红科王庆春贾晓菲(安康学院电子与信息工程学院陕西省安康市725000 )摘要:本文应用Verilog H D L语言采用自顶而下的方法设计自动售货机,整个系统包括商品选择、确认、投币、找零和出货等模块。
在Modelsim平台进行功能仿真验证,经过仿真验证设计正确,符合设计要求。
关键词:Verilog H D L;自动售货机;模块设计1引言随着集成电路产业快速发展,电路集成度越来越高,以计算机辅助为基础的电子设计自动化(EDA Electronics Design Automation)技术成为集成电路设计重要工具m,Verilog HDL硬件描述语言是以文字形式描述数字系统硬件电路结构和行为的语言,只需描述电路的功能和电路模块之间的相互关系,设计者更加专注电路设计整体性能,使电路更加优化,提高设计效率|21。
自动售货机是一种常见的智能自动化设备,由于不受人直接参与,所以广泛应用在办公楼、操场、高速服务K等场所,大大降低时间、地点的限制,在节省人力资源方面有着明显优势。
2自动售货机设计思路有限状态机(FSM Finite-state Machine)是•种用来进行对象行为建模的工具,其作用是表示有限个状态以及这些状态之间相互转移和动作等行为的数学模型。
有限状态机广泛应用于建模行为、硬件电路设计、软件工程和网络协议等的设计。
在数字系统设计中,当某一事物发生连续变化时,可以采用有限状态机设计思路提高设计效率,增加程序可读性,降低错误概率,有限状态机设计思路是数字系统中最常用的设计方法之一 [3]。
2.1自动售货机系统总体设计该售货机电路设计要求:(1)每次只能出售一种商品。
(2)所售商品种类:售货机只售4种商品,所售商品编号分 别用四位二进制数从右向左表示为0001、0010、0100、1000,对应价格分别为2元、3元、4元、5元。
用VHDL设计的地铁自动售票机控制器
作者:杨海平,江南大学物联网工程学院微电子11级在网上看博文,偶然进入了EEFOCUS网站,感觉网站的气氛很好,由此我也萌生了写博文的念头,今天特地申请了账号,开始写第一篇博文,写些关于自己学习,自己思考的东西,希望能督促自己继续学习,勤于思考吧。
今天写的东西是学习VHDL中的一个小实验,自己用状态机实现了。
1.实验要求设计一个地铁自动售票机的控制器电路,要求如下:1)有两元,三元两种地铁车票。
只能用五角,一元两种硬币购票;2)预先选择车票的票价,投入硬币,数码管显示投入硬币的金额,“确认”后给出车票,找零,并置金额显示为零,并可按“取消”同样退还硬币,并置金额显示为零。
2.实验代码-------------------------------library ieee;use ieee.std_logic_1164.all;---------------------------------entity metro isport( st2,st3:in std_logic;--选择两元还是三元车票1有效clk,rst:in std_logic;--rst 1 有效coin1,coin2:in std_logic;--coin1表示5角硬币,coin2表示1元硬币1有效ok,cancel:in std_logic;--ok表示确认购票,cancel表示退换硬币0有效ssd1,ssd2:out std_logic_vector(7 downto 0);--两位数码管显示金额tout2,tout3:out std_logic;--给出两元,三元车票1有效mout:out std_logic--退出钱款1有效);end metro;-----------------------------------------architecture bhv of metro istype state is(s0,s5,s10,s15,s20,s25,s30);--s0表示没有投硬币,s5表示五角状态,s10表示一元状态,依次类推,最多只能投3元signal pre_state,next_state:state;begin-------------------------------------------------------------process(clk,rst)--复位操作beginif(rst = '1') thenpre_state <= s0;elsif(clk'event and clk = '1') thenpre_state <= next_state;end if;end process;------------------------------------------------------------process(rst,coin1,coin2,st2,st3,ok,cancel)--状态机的编写beginif(rst = '1') thentout2 <= '0';tout3 <= '0';mout <= '0';ssd1 <= "11000000";ssd2 <= "11000000";elsif(cancel = '1') thennext_state <= s0;ssd1 <= "11000000";ssd2 <= "11000000";elsecase pre_state iswhen s0 =>ssd1 <= "11000000";ssd2 <= "11000000";tout2 <= '0';tout3 <= '0';mout <= '0';if(coin1 = '1') then next_state <= s5;elsif(coin2 = '1') then next_state <= s10;end if;when s5 =>ssd1 <= "10010010";ssd2 <= "11000000";tout2 <= '0';tout3 <= '0';mout <= '0';if(coin1 = '1') then next_state <= s10;elsif(coin2 = '1') then next_state <= s15;end if;when s10 =>ssd1 <= "11000000";ssd2 <= "11111001";tout3 <= '0';mout <= '0';if(coin1 = '1') then next_state <= s15;elsif(coin2 = '1') then next_state <= s20;end if;when s15 =>ssd1 <= "10010010";ssd2 <= "11111001";tout2 <= '0';tout3 <= '0';mout <= '0';if(coin1 = '1') then next_state <= s20;elsif(coin2 = '1') then next_state <= s25;end if;when s20 =>ssd1 <= "11000000";ssd2 <= "10100100";if(coin1 = '1') then next_state <= s25;elsif(coin2 = '1') then next_state <= s30;elsif(st2 = '1' and ok = '1') then mout <= '0';tout2 <= '1';tout3 <= '0';next_state <= s0;end if;when s25 =>ssd1 <= "10010010";ssd2 <= "10100100";if(coin1 = '1') then next_state <= s30;elsif(st2 = '1' and ok = '1') then mout <= '1';tout2 <= '1';tout3 <= '0';next_state <= s0;end if;when s30 =>ssd1 <= "11000000";ssd2 <= "10110000";if(st2 = '1' and ok = '1') then mout <= '1';tout2 <= '1';tout3 <= '0';next_state <= s0;elsif(st3 = '1' and ok = '1') then mout <= '0';tout3 <= '1';tout2 <= '0';next_state <= s0;end if;end case;end if;end process;----------------------------------------------------------------------------------------------end bhv;3.仿真代码clk_gen:process--只列出了主要的代码,这是时钟产生激励beginclk <= '1';wait for 5 ns;clk <= '0';wait for 5 ns;end process clk_gen;--------------------------init : PROCESS --这是模拟先投两元硬币,买两元票,再投三元硬币,买三元票beginrst <= '1';cancel <= '0';ok <= '0';coin1 <= '0';coin2 <= '0';st2 <= '0';st3 <= '0';wait for 5 ns;coin2 <= '1';rst <= '0';wait for 10 ns;------------------coin2 <= '0';wait for 10 ns;coin2 <= '1';wait for 10 ns;coin2 <= '0';wait for 10 ns;coin2 <= '0';st2 <= '1';ok <= '1';wait for 10 ns;ok <= '0';st2<= '0';-----------coin2 <= '1';wait for 10 ns;coin2 <= '0';wait for 10 ns;coin2 <= '1';wait for 10 ns;coin2 <= '0';wait for 10 ns;coin2 <= '1';wait for 10 ns;coin2 <= '0';wait for 10 ns;st3 <= '1';ok <= '1';wait for 100 ns;wait;-- wait;END PROCESS init;仿真结果如下:(Quartus II环境下的仿真)结果与预期的一致,大家也可以自己编写试试看。
自动售货机控制模块VHDL程序设计及FPGA实现
作 EE 的 tr公 Au o to , 子 设 计 自动 化 )技 术 其 优 劣 。 目前 ,VHDL 为 I E 工 A l e a 司 的 最 新 可 编 程 逻 辑 器 件 t ma i n 电 a U I 8 0 r 成 为 电 子 设 计 工 程 师 的 新 宠 。 ED A 业 标 准 硬 件 描 述 语 言 ,得 到 众 多EDA 开 发 工 具 Qu t S I . , 实 现 芯 tr公 0 技术 以计算机 为 工具 完成 数字 系统 的 公司 的支持 ,在 电子 工程领域 已经成 片 选 用 Ale a 司 FLEX1K系 列 的 逻 辑综 合 、布 局布线 和设 计仿真 等工 为事 实上 通 用 硬 件 描 述 语 言 。 作 。 电路 设 计 者 只 需 要 完 成 对 系 统 功
需 集 中精 力进 行电子 系统 的设计和 性 的硬 币 。另外 设置一 复位 按钮 , 当复 状 态机的VHDL 表述丰 富多样 ,程 序
母嚣奄寻
21鼎{ 9{ 舟
47
层 次 分 明 , 构 清 晰 ,易 读 易 懂 ;在 结
c mb o
—
o t us u p t表示。c mb o t us0 o _ up t() s t<= 0 一 异 步 复 位 te S; 一 a
EPFIK1LC8 — ;首先 在计算机上 O 0 44
本 文 采 用 VHDL 为 工 具 描 述 了 完成程 序设 计 、编译及 时序 仿真 ,然 作
能 的 描述 , 可 以 由计 算机 软 件进 行 就
自动 售 货 机 控 制 模 块 的 逻 辑 控 制 电 后 将 经 过 验 证 的 设 计文 件 下 载 到 选 择
可 以 避 免 这 些 烦 琐 的 过 程 ,直 接 利 用
自动售货机的设计及仿真
自动售货机的设计及仿真任务和要求:自动售货机可销售橡皮(0.5元)、铅笔(1元)、直尺(1.5元)、记录本(2元)4种商品,数量无限。
只能投入1元或5角硬币,当投入的币值等于或大于商品的价钱且确认购买时,两个输出口分别输出购买的商品和找零,当投币后取消购买,退回投入的硬币,假设零币无限。
顾客一次只能购买一种商品的一个,若需要更多商品,需要重复操作。
1)基本功能:商品选择;投币购买;出货、找零、退钱。
2)显示功能:有两个LED数码管显示已经投入的币值或找零数系统总体设计:基本功能模块:商品选择模块;投币处理模块;、出货、找零、退钱模块。
自动售货机控制系统共含4个状态:初始状态、投币状态、出货及找零、退钱状态。
1)初始状态(selegoods):表示一次投币销售过程的开始,此状态期间,可选择商品,不允许投币。
2)投币状态(incoins):计算并记录投入总币值,此状态期间,允许投币,不允许选择商品。
3)出售及找零状态(outgoods_coin):根据选择商品的价格及投入的总币值,决定是否出货及找零。
4)退钱状态(back_coin):投币后取消购买,退回投入的硬币。
状态转换图如下表示:商品选择模块:功能:选择一种商品获得此商品的价格。
商品选择模块的元件图符商品选择模块的VHDL描述。
注意:为了直观显示商品的价格,价格选择integer,进行功能仿真时,选择价格为unsigneddecimal 类型。
功能仿真波形及说明:说明:当en=1时,选择eraser,此商品的价格为5角,price=5。
当en=0时,商品选择模块禁止工作,price保持不变。
•投币处理模块计算并记录投入的总币值。
投币处理模块的VHDL描述:为了直观显示投入总币值,总币值total选择integer,进行功能仿真时,选择total为unsigned decimal 类型。
功能仿真及说明:说明:当en=1时,投入一枚5角、一枚一元、一枚5角硬币,总币值为20即2元。
基于VHDL编程FPGA的地铁自动售票机
基于VHDL编程FPGA的地铁自动售票机地铁自动售票机一、设计要求1、功能描述用于模仿地铁售票自动售票,完成地铁售票的核心控制功能。
2、功能要求售票机有两个进币孔,一个是输入硬币,识别的范围是一元硬币;一个是纸币,识别的范围是一元、两元、五元、十元、二十元。
乘客可以连续屡次投入钱币。
乘客一次只能选择一个出站口,购置车票时,乘客先选出站口,有六个出站口可供选择,再选择所需的票数,然后投币,投入的钱币到达或者超过所需金额时,售票机自动出票,并找零。
本次交易结束后,等待下一次交易。
在选择出站口、所需票数以及在投币期间,乘客可以按取消键取消操作,钱币自动退出。
二、实验分析1、买票时,乘客按下开始键,售票机进入站台选择程序,乘客选择出站口后,可以按取消键重新选择,否那么售票机自动进入票数选择程序,同样这时可以按下取消键重新开始选择出站口以及票数。
2、中选择好出站口以及所需票数时,乘客可以投硬币或者用纸币,当所投的钱币总额大于或者等于票价时,售票机自动出票以及找零。
期间,可以按下取消键重新开始选择,并退出所有的钱币。
3、乘客假设还没选择出站口或者票数,就投币或者使用纸币,售票时机自动退出所有的钱币。
4、有六个站台可供乘客选择,每个乘客最多可以买3张票,六个站台编号为1到6,票价从2元依次递增到7。
三、系统流程图四、程序源代码LIBRARY IEEE;USE IEEE.std_logic_1164.ALL; USE IEEE.std_logic_arith.ALL; USE IEEE.std_logic_unsigned.ALL; ENTITY metrosell IS PORT(clk:in std_logic; startselect:in std_logic; sure:in std_logic; save your forward step(s)coin1y:in std_logic; pmoney1y:in std_logic; pmoney2y:in std_logic; pmoney5y:in std_logic; pmoney10y:in std_logic; moneypmoney20y:in std_logic; moneycancel:in std_logic; number:in std_logic_vector(3 downto 0); the ticketsplatform:in std_logic_vector(3 downto 0); want to reachmoneystorage:out std_logic; acceptmo:out std_logic; stamp:outstd_logic; --set the clock signal --start to select the platform --this button is to --1 yuan coin--1 yuan paper money --2 yuan paper money --5 yuan paper money --10 yuan paper --20 yuan paper --cancel the forward step(s) --choose the number of --choose the platform you --to store the money --accept the money --stamp outgatecharge:out std_logic_vector(3 downto 0); --the mount of charge,up to 15 yuanchargegate:out std_logic --charge outgate ); END metrosell;ARCHITECTURE sell OF metrosell IStype state_type is(initial_type,selectp_type,selectnum_type,insert_type,stamp_type,char ge_type); --define six typessignal state:state_type; --define a shared state BEGINmain:process(clk,state,startselect,platform,number,coin1y,pmoney1y,pm oney2y,pmoney5y,pmoney10y,pmoney20y,cancel,sure)variable univalence :integer range 0 to 7; --the univalence of the ticket variable total_money :integer range 0 to 21; --the price of theticket(s) variable selectp_alr:std_logic; --the flag of select platform typevariable selectnum_alr:std_logic; --the flag of select number type variable stamp_alr:std_logic; --the flag of the stamp gate variable charge_alr:std_logic; --the flag of the charge gatevariable money_reg:integer range 0 to 21; --the mount of money put in variable coin1y_f:std_logic; --the flag of one yuan coin variable pmoney1y_f:std_logic; --the flag of one yuan paper moneyvariable pmoney2y_f:std_logic; --the flag of two yuan paper money variable pmoney10y_f:std_logic; --the flag of ten yuan paper money variable pmoney20y_f:std_logic; --the flag of twelve yuan paper money variable pmoney5y_f:std_logic; --the flag of five yuan paper money variable charge_reg:integer range 0 to 15; beginif(rising_edge(clk)) then case state iswhen initial_type => variablesunivalence:=0; selectp_alr:='0'; selectnum_alr:='0'; stamp_alr:='0'; charge_alr:='0'; money_reg:=0; total_money:=0; coin1y_f:='0';pmoney1y_f:='0'; pmoney2y_f:='0'; pmoney5y_f:='0';--the register of charge --initialize some pmoney10y_f:='0';pmoney20y_f:='0'; moneystorageif(selectp_alr='0'and cancel='0') then --choose the platformif(platform=\ elsif(platform=\ elsif(platform=\ elsif(platform=\elsif(platform=\ elsif(platform=\ elsif(platform=\ else null; end if; elsif(selectp_alr='1'and cancel='1')then state。
自动售货机控制系统的VHDL实现(1)
目录一、概述 (1)二、自动售货机控制系统的实现............. 错误!未定义书签。
1、自动售货机功能描述及控制系统组成... 错误!未定义书签。
2、自动售货机控制功能的状态描述....... 错误!未定义书签。
3、自动售货机功能控制模块的VHDL实现 (3)4、投币输入信号电路的设计与实现 (4)5、自动售货机控制系统功能仿真 (5)三、结束语 (6)四、参考文献 (7)自动售货机控制系统的VHDL实现一、概述有限状态机FSM(Finite State Machine)及其设计技术是实用数字系统设计中实现高效率、高可靠逻辑控制的重要途径。
传统的状态机设计方法需进行繁琐的状态分配、绘制状态表、化简次态方程等,而利用VHDL可以避免这些繁琐的过程,直接利用状态转换图进行状态机的描述,所有的状态均可表达为CASE_WHEN结构中的一条CASE语句,而状态的转移则通过IF_THEN_ELsE语句实现。
此外,与VHDL的其它描述方式相比,状态机的VHDL表述丰富多样,程序层次分明,结构清晰,易读易懂;在排错、修改和模块移植方面也有其独到的特点。
二、自动售货机控制系统的实现1、自动售货机功能描述及控制系统组成设计一个自动售货机的逻辑控制电路。
它有两个投币口分别为一元投币口和五角投币口,假设每次只能投入一枚一元或五角硬币,投入一元五角硬币后机器自动给出一瓶饮料,投入两元硬币后,在给出一瓶饮料的同时找回一枚五角的硬币。
图1为自动售货机控制系统方框图,由投币信号处理模块和功能控制模块组成。
投币找钱信号出货图1 自动售货机控制系统2、自动售货机控制功能的状态描述取投币信号为输入逻辑变量,投入一枚一元硬币时用A=1表示,未投入时A=0。
投入一枚五角硬币用B=1表示,未投入时B=0。
给出饮料和找钱为两个输出变量,分别用Z和Y 表示,给出饮料时Z=1,不给时Z=0,找回一枚五角硬币时Y=1,不找时Y=0。
根据上面的功能描述,可用三个状态S0,S1,S2表示,未投币前的初始状态为S0,投入五角硬币以后为S1,投入一元硬币后(包括投入一枚一元硬币和投入两枚五角硬币的情况)为S2,再投入一枚五角硬币后电路返回S0,同时输出为Z=1,Y=0;如果投入的是一枚一元硬币,则电路也应能返回S0,同时输出为Z=1,Y=1。
简单自动售货机VerilogHDL程序
自动售货机VerilogHDL程序一个简单的自动售卖饮料机的程序.该机器具有投币,显示余额,购买六种饮料,退钱等功能,为了更具实用性,增添了饮料选择允许提示和投币允许提示的功能。
具体形容,可投入一元、五元、十元和二十元面值的钱币,显示出当前的余额,并根据当前的余额提示能购买哪些饮料,选择某种饮料,则输出选定的饮料,同时余额减去相应的金钱.若选择退钱,机器就退出所有的钱,余额清零.下图为功能示意图:程序的状态表:程序中包含了一个状态机,定义了一个任务(task)和函数(function),用该任务调用了该函数,使用若干分支语句,详见附后源程序和测试程序。
附上程序编译仿真图:源程序如下:`define one 3'b001`define five 3'b010`define ten 3'b011`define twenty 3’b100module automart(money,state,moneyout,coinable,adrkable,bdrkable,cdrkable,drkout1,drkout2,drkout3,drkout4,drkout5,drkout6,coin,clk,reset,moneyback,choice1,choice2,choice3,choice4,choice5,choice6);input[2:0]coin;//投币输入,分为1、5、10、20元四种输入input clk,reset,moneyback,choice1,choice2,choice3,choice4,choice5,choice6;//moneyback为退钱输入,choice1~6是饮料选择output moneyout,coinable,adrkable,bdrkable,cdrkable,drkout1,drkout2,drkout3,drkout4,drkout5,drkout6;//依次为退钱输出,投币许可提示,饮料选择许可,6种饮料输出output[2:0] state;//状态记录output[7:0] money;//余额显示reg[7:0] money;reg[2:0] state;reg moneyout,coinable,backable,adrkable,bdrkable,cdrkable; parameter A=3'b000,B=3'b001,C=3'b010,D=3'b011,E=4’b100;assign drkout1=choice1&adrkable;assign drkout2=choice2&adrkable;assign drkout3=choice3&bdrkable;assign drkout4=choice4&bdrkable;assign drkout5=choice5&cdrkable;assign drkout6=choice6&cdrkable;always@(posedge clk)repeat(1)@(posedge clk)if (!reset)beginstate<=A;money=0;moneyout=0;endelsebegincase(state)A:begin//初始状态A,可投币进入别的状态coinable=1;backable=0;adrkable=0;bdrkable=0;cdrkable=0;endB: begin//状态B,只能买1元的饮料,可退钱或投币coinable=1;backable=1;adrkable=1;bdrkable=0;cdrkable=0;endC: begin//状态C,可买1或2元的饮料,退钱或投币coinable=1;backable=1;adrkable=1;bdrkable=1;cdrkable=0;endD:begin//状态D,可买三档价格饮料,可退钱或投币coinable=1;backable=1;adrkable=1;bdrkable=1;cdrkable=1;endE:begin//状态E,可买三档价格饮料,可退钱,不可继续投钱coinable=0;backable=1;adrkable=1;bdrkable=1;cdrkable=1;enddefault: state=A;endcasecondition(money,state,coin,coinable);//调用任务endalways@(negedge drkout1 or negedge drkout2)money=money—8’h01;//买1元的饮料,余额减1元always@(negedge drkout3 or negedge drkout4)money=money—8'h02;//买2元的饮料,余额减2元always@(negedge drkout5 or negedge drkout6)money=money—8'h04;//买4元的饮料,余额减4元always@(negedge moneyback)beginif(backable)beginmoneyout=1;money=0;//选择退钱,则推出金钱,余额清零endelsemoney=money+0;endtask condition;//该任务可以判断余额的改变,状态切换inout[7:0] moneycon;inout[2:0] statecon;input[2:0] coincon;input coinablecon;beginif (coinablecon)//允许投币时begincase (coincon)//根据投币面值改变余额,切换状态`one : moneycon=moneycon+8'h01;`five :moneycon=moneycon+8'h05;`ten : moneycon=moneycon+8'h0a;`twenty :moneycon=moneycon+8'h14;default:moneycon=moneycon+0;//无投币则余额不变endcasestatecon=condition_s(moneycon);//调用函数endelse if (moneycon〈8’h14)//不允许投币时,根据余额变化statecon=condition_s(moneycon);//直接切换状态endendtaskfunction [2:0] condition_s;//根据余额的值切换状态的函数input [7:0] money_s;reg [7:0]money_s;beginif (money_s==0)condition_s=A;else if(money_s==8’h01)condition_s=B;else if(money_s==8’h02||money_s==8’h03)condition_s=C;else if(money_s〉=8’h04&&money_s〈8’h14)condition_s=D;else condition_s=E;endendfunctionendmodule测试程序如下:`timescale 100ns/1ns`define clk_cycle 50module test;reg moneyback,choice1,choice2,choice3,choice4,choice5,choice6; reg [2:0] coin;reg clk,reset;wire[7:0] money;wire[2:0]state;wire moneyout,coinable,adrkable,bdrkable,cdrkable,drkout1,drkout2,drkout3,drkout4,drkout5,drkout6;parameter one=3’b001,five=3’b010,ten=3'b011,twenty=3'b100;always #`clk_cycle clk= ~clk;initialbegincoin=0;moneyback=0;clk=0;choice1=0;choice2=0;choice3=0;choice4=0;choice5=0;choice6=0;reset=1;#10 reset=0;#200 reset=1;#400 coin=one;//投币1元,#220 coin=0;#200 coin=one;//投1元,余额2元#220 coin=0;#200 coin=five;//投5元,余额7元#220 coin=0;#200 coin=twenty;//投20元,余27#220 coin=0;#200 choice1=1;//买1元饮料,余26#220 choice1=0;#200 choice3=1;//买2元饮料,余24#220 choice3=0;#200 choice4=1;//买2元饮料,余22#220 choice4=0;#200 choice5=1;//买4元饮料,余18#220 choice5=0;#200 choice6=1;//买4元饮料,余14#220 choice6=0;#200 choice6=1;//买4元饮料,余10#220 choice6=0;#200 choice6=1;//买4元饮料,余6#220 choice6=0;#200 choice6=1;//买4元饮料,余2#220 choice6=0;#200 coin=five;//投5元,余7#220 coin=0;#200 moneyback=1;//退钱#220 moneyback=0;endautomart m(.money(money),。
自动售货机界面操作及显示 VHDL语言
自动售货机界面操作及显示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信号为低电平是,则显示商品的单价及其剩余数量和剩余的钱数。
基于VHDL的自动售货机设计_毕业设计论文 精品
本科生毕业论文(设计)基于VHDL的自动售货机设计目录中文摘要 (2)英文摘要 (3)引言 (4)1.介绍及设计任务 (5)1.1EDA技术 (5)1.1.1EDA的介绍与发展 (5)1.1.2EDA的设计流程 (5)1.1.3VHDL介绍 (5)1.2自动售货机的应用与设计背景 (6)1.2.1自动售货机的应用介绍 (6)1.2.2自动售货机的设计要求 (6)2.系统分析与设计方案 (7)2.1系统分析 (7)2.2系统设计方案 (7)3.Max+PlusⅡ设计过程 (9)3.1Max+PlusⅡ的介绍 (9)3.2各模块的VHDL设计 (11)3.2.1货物信息的存储模块的设计 (12)3.2.2进程控制模块的设计 (12)3.2.3硬币处理模块的设计 (13)3.2.4余额计算模块的设计 (14)3.2.5显示功能模块的设计 (15)3.3顶层电路的设计流程 (16)3.4仿真功能与测试 (17)3.4.1 编译及仿真 (17)结束语 (21)参考文献 (22)致谢 (23)基于VHDL的自动售货机设计*****指导老师:****(****信息工程学院,*******)摘要:在当今社会随着电子技术获得了飞速发展的情况下,现在电子产品几乎渗透了社会的各个领域,有力的推动了社会生产里的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。
首先EDA技术在进入21世纪后,得到了很大的发展,其基本特征是采用高级语言描述,具有系统级仿真和综合能力。
VHDL硬件描述语言是涉及源文件可以采用类似与C语言的书写形式,并采用结构设计方法。
通过VHDL为基础设计了一种自动售货机的设计。
整个设计以两个计数器为核心,30秒计数器通过与按键联合控制整个购买过程;8秒计数控制饮料出口开关的自动开关,从而达到控制输出流量。
全文提供了投币信号处理,购买过程处理,开关流量控制几个主要控制模块的设计思路及方案。
基于vhdl自动售货机设计与实现说明书
长沙理工大学《计算机组成原理》课程设计报告基于VHDL的自动售货机设计与实现梁正凯学院计算机与通信工程专业网络工程班级网络工程08-02 学号200850250114学生姓名梁正凯指导教师蔡烁课程成绩完成日期2010年12月31日课程设计任务书计算机与通信工程学院网络工程专业课程设计成绩评定学院计算机通信工程专业网络工程班级网络08-02 班学号200858080219学生姓名梁正凯指导教师蔡烁课程成绩完成日期2010年12月31日指导教师对学生在课程设计中的评价指导教师对课程设计的评定意见基于VHDL的自动售货机设计与实现学生:梁正凯指导老师:蔡烁摘要:本设计运用VHDL语言编写一个自动售货机的控制系统,该系统具有货物信息存储,进程控制,硬币处理,余额计算,显示等功能。
商品的种类、单价和数量在初始化时输入,然后存储。
可以识别的币种为硬币,五毛和一元的面额。
用户投入硬币,系统累计数量,然后对比物品的单价和数量,扣除价格,最后计算余额,可以找零。
设计没有考虑硬件的实现,只进行功能的相应仿真,性质为实验性质的课程设计。
关键词:VHDL、自动售货机、课程设计、MXAPLUSⅡ、系统仿真Abstract: This design use of VHDL language design a vending machine control system, the system have the functions to storage the goods information, process control, coin handling, balance calculation, display and other functions. The type of goods, unit price and quantity in the initialization to be input, and then stored. Currency for the coins can be identified, fifty cents and one dollar denomination. User input coins, the system account sum, and then comparing the unit price and quantity of goods, net price, the final calculation of the balance, you can give change.Design did not consider the hardware implementation, only the corresponding functional simulation, experimental nature of the curriculum design.Keywords: VHDL, vending machines, curriculum design, MXAPLUS Ⅱ, system simulation目录1.引言 (7)1.1自动售货机系统概述 (7)1.2设计任务和主要内容 (8)2.系统设计过程 (9)2.1自动售货机系统总体框图 (9)2.2系统功能模块 (9)2.3程序源代码 (11)3.系统仿真 (15)3.1系统仿真全图 (15)3.2系统分步仿真图………………………………………...164.总结 (2)参考文献…………………………………………………………..211 引言随着现在生活节奏越来越快,自动售货机的出现大大方便了人们的日常生活。
北邮vhdl自动售货机实验报告(含代码)
《自动售货机》实验报告一.设计课程的任务要求基本要求:1.用2个数码管(disp5,disp4)显示钱数,以元为单位。
用3个按键(btn0,btn1,btn2)分别表示一元、五元、十元,每按一次按键,增加一次相应的钱数,上限99元。
2.再用3个按键(btn3,btn4,btn5)分别对应3种商品,其中,商品甲售价3元、商品乙售价8元、商品丙售价12元;3.买东西时,先输入钱币,再按对应的商品键。
每按一次商品键,钱数要相应地减少,同时有声光(蜂鸣器或发光二极管)提示购买成功。
剩余钱数大于3元可继续按商品键再次购买;当剩余钱数少于3元时,表示钱数的数码管disp5,disp4显示为零,同时用数码管disp0显示退出的钱数。
4.买东西时,按下商品键,若输入的钱数少于商品的价格,表示钱数的数码管disp5,disp4显示为零,同时用数码管(disp1、disp0)显示退出的钱数,并用蜂鸣器或发光二极管闪烁表示购买失败。
5.按下商品键时,用数码管disp2表示当前购买的商品,1代表商品甲,2代表商品乙,3代表商品丙。
6.用btn7做为退出功能键,退出键可以随时按下,按下后,数码管(disp5,disp4)显示为零,同时数码管(disp1、disp0)显示退出的钱数,表示结束购买,钱款全部退出。
提高要求:7.用点阵设计显示投币动画、出货动画,购买成功/失败动画;8.允许随时输入钱币,购买时,钱款不足有声光报警并等待追加钱币或选择别的商品;9.商品数量管理,有缺货提示;10.用点阵动态显示商品名称和库存数量等。
自拟其它功能二.系统设计(包括设计思路、总体框图、分块设计)1.设计思路:本实验为设计一个自动售货机。
由于本实验题目逻辑不太复杂,所以有两种设计思路可以选择。
第一种是用顺序结构和if when逻辑判断来实现。
第二种是用状态机来实现。
我选择的使用第一种。
总体来说可以将其分为两个大块。
第一个是接受键盘命令并通过逻辑判断向LED灯和数码管发出命令。
基于VHDL的自动售货机的设计与实现
自动售货机实验报告一、设计任务设计一个自动售货饮料机,设每瓶饮料元,投币口有两个,1元硬币(one)或5角硬币(half),每个时刻可以输入其中一种硬币,自动售货机有找零钱功能,oute为出货,outm 为找零。
二、设计过程1.设计思路:状态定义:s0表示初态,s1表示投入5角,s2表示投入1元,s3表示投入1元5角,s4表示投入2元,s5表示投入2元5角,s6表示投入3元。
输入信号:state_outputs(0)表示输入货物,comb_outputs(1)表示找5角硬币,输入信号为1 表示投入硬币,输入信号为1表示未投入硬币。
输出信号:comb_outputs(0)表示输出货物,comb_outputs(1)表示找5角零钱,输出信号为1表示输出货物或找零,输入信号为0表示不输出货物或找零。
根据设计要求分析,得到状态转化图如下图所示,其中状态为s0、S1、S2、S3、S4、S5、S6;输入为state_inputs(0,1);输出为comb_outouts(0,1);输入仅与状态有关,因此将输入写在状态圈内部。
002.设计步骤:(1)创建工程。
打开QuartusII,创建一个新的工程并命名。
根据实验室条件,选择的芯片为cyclone系列中的EP1C6Q240C8芯片。
输入VHDL文本文件。
新建文本文件VHDL file。
输入程序并保存。
程序如下:library ieee;use autosell isport(clk,reset :in std_logic;state_inputs:in std_logic_vector(0 to 1);comb_outputs:out std_logic_vector(0 to 1)); end autosell;architecture be of autosell istype fsm_st is(s0,s1,s2,s3,s4,s5,s6);signal current_state,next_state:fsm_st;beginreg:process(reset,clk)beginif reset='1'then current_state<=s0;elsif rising_edge(clk)thencurrent_state<=next_state;end if;end process;com:process(current_state,state_inputs)begincase current_state iswhen s0=>comb_outputs<="00";ifstate_inputs="00" then next_state<=s0;elsif state_inputs="01" then next_state<=s1;elsif state_inputs="10" then next_state<=s2; end if;when s1=>comb_outputs<="00";ifstate_inputs="00" then next_state<=s1;elsif state_inputs="01" then next_state<=s2;elsif state_inputs="10" then next_state<=s3; end if;when s2=>comb_outputs<="00";ifstate_inputs="00" then next_state<=s2;elsif state_inputs="01" then next_state<=s3;elsif state_inputs="10" then next_state<=s4; end if;when s3=>comb_outputs<="00";ifstate_inputs="00" then next_state<=s3;elsif state_inputs="01" then next_state<=s4;elsif state_inputs="10" then next_state<=s5; end if;when s4=>comb_outputs<="00";ifstate_inputs="00" then next_state<=s4;elsif state_inputs="01" then next_state<=s5;elsif state_inputs="10" then next_state<=s6;end if;when s5=>comb_outputs<="10";ifstate_inputs="00" then next_state<=s0;elsif state_inputs="01" then next_state<=s1;elsif state_inputs="10" then next_state<=s2;end if;when s6=>comb_outputs<="11";ifstate_inputs="00" then next_state<=s0;elsif state_inputs="01" then next_state<=s1;elsif state_inputs="10" then next_state<=s2;end if;end case;end process;end be;(2)编程序。
基于VHDL的自动售货机的设计
自动售货机的设计与实现摘要:本文介绍了VHDL的特点和应用,以自动售货机为例,详细说明了其实现过程。
本系统使用VHDL 语言编写,用状态基来实现各功能,使用MAXPLUSⅡ进行仿真,模拟各模块的实现。
本文详细介绍如何运用VHDL语言及MAXPLUSⅡ进行仿真,本文设计的自动售货机实现了选择货物,投币,找零,显示,多次交易,在一次购买中选择多个货物等自动售货机的基本功能。
本文给出了各个模块的源程序、各模块的连接图以及各个模块的仿真图,并做出了详细的分析。
关键词:VHDL语言,MAXPLUSⅡ,自动售货机Design and implementation of vending machine Electronics and Information Science and Technology Candidate:JiangHuiAdvisor:CaiJianhuaAbstract: This article introduces the characteristics and application of VHDL, with a example of designing vending machines, describes detailedly the implementation process. The system uses the VHDL language, realizing every function uses state machines, applying MAXPLUS Ⅱto simulate in order to realize the function every modules.This article describes the use of VHDL language and MAXPLUS Ⅱ simulation, to achieve the vending machine's basic functions , as choose good, coin, give change, buy good more than one time, choose more than one good in one time, display, and so on. This article gives the original program of every modules and the simulating diagram of every modules and the combination of all of the modules, gives detail analyse of every simulating diagram as well.Keywords:VHDL language,MAXPLUSⅡ,Vending machine引言随着科技的发展和社会的进步,自动化商业机械有了越来越广泛的应用,自动售货机作为自动化商业机械的代表被广泛用于公共场所自动售货,给人们的生活带来了极大的方便。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
自动售货机 VHDL 程序与仿真1)自动售货机 VHDL 程序如下: -- 文件名: pl_auto1.vhd 。
--功能:货物信息存储,进程控制,硬币处理,余额计算,显示等功能。
-- 说明:显示的钱数 coin 的 以 5 角为单位。
--最后修改日期: 2004.3.23 。
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; coin0,coin1: in std_logic;price,quantity :in std_logic_vector(3 downto 0); item0 , act:out std_logic_vector(3 downto 0); y0,y1 :out std_logic_vector(6 downto 0); act10,act5 :out std_logic);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;signal item: std_logic_vector(1 downto 0); signal coin: std_logic_vector(3 downto 0); signalpri,qua:std_logic_vector(3 downto 0); signal clk1: std_logic; begincom:process(set,clk1)variable quan:std_logic_vector(3 downto 0); beginif set='1' then ram(conv_integer(item))<=price & quantity;act<="0000";--把商品的单价、数量置入到 RAMelsif clk1'event and clk1='1' then act5<='0'; act10<='0';--系统时钟--设定、买、选择、完成信号--5 角硬币、 1 元硬币 --价格、数量数据 --显示、开关信号--钱数、商品数量显示数据-- 定义 RAM --商品种类 --币数计数器 --商品单价、数量 --控制系统的时钟if coin0='1' thenif coin<"1001"thencoin<=coin+1; elsecoin<="0000";end if;elsif coin1='1' thenif coin<"1001"thencoin<=coin+2;else coin<="0000";end if;elsif sel='1' then item<=item+1; elsif get='1' then --投入5 角硬币,coin 自加1--投入1元硬币,coin 自加2--对商品进行循环选择--对商品进行购买if qua>"0000" and coin>=pri then coin<=coin-pri;quan:=quan-1;ram(conv_integer(item))<=pri & quan;if item="00" then act<="1000"; --购买时,自动售货机对4 种商品的操作elsifitem="01" then act<="0100";elsif item="10" then act<="0010";elsif item="11" then act<="0001";end if;end if; elsif finish='1' then if coin>"0001" then act10<='1';coin<=coin-2;elsif coin>"0000" then act5<='1'; coin<=coin-1;else act5<='0'; act10<='0';--此IFend if;elsif get='0' then act<="0000";for i in 4 to 7 looppri(i-4)<=ram (conv_integer(item))(i); --商品单价的读取end loop;for i in 0 to 3 loop quan(i):=ram(conv_integer(item))(i); -- 商品数量的读取end loop;end if;end if; qua<=quan;end process com;m32:process(clk) -- 此进程完成对32Mhz 的脉冲分频variable q: std_logic_vector( 24 downto 0);beginif clk'event and clk='1' then q:=q+1;end if;if q="111111111111111111111111" then clk1<='1';else clk1<='0';end if;end process m32;code0:process(item) --商品指示灯译码begincase item iswhen "00"=>item0<="0111";when "01"=>item0<="1011";when "10"=>item0<="1101";when others=>item0<="1110";end case;end process;code1: process (coin)begincase coin iswhen "0000"=>y0<="0000001";when "0001"=>y0<="1001111";when "0010"=>y0<="0010010";when "0011"=>y0<="0000110";when "0100"=>y0<="1001100";when "0101"=>y0<="0100100";when "0110"=>y0<="0100000";when "0111"=>y0<="0001111";when "1000"=>y0<="0000000";when "1001"=>y0<="0000100";when others=>y0<="1111111"; end case;end process;code2: process (qua)begincase qua iswhen "0000"=>y1<="0000001";when "0001"=>y1<="1001111";when "0010"=>y1<="0010010";when "0011"=>y1<="0000110";when "0100"=>y1<="1001100";when "0101"=>y1<="0100100";when "0110"=>y1<="0100000";when "0111"=>y1<="0001111";when "1000"=>y1<="0000000";when "1001"=>y1<="0000100";when others=>y1<="1111111"; end case; end process;end behav;( 2)程序仿真--钱数的BCD 到七段码的译码--单价的BCD 到七段码的译码clk图8.21.2 系统仿真全图图8.21.3 系统仿真图-预置部分图21.4 系统仿真图- 商品种类选择部分2图8.21.5 系统仿真图-投币部分易部分2。