基于eda的课程设计 自动售货机控制设计

更新时间:2024-05-13 22:36:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

eda 课 程 设 计

题 目 自动售卖机控制的设计 系 (部) 班 级 姓 名 学 号 指导教师

年 月 日至 月 周

年 月 日

共日

目录

1 引言............................................................................................................................ 1 2 EDA简介 ................................................................................................................... 2

2.1 EDA技术含义 ................................................................................................. 2 2.2 EDA技术相关概念 ......................................................................................... 2

2.2.1 “自顶向下”的设计方法 ......................................................................... 2 2.2.2 硬件描述语言........................................................................................ 2 2.2.3 系统框架结构........................................................................................ 3 2.3 EDA技术的基本特征 ..................................................................................... 3 3 Quartus II .................................................................................................................... 4

3.1 Quartus II简介 ................................................................................................. 4 3.2 Quartus II特点 ................................................................................................. 4 4 自动售货机的设计.................................................................................................... 6

4.1 自动售货机设计原理...................................................................................... 6

4.1.1 状态机原理分析.................................................................................... 6 4.1.2 状态转移图............................................................................................ 6 4.1.3 仿真图分析............................................................................................ 6 4.1.4 硬件封装图............................................................................................ 8

5 总结............................................................................................................................ 9 参考文献...................................................................................................................... 10 附录.............................................................................................................................. 11

1 引言

随着生活节奏的不断加快,自动化已经成为人们日常生活之中不可缺少的组成部分。自动柜员机,自动售货机机,自助缴费终端等以成为人们所喜爱的方式。 本文所设计的简易自动售货机,再接收到货币已输入的前提下,靠触摸控制按钮输入信号使控制器启动相关位置的机械装置完成规定动作,将货物输出。通过数码管显示商品的的价格、顾客已投币数以及找零,如果投入的币额足够时,则自动送出商品,并且把多余的钱找回,在数码管上显示出来。如果两者币的相等,则直接送出商品。如果投入的币额不足时则报警,报警时间3秒。当顾客一旦按下确认键3秒后,自动售货机将自动恢复到初始状态,此时顾客才可以进行下一次购货操作。另外设置一复位按钮,当复位按钮按下时,自动售货机回到初始状态。

此售货机还有商家控制的整体复位功能。该售货机使用方便,结构简单,灵活通用等优点,因此在销售业,食品产业得到广泛的应用。

因此,我在本次课程设计中选择了自动售货机这个课题。以Quartus为开发软件,以FPGA为硬件载体,设计并实现了自动售货机。

1

2 EDA简介

2.1 EDA技术含义

EDA是电子设计自动化(Electronic Design Automation)的缩写,EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。

2.2 EDA技术相关概念

2.2.1 “自顶向下”的设计方法

10年前,电子设计的基本思路还是选择标准集成电路\自底向上\(Bottom-Up)地构 造出一个新的系统,这样的设计方法就如同一砖一瓦地建造金字塔,不仅效率低、成本高而且还容易出错。高层次设计给我们提供了一种\自顶向下\(Top-Down)的全新的设计方法,这种设计 方法首先从系统设计入手,在顶层进行功能方框图的划分和结构设计。在方框图一级进行仿真、纠错,并用硬件描述语言对高层次的系统行为进行描述,在系统一级进行验证。然后用综合优化工具 生成具体门电路的网表,其对应的物理实现级可以是印刷电路板或专用集成电路。由于设计的主要 仿真和调试过程是在高层次上完成的,这不仅有利于早期发现结构设计上的错误,避免设计工作的 浪费,而且也减少了逻辑功能仿真的工作量,提高了设计的一次成功率。

2.2.2 硬件描述语言

