您好,欢迎来到汇意旅游网。
搜索
您的当前位置:首页自动售货机系统(以此为准)

自动售货机系统(以此为准)

来源:汇意旅游网
硬件系统课程设计 题 目:学 生 姓 名:专 业:学 号:指 导 教 师:

自动售货机 孙偏偏

计算机科学与技术(师范) 20081201068 葛方振

日期:2010年 12月 30 日

自动售货机设计

摘 要:Verilog是广泛应用的硬件描述语言,可以用在硬件设计流程的建模、

综合和模拟等多个阶段。随着硬件设计规模的不断扩大,应用硬件描述语言进行描述的CPLD结构,成为设计专用集成电路和其他集成电路的主流。通过应用Verilog HDL对多功能电子钟的设计,达到对Verilog HDL的理解,同时对CPLD器件进行简要了解。

本文的研究内容包括: 简要介绍硬件描述语言VDHL以及EDA和FPGA和应用Verilog HDL对自动售货机进行设计。

关键词:自动售货机;硬件描述语言VHDL;EDA;FPGA

第1页

目 录

1 引 言..................................................................................................... 4 1.1 课题的背景、目的 ........................................................................ 4 1.2 课题设计环境 ................................................................................ 4 2 EDA,FPGA及VERILOG HDL简介 .............................................. 5 2.1 EDA说明 ....................................................................................... 5 2.2 FPGA介绍.....................................................................................7 2.3 VERILOG HDL硬件描述语言简介 ................................................. 8 3 应用VERILOG HDL描述的自动售货机 ........................................ 9 3.1 功能描述 ........................................................................................ 9 3.2 自动售货机外观示意图 ................................................................ 9 3.3 流程图..........................................................................................10. 3.4 原理图........................................................................................... 11 4 应用VERILOG HDL描述的自动售货机功能模块及仿真 ......... 13 4.1 产生退币闪烁信号处理电路模块 .............................................. 14 4.2 投入壹园硬币处理电路模块 ...................................................... 15 4.3 投入五角硬币处理电路模块.....................................................16 4.4 饮料选择处理电路模块.............................................................16 4.5 确认与取消处理电路模块......................................................17 4.6 退币处理电路模块..................................................................17 4.7 出货并计算存货处理电路模块..............................................18

第2页

4.8 部分仿真分析及结论 .................................................................. 20 5 结束语................................................................................................. 21 6 致谢 ..................................................................................................... 21

第3页

1 引 言

随着电子技术的发展,现场可编程门阵列FPGA和复杂可编程逻辑器件CPLD的出现,使得电子系统的设计者利用与器件相应的电子CAD软件,在实验室里就可以设计自己的专用集成电路ASIC器件。这种可编程ASIC不仅使设计的产品达到小型化、集成化和高可靠性,而且器件具有用户可编程特性,大大缩短了设计周期,减少了设计费用,降低了设计风险。目前数字系统的设计可以直接面向用户需求,根据系统的行为和功能要求,自上至下地逐层完成相应的描述﹑综合﹑优化﹑仿真与验证,直到生成器件,实现电子设计自动化。其中电子设计自动化(EDA)的关键技术之一就是可以用硬件描述语言(HDL)来描述硬件电路。VHDL是用来描述从抽象到具体级别硬件的工业标准语言,它是由美国国防部在80年发的HDL,现在已成为IEEE承认的标准硬件描述语言。VHDL支持硬件的设计、验证、综合和测试,以及硬件设计数据的交换、维护、修改和硬件的实现,具有描述能力强、生命周期长、支持大规模设计的分解和已有设计的再利用等优点。利用VHDL这些优点和先进的EDA工具,根据具体的实际要求,我们可以自己来设计串口异步通信电路。

1.1 课题的背景、目的

二十一世纪是信息化高速发展的世纪,产业的信息化离不开硬件芯片的支持。芯片技术的进步是推动全球信息化的动力。因此在二十一世纪掌握芯片技术是十分有必要的。本次课题是计算机组成原理的课程设计,这次课题旨在通过自己对所需功能芯片的设计与实现来巩固以前所学的计算机硬件基础知识,同时也提高动手实践的能力,还有为将来进行更大规模更复杂的开发积累经验。

