《基于FPGA自动售货机.doc》由会员分享,可在线阅读,更多相关《基于FPGA自动售货机.doc(34页珍藏版)》请在三一办公上搜索。
1、摘 要本课题是基于Verilog HDL语言的小型自动售货机。采用Verilog HDL在ModelsimSE6.2B软件平台进行编译和仿真。在此次设计中,主要采用有限状态机(FSM)的设计,在投币选货状态和找零状态在这两个状态间进行转移。从而实现货物的选择、货币运算、出货控制、余额显示以及找零等功能。该售货机系统能够识别两种硬币,两种纸币。有五种不同价格的商品可供选择,并且通过显示译码电路,可在LED显示器显示余额,同时具备找零、机器存有硬币不足LED亮起报警、缺货LED亮起报警等功能。现代的自动售货机有使用方便快捷,可以全天候24小时工作,占地少,成本低,维护简单等优点,有着广阔的前景。采
2、用FPGA方式用Verilog HDL硬件描述语言,设计简易的自动售货机,其编程简单,开发周期短,硬件运行速度快,开发成本低,稳定性高等优点。关键词:自动售货机; Verilog HDL; 有限状态机;Modelsim; ABSTRACTThis topic design a simple vending machine is based on the FPGA chip. EP2C35 chip, and DE2 development board for the hardware platform, the use of Verilog HDL to compile and simulat
3、ion in the Quartus software platform, and through the DE2 development achieve the basic functions of a Simple vending machine.board by to download code to the chip. In this design,it used of finite state machine (FSM) design, choice of goods state, shipment status and give change coin state in the t
4、hree inter-state transfer, in order to achieve the choice of goods, monetary operations, the cargo control, features such as display and give change. The vending machine system to identify three kinds of coins, there are five kinds of goods at different prices to choose from, and by showing decoding
5、 circuit, in DE2 onboard LED display shows the balance, both functions give change. Modern vending machines are convenient, it can work 24 hours a day, covers an area of small, low cost, simple maintenance, there are broad prospects. Manner with the use of FPGA hardware description language Verilog
6、HDL, design simple vending machine, the programming is simple, short development cycles, fast hardware, the development of low cost, high stability.Key words: vending machines; Verilog HDL; Finite state machine; FPGA; DE2 development board;目 录绪 论1第一章 系统方案设计31.1 人机交换界面设计31.2 系统方案设计412.1 系统方案确定5第二章 系统
7、各模块硬件设计72.1 DE2开发板介绍72.2 自动售货机各模块设计82.2.1 自动售货机主体设计82.2.2 LED显示设计方案92.2.3 货币输入信号设计方案102.2.4 出货显示设计方案11第三章 系统的软件设计123.1 EDA工具软件介绍133.2 软件设计总方案143.3 售货机主芯片程序设计方案153.4 BCD-LED七段数码显示译码器173.5 硬币输入信号程序设计方案183.6 出货显示程序设计方案193.7 自动售货机各部分组合连接设计20第四章 调试及仿真214.1 用Quartus 完成PFGA设计步骤214.2 自动售货机波形仿真结果214.2.1 自动售货
8、机波形仿真214.2.2 输入信号处理程序波形仿真234.2.3 BCD-LED七段数码显示译码器波形仿真234.2.4 出货显示译码器波形仿真244.2.5 自动售货机主芯片程序仿真波形254.3 下载、仿真及测试25结论26致 谢27参考文献28附录1(程序源代码)29附录2(整体设计原理图)35绪 论自动售货机最早出现在二十世纪五、六十年代的西欧,英国是较早实行自动售货机售货的国家之一。1942年,在食品销售中首先推广了自动售货的销售方式。1950年,英国食品杂货行有500家采用自动售货机售货。1969年,采用自动售货机售货的商家增加到23000家,销售的商品扩展到文化用品、唱片、香烟、
9、食品等多个方面。进入70年代后,约有40多万家香烟、饮料店采用自动售货机。1980年英国有50余万台自动售货机,年销售额达8.81亿英镑。70年代后,日本、美欧等发达国家和地区自动售货机迅猛的发展,短短30年,发达国家自动售货机产业已发展到相当大规模。自动售货机被广泛地布放于车站、油站、码头、机场、宾馆、写字楼、娱乐场所及大街小巷和公路旁,人们通过自动售货机可以买到食品、香烟、饮料、报纸、票、卡甚至鲜花和小宠物等物品。自动售货机实现了商品需求化、性能多样化的发展,又原来只能有限商品品种,转变为继百货公司、超级市场、便民店之后,以消费者与售货机“一对一”自动售货的无店铺销售业态。 目前自动售货机
10、是集声、光、机电一体化的高新智能化产品,在我国也开始得到应用。在中国人们可以看到现代化的自动售货机摆放在一些大商场门口、繁华街道两旁、公园入口处以及其它热闹的场所。自动售货机的新奇、文明、高档、昼夜服务、占地小、灵活方便深受许多地区市民的青睐,甚至出现许多排队购买的现象。专辑测算,中国的自动售货机在市场容量最保守算应该有四十七万台,一年的销售额可达三百五十亿元若按人均台数计算全年可达五百亿,自动售货机在日本达到平均每二三十人一台,在美国达到每四十人一台,在欧洲每六十人一台,由于中国经济与上述国家还有一定差距,按每五百人一台计算。因此,自动售货机在中国有着广阔的发展前景。 现在,自动售货机产业正
11、在走向信息化并进一步实现合理化。例如实行联机方式,通过电话线路将自动售货机内的库存信息及时地传送各营业点的电脑中,从而确保了商品的发送、补充以及商品选定的顺利进行。并且,为防止地球暖化,自动售货机的开发致力于能源的节省,节能型清凉饮料自动售货机成为该行业的主流。在夏季电力消费高峰时,这种机型的自动售货机即使在关掉冷却器的状况下也能保持低温,与以往的自动售货机相比,它能够节约15的电力。进入21世纪时,自动售货机也将进一步向节省资源和能源以及高功能化的方向发展。自动售货机是商业自动化的常用设备,它不受时间、地点的限制,能节省人力、方便交易。一般的自动售货机由钱币装置、指示装置、贮藏售货装置等组成
12、。钱币装置是售货机的核心,其主要功能是确认投入钱币的真伪,分选钱币的种类,计算金额。如果投入的金额达到购买物品的数值即发出售货信号,并找出余钱。指示装置用以指示顾客所选商品的品种。贮藏售货装置保存商品,接收出售指示信号,把顾客选择的商品送至付货口。一般售货机的钱币装置由投币口、选别装置、确认钱币真伪的检查装置、计算金额的计算装置和找钱装置组成。70年代以来,出现了采用微型计算机控制的各种新型自动售货机和利用信用卡代替钱币并与计算机连接的更大规模的无人售货系统,如无人自选商场、车站的自动售票和检票系统、银行的现金自动支付机等。 近年来,随着电子系统设计自动化(EDA)和超大规模可编程逻辑器件和快
13、速发展,硬件描述语言(HDL)这一新型电子系统开发工具正在迅速普及,是计算机设计和编程人员和电子器件厂商都寻找的一种工具,是芯片设计人员和生产伙伴之间建立沟通和交换数据的桥梁。已经是从事EDA电子工程师必须掌握的工具。 HDL使得电路的编程和设计者能够自由表述电路的特征,它可以描述和仿真电子元件的特性,这些电子元件的规模可以从单个门电路直到一块完整的多层印刷的电路板。HDL的主要操纵对象是高速集成电路和现场可编程门阵列(FPGA)。HDL的仿真功能使设计者在产品投入大规模生产前可以分别测试各个元件及其之间的连接,用仿真的方式完成以前必须设计和建造好的样机才能进行的电子电路特性的说明和调试,并可
14、以仿真器上测试所设计的电路功能是否正确。从而在芯片和器件的复杂性不断以惊人的速度增长的同时降低系统开发的成本和时间。本课题中需要实现至少3种不同价格货物的买卖操作。要用3个拨动开关表示3种硬币,用5个键表示5种不同价格的商品。投入货币后用数码管显示钱数。买东西时,先按物品键,再投入硬币,若成交,用数码管显示物品输出。若输入余额大于所选物品的价格,退回多余的钱,若少于物品的价格,则退钱。在这次设计中,已实现上述功能,并且能够下载到DE2开发板上进行仿真。下面的论述中,第一章介绍系统的方案设计,包括人机交换界面的设计,系统方案设计和系统的方案的确定,还有系统方案的总体设计原理图。第二章介绍系统各模
15、块硬件设计,包括DE2开发板的介绍和各个硬件部分设计的介绍。包括自动售货机的主芯片、余额显示译码器、输入处理芯片和出货显示译码器,以及他们的设计原理图。第三章介绍软件系统设计,各个部分软件设计原理及过程。包括主程序,显示译码器程序,输入处理程序和显示译码程序以及他们的原理图。第四章介绍了编译调试过程以及各部分的调试波形,并对波形进行了分析。最后是结论、致谢、参考文献和附录。第一章 系统方案设计1.1 人机交换界面设计人机交换界面图,对人机交换的按键一目了然。这次设计中,用到DE2开发板作为设计平台,它的界面比较大众化,所有的按键显示都是放在一起,但有了这个界面图结合下面的介绍,很容易就可以了解
16、这个自动售货机的操作步骤以及使用方法。YJ元显示角显示出货显示EDCBAWJIYIN上面是5种货物选择开关 上面是货币输入和找零开关角找零元找零OverflowR复位开关图1.1 自动售货机人机交换界面简图首先,确定可以对5种不同种类的货物进行自动售货,价格分别为A=1.00,B=1.50,C=1.80,D=3.10,E=5.00。当A、B、C、D、E五种货物输出时,为了在DE2开发板上能够显示出来,识别方便,加一个译码器,如果货物A出货时,通过译码器,在LED显示器上显示数字1。同理B、C、D、E分别显示2、3、4、5。其次,自动售货机选择可以接受一元、五角、一角三种硬币(即有三种输入信号I
17、Y代表投入一元,WJ代表投入五角,YJ代表投入一角)。这三种货币的输入在DE2开发板上分别用三个开关来表示,当每次来回拨动一次开关,就代表投一次硬币,及相应的面额的硬币加1。用2个4位7段LED(高位代表元、低位代表角)显示投入的总钱数,最大输入金额是9.90元。如果大于该金额输出信号为overflow,代表最后投入的硬币会退出。选择货物的输入信号IA,IB,IC,ID,IE和一个放弃信号IN,放弃信号是将余额找出来。输出信号元找零和角找零。同时还有一个R复位信号。如图1.1所示,人机交换界面图简图。在操作时候,先按复位键,是将里面的各个输入输出口以及寄存器全部清零。其次选择货物,再投币,当投
18、的金额等于货物的价格的时候,出货,同时LED显示器上上面的金额清零。当大于货物的价格时候,出货同时,显示剩余的金额。如果按找零开关,找零,LED显示清零。当金额大于9.9元时,把最后一次投币退出来。1.2 系统方案设计要实现自动售货机的功能,如果只靠一个芯片一个程序是很难完成系统的设计,所以自动售货机系统有4个部分组成。 自动售货机的主芯片。主要实现自动售货机的基本功能。它可以选择5种不同的货物,当选择货物后,进入投币状态,投入硬币后,系统会自动记录下所所投入硬币的金额,并且将投入的硬币的余额以BCD码的形式输出,当金额大于9.9元的时候,系统会自动将最后一次投入的货币输出;输出信号为over
19、flow。当上面的金额等于货物的价格的时候,系统会自动出货,五种货物与之相对应的有五个输出管脚,当出货时,高电平有效;当金额大于货物的价格时候,系统出货,并且进行找零,当金额小于货物的价格的时候,系统会等待着再次投币。如果有IN找零信号输入,直接进入找零状态。输入信号处理芯片。输入信号的时候,每次输入信号高电平的周期不能正好是一个clk脉冲信号的周期,所以要设计一个信号处理程序。在输入货币和找零信号的时候,无论产生高电平的时间的多长,都会产生一个和clk周期相同的高电平。BCD-LED七段数码显示译码器。自动售货机主芯片产生的是BCD码,BCD码不方便的识别,所以要用这个芯片,来处理BCD码的
20、信号,使之变成能够识别的数字信号。出货显示译码器。在出货的时候,由于采用DE2开发板,主频过高,达到50MHz,人的肉眼根本无法识别信号的变化,我们需要设计一个出货显示译码器,当出货物A,B,C,D,E的时候,在LED显示器上就相应的产生1、2、3、4、5的数字,这样就可以轻松的看到是那种货物出来了。将这四个部分有机的组合起来,就可以实现自动售货机的功能,如图1.2所示。 自动售货机主芯片出货显示译码器1元输入处理5角输入处理1角输入处理找零输入处理元显示译码 器选择货物A选择货物B角显示译码 器选择货物C选择货物D元找零选择货物E角找零复位ROverflow 图1.2 系统方案原理图1.21
21、 系统方案确定 自动售货机的主芯片程序主要采用有限状态机(FSM),在选择货物状态,投币出货状态和找零状态这个3个状态间进行跳转,来实现自动售货机的基本功能。选择货物状态主要是货物的选择的处理等功能,如果在选择货物之前投硬币,系统进入货币找零状态,就将货币退出来,否则就停留在这个状态。如果先选择货物,系统会自动进入投币出货的状态,否则停留在这个状态。投币出货状态主要是对投入货币运算和出货控制处理等功能。如果余额大于9.9元的时候,系统会把最后一次投入的硬币找出来。如果余额大于所选货物的价格,系统会自动出货并且进入找零状态,把剩余的零钱找出来。如果余额等于所选货物的价格,系统会自动出货,并且把余
22、额清零。当余额小于所选货物的价格,系统会停留在这个状态。如果发现有找零信号输入的时候,系统进入找零状态。找零状态主要是对零钱进行找零功能。当每次clk脉冲来临时候,如果上面的余额不为零,系统会自动减一。这样反复进行,直到上面的余额为零。输入的信号的处理,使它不能误判货币的投入次数,采用判断是否有上升沿,以确定投币的次数,当出现几次上升沿,就代表几次投币,这样来防止货币投入次数误判。静态LED七段数码显示译码器,把BCD码识别成人可以识别的数字,显示数字0-9,用于表示元和角单位上的余额。出货显示译码器,显示1-5五个数字,分别代表货物的名称。这样组成一个完整的简易自动售货机。能够实现识别3种的
23、硬币,有5种商品可以选择,找零和余额显示功能。同时在DE2开发板板上进行仿真。以更为直观的方式展现自动售货机的操作过程。第二章 系统各模块硬件设计2.1 DE2开发板介绍本课题采用EP2C35芯片及DE2开发板。数字电子领域中三种基本的器件类型为存储器,微处理器和逻辑器件。存储器是用来存储数据表,数据库,程序代码等随机信息。微处理器通过执行软件指令来完成如文字处理,视频处理及工业控制等各种任务;逻辑器件提供器件间的接口,数据通信,信号处理,数据显示,时序和控制操作以及系统运行等各种特定功能。而逻辑器件又可以分为两大类。即固定逻辑器件和可编程逻辑器件。目前,电子产品的生命周期越来越短,许多消费类
24、电子产品的生命周期只有一年左右的时间,因此必须缩短产品的开发周期。可编程逻辑器件和固定逻辑器件相比,可大大缩短产品的开发周期,而随着集成电路制造工艺的进步,可编程逻辑器件的设计水平不断提高,其成本已经降低到可以在消费类电子产品中大量使用的程度。从当前技术发展的趋势来看,可编程逻辑器件将逐渐取代大部分的秃顶逻辑器件。 软核处理器的出现以及可编程逻辑器件的片上存储器容量的增大,使得可编程逻辑器件已经可以覆盖数字电子领域的中的所有应用。Altera公司推出的可编程芯片系统(system on a programmable chip,SOPC)以及Nios II软核处理器进一步明确了这种概念。Alte
25、ra公司与2000年发布了Nios软核处理器该处理器是一款RISC处理器,是世界第一款专为可编程逻辑优化的可配置处理器。Nios处理器的最新版本Nios处理器是没欠使用得最为管饭的软核处理器。 DE2开发平台是Altera公司针对大学及研究机构推出的一款多媒体开发平台。美国最大的wright-patterson空军研发基地公开评论Altera DE2(包括硬件,软件,教学文件)为有史以来最好的一款多媒体FPGA开发板卡。目前,全球众多名校(如密西根大学安埃布尔分校,麻省理工学院,乔治亚理工学院,滑铁卢大学及多伦多大学等)都将Altera DE2平台大批用于数字逻辑,微处理器及多媒体嵌入式系统教
26、学众多大厂也都以DE2为平台来从事IC设计,国内已有150多所大学在使用de2平台。DE2平台作为一个非常优秀的FPGA设计平台,具有强大的多媒体特性,能够应用在多门课程的教学中,这些课程设计包括“数字逻辑设计”、“数字电路”、“数字信号处理”、“微机原理”、“计算机组成原理”、“数字图像处理”、 “SOPC技术”等。 这此次设计采用的Cyclone 系列的FPGA中的EP2C35, Cyclone 系列是继Cyclone系列低成本的FPGA在市场上去的成功之后,Altera公司推出的更低成本的FPGA,它将成本FPGA的密度扩展到了68416个逻辑单元,从而可以在低成本FPGA上实现复杂的数
27、字系统。Cyclone 系列FPGA采用90nm工艺,与竞争对手采用的90nm工艺的FPGA相比,其性能高出60%而功耗减低一半,而其价格则几乎可以与ASIC产品竞争。优异的性价比使Cyclone 系类的FPGA可以广泛的应用与汽车电子、消费电子、音/视频处理、通信以及测试测量等终端产品市场。2.2 自动售货机各模块设计2.2.1 自动售货机主体设计自动售货机主要利用有限状态机(Finite State Machine,FSM),自动售货机工作的时候,在不同的状态跳转,从而实现其功能。 方案一:以余额数目为状态,当每次投币的时候,根据余额数目跳到相应的状态,这个状态下,进行相应的进行找零,出货
28、物等操作。用case语句语句来描述各个状态之间转移关系。parameter 参数定义相应的一些状态,D代表不同时刻不同状态,在系统复位后机器后开始运行,每一次出售货物的过程中由D记录其状态,表示已经投入钱币的变化。有限的状态机从本质上讲是有寄存器和组合逻辑构成时序电路,各个状态之间的转移总是在时钟的触发下进行的,也可以在设计时将时序逻辑部分和组合逻辑部分分在两个“always”过程块中进行描述,这样以减少一些不必要的寄存器。这种设计方案思路简单,容易看懂。但是,由于设计时候,投入的钱币数量多,所以相应的状态就多,从而增加了源代码所占用的空间,使得源代码不够简练精干。方案二:这个方案是采用很少的
29、状态完成自动售货机的工作,可以将它分成选择货物的状态,投币出货的状态和找零的状态这三种状态。这三种状态的情况下,可以完成系统的基本工作,如图2.1所示。这个方案,用case语句来选择控制各个状态的改变,选择货物状态是开始状态,等待买家选择货物,如果买家没有选择货物也没有投币时,则在这个状态自跳转,如果买家选择了货物,即(Ia | Ib | Ic | Id | Ie)=1时,状态会跳入投币出货的状态,要是买家先投币,即(IY | IWJ | IYJ)=1时,投出来的钱币会进入找零的状态,把投入的钱币退出来。投币出货状态。买家先要进行投币,每次投得相应的面额。硬币的金额都会自动记录下来,相当于一个
30、计数器,同时将已经投的货币的总金额在LED显示器上显示出来。当金额等于货物的价格,即count = price时,会自动出货。系统自动跳到选择货物状态。LED上显示为零,如果金额大于货物的价格的时候,即countprice时,出货,并且自动跳到找零的状态,把多余的零钱找出来。当再投币金额大于9.9元的时候,系统会自动把最后一次投的钱币找出来,当买家按找零开关的时,即IN=1时,系统也会自动跳到找零的状态,把多余的零钱找出来,当金额小于货物的价格的时候,系统会自跳,保持在这个状态,等待货币再次投入,直到投入的金额大于或等于货物的金额。找零状态。这个部分相当于一个减法计数器,当元的单位上不等于0的
31、时候,在每个clk上升沿来临的时候,元单位上就自动减一,直至为0,每减少一次就在元找零输出上输出一次高电平,同样也适用于在角单位上。当他们都为0,即count=0时,代表找零结束,回到货物选择状态。货物选择状态Start投币出货状态 Prossces找零状态 changecount = price(IY | IWJ | IYJ)=1countprice或IN=1(Ia | Ib | Ic | Id | Ie)=1count=0图2.1 方案2有限状态机状态图这种方法状态简单,但思路要清晰明确,设计简单,编程的源代码不需要占用大量的空间,程序精干简约。易于看懂。故本课题选择第二种设计方案。 2.
32、2.2 LED显示设计方案LED显示就是把BCD码变成LED显示出来能够被人能识别的数字,LED显示在通常情况下分为动态显示和静态显示,它们各自有各自的优点。方案一:动态显示。如图2.3所示,动态显示是应用非常常见的显示模式,主要在单片机上应用,动态显示主要利用人眼的视觉暂留,只要延时时间足够短,就能够使得数码的显示看起来非常的稳定清楚。这种方法应用在很多地方,大部分的电子器件的现实设备都是采用动态显示,由于刷新频率高,人眼几乎不能分辨出它在闪烁,由于频率在变,不是一直供电,所以功耗会降低很多,但与静态的LED现实比起来,亮度不够。当Verilog HDL设计显示器时,采用动态显示的源代码设计
33、就比较繁琐,需要设计状态机。给设计带来一定的工作量。方案二:静态显示。静态显示和动态显示正好相反,它一直亮着,所以亮度高、功耗相对高。同时在用Verilog HDL设计的时候,非常简单,所以采用静态显示来做LED的现实方案。显示控制模块图2.2 动态显示原理图显示控制模块 图2.3 静态显示原理图如图2.2是动态显示原理图,下面的两条线是控制LED数码管工作与否的显示,当要求左面那个数码管显示的时候,连接左面数码管的控制线设置为有效,右面的数码管连接线设置为无效,左面的LED数码管就会显示相应的数字,同理要求右边的数码管显示,右边的控制线设置有效。输入的数据和控制线同时变化。如图2.3所示,是
34、静态显示原理图,代码直接传送给LED数码管,直接在上面显示相应的数据。这样编程设计简单,容易实现,易于理解。2.2.3 货币输入信号设计方案 在设计自动售货机的过程中,投币是采用电平触发的方式,为了防止系统错误是认为多次投币,造成误差。需要设计一个货币投入输入信号的处理,使之无论投币产生电平的时间多长,只产生一个和clk信号周期一样的高电平。 clk in out 图2.4 投币输入信号处理理想波形图如图2.4,采用clk上升沿触发的方式,在clk是上升沿时,在判断是in高电平时,是则out就产生一个和clk一个周期的高电平。2.2.4 出货显示设计方案 由于使用DE2的开发板,当出货时,用L
35、ED数码显示器显示何种货物输出,就需要一个译码器,产生可以识别的数字。如出货物A、B、C、D、E,就在LED数码显示器上,对应显示1、2、3、4、5,如图2.5所示。货物显示译码器货物a 货物b 货物c 货物d 货物e 图2.5 出货显示译码器原理图第三章 系统的软件设计3.1 EDA工具软件介绍EDA (Electronic Design Automation) 是电子设计自动化缩写,是90年代初从CAD(计算机辅助设计).CAM(计算机辅助制造).CAT(计算机辅助测试)和CAE(计算机辅助工程)的概念发展而来的。EDA技术是以计算机为工具,根据硬件描述语言HDL(Hardware Des
36、cription language)完成的设计文件,自动地完成逻辑编译、化简、分割、综合及优化、布局布线、仿真以及对于特定目标芯片的适配编译和编程下载等工作。典型的EDA工具中必须包含两个特殊的软件包,即综合器和适配器。综合器的功能就是将设计者在EDA平台上完成的针对某个系统项目的HDL.原理图或状态图形描述,针对给定的硬件系统组件,进行编译、优化、转换和综合,最终获得我们欲实现功能的描述文件。基于EDA工具的FPGA开发流程:1.文本/原理图编辑与修改。首先利用EDA工具的文本或图形编辑器将设计者的设计意图用文本或图形方式表达出来。2.编译。完成设计描述后即可通过编译器进行排错编译,变成特定
37、的文本格式,为下一步的综合做准备。3.综合。这是将软件设计与硬件的可实现性挂钩,是将软件转化为硬件电路的关键步骤。综合后HDL综合器可生成ENIF.XNF或VHDL等格式的网表文件,从门级开始描述了最基本的门电路结构。4.适配。利用FPGA/CPLD布局布线适配器将综合后的网表文件针对某一具体的目标器件进行逻辑映射操作,其中包括底层器件配置。逻辑分割。逻辑优化。布局布线。该操作完成后,EDA软件将产生针对此项设计的适配报告和JED下载文件等多项结果。适配报告指明了芯片内资源的分配与利用。引脚锁定。设计的布尔方程描述情况。5.功能仿真和时序仿真。该不仿真实接近真实器件运行的方针,仿真过程已将器件
38、的硬件特性考虑进去了,因此仿真精度要高的多。6.下载。如果以上的所有过程都没有发现问题,就可以将适配器产生的下载文件通过FPGA/CPLD下载电缆载入目标芯片FPGA或CPLD中。7.硬件仿真与测试。Quartus II软件可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。具有运行速度快,界面统一,功能集中,易学易用等特点。Verilog HDL的最大特点就是易学易用,如果有C语言的编程经验,可以在一个较短的时间内很快的学习和掌握,因而可以把Verilog HDL内容安排在与ASIC设计等相关课程内部进行讲授,由于HDL语言本身是
39、专门面向硬件与系统设计的,这样的安排可以使学习者同时获得设计实际电路的经验。与之相比,VHDL的学习要困难一些。3.2 软件设计总方案 自动售货机主要利用有限状态机(FSM)的状态改变来进行工作,所以需要编写一个实现自动售货机的基本功能的一个主程序,并且封装成一个芯片的符号,但是要想在DE2板子上能够实现,还需要一些其他的程序,并且封装成芯片的符号,用原理图方式连接后,来辅助完成自动售货机的功能。主程序输出的是BCD码,当需要LED数码管显示出能够识别的数字的时候,需要BCD码LED七段数码显示译码器。在判断拨动开关的时候,电平输入的时间很长,但是由于clk脉冲信号很快,这样就会在一个电平输入
40、的时候,系统会误判投入很多次货币,避免这样的问题,我们还需要加上key一个这样的程序,无论拨动开关拨动后,停留的时间有多长,只产生和clk脉冲周期一样的高电平。由于clk脉冲信号很快,输出货物的时候,产生一个脉冲,但是clk的脉冲高达50MHz,人眼根本无法识别。所以加上一个译码器,让它显示数字,代表出了何种货物出货判断译码器 售货机主程序LED七段数码显示译码器输入处理程序key 如图3.1 系统设计总原理图设计方案3.3 售货机主芯片程序设计方案开始各个寄存器清零数据初始化进入货物选择状态进入投币出货状态进入找零状态货物选择?出货找零?零钱找完?如先投钱Y余额大于或等于商品价格时候出货NY
41、YYNNN 图3.2 自动售货机主芯片程序流程图如图3.2自动售货机主芯片流程图,程序开始后,先将各个寄存器清零数据初始化。进入货物选择状态,判断是否选择了货物,如果没有选择货物,返回货物选择状态。如果选择了货物,进入投币出货状态。如果先投入了货币,直接进入找零状态,否则返回货物选择状态;在进入投币出货状态时,余额大于或等于商品的价格时出货。判断是否要找钱,如果是则进入找钱状态,否则返回投币出货状态;进入找零状态,判断零钱是否都找完,如果找完进入选择货物状态,否则返回找零状态。在程序设计的时候,在程序的开始把各个寄存器都清零,数据初始化。采用always过程语句,always ( posedg
42、e clk ) 在clk上升沿触发,在每次上升沿来临时,就执行一次begin到end之间的程序,这样适合用来状态机在各个状态的循环。同时,需要设计一个复位键,使在复位后,各个寄存器都清零,这样在程序启动后,在取完一次货物后,按复位键,又能使各个状态都恢复到初始状态。 在开始的状态(即start)选择货物的状态下,当先投币的时候,应该把投入的钱退出来。所有就需要有设置两个条件语句,当选择货物时,进入process(即投币找零状态)状态。当如果投币的时候,则进入change(即找零状态)。当选择货物的时候用if( Ia | Ib | Ic | Id | Ie )和如果投币则用else if( IY | IWJ | IYJ )这样就可以把他们选择货物和投入钱币分开,|是逻辑或的意思,再选择货物后,就进入将相应货物的价格放到一个寄存器price上,同时出货物的状态也给product这个寄存器上。如果选择了货物,就再下个process状态。如果输入了货币