硬件描述语言(HDL-Hardware Description Language)是一种用于设计硬件电子系统的计算机语言,它用软件编程的方式来描述电子系统的逻辑功能、电路结构和连接形式,与传 统的门级描述方式相比,它更适合大规模系统的设计。例如一个32位的加法器,利用图形输入软件 需要输入500至1000个门,而利用VHDL语言只需要书写一行A=B+C即可,而且VHDL语言可读性强, 易于修改和发现错误。早期的硬件描述语言,如ABEL-HDL、AHDL,是由不同的EDA厂商开发的,互 相不兼容,而且不支持多层次设计,层次间翻译工作要由人工完成。为了克服以上缺陷,1985年 美国国防部正式推出了VHDL(Very High Speed IC Hardware Description Language)语言, 1987年IEEE采纳VHDL为硬件描述语言标准(IEEE STD-1076)。 ---- VHDL是一种全方位的硬件描述语言,包括系统行为级、寄存器传输级和逻辑门级多个 设计层次,支持结构、数据流、行为三种描述形式的混合描述,因此VHDL几乎覆盖了以往各种硬件 描述语言的功能,整个自顶向下或自底向上的电路设计过程都可以用VHDL来完成。另外,VHDL还 具有以下优点: VHDL的宽范围描述能力使它成为高层次设计的核心,将设计人员的工作重心提高到了系统功 能的实现与调试,只需花较少的

2

精力用于物理实现。 VHDL可以用简洁明确的代码描述来进行复杂控制逻辑的设计,灵活且方便,而且也便于设计 结果的交流、保存和重用。 VHDL的设计不依赖于特定的器件,方便了工艺的转换。 VHDL是一个标准语言,为众多的EDA厂商支持,因此移植性好。

2.2.3 系统框架结构

EDA系统框架结构(Framework)是一套配置和使用EDA软件包的规范,目前主要的EDA 系统都建立了框架结构,如Cadence公司的Design Framework,Mentor公司的Falcon Framework等,这些框架结构都遵守国际CFI组织(CAD Framework Initiative)制定的统一技术标准。Framework能将来自不同EDA厂商的工具软件进行优化组合,集成在一个易于管理的统一的 环境之下,而且还支持任务之间、设计师之间在整个产品开发过程中实现信息的传输与共享,这是 并行工程和Top-Down设计方法的实现基础。

2.3 EDA技术的基本特征

EDA代表了当今电子设计技术的最新发展方向,它的基本特征是:设计人员按照\自顶向下\的设计方法,对整个系统进行方案设计和功能划分,系统的关键电路用一片或几片专用集成 电路(ASIC)实现,然后采用硬件描述语言(HDL)完成系统行为级设计,最后通过综合器和适配器生成最终的目标器件。这样的设计方法被称为高层次的电子设计方法。

3

3 Quartus II

3.1 Quartus II简介

Quartus II 是Altera公司的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。

Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。具有运行速度快,界面统一,功能集中,易学易用等特点。

Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三放EDA工具。

Altera Quartus II 作为一种可编程逻辑的设计环境, 由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。

Altera Quartus II (3.0和更高版本)设计软件是业界唯一提供FPGA和固定功能HardCopy器件统一设计流程的设计工具。工程师使用同样的低价位工具对Stratix FPGA进行功能验证和原型设计,又可以设计HardCopy Stratix器件用于批量成品。系统设计者现在能够用Quartus II软件评估HardCopy Stratix器件的性能和功耗,相应地进行最大吞吐量设计。

Altera的Quartus II可编程逻辑软件属于第四代PLD开发平台。该平台支持一 个工作组环境下的设计要求,其中包括支持基于Internet的协作设计。Quartus平台与Cadence、ExemplarLogic、MentorGraphics、Synopsys和Synplicity等EDA供应商的开发工具相兼容。改进了软件的LogicLock模块设计功 能,增添 了FastFit编译选项,推进了网络编辑性能,而且提升了调试能力。

3.2 Quartus II特点

支持MAX7000/MAX3000等乘积项器件

2.0版Quartus II设计软件现在除了支持Altera的APEX 20KE,APEX 20KC, APEX II,ARM的Excalibur嵌入处理器方 案,Mercury,FLEX10KE和ACEX1K之外,还支持MAX3000A,MAX7000系列乘积项器件。MAX3000A和MAX7000设计者现在可 以使用QuartusII设计软件中才有的所有强大的功能。

软件体积缩小,运行速度加快

QuartusII2.0安装软件为290M,完全安装为700M,如果定制安装,不选择Excalibur嵌入处理器,则安装所需空间为460M,比QuartusII1.1版本减少一半以

4

上的空间要求,却能支持ALTERA全部芯片的开发。 同时软件的装载,编译,仿真速度比1.1版本大 大加快。

LogicLock设计流程把性能提升15%