自动售货是20世纪70年代在日本、欧美发展起来的一种全新的消费方式,自动售货机又被称为24小时营业的微型自助超市,它的售货领域非常广泛,是发达国家商品零售的一种主要方式。自动售货机作为一种先进的消费方式,已经成为城市现代文明发达程度的重要标志,其新颖、时尚的购物方式,24小时营业的特点给人们生活带来了便利,美化了城市环境,受到消费者的欢迎。但是在我国自动售货机的普及还不及发达国家,主要原因是我国EDA技术的应用水平长期落后于发达国家。

1.2 课题设计环境

本次课题设计方要用到的开发环境是Altera公司的EDA设计工具软件MAX+plusII。

第4页

利用Altera公司的开发软件MAX+PLUS II平台,采用VHDL硬件描述语言编程的设计方法设计系统核心电路的硬件程序,与一般的软件开发不同,VHDL编程更需要熟悉一些底层的硬件知识,特别是数字逻辑电路的设计,因此VHDL编程的方法、思路都要更多的与硬件电路联系起来。完成系统各个功能模块的硬件程序设计后,在软件平台上进行编译和电路仿真,最后生成的目标文件下载到实验台内的FPGA芯片以实现该系统,并在实验台上对设计进行验证。FPGA设计工具用的是Xilinx ISE 6.2。

2EDA,FPGA2.1 EDA说明

及VERILOG HDL简介

EDA技术是在电子CAD技术基础上发展起来的计算机软件系统,是指以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理及智能化技术的最新成果,进行电子产品的自动设计。

利用EDA工具,电子设计师可以从概念、算法、协议等开始设计电子系统,大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出IC版图或PCB版图的整个过程在计算机上自动处理完成。

现在对EDA的概念或范畴用得很宽。包括在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有EDA的应用。目前EDA 技术已在各大公司、企事业单位和科研教学部门广泛使用。例如在飞机制造过程中,从设计、性能测试及特性分析直到飞行模拟,都可能涉及到EDA技术。本文所指的EDA技术,主要针对电子电路设计、PCB设计和IC设计。EDA 设计可分为系统级、电路级和物理实现级。

2.1.1 EDA常用软件

EDA工具层出不穷,目前进入我国并具有广泛影响的EDA软件有:EWB、PSPICE、OrCAD、PCAD、Protel、Viewlogic、Mentor、Graphics、Synopsys、LSIlogic、Cadence、MicroSim等等。这些工具都有较强的功能,一般可用于几个方面,例如很多软件都可以进行电路设计与仿真,同时以可以进行PCB自动布局布线,可输出多种网表文件与第三方软件接口。下面按主要功能或主要应用场合,分为电路设计与仿真工具、PCB设计软件。电子电路设计与仿真工具包括SPICE/PSPICE;EWB;Matlab;SystemView;MMICAD等。下面简单介绍前三个软件。SPICE(Simulation Program with Integrated Circuit Emphasis) 是由美国加州大学推出的电路分析仿真软件,是20世纪80年代世界上应用最广的电

第5页

路设计软件,1998年被定为美国国家标准。1984年,美国MicroSim公司推出了基于SPICE的微机版PSPICE(Personal—SPICE)。现在用得较多的PSPICE6.2, EWB(Electronic Workbench)软件 是Interactive ImageTechnologies Ltd 在20世纪90年代初推出的电路仿真软件。目前普遍使用的是EWB5.2,相对于其它EDA软件,它是较小巧的软件(只16M)。但它对模数电路的混合仿真功能却十分强大,几乎100%地仿真出真实电路的结果,并且它在桌面上提供了万用表、示波器、信号发生器、扫频仪、逻辑分析仪、数字信号发生器、逻辑转换器和电压表、电流表等仪器仪表。它的界面直观,易学易用。MATLAB产品族 它们的一大特性是有众多的面向具体应用的工具箱和仿真块,包含了完整的函数集用来对图像信号处理、控制系统设计、神经网络等。 PCB(Printed—Circuit Board)设计软件种类很多,如Protel; OrCAD;Viewlogic; PowerPCB; Cadence PSD;MentorGraphices的Expedition PCB;Zuken CadStart;

