自动售货机VHDL设计
基于VHDL语言自动售货机设计实验报告-绝对原创
自动售货机设计实验报告一设计题目:g) 自动售货机设计FPGA模块模拟自动售货机的工作过程,要求如下(1)售货机有两个进币孔,可以输入硬币和纸币,售货机有两个进币孔,一个是输入硬币,一个是输入纸币,硬币的识别范围是5角和1 元的硬币,纸币的识别范围是1 元、5 元,10 元,20元,50元,100元。
乘客可以连续多次投入钱币。
(2)顾客可以选择的商品种类有16种,价格分别为1-16元,顾客可以通过输入商品的编号来实现商品的选择。
即有一个小键盘(0-9按键)来完成,比如输入15时要先输入1,再输入5。
(3)顾客选择完商品后,可以选择需要的数量。
然后可以继续选择商品及其数量,每次可以选择最多三个商品。
然后显示出所需金额。
顾客此时可以投币,并且显示已经投币的总币值。
当投币值达到或超过所需币值后,售货机出货,并扣除所需金额,并找出多余金额。
在投币期间,顾客可以按取消键取消本次操作,钱币自动退出。
二程序代码:三程序实现功能:FPGA模块模拟自动售货机:(1)售货机有两个进币孔,分别输入硬币和纸币,硬币的识别范围是5角和1 元的硬币,纸币的识别范围是1 元、5 元,10 元,20元,50元,100元。
乘客可以连续多次投入钱币。
(2)顾客可以选择的商品种类有16种,价格分别为1-16元,顾客可以通过输入商品的编号来实现商品的选择。
(3)顾客选择完商品后,可以选择需要的数量。
然后可以继续选择商品及其数量,每次最多选择最种商品,每种商品最多购买三个。
然后显示出所需金额。
顾客此时可以投币,并且显示已经投币的总币值。
当投币值达到或超过所需币值后,售货机出货,并扣除所需金额,并找出多余金额。
在投币期间,顾客可以按取消键取消本次操作,钱币自动退出。
四程序功能模块分析:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;实体说明:entity sellor isport ( clk:in std_logic; --系统时钟sel,cancel,reset: in std_logic; --选择、取消、开始(用于进入初始状态)变量定义:coin: in std_logic_vector(1 downto 0); --5角硬币、1元硬币crash:in std_logic_vector(5 downto 0); --100元、50元、20元、10元、5元、一元纸币item: in std_logic_vector(3 downto 0); --16种商品quantity:in std_logic_vector(1 downto 0); --商品数量(一次最多购买3件)change_out :out std_logic_vector(10 downto 0); --找零item_out :out std_logic_vector(3 downto 0); --是否购买了商品(1表示有商品出来、0表示没有商品出来)change :out std_logic ); --是否有找零end sellor;结构体说明:architecture behave of sellor issignal price:std_logic_vector(7 downto 0);signal counter: std_logic_vector(10 downto 0); --币数计数器signal total_price:std_logic_vector(10 downto 0); --控制系统的时钟信号type state_type is (initial_state,item1_state,quantity_state,money_state,sell_state,change_state);signal state:state_type;signal temp:std_logic_vector(1 downto 0);signal quan:std_logic_vector(3 downto 0);begincom:process(reset,sel,clk)beginif (clk'event and clk='1')thenif reset='1' then state<=initial_state;temp<="00";quan<="0000";end if;case state iswhen initial_state=>item_out<="0000"; --出票口关闭change_out<="00000000000"; --找零口关闭total_price<="00000000000"; --票价总额记录清零counter<="00000000000";--投入钱币总额记录清零change<='0';state<=item1_state; 设定initial_state选择物品程序:when item1_state=>if temp<"11" thenelse state<=money_state;end if;when quantity_state=>if(cancel='1')then --按下“取消”按钮state<=initial_state;else 取消操作程序if quantity="00" thenitem_out<="0000";change<='0';change_out<="00000000000";state<=initial_state;else 当选择0个商品total_price<=total_price+price*quantity;temp<=temp+1;quan<=quan+quantity;if (sel='1') then state<=item1_state;elsestate<=money_state;end if;end if;end if;货币识别:when money_state=>if(cancel='1')then --按下“取消”按钮state<=initial_state;end if;case crash is --纸币识别end case;case coin is --硬币识别end case;if counter>=total_price thenstate<=sell_state;--系统进入出票状态end if;购物操作程序:when sell_state =>if(cancel='1')thenitem_out<="0000";change<='1';change_out<=counter; --按下“取消”按钮state<=initial_state;elseif counter>=total_price thenitem_out<=quan; --判断是否还有找零state<=change_state; --系统进入找零状态elseitem_out<="0000";state<=initial_state;end if;end if;when change_state=>if(cancel='1')thenitem_out<="0000";change<='1';change_out<=counter; --按下“取消”按钮state<=initial_state;elseif counter>total_price thenchange<='1';change_out<=counter-total_price;item_out<=quan;elsechange<='0';change_out<="00000000000";state<=initial_state;end if;end if;end case;end if;end process;end behave;五、仿真波形六、个人总结与感想:良好的沟通与分工是十分重要的,这对程序的实现和质量具有至关重要的作用。
自动售货机VHDL设计
型状态机设计, 设计。 例6.15: Moore型状态机设计,完成自动售货机 : 型状态机设计 完成自动售货机VHDL设计。 设计 要求:有两种硬币: 元和 元和5角 投入1元 角硬币输出货物 角硬币输出货物, 要求:有两种硬币:1元和 角,投入 元5角硬币输出货物,投入 2元硬币输出货物并找 角零钱。 元硬币输出货物并找5角零钱 元硬币输出货物并找 角零钱。 状态定义: 表示初态 表示初态, 表示投入 角硬币, 表示投入 表示投入5角硬币 表示投入1元硬 状态定义:S0表示初态,S1表示投入 角硬币,S2表示投入 元硬 表示投入1元 角硬币 角硬币, 表示投入 元硬币。 表示投入2元硬币 币,S3表示投入 元5角硬币,S4表示投入 元硬币。 表示投入 输入信号: 表示投入1元硬币 输入信号:state_input (0)表示投入 元硬币,state_input (1)表示 表示投入 元硬币, 表示 投入5角硬币 输入信号为1表示投入硬币 输入信号为0表示未 角硬币。 表示投入硬币, 投入 角硬币。输入信号为 表示投入硬币,输入信号为 表示未 投入硬币。 投入硬币。 输出信号: 表示输出货物, moore 输出信号:comb_outputs (0)表示输出货物, comb_outputs (1)表 表示输出货物 表 reset 示找5角零钱 输出信号为1表示输出货物或找钱 输入信号为0 角零钱。 表示输出货物或找钱, 示找 角零钱。输出信号为 表示输出货物或找钱,输入信号为 current state_inputs _state clk 表示不输出货物或不找钱。 表示不输出货物或不找钱。 state_inputs next_st 根据设计要求分析,得到状态转换图如图所示。状态S0、 、 根据设计要求分析,得到状态转换图如图所示。状态 、S1、
基于VHDL的自动售货机的设计和实现论文
《计算机组成原理》课程设计报告基于VHDL的自动售货机设计与实现课程设计任务书计算机与通信工程学院网络工程专业指导教师对学生在课程设计中的评价指导教师对课程设计的评定意见基于VHDL的自动售货机设计与实现摘要:本设计运用VHDL语言编写一个自动售货机的控制系统,该系统具有货物信息存储,进程控制,硬币处理,余额计算,显示等功能。
商品的种类、单价和数量在初始化时输入,然后存储。
可以识别的币种为硬币,五毛和一元的面额。
用户投入硬币,系统累计数量,然后对比物品的单价和数量,扣除价格,最后计算余额,可以找零。
设计没有考虑硬件的实现,只进行功能的相应仿真,性质为实验性质的课程设计。
关键词:VHDL、自动售货机、课程设计、MXAPLUSⅡ、系统仿真Abstract: This design use of VHDL language design a vending machine control system, the system have the functions to storagethe 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系统分步仿真图 (16)4.总结 (20)参考文献 (21)1 引言随着现在生活节奏越来越快,自动售货机的出现大大方便了人们的日常生活。
自动售货机电路设计VHDL
郑州轻工业学院课程设计任务书题目自动售货机电路设计专业、班级电信2班学号 541101030217 姓名李磊主要内容、基本要求、主要参考资料等:查阅资料完成自动售货机的设计思路,利用硬件编程语言VHDL 或者Verilog-HDL来实现,要求能够识别100元、50元、10元、5元及其钢崩1元五种面值的设计,能够找零,设计中假设找零货贝充裕,货物的价格不允许出现0.5元的情况。
给出完成控制电路所需要的设计模块;给出硬件编程语言的实现,并进行仿真;给出下载电路的设计,设计为2种下载方法,其中一种必须为JTAG;同时设计者报告不允许雷同。
参考资料:1、潘松、黄继业《EDA技术及其应用》(第四版)科学出版社 20092、数字信号处理的教材完成期限:指导教师签名:课程负责人签名:摘要随着电子技术的发展,当今数字系统的设计正朝着速度快,容量大,体积小,重量轻的方向发展,推动该潮流迅猛发展的引擎就是日趋进步和完善的ASIC设计技术,AISC芯片具有价格低,体积小,可靠性高等优点,目前在电子产品中已有广泛的应用,VHDL是一种用来描述数字逻辑系统的“编程语言”,它通过对硬件行为的直接描述来实现对硬件的物理实现,代表了当今硬件设计的发展方向。
本文是在VHDL的基础上对自动售货机进行设计来实现其基本功能的,采用了Altera的开发软件Quarts II。
通过在该软件平台上进行数字电路设计和仿真的方法,阐述了VHDL(Very High Speed Integrated Circuit Hardware Description Language)超高速集成电路硬件描述语言的一些特点及语法结构,介绍了自动售货机的基本原理、系统组成和主要功能,并分析讨论了用VHDL语言开发自动售货机系统的设计流程。
本设计采用VHDL硬件描述语言编程的设计方法设计系统核心电路的硬件程序,在Quartus II软件平台上进行编译和仿真。
文章首先简述了自动售货机系统的意义和发展现状以及VHDL语言的特点,然后介绍了自动售货机的设计要求、设计思路,并给出了总体设计框图,通过分析设计写出VHDL程序源代码,将代码在Quartus II软件平台上进行编译仿真,波形基本符合设计要求。
EDA实验报告---自动售货机
自动售货机的设计一.实验内容:本自动售货机系统,结合EDA技术,采用ALTERA公司可编程逻辑器件(CPLD)EPM7128SLC84-15芯片作为控制核心,再配以必要的外围电路从而实现只销售两种饮料,售价均为15元,可以找零和退币等功能的EDA应用系统。
芯片的设计是以MAX_PLUS II 作为开发平台,VHDL语言作为开发语言,使用掌宇公司CIC_310 CPLD/FPGA数字开发系统完成软件测试。
自己制作下载板与外围电路。
二.实验分析:本自动售货机只销售两种罐装饮料。
售价均为15元。
顾客可以由两个不同投币孔分别投入3个5元硬币或2个10元硬币。
一次交易只能买一罐,且自动找零。
只要按下取消键就会马上无条件退币。
本设计的硬件电路用2个按键电路代替2个投币孔,以LED点亮的数量显示各币种的投入数量,在以4Hz闪烁的LED来显示退币种类与数量。
因为投币是计次电路,应先经过抖动消除电路处理。
本设计采用1000Hz的系统时钟信号来控制所有买卖行为。
系统中设计的复位键为管理人员所用,并未在用户界面中设计。
三.系统设计流程图:四.自动售货机外观图:(为指示灯)五.电路原理图六.PCB图:根据PROTEL99画的系统原理图,成生PCB图。
然后进行布局与布线。
注意:布线时将晶振这种易产生噪声的器件的输出端与芯片时钟输入端的连线尽量布为直线;将电源与地线的宽度定为30mil到100mil之间。
本系统的电流不是很大,所以不用将板子的两面分别布成电源与地。
七.系统实物图:八.软件系统框图九.源程序:1.产生系统频率和退币信号电路首先要根据硬件电路的晶振频率确定分频系数,先产生系统频率,在进一步分频产生退币信号。
由于掌宇公司的开发系统上的晶振频率为20MHz,所以要分频系数分别为20000(COUNT)和250(COUNT1)。
(注:由于在自制的下载板上使用了1MHz的有源晶振,所以把程序中的COUNT的范围改为0到1000即可。
基于VHDL的地铁自动售票机系统设计
毕业设计说明书(论文)作者: 学号:系:专业:题目: 基于VHDL的地铁自动售票机系统设计指导者:(姓名) (专业技术职务)评阅者:(姓名) (专业技术职务)2014 年 5 月毕业设计(论文)评语学生姓名:班级、学号:题目:综合成绩:毕业设计(论文)评语毕业设计说明书(论文)中文摘要毕业设计说明书(论文)外文摘要本科毕业设计说明书(论文)第Ⅰ页共Ⅰ页目次1 引言 (1)1.1 研究意义 (1)1.2 研究背景 (1)1.3 研究任务 (2)1.4 研究内容 (2)2 理论基础 (3)2.1 FPGA (3)2.2 VHDL语言 (4)2.3 QuartusⅡ软件 (6)3 课题设计 (9)3.1 设计要求 (9)3.2 系统分析与设计方案 (9)4 程序仿真 (16)4.1 自动售票机主控模块的波形仿真 (16)4.2 车票选择模块的波形仿真 (17)4.3 纸、硬币处理模块的波形仿真 (18)4.4 自动找零、出票模块的波形仿真 (19)4.5 整个售票机系统的波形仿真图 (20)5硬件验证 (22)5.1 上箱过程 (22)5.2 上箱结果 (23)结论 (25)致谢 (26)参考文献 (27)附录 (28)1 引言自动售票机主要的控制模块可以用多种语言设计完成。
但这些语言有较大的差异,不利于后期的修改和使用者之间的交流。
而VHDL语言是一种功能强大、标准化的硬件描述语言。
用VHDL语言设计程序时可以先分块编写再合并,所以能够编写出多层次的程序,与此同时,VHDL语言编写的程序避免了其他语言只能在各自环境中使用的缺陷。
本章主要讨论了地铁的起源、发展,以及随着社会的发展,为了简化购票流程,从而设计出了自动售票机来代替人工售票等。
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角的硬币。
另外设置一复位按钮,当复位按钮按下时,自动售货机回到初始状态。
自动售货机课程设计.
唐山学院《EDA技术》课程设计题目自动售货机控制器设计系 (部)班级姓名学号指导教师年月日至月日共周年月日《EDA技术》课程设计任务书课程设计成绩评定表目录1 引言 (1)2 VHDL介绍 (2)2.1硬件描述语言VHDL (2)2.2VHDL语言的特点 (3)3 Quartus II介绍 (4)3.1 Quartus II软件介绍 (4)3.2 Quartus II软件界面介绍 (4)3.2.1代码输入界面 (4)3.2.2编译界面 (5)3.2.3波形仿真界面 (5)4自动售货机控制器设计与仿真 (7)4.1设计内容 (7)4.2输入与输出说明 (7)4.3状态转换图 (8)4.4程序及仿真波形分析 (8)5引脚设定及下载分析 (18)5.1引脚设定 (18)5.2程序下载 (18)5.3结果分析 (19)6设计总结 (20)参考文献 (21)附录 (22)1 引言VHDL的英文全名是VHSIC(Very High Speed Integrated Circuit)Hardware Descriptiong Language, 翻译成中文就是超高速集成电路硬件描述语言,诞生于1982年。
1987年底,VHDL被美国国防部确认为标准硬件描述语言。
自IEEE公布了VHDL的标准版本,IEEE-1076之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。
1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL 的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本。
现在,VHDL和Verilog作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。
有专家认为,在新的世纪中,VHDL于Verilog语言将承担起大部分的数字系统设计任务。
目前,它在中国的应用多数是用在FPGA/CPLD/EPLD的设计中。
用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 为 工 具 描 述 了 完成程 序设 计 、编译及 时序 仿真 ,然 作
能 的 描述 , 可 以 由计 算机 软 件进 行 就
自动 售 货 机 控 制 模 块 的 逻 辑 控 制 电 后 将 经 过 验 证 的 设 计文 件 下 载 到 选 择
可 以 避 免 这 些 烦 琐 的 过 程 ,直 接 利 用
自动售货机控制系统的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。
自动售货机界面操作及显示 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自动售货机实验报告(含代码)
《自动售货机》实验报告一.设计课程的任务要求基本要求: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灯和数码管发出命令。
数字电路自动售货机实验报告
数字电路综合实验题目:简易自动售货机学院:信息与通信工程学院姓名:班级:学号:班内序号:1.设计课题的任务要求设计一个简易的自动售货机,能够完成钱数处理、找零、显示、退币等功能。
基本要求: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)显示退出的钱数,表示结束购买,钱款全部退出。
提高要求:允许随时输入钱币,购买时,钱款不足有声光报警并等待追加钱币或选择别的商品。
自拟功能:用点阵显示投入钱币的面值以及交易成功、失败的提示符。
2.系统设计(包括设计思路、总体框图、分块设计)2.1设计思路在设计系统时,我采用了自顶向下(top-down)设计法。
从自动售货机所要完成的功能出发,将整个系统划分成若干子系统:分频器(clkgen)、防抖单元(keyin)、控制器(automat)、译码显示器(decodingdisplay)(用数码管显示)以及点阵显示单元(dot_matrix)。
基于VHDL的自动售货机毕业设计
第
1.1
自动售货机是能根据投入的钱币自动付货的机器。自动售货机是商业自动化的常用设备,它不受时间、地点的限制,能节省人力、方便交易。是一种全新的商业零售形式,又被称为24小时营业的微型超市。能分为三种:饮料自动售货机、食品自动售货机、综合自动售货机。随着科技的发展以及人民生活水平的提高,人们需求一种全新的购物方式,这种方式不受人力时间的限制可随时随地更快捷方便地购买商品,自动售货机正能满足人们的这种需求。如今,在机场、地铁、商场、公园等客流较大的场所,不难发现自动售货机的身影。顾客只要插人几元的纸币或硬币,就可以方便地买到诸如饮料、口香糖等小东西。作为一种前卫的零售方式,自动售货机受到了喜欢追逐时尚的年轻人的欢迎。自动售货机具有技术含量高、销售方式新、市场潜力大、商品货真价实等优点,决定了它广阔的发展前景。而且,它与电子购物等新型消费方式相通,能创造巨大的商机,研究自动售货机是非常有价值的。随着科技的发展和社会的进步,自动化商业机械有了越来越广泛的应用,自动售货机作为自动化商业机械的代表被广泛用于公共场所自动售货,给人们的生活带来了极大的方便。特别在发达国家,自动售货机已经十分普及,自动售货机可售出各种成型包装小商品,各种袋装,盒装,软瓶装等小商品。在我国,由于多种原因,自动售货机的市场推广缓慢,处于培育阶段,但可以预见,这种方便快捷的服务形式因其适合现代生活快节奏的需要,在不久的将来必会获得大众的喜爱。随着商品市场的不断繁荣,自动售货机和自动服务设施必将逐步得到广泛的应用。
摘要
随着科学技术的飞速发展和市场的不断繁荣,各种投币式自动售货及服务机具已经风靡世界发达国家。这些采用现代电子技术和机电技术的自动服务设施,给人们的日常生活带来了极大的方便。
基于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的自动售货机设计
基于V H D L的自动售货机设计Newly compiled on November 23, 2020北华大学电子系统综合实习报告学院 : 电气信息工程学院专业班级 : 通信工程姓名 : 闫梦迪学号 :指导老师 : 董胜实习时间 : —目录1.实习题目……………………………………………………………P32.实习目的……………………………………………………………P33.实习技术要求………………………………………………………P34.实现过程……………………………………………………………P35.功能及代码…………………………………………………………P56.仿真及硬件测试……………………………………………………P97.实习心得…………………………………………………………P128. 教师评语…………………………………………………………P14一.实习题目自动售货机设计二.实习目的通过本课题的研究,可以掌握电子控制系统的基本原理与其实现,通过对各个模块的编程及其仿真,对QuartusII软件的使用有所了解。
每个波形模块的VHDL实现加深了硬件描述语言的学习。
最终的顶层文件的调试,更是体现了综合知识的运用。
三.实习技术要求本设计要实现自动售货机的基本功能,如货物信息存储、商品选择、进程控制、硬币处理、余额计算、显示等功能。
利用软件QuartusII平台,采用VHDL硬件描述语言编程的设计方法设计系统核心电路的硬件程序,与一般的软件开发不同,VHDL编程更需要熟悉一些底层的硬件知识,特别是数字逻辑电路的设计,因此VHDL编程的方法、思路都要更多的与硬件电路联系起来。
完成系统各个功能模块的硬件程序设计后,在软件平台上进行编译和电路仿真,最后生成的目标文件下载到实验台内的FPGA芯片以实现该系统,并在实验台上对设计进行验证。
四.实现过程1)、根据设计要求实现过程分两部分:a、面向客户端模块设计基于Quartus2软件环境下,应用VHEDL 语言进行程序设计。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
设计可以在实验箱上完成。 该moore.vhd设计可以在实验箱上完成。 设计可以在实验箱上完成 课设: 课设: 设计并制作一个投币取物机。完成自动售 设计并制作一个投币取物机。 货机VHDL设计。要求:有两种硬币:1元 设计。要求:有两种硬币: 元 货机 设计 角硬币输出货物, 或5角,投入 元5角硬币输出货物,投入 角 投入1元 角硬币输出货物 投入2 元硬币输出货物并找5角零钱。 元硬币输出货物并找 角零钱。 角零钱
ate
S2、S3和S4;输入 、 和 ;输入state_inputs(0,1);输出 ;输出comb_outputs(0,1);输 ; 出仅与状态有关,因此将输出写在状态圈内部。 出仅与状态有关,因此将输出写在状态圈内部。
状态定义: 表示初态 表示初态, 状态定义:S0表示初态, S1表示投入 角硬币,S2 表示投入5角硬币 表示投入 角硬币, 表示投入1元硬币 元硬币, 表 表示投入 元硬币,S3表 示投入1元 角硬币 角硬币, 表 示投入 元5角硬币,S4表 示投入2元硬币 元硬币。 示投入 元硬币。
when s2 =>comb_outputs<= "00"; --现态 现态s2 现态 if state_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<= "10"; --现态 ,输出 现态s3,输出10 现态 if state_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 s4 =>comb_outputs<= "11"; --现态 ,输出 现态s4,输出11 现态 if state_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;
6.3 有限状态机设计
有限状态机分类:根据状态机输出的不同, 有限状态机分类:根据状态机输出的不同,分 型和Moore型两种状态机。, 型两种状态机。, 类Mealy型和 型和 型两种状态机
Mealy型状态机:其输出是当前状态和输入信号的函数 型状态机: 型状态机 Moore型状态机:只是当前状态的函数。 型状态机:只是当前状态的函数。 型状态机
S0表示初 表示初态
状态/输出 状态 输出 元角/物零 元角 物零
2元硬币 元硬币
输入信号
5角硬币 角硬币
输出信号: 输出信号: comb_outputs (0)表示输 表示输 出货物, 出货物, comb_outputs (1)表示找 角零钱。输出 表示找5角零钱 表示找 角零钱。 信号为1表示输出货物或 信号为 表示输出货物或 找钱,输入信号为0表示 找钱,输入信号为 表示 不输出货物或不找钱。 不输出货物或不找钱。 根据设计要求分析,得到 根据设计要求分析, 状态转换图如图所示。 状态转换图如图所示。状 态S0、S1、S2、S3和S4; 、 、 、 和 ; 输入state_inputs(0,1);输 输入 ; 出comb_outputs(0,1);输 ; 出仅与状态有关,因此将 出仅与状态有关, 输出写在状态圈内部。 输出写在状态圈内部。
元角
输入信号: 输入信号: state_input (0)表示投入 表示投入1 表示投入 元硬币, 元硬币, state_input (1)表示投入 表示投入5 表示投入 角硬币。 角硬币。 输入信号为1表示投入硬 输入信号为 表示投入硬 输入信号为0表示未 币,输入信号为 表示未 投入硬币。 投入硬币。
com: process (current_state, state_Inputs) --组合进程 组合进程 begin S0/00 case current_state is 现态s0,输出00 when s0 => comb_outputs<= "00"; --现态 ,输出 现态 if --输入不同,次态不同 输入不同, 输入不同 state_inputs = "00" then next_state<=s0; --输入 ,次态 输入00,次态s0 输入 elsif state_inputs = "01" then next_state<=s1; --输入 ,次态 输入01,次态s1 输入 elsif state_inputs = "10" then next_state<=s2; --输入 ,次态 输入10,次态s2 输入 end if; S1/00 现态 ,输出 --现态 现态s1,输出00 when s1 =>comb_outputs<= "00"; if state_inputs = "00" then next_state<=s1; --输入不同,次态不同 输入不同, 输入不同 elsif state_inputs = "01" then next_state<=s2; elsif state_inputs = "10" then next_state<=s3; end if;
1元硬币 元硬币
1元5角 元 角
library ieee; use ieee.std_logic_1164.all; entity moore is port ( clk,reset : in std_logic; state_inputs : in std_logic_vector (0 to 1); comb_outputs : out std_logic_vector (0 to 1)); end moore;
moore reset clk state_inputs
current _state next_st ate
state_inputs
architecture be of moore is type fsm_st is (s0, s1, s2,s3,s4); signal current_state, next_state: fsm_st; begin reg: process (reset,clk) begin if reset = '1' then current_state <= s0; --发生 发生reset异步复位 发生 异步复位 elsif rising_edge(clk) then current_state <= next_state; end if; end process; --发生 时钟上升沿 发生clk时钟上升沿 发生 --进行状态转换 进行状态转换 --时序进程 时序进程 --状态的枚举类型定义 状态的枚举类型 状态的枚举类型定义 --状态信号的定义 状态信号的定义
有限状态机设计描述的组成部分:说明部分、 有限状态机设计描述的组成部分:说明部分、时序进 程、组合进程和辅助进程。 组合进程和辅助进程。 说明部分:进行状态机的状态名定义,其数据类型是 说明部分:进行状态机的状态名定义, 枚举类型。 枚举类型。 时序进程:说明在时钟信号的作用下, 时序进程:说明在时钟信号的作用下,状态是如何转 换的。 换的。 组合进程: 组合进程:根据输入信号和状态确定输出以及状态机 内部所需的控制信号。 内部所需的控制信号。 辅助进程:配合时序进程和组合进程,提供数据锁存 辅助进程:配合时序进程和组合进程, 等功能。 等功能。
moore.vhd仿真波形分析:输入为10时,表示投入一元硬币,状 仿真波形分析:输入为 时 表示投入一元硬币, 仿真波形分析 态由s0转换到 状态 当再次检测到投入一元硬币,则状态由s2 态由 转换到s2状态,当再次检测到投入一元硬币,则状态由 转换到 状态, 转换到s4状态,输出 ,表明输出货物且找零钱。 转换到 状态,输出11,表明输出货物且找零钱。如果检测到投 状态 入了3次 角硬币 状态变化顺序为s0→s1→s2→s3,到状态变化 角硬币, 入了 次5角硬币,状态变化顺序为 , 到s3时,输出 ,表明输出货物且不找零钱。 时 输出10,表明输出货物且不找零钱。
型状态机设计, 设计。 例6.15: Moore型状态机设计,完成自动售货机 : 型状态机设计 完成自动售货机VHDL设计。 设计 要求:有两种硬币: 元和 元和5角 投入1元 角硬币输出货物 角硬币输出货物, 要求:有两种硬币:1元和 角,投入 元5角硬币输出货物,投入 2元硬币输出货物并找 角零钱。 元硬币输出货物并找5角零钱 元硬币输出货物并找 角零钱。 状态定义: 表示初态 表示初态, 表示投入 角硬币, 表示投入 表示投入5角硬币 表示投入1元硬 状态定义:S0表示初态,S1表示投入 角硬币,S2表示投入 元硬 表示投入1元 角硬币 角硬币, 表示投入 元硬币。 表示投入2元硬币 币,S3表示投入 元5角硬币,S4表示投入 元硬币。 表示投入 输入信号: 表示投入1元硬币 输入信号:state_input (0)表示投入 元硬币,state_input (1)表示 表示投入 元硬币, 表示 投入5角硬币 输入信号为1表示投入硬币 输入信号为0表示未 角硬币。 表示投入硬币, 投入 角硬币。输入信号为 表示投入硬币,输入信号为 表示未 投入硬币。 投入硬币。 输出信号: 表示输出货物, moore 输出信号:comb_outputs (0)表示输出货物, comb_outputs (1)表 表示输出货物 表 reset 示找5角零钱 输出信号为1表示输出货物或找钱 输入信号为0 角零钱。 表示输出货物或找钱, 示找 角零钱。输出信号为 表示输出货物或找钱,输入信号为 current state_inputs _state clk 表示不输出货物或不找钱。 表示不输出货物或不找钱。 state_inputs next_st 根据设计要求分析,得到状态转换图如图所示。状态S0、 、 根据设计要求分析,得到状态转换图如图所示。状态 、S1、