QuartusII2.0 设计软件通过增强层次LogicLock模块级设计方式,将性能平均改善15%。 LogicLock设计流程把整个模块的放置交由 设计者控制,如果必要的话,可以采用辅助平面布置。LogicLock设计流程运行设计者单独地优化和锁定每个模块的性能,在大 型SOPC设计的构建过程中也保持整个系统的性能。2.0版Quartus II设计软件把新的LogicLock设计流程算法集成到未来的Altera器 件中,该算法充分利用了模块级设计的优势。

采用快速适配选项缩短编译时间

QuartusII2.0增加了一个新的快速适配编译选项,选择中这个选项,将会比缺省设置要缩短50%的编译时间。快速适配功能保留了 最佳性能的设置,加快了编译过程。这样布局适配算法反复的次数更少,编译速度更快,对设计性能的影响最小。

新的功能减小了系统级验证

2.0版Quartus II设计软件引入了新的功能,加快验证过程,这通常是SOPC设计流程中最漫长的阶段。在最初的编译时间中,新的 SignalProbe技术允许用 户在保留设计最初布线,时限和设计文件的同时把内部节点引到未用的管脚进行分析。SignalProbe技术完 成了现有SignalTap嵌入逻辑分析的功能。 而且,设计者能够使用新版本中提供的HDL测试模板快速地开发HDL仿真矢量。

2.0版 Quartus II设计软件也可以自动地从QuartusII仿真器波形文件中创建完整的HDL测试平台。

2.0版Quartus II设计软件也支持高速I/O设计,生成专用I/O缓冲信息规范(IBIS)模型导入到常用的EDA信号集成工具中。IBIS模型 根据设计中每个管脚的I/O标准设置来定制,简化第三方工具的分析。

5

4 自动售货机的设计

4.1 自动售货机设计原理

4.1.1 状态机原理分析

有限状态机FSM(Finite State Machine)及其设计技术是实用数字系统设计中实现高效率、高可靠逻辑控制的重要途径。传统的状态机设计方法需进行繁琐的状态分配、绘制状态表、简化次态方程等,而利用VHDL可以避免这些烦琐的过程,直接利用状态转换图进行状态机的描述。此外,与VHDL的其他描述方式相比,状态机的VHDL表述丰富多样,程序层次分明,结构清晰,易读易懂;在排错、修改和模块移植方面也有其独到的特点。

状态机有摩尔(Moore)型和米立(Mealy)型两种。Moore型状态机的输出信号只与当前状态有关;Mealy型状态机的输出信号不仅与当前状态有关,还与输入信号有关。

把自动售货机的不同商品和不同投币方式设计成不同的状态,每一种状态对应相应的输出。从而自动售货机可已使用相应的状态机来实现。

4.1.2 状态转移图

由上面的分析,我们可以吧不同的状态之间的变化用状态转移图来表示。状态转移图,如图4.1所示:

S11 S1 S15 S2 S110 S21 S25 图4.1 状态转移图

S210 S310 S0 S3 S31 S35 s0为初始状态,s1为购买一元商品的状态,s2为购买五元商品的状态,s3为购买十元商品的状态,s11为输入一元并成功购买一元商品的状态,s15为输入五元并成功购买一元商品的状态s110为输入十元并成功购买一元商品的状态,s21为输入一元但不能购买五元商品的状态,s25为输入五元并成功购买五元商品的状态,s210为输入十元并成功购买五元商品的状态,s31为输入一元但不能购买十元商品的状态,s35为输入五元但不能购买十元商品的状态,s310为输入十元并成功购买十元商品的状态。

4.1.3 仿真图分析

购买一元商品时,仿真图如图4.2所示:

6

图4.2 购买一元商品仿真图

经仿真图验证,购买一元商品时的设计是正确的。 购买五元商品时,仿真图如图4.3所示:

图4.3 购买五元商品仿真图

经仿真图验证,购买五元商品时的设计是正确的。 购买十元商品时,仿真图如图4.4所示:

图4.4 购买十元商品仿真图

经仿真图验证,购买十元商品时的设计是正确的。 投币面值不足时的仿真图,如图4.5所示:

图4.5 购买商品投币不足时仿真图

经仿真图可知,投币不足的设计是正确的。 当找零时的仿真图,如图4.6所示:

7

图4.6 购买商品找零仿真图

经仿真图验证,使用复位键的设计是正确的。 由上,总体可知,此自动售货机的设计是正确的。

4.1.4 硬件封装图

总体的硬件封装图,如图4.7所示:

图4.7 硬件封装图