Winboard/Windraft/Ivex-SPICE;PCB Studio; TANGO等等。目前在我国用得最多应属Protel

2.1.2 EDA的应用及发展趋势

EDA在教学、科研、产品设计与制造等各方面都发挥着巨大的作用。 在教学方面,几乎所有理工科(特别是电子信息)类的高校都开设了EDA课程。主要是让学生了解EDA的基本概念和基本原理、掌握用HDL语言编写规范、掌握逻辑综合的理论和算法、使用EDA工具进行电子电路课程的实验并从事简单系统的设计。一般学习电路仿真工具(如EWB、PSPICE)和PLD开发工具(如Altera/Xilinx的器件结构及开发系统),为今后工作打下基础。

科研方面主要利用电路仿真工具(EWB或PSPICE)进行电路设计与仿真;利用虚拟仪器进行产品测试;将CPLD/FPGA器件实际应用到仪器设备中;从事PCB设计和ASIC设计等。

从目前的EDA技术来看,其发展趋势是重视、使用普及、应用文泛、工具多样、软件功能强大。

中国EDA市场已渐趋成熟,不过大部分设计工程师面向的是PC主板和小型ASIC领域,仅有小部分(约11%)的设计人员研发复杂的片上系统器件。为了与和美国的设计工程师形成更有力的竞争,中国的设计队伍有必要购入一些最新的EDA技术。

在信息通信领域,要优先发展高速宽带信息网、深亚微米集成电路、新型元器件、计算机及软件技术、第三代移动通信技术、信息管理、信息安全技术,积极开拓以数字技术、网络技术为基础的新一代信息产品,发展新兴产业,培育新的经济增长点。要大力推进制造业信息化,积极开展计算机辅助设计(CAD)、计算机辅助工程(CAE)、计算机辅助工艺(CAPP)、计算机机辅助制造(CAM)、产品数据管理(PDM)、制造资源计划(MRPII)及企业资源管理(ERP)等。有条件的企业可开展“网络制造”,便于合作设计、合作制造,参与国内和国际竞争。开展“数控化”工程和“数字化”工程。自动化仪表的技术发展趋势的测试技术、控制技术与计算机技术、通信技术进一步融合,形成测量、控制、通信与计算机

第6页

(M3C)结构。在ASIC和PLD设计方面,向超高速、高密度、低功耗、低电压方向发展。

在EDA软件开发方面,目前主要集中在美国。但各国也正在努力开发相应的工具。日本、韩国都有ASIC设计工具,但不对外开放 。中国华大集成电路设计中心,也提供IC设计软件,但性能不是很强。相信在不久的将来会有更多更好的设计工具有各地开花并结果。据最新统计显示,中国和印度正在成为电子设计自动化领域发展最快的两个市场,年复合增长率分别达到了50%和30%。 EDA技术发展迅猛,完全可以用日新月异来描述。EDA技术的应用广泛,现在已涉及到各行各业。EDA水平不断提高,设计工具趋于完美的地步。EDA市场日趋成熟,但我国的研发水平沿很有限,需迎头赶上。

2.2 FPGA介绍

FPGA是英文Field Programmable Gate Array的缩写,即现场可编程门阵列,它是在PAL、GAL、FPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路有限的缺点。

2.2.1 FPGA的基本特点

FPGA采用了逻辑单元阵列LCA这样一个新概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三个部分[7]。FPGA的基本特点主要有以下几点:

一、FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片。 二、FPGA可做其它全定制或半定制ASIC电路中的试样片。 三、FPGA内部有丰富的触发器和I / O引脚。

四、FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件。 可以说,FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。 目前FPGA的品种很多,有XILINX的XC系列、TI公司的TPC系列、ALTERA公司的FIEX系列等。

FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此,工作时需要对片内的RAM进行编程。用户可以根据不同的配置模式,采用不同的编程方式。

