《自动售货机的EDA实现设计》由会员分享,可在线阅读,更多相关《自动售货机的EDA实现设计(19页珍藏版)》请在金锄头文库上搜索。
1、数 电 课 程 设 计 报 告题目:自动售货机的EDA实现设计学 院: 信息科学与工程学院 专业班级: 电子信息科学与技术08-1 学生姓名: 何伟伟 组 员: 何颖 指导教师: 张秀娟 目录摘要 3一、自动售货机的系统结构41.1自动售货机的系统结构 41.2自动售货实现的设计要求 5二、自动售货机的功能介绍 52.1此次设计的自动售货机的功能简介 52.2实现自动售货机的功能的设计思路 6三、分步模块设计及波形辅助分析 63.1 Verilog语言简介 63.2程序变量名称解释 63.3商家整体复位模块及分析 63.4顾客货品选择模拟以及显示模块及分析 83.5顾客货币选择以及显示模块及分
2、析 93.6投入货币不足引起警告准备找零显示模块及分析103.7货物送出及商家卖货额累加显示模块及分析103.8警告3s或者是按键3s后自动复位准备模块及分析11四、设计仿真 114.1 Modelsim简介 114.2 完整的程序代码 12五、附录 17六、参考文献 19摘要随着经济发展,21世纪进入信息化,为更好的实现人们生活水平的提高,生活更好、更便捷、更经济已经成为人们追求的对象。然而小型自动售货机就是在这样的时代背景下产生的,由于它的操作方便简洁等优越性能很好的符合人们需求,故它很快形成了自己市场,并日益扩大。本文也是基于这个背景下,和读者一起探讨,本文详细介绍了自动售货机系统的方案
3、设计、软件规划和编写,并重点描述了自动售货机系统的工作原理、系统设计、软件编程的原则和技巧,主要实现自动售货机的功能。该系统以Verilog编程为核心,以Modelsim软件为辅助,程序结构分模块设计,故结构清晰,加上仿真器仿真结果最大程度说明问题,符合课程设计要求,并加以解释与说明。另外,用Verilog编程时.v重要,_tb.v也重要,仿真结果只能根据波形图来说明问题,经过多次努力,测试文件已经相当成熟,很好的满足了设计要求,.v文件穿插文中配合讲解的需要,_tb.v(测试文件)在附录中给出,以供查阅。关键词:自动售货机 Verilog 仿真一、自动售货机的系统结构1.1自动售货机的总体系
4、统结构 自动售货机是集光、机、电一体化的独立机构,它只需要顾客投币和按购物键选择即可自动售货及退找零钱,一下都是针对本人具体程序而言,实际中硬件电路的实现只要作相应的改变即可,按键编码,显示用7448译码再用7段数码管显示即可,其工作程序如下图售货机的工作原理是:(1) 顾客选择某货物:只需要按相应按键即可(用state来模拟) (2)顾客选择某货币:只需要按相应按键即可(用state_next来模拟)(3)顾客投币:投币后按确认键(用give模拟,sure为确认键)(4)钱数判断:足够,则找零并送出货物(送出货物用goods1、goods2、goods3、goods4来模拟),不足则报警3s
5、(用warning来模拟)(5)卖货额累加:每次成功交易之后卖货额累加(用profit来模拟)(6)系统复位:包括sure之后3s自动复位和商家整体复位综合所述,售货机系统可以分为六部分组成,即商家整体复位模块及分析、顾客货品选择模拟以及显示模块及分析、顾客货币选择以及显示模块及、投入货币不足引起警告准备找零显示模块及分析、货物送出及商家卖货额累加显示模块及分析、警告3s或者是按键3s后自动复位准备模块及分析,因为顾客购买时是一步一步来操作的,故要有一个等待的过程,为解决上述问题,本文采用为每步制造条件,符合条件则执行,不符合则等待,故在Verilog中用wait语句实现,另外,为实现3s计时
6、功能,故引入时钟clk(当然本文只是示意,满足功能即可,累计为5个时钟周期)。1.2 自动售货实现的设计要求: (1)设计一个自动售货机,此机能出售1元、2元、5元、10元的四种商品。出售哪种商品可有顾客按动相应的一个按键即可,并同时用数码管显示出此商品的价格。(2)顾客投入硬币的钱数也是有1元、2元、5元、10元四种,但每次只能投入其中的一种硬币,此操作通过按动相应的一个按键来模拟,并同时用数码管将投币额显示出来。(3)顾客投币后,按一次确认键,如果投币额不足时则报警,报警时间3秒。如果投币额足够时自动送出货物(送出的货物用相应不同的指示灯显示来模拟),同时多余的钱应找回,找回的钱数用数码管
7、显示出来。(4)顾客一旦按动确认键3秒后,自动售货机即可自动恢复到初始状态,此时才允许顾客进行下一次购货操作。(5)售货机还应具有供商家使用的累加卖货额的功能,累加的钱数要用数码管显示,显示2位即可。此累加器只有商家可以控制清零。(6)此售货机要设有一个由商家控制的整体复位控制 二、自动售货机的功能介绍2.1 此次设计的自动售货机的功能简介基本原理:硬件实现中,顾客首先按键来选择自己想购买的货物,自动售货机会用数码管显示出来,然后顾客再选择货币种类,自动售货机也用数码管显示出来,顾客投币,自动售货机通过货币识别器来识别货币,顾客按确认键3s之后,自动售货机马上做出判断,投入的钱大于价格,则送出
8、此货物,并找零,否则就会报警持续3s,自动售货机自动恢复初始状态等待为下一顾客服务,同时,它还会为商家做卖货额累加功能,并且这显示只能由商家来清零(商家通过整体复位来清零)那么,基于硬件电路,软件来实现的时候就尽量模仿此按键、显示部分、以及各功能,在本文中用state、state_next、sure、give、clk、reset、goods1、goods2、goods3、goods4、j、display、profit、i、warning、readya、readyb、readyc、readyd、readye、readyf来实现模拟,并且这些变量名称通俗易懂,并且程序已全部给出。2.2实现自动售货
9、机的功能的设计思路 变量选择:货物选择有四种,货币选择有四种,这样可以用编码形式设置成两位即可,但是考虑到与state作为引发条件,故两位不够,为了简便,本文用四位独热码编码方式;设计要求三次显示出货物选择、货币选择、找零显示,当然设置成三个数码管肯定可以,但是为来节约成本,就用一个两位的数码管显示即可,但此时要求数码管时分时使用;卖货额累加显示用八位的,以便在硬件中方便用数码管显示(当然需要7448显示译码器);另外售出的货物用四个数表示,送出的就为1,此功能与实际要求中四个不同颜色的指示灯显示匹配;实际要求还有说3s,故得引入时钟信号,但实现此功能只需要示意即可,用5个时钟周期示意。 程序
10、构建:本文模块是分步实现,所以得借助中间变量来引发下一次操作,一共六步,大概需要六个变量,结合引发功能,故用wait语句来实现,当wait()中括号内的条件满足则执行,否则循环等待,按照此想法,故每个子模块中都用到wait语句;另外,此程序明显要求多路选择,故用case语句,满足case()中对应条件,则执行对应的语句,实现对应的功能,此过程中还得用到辅助变量,本文可用j来实现,为case语句结合使用;当然if、else语句少不了;阻塞语句和非阻塞语句使用,他们只有是立即赋值还是等到下一时钟上升沿来到时再赋值,本文因为考虑到实时性,故主要用到阻塞赋值。 测试文件生成:本来严格的需要用自动生成测
11、试文件,这样可靠性更高,但是结合本文具体设计而言,手工写测试文件足已(程序代码不是很大),考虑到之前.v文件每个模块基本上都用到时钟的上升沿,这个引发条件就迫使测试文件中state和state_next中一直有效,等到sure按下3s后再清零,这使得硬件实现中得考虑这问题(用D触发器等们实现锁存等功能)三、分步分模块设计及波形辅助分析3.1 Verilog语言简介:Verilog HDL 是目前应用最为广泛的硬件描述语言,Verilog HDL可以用来进行各种层次的逻辑设计,也可以进行数字系统的逻辑综合,仿真验证和时序分析等.Verilog HDL适合算法级,寄存器级,逻辑级,门级和版图级等各
12、个层次的设计和描述Verilog HDL进行设计最大的优点是其工艺无关性这使得工程师在功能设计,逻辑验证阶段可以不必过多考虑门级及工艺实现的具体细节,只需根据系统设计的要求施加不同的约束条件,即可设计出实际电路Verilog HDL是一种硬件描述语言(hardware description language),为了制作数字电路而用来描述ASICs和FPGA的设计之用。Verilog 的设计者想要以 C 编程语言为基础设计一种语言,可以使工程师比较容易学习。Verilog 是由en:Gateway Design Automation公司于大约1984年开始发展。Gateway Design A
13、utomation公司后来被 Cadence Design Systems于1990年所购并.3.2程序变量名称解释clk: 时钟信号,主要是为后面3s计时用;state: 顾客货物选择按键模拟,1000表示选择1元货物,0100表示选择2元货物,0010表示选择5元货物,0001表示选择10元货物;state_next: 顾客货币种类选择模拟,1000表示选择1元货币,0100表示选择2元货币,0010表示选择5元货币,0001表示选择10元货币sure: 确认键(按照要求是,3s后自动售货机自动恢复到初始状态)reset: 商家整体复位,按键后,全都清零,包括卖货额give: 顾客投入的钱数goods1、goods2、goods3、goods4、分别表示出仓1元的货物2元的货物5元的货物10元的货物warning: 模拟投入的钱数不够的发出的警告信号display: 分