输入引脚为rst,clk,ai,bi,ci,di,ei,fi,ok。其中rst为复位引脚;clk为始终引脚,频率为1Hz;ai为选择一元商品引脚;bi为选择五元商品引脚;ci为选择十元商品引脚;di为投币一元引脚;ei为投币五元引脚;fi为投币十元引脚;ok为确认引脚,即购买商品。

输出引脚为xianshi,ao,bo,co,warn。其中xianshi为购买商品的价格,输入的钱数与找零的公用引脚;ao为成功输出一元商品的引脚;bo为成功输出五元商品的引脚;co为成功输出十元商品的引脚;do为输入钱数不足时的警告引脚。

8

5 总结

在学期期末,院系安排我们进行FPGA课程设计。首先,我们根据老师给我们的题目进行设计。然后,利用Quartus Ⅱ进行编译仿真等工作。

通过FPGA课程设计,我不仅加深了对数字电路理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。创新,是要我们学会将理论很好地联系实际,并不断地去开动自己的大脑,从为人类造福的意愿出发,做自己力所能及的,别人却没想到的事。使之不断地战胜别人,超越前人。同时,更重要的是,我在这一设计过程中,学会了坚持不懈,不轻易言弃。设计过程,也好比是我们人类成长的历程,常有一些不如意,也许这就是在对我们提出了挑战,勇敢过,也战胜了,胜利的钟声也就一定会为我们而敲响。

这个设计过程中,我遇到过许多次失败的考验,就比如,自己对软件Quartus Ⅱ不熟悉,遇到了很多困难。有时候真想就此罢休,然而,就在想要放弃的那一刻,我明白了,原来结果并不那么重要,我们更应该注重的是这一整个过程。于是,我坚持了下来。当然最终,这个设计很完成了。

9

参考文献

[1].Voknei A.Pedroni.VHDL数字电路设计教程.电子工业出版社,2008.5 [2].潘松,黄继业.EDA技术实用教程(第二版).科学出版社,2005.2 [3].焦素敏.EDA应用技术.清华大学出版社,2002.4

[4].张昌凡等.可编程逻辑器件及VHDL设计技术[M].广州:华南理工大学出版社,2001 [5].曾繁泰,陈美金.VHDL程序设计[M].北京:清华大学出版社,2001

10

附录

library ieee;

use ieee.std_logic_1164.all; entity shouhuoji is

port(rst,clk,ai,bi,ci,di,ei,fi,ok:in std_logic; xianshi:out integer range 0 to 10; ao,bo,co,warn:out std_logic); end shouhuo;

architecture bhv of shouhuo is

type state is(s0,s1,s11,s15,s110,s2,s21,s25,s210,s3,s31,s35,s310); --设计分13个状态 signal n_s,p_s:state; signal a,b:std_logic; begin process(clk,rst)

variable temp:integer range 0 to 3; begin if(rst='1')then