加电时,FPGA芯片将EPROM中的数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。FPGA的编程无须专用的FPGA编程器,只须用通用的EPROM、PROM编程即可。当需要修改FPGA功能时,只须换一块EPROM

第7页

即可。这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。因此,FPGA的使用非常灵活。

FPGA的配置模式非常灵活,它可以有多种配置方式:平行主模式为一片FPGA加一片EPROM的方式;主从模式为多片FPGA加一片PROM;串行模式可以采用串行PROM 编程FPGA;外设模式可以将FPGA作为微处理器的外设,由微处理器对其编程[8]。

2.2.2 FPGA的结构及其发展

当今社会是数字化的社会,是数字集成电路广泛应用的社会。数字集成电路本身在不断的进行更新换代。它由早期的电子管、晶体管、小中规模集成电路、发展到超大规模的集成电路以及许多具有特定功能的专用继承电路。但是,随着微电子技术的发展,设计与制作集成电路的任务已不完全由半导体厂商来承担。系统设计师们更愿意自己设计专用ASIC芯片,而且希望ASIC的设计周期尽可能短,最好是在实验室里就能设计出适合的ASIC芯片,并且立即投入实际应用之中,于是就出现了现场可编程逻辑器件(FPLD),其中应用最广泛的当属现场可编程门阵列(FPGA)和复杂可编程逻辑器件(CPLD)[9]。

选择信号代入语句:选择信号代入语句类似于CASE语句,它对表达式进行测试,当表达式取值不同时,将不同的值代入目的信号量。

并发过程调用语句:并发过程调用语句可以出现在构造体中,而且是一种可以在进程之外执行的过程调用语句。

块(BLOCK)语句:BLOCK语句是一个并发语句,而它所包含的一系列语句也是并发语句,而且块语句中的并发语句的执行与次序无关。

2.3 VERILOG HDL 硬件描述语言简介

硬件描述语言(HDL-Hardware Description Language)是一种用于设计硬件

电子系统的计算机语言,它用软件编程的方式来描述电子系统的逻辑功能、电路结构和连接形式,与传统的门级描述方式相比,它更适合大规模系统的设计。例如一个32位的加法器,利用图形输入软件需要输入500至1000个门,而利用VHDL语言只需要书写一行A=B+C即可,而且VHDL语言可读性强,易于修改和发现错误。早期的硬件描述语言,如ABEL-HDL、AHDL,是由不同的EDA厂商开发的,互相不兼容,而且不支持多层次设计,层次间翻译工作要由人工完成。为了克服以上缺陷,1985年 美国国防部正式推出了VHDL(Very High Speed

第8页

IC Hardware Description Language)语言,1987年IEEE采纳VHDL为硬件描述语言标准(IEEE STD-1076)。VHDL是一种全方位的硬件描述语言,包括系统行为级、寄存器传输级和逻辑门级多个设计层次,支持结构、数据流、行为三种描述形式的混合描述,因此VHDL几乎覆盖了以往各种硬件描述语言的功能,整个自顶向下或自底向上的电路设计过程都可以用VHDL来完成。另外,VHDL还具有以下优点:VHDL的宽范围描述能力使它成为高层次设计的核心,将设计人员的工作重心提高到了系统功能的实现与调试,只需花较少的精力用于物理实现。VHDL可以用简洁明确的代码描述来进行复杂控制逻辑的设计,灵活且方便,而且也便于设计 结果的交流、保存和重用。VHDL的设计不依赖于特定的器件,方便了工艺的转换。VHDL是一个标准语言,为众多的EDA厂商支持,因此移植性好。

3应用 VERILOG HDL 描述的自动售货机

3.1功能描述

本次设计的自动售货机只销售cola与pepsi两种饮料,售价均为1.5元。顾

客可以由两个不同投币孔分别投入5角硬币或1元硬币。一次交易只能购买一瓶,且自动找零。只要按下取消键就会马上无条件退币。

用两个按键电路代替两种币值的投币孔,以LED点亮的数量显示各投币种类的投入数量,在以4Hz闪烁的LED来显示退币种类与数量。本设计采用1024Hz的系统时钟信号来控制所有买卖行为。

六大功能模块分别为产生退币闪烁信号的电路模块;投入壹圆硬币的处理电路模块;投入五角硬币的处理电路模块;饮料选择处理电路模块;确认与取消处理电路模块;出货并计算存货电路模块。

实体定义了系统的输入输出端口信号,顾客由4种操作行为,即投币、选择、确定与取消。结构体定义功能模块之间整体共享的传递信号,以整合所有块的功能。这些信号将成为各个功能块外部输入或输出信号。

3.2自动售货机的外观示意图

第9页

Led_pepsi_ok Led_cola_ok Led_pepsi_sel Select_cola Select_pepsi Led_pepsi Ok_buy Led_buy Cancel_buy Led_cancel

Led_cola_out Led_pepsi_out Led_five_return Led_ten_return Led_five Led_ten 3.3流程图

开始 投入硬币 按下选择饮料按钮 出货 否 钱是否有剩余 是 按下退币按钮

第10页

3.4原理图

顶层设计图

第11页

第12页

内部结构图

4应用VERILOG HDL 描述自动售货机功能模块及仿真

第13页

4.1产生退币闪烁信号的处理模块

library ieee;

use ieee.std_logic_11.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity vendor is port(

reset :in std_logic; --系统内部给其他顾客重新操作的复位信号 clk :in std_logic;

--由外接信号发生器提供的1024Hz系统时钟信号

ok_buy :in std_logic; --购买确认的按键信号 cancel_buy :in std_logic; --购买取消的按键信号

coin_5 :in std_logic; --投入五角硬币的动作按键 coin_10 :in std_logic; --投入壹圆硬币的动作按键 select_cola :in std_logic; --选择可口可乐的按键信号 select_pepsi :in std_logic; --选择百事可乐的按键信号 led_cola_ok :out std_logic; --灯亮显示还有可口可乐 led_pepsi_ok :out std_logic; --灯亮显示还有百事可乐

led_cola_sel :out std_logic; --灯亮显示可口可乐选择键被按 led_pepsi_sel :out std_logic; --灯亮显示百事可乐选择键被按 led_buy :out std_logic; --灯亮显示按了购买确认键 led_cancel :out std_logic; --灯亮显示按了购买取消键 led_five :out std_logic_vector(2 downto 0);

--3个LED,投入1个五角硬币亮一个LED

led_ten :out std_logic_vector(1 downto 0);

--2个LED,投入1个壹圆硬币亮一个LED

led_five_return :out std_logic_vector(2 downto 0);

--3个LED,以每秒4次的闪烁代表退出的硬币

led_ten_return :out std_logic_vector(2 downto 0);

--2个LED,以每秒4次的闪烁代表退出的硬币

led_cola_out :out std_logic;--灯亮显示可口可乐已出货 led_pepsi_out :out std_logic --灯亮显示百事可乐已出货 ); end;

architecture arch of vendor is

signal ok :std_logic;--用来维持ok_buy的状态 signal cancel :std_logic;--用来维持cancel_buy的状态 signal money_ok :std_logic;--投入金额正确

signal return_clk :std_logic;--退币的闪烁信号4Hz

signal cola_choice :std_logic;--用来维持select_cola的状态 signal pepsi_choice :std_logic;--用来维持select_pepsi的状态

第14页

signal total_amount_five:integer range 0 to 15;--五角硬币的累计投入金额 signal total_amount_ten :integer range 0 to 20;--壹圆硬币的累计投入金额 signal cola_out :std_logic;--可口可乐已经出货的信号 signal pepsi_out :std_logic;--百事可乐已经出货的信号 begin

return_clock:block --产生退币闪烁信号的电路模块 signal count:std_logic_vector(7 downto 0); begin

process(reset,clk) begin

if reset='1' then count<=\"00000000\"; --高电平复位 return_clk<='0';

elsif rising_edge(clk) then --时钟上升沿有效 count<=count+\"00000001\";

if count(7)='1' then return_clk<='1';-- 退币 else return_clk<='0'; end if; end if; end process; end block;

4.2投入壹园硬币处理电路模块