p_s<=s0; --时序进程部分 elsif(clk'event and clk='1')then p_s<=n_s; if(a='1')then

temp:=temp+1; --延时3s代码 if(temp=3)then b<='1'; else b<='0'; end if; else temp:=0; end if; end if; end process;

process(p_s,ai,bi,ci,di,ei,fi,ok,b) --组合进程代码 begin

11

if((p_s=s0)or(p_s=s1)or(p_s=s2)or(p_s=s3))then a<='0'; else

a<='1'; --商品的成功输出维持3s的时间 end if; case p_s is when s0=>

xianshi<=0; ao<='0'; bo<='0'; co<='0'; warn<='0'; if(ai='1')then

n_s<=s1; elsif( bi='1')then

n_s<=s2; elsif( ci='1')then

n_s<=s3; else

n_s<=s0; end if;

when s1=> ao<='0'; bo<='0'; co<='0'; warn<='0';

xianshi<=1; if(di='1')then xianshi<=1;

if(ok='1')then n_s<=s11; else

n_s<=s1; end if;

--自动售货机的初始状态 --购买一元商品进入s1状态 --购买五元商品进入s2状态 --购买十元商品进入s3状态 --返回初始状态 --购买一元商品的销售服务状态 --价格显示一元 --输入一元并确认进入s11状态 --没有确认则返回s1状态 12

elsif(ei='1')then --输入五元并确认进入s15状态 xianshi<=5; if(ok='1')then n_s<=s15; else

n_s<=s1; --没有确认则返回s1状态 end if; elsif(fi='1')then

xianshi<=10; if(ok='1')then n_s<=s110; else

n_s<=s1; end if; else

n_s<=s1; end if;

when s2=> ao<='0'; bo<='0'; co<='0'; warn<='0';

xianshi<=5; if(di='1')then xianshi<=1;

if(ok='1')then n_s<=s21; else

n_s<=s2; end if;

elsif(ei='1')then xianshi<=5; if(ok='1')then n_s<=s25;

--输入十元并确认进入s110状态 --没有确认则返回s1状态 --没有投币则返回s1状态 --购买五元商品的销售服务状态 --价格显示五元 --输入一元并确认进入s21状态 --没有确认则返回s2状态 --输入五元并确认进入s25状态 13

else

n_s<=s2; --没有确认则返回s2状态 end if;

elsif(fi='1')then --输入十元并确认进入s210状态 xianshi<=10; if(ok='1')then n_s<=s210; else

n_s<=s2; end if; else

n_s<=s2; end if;

when s3=> ao<='0'; bo<='0'; co<='0'; warn<='0';

xianshi<=10; if(di='1')then

xianshi<=1; if(ok='1')then n_s<=s31; else

n_s<=s3; end if; elsif(ei='1')then xianshi<=5; if(ok='1')then

n_s<=s35; else

n_s<=s3; end if; elsif(fi='1')then

--没有确认则返回s2状态 --没有投币则返回s2状态 --购买十元商品的销售服务状态 --价格显示十元 --输入一元并确认进入s31状态 --没有确认则返回s3状态 --输入五元并确认进入s35状态 --没有确认则返回s3状态 14

xianshi<=10; if(ok='1')then

n_s<=s310; --输入十元并确认进入s310状态 else

n_s<=s3; --没有确认则返回s3状态 end if; else

n_s<=s3; end if;

when s11=> ao<='1'; bo<='0'; co<='0'; warn<='0';

xianshi<=0; if(b='1')then

n_s<=s0; else

n_s<=s11; end if;

when s15=> ao<='1'; bo<='0'; co<='0'; warn<='0'; xianshi<=4; if(b='1')then

n_s<=s0; else

n_s<=s15; end if;

when s110=> ao<='1'; bo<='0';

--没有投币则返回s3状态 --成功购买一元商品的状态 --延时3s返回初态 --保持s11状态 --成功购买一元商品的状态,并显示找零钱数--延时3s返回初态 --保持s15状态 --成功购买一元商品的状态,并显示找零钱数 15

co<='0'; warn<='0'; xianshi<=9; if(b='1')then

n_s<=s0; --延时3s返回初态 else

n_s<=s110; --保持s110状态 end if;

when s21=> ao<='0'; bo<='0'; co<='0'; warn<='1'; xianshi<=1; if(b='1')then

n_s<=s0; else

n_s<=s21; end if;

when s25=> ao<='0'; bo<='1'; co<='0'; warn<='0'; xianshi<=0; if(b='1')then

n_s<=s0; else

n_s<=s25; end if;

when s210=> ao<='0'; bo<='1'; co<='0';

--购买五元商品的状态,显示警告并退出钱--延时3s返回初态 --保持s21状态 --成功购买五元商品的状态 --延时3s返回初态 --保持s25状态 --成功购买五元商品的状态 16

warn<='0'; xianshi<=5; if(b='1')then

n_s<=s0; --延时3s返回初态 else

n_s<=s210; --保持s210状态 end if;

when s31=> ao<='0'; bo<='0'; co<='0'; warn<='1'; xianshi<=1; if(b='1')then

n_s<=s0; else

n_s<=s31; end if;

when s35=> ao<='0'; bo<='0'; co<='0'; warn<='1'; xianshi<=5; if(b='1')then

n_s<=s0; else

n_s<=s35; end if;

when s310=> ao<='0'; bo<='0'; co<='1'; awrn<='0';

--购买十元商品的状态,显示警告并退出钱 --延时3s返回初态 --保持s31状态 --购买十元商品的状态,显示警告并退出钱 --延时3s返回初态 --保持s35状态 --成功购买十元商品的状态 17

xianshi<=0; if(b='1')then

n_s<=s0; --延时3s返回初态 else

n_s<=s310; --保持s310状态 end if; end case; end process; end bhv;

18

本文来源:https://www.bwwdw.com/article/jvc7.html

Top