coin_10_counting:block --投入壹圆硬币的处理电路模块 signal no_coin_ten:integer range 0 to 2; begin

process(reset,coin_10) begin

if reset='1' then total_amount_ten<=0; --复位 no_coin_ten<=0; led_ten<=\"00\";

elsif rising_edge(coin_10) then --按下投入一元硬币的按钮 total_amount_ten<=total_amount_ten+10; if no_coin_ten<2 then --投入一元钱

led_ten(no_coin_ten)<='1'; --灯亮几盏表示投入多少个硬币 no_coin_ten<=no_coin_ten+1;

else no_coin_ten<=2; --投入两元钱 end if; end if; end process; end block;

第15页

4.3投入五角硬币处理电路模块

coin_5_counting:block --投入五角硬币的处理电路模块 signal no_coin_five:integer range 0 to 3; begin

process(reset,coin_5) begin

if reset='1' then total_amount_five<=0; --复位 no_coin_five<=0; led_five<=\"000\"; elsif rising_edge(coin_5) then --按下投入五角钱硬币的按钮 total_amount_five<=total_amount_five+5; if no_coin_five<3 then --投入0.5—1元钱 led_five(no_coin_five)<='1'; no_coin_five<=no_coin_five+1;

else no_coin_five<=3; --投入多与1.5元 end if; end if; end process; end block;

4.4饮料选择处理电路模块

select_drink:block --饮料选择处理电路模块 begin

process(reset,clk) begin

if reset='1' then led_cola_sel<='0'; --复位 led_pepsi_sel<='0'; elsif rising_edge(clk) then --时钟上升沿 if select_cola='1' then --选择可乐

led_cola_sel<='1'; --相应的信号灯亮 cola_choice<='1'; --维持选择状态 led_pepsi_sel<='0'; end if;

if select_pepsi='1' then --选择百事 led_cola_sel<='0';

pepsi_choice<='1'; --维持选择状态 led_pepsi_sel<='1'; --相应的灯亮 end if; end if; end process; end block;

第16页

4.5确认与取消处理电路模块

ok_or_cancel:block --确认与取消处理电路模块 begin

p1:process(reset,ok_buy) begin

if reset='1' then ok<='0'; --复位 led_buy<='0';

elsif rising_edge(ok_buy) then --按确认按钮 ok<='1'; --维持状态 led_buy<='1'; --确认灯亮 end if; end process;

p2:process(reset,cancel_buy) begin

if reset='1' then cancel<='0'; --复位 led_cancel<='0';

elsif rising_edge(cancel_buy) then --按取消键 cancel<='1'; --维持状态 led_cancel<='1'; --取消灯亮 end if; end process; end block;

4.6退币处理电路模块

coin_returned:block --退币处理电路模块 signal total_amount:integer range 0 to 35; begin

process(reset,clk) begin

if reset='1' then --复位 total_amount<=0; money_ok<='0';

led_five_return<=(others=>'0'); led_ten_return<=(others=>'0');

elsif rising_edge(clk) then --时钟上升沿

total_amount<=total_amount_ten+total_amount_five;

--投入总钱数,十进制,单位角

if total_amount>=15 then money_ok<='1';--投入1.5元,正确 else money_ok<='0'; end if;

if (cancel='1') then --取消购买

第17页

for i in 0 to 2 loop

led_five_return(i)<=return_clk; --退五角钱 end loop;

for i in 0 to 1 loop

led_ten_return(i)<=return_clk; --退一元 end loop;

elsif (pepsi_out='1' or cola_out='1') then case total_amount is

when 0 to 14=>for i in 0 to 2 loop --钱数不够1.5元,退钱 led_five_return(i)<=return_clk; end loop;

for i in 0 to 1 loop

led_ten_return(i)<=return_clk; end loop;

when 15=>null; --投入等于1.5元

when 20=>led_five_return(2)<=return_clk;

--投入两元,退回一个0.5元硬币

when 25=>led_ten_return(0)<=return_clk;

--投入2.5元,退回一个一元硬币

when 30=>led_ten_return(1)<=return_clk;

--投入3元,退回一个一元硬币

led_five_return(1)<=return_clk; --一个0.5元硬币 when others=>led_ten_return(0)<=return_clk; led_ten_return(1)<=return_clk; end case; end if; end if; end process; end block;

4.7出货并计算存货电路模块

give_check:block --出货并计算存货电路模块 signal no_cola:integer range 0 to 20; signal no_pepsi:integer range 0 to 20; begin

cola_out<='1' when (money_ok='1' and ok='1' and cola_choice='1') else '0';

led_cola_out<=cola_out; --可乐出货灯亮

pepsi_out<='1' when (money_ok='1' and ok='1' and pepsi_choice='1') else '0';

led_pepsi_out<=pepsi_out; --百事出货灯亮 cola:process(reset,cola_out) begin

第18页

if reset='1' then no_cola<=20; --复位 led_cola_ok<='1';

elsif rising_edge(cola_out) then --可乐卖出 no_cola<=no_cola-1; --卖出一个计一次数

if no_cola=0 then led_cola_ok<='0'; --可乐全部售出 else led_cola_ok<='1'; --还有存货 end if; end if; end process;

pepsi:process(reset,pepsi_out) begin

if reset='1' then no_pepsi<=20; --复位 led_pepsi_ok<='1'; elsif rising_edge(pepsi_out) then --百事卖出

no_pepsi<=no_pepsi-1; --卖出一个计一次数

if no_pepsi=0 then led_pepsi_ok<='0'; --百事全部售出 else led_pepsi_ok<='1'; --还有存货 end if; end if; end process; end block;

end arch;

第19页

4.8部分仿真及分析

clk Reset Coin_5 Coin_10 Select_cola Led_cola_sel Ok_buy Led_buy Led_cola_ok Cancel_buy Led_cancel Led_five_return Led_cola_out

上图所示为本次实验的部分仿真结果,所演示的是假设cola不缺货,用户第一次购买的是cola,继续购买投入两枚五角钱硬币,发现钱不够要求退币的过程。对上图要说明几点:

1) 本次设计的售货机是由主时钟clk控制的,而且上升沿有效,所以当

用户按下Select_cola按钮之后,在clk的上升沿到来之前,led_cola_sel灯不亮,在下一个clk上升沿到来时才亮。

2) 用户按下 ok_buy按钮的同时,clk上升沿到来,由于上图为设计仿

真,不考虑机器的反应时间,所以灯led_ok同一时刻亮起。

3) 该设计采用的主时钟频率为1024Hz,而设计中执行退币操作时,灯

led_cancel的闪烁频率为4Hz,所以在上图中不予以体现。

第20页

5 结束语

这个设计实现了一个简单的自动售货机的功能,程序由硬件描述语言vhdl编写。程序中采用分块编写的方式,将一个本来复杂的体系用简单的逻辑表述出来。主时钟配合各个模块产生不同的信号,以这些信号为桥梁分别控制各个模块,这样做设计显得很流畅,每个成员都不是存在的。

6 致谢

在这次课程设计中,非常感谢课程设计老师葛老师的指导。在课程设计

中遇见的课题中的很多技术问题,葛老师能给予认真的指导,并培养我们自立的能力,让我们对自学能力有了很高的提高,在各方面,提高了我们的主动积极性。

最后,再次感谢葛老师给予我们很多方面的指导和帮助,感谢在淮北师

范大大学计算机机房所提供的试验条件,由于他们对工作的热情度以及对我们的关心,谢谢同学的相互帮助,感谢有了这些,我才能很好的顺利的完成我的这次课程设计。

参考文献

[1] 张振荣,晋明武等.MCS-51单片机原理及实用技术[M].北京:人民邮电出版社,2000. [2] 周兴华.手把手教你学单片机[M].北京:北京航空航天大学出版社,2005. [3]褚振勇,翁木云.FPGA设计及应用[M].西安:电子科技大学出版社,2002.

[4] 王新梅,肖国镇.纠错码——原理与方法(修订版) [M].电子科技大学出版社,2001. [5]《可编程逻辑器件与EDA技术》主编:李景华,杜玉远

第21页

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- hids.cn 版权所有 赣ICP备2024042780号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务