东南大学信息科学与工程学院 基于FPGA的自动售货机控制系统

合集下载

(完整版)基于FPGA的自动售货机控制系统——开题报告

(完整版)基于FPGA的自动售货机控制系统——开题报告

填写要求1.开题报告只需填写“文献综述”、“研究或解决的问题和拟采用的方法”两部分内容,其他信息由系统自动生成,不需要手工填写。

2.为了与网上任务书兼容及最终打印格式一致,开题报告采用固定格式,如有不适请调整内容以适应表格大小并保持整体美观,切勿轻易改变格式。

3.任务书须用A4纸,小4号字,黑色宋体,行距1.5倍。

4.使用此开题报告模板填写完毕,可直接粘接复制相应的内容到毕业设计网络系统。

内核,一次只能执行一个指令,且基于处理器的系统时刻面临着严格限时的任务相互取占的风险。

而FPGA不使用操作系统,拥有真正的并行执行和专注于每一项任务的确定性硬件,可减少稳定性方面出现问题的可能。

4、长期维护——FPGA芯片是现场可升级的,无需重新设计ASIC所涉及的时间与费用投入。

举例来说,数字通信协议包含了可随时间改变的规范,而基于ASIC的接口可能会造成维护和向前兼容方面的困难。

可重新配置的FPGA芯片能够适应未来需要作出的修改。

随着产品或系统成熟起来,用户无需花费时间重新设计硬件或修改电路板布局就能增强功能。

1.3FPGA实现自动售货机控制系统的基本原理如图1所示,本次设计的售货机是由四个模块组成的,分别为:分频模块、扫描模块、主控模块、显示模块。

图1 自动售货机内部模块分频模块的作用是对外来的时钟信号进行分频以达到自己所需的频率。

扫描模块采用的是实验箱上的4X4矩阵键盘对商品的单价进行手动的输入。

显示模块的作用是对商品的单价、数量以及投币的金额进行显示。

主控模块是自动售货机控制系统的核心模块,主要实现存储商品信息、控制购物进程、处理投币金额、控制商品出货、计算余额以及控制LED灯显示等功能。

其主要分五个步骤来完成:1、信息存储——信息存储是初始设置,对任务所需要的四种商品的价格和数量进行手动的输入并保存,保存完之后系统执行第二个步骤。

2、投币选择——顾客可以投入0.5元、1元、5元、10元四种类型的货币,投币完2.毕业设计任务要研究或解决的问题和拟采用的方法:(1)毕业设计任务要研究或解决的问题研究基于FPGA的自动售货机控制系统问题,要求:①阅读FPGA相关的论文和书籍,系统地了解FPGA相关知识和原理的目的。

-自动售货机的设计

-自动售货机的设计

安康学院FPGA/SOPC课程设计报告书课题名称:自动售货机的设计姓名:学号:院系:电子与信息工程系专业:指导教师:时间:课程设计项目成绩评定表设计项目成绩评定表课程设计报告书目录设计报告书目录一、设计目的 (1)二、设计思路 (1)三、设计过程 (1)3.1、系统方案论证 (1)3.2、模块程序设计 (2)3.3、各单元模块功能介绍及电路设计 (4)四、仿真结果 (6)4.1、设计电路图 (6)4.2、程序生成的原理图 (7)4.3、仿真图 (8)五、对应变量的管脚配置表 (8)六、课程设计体会与建议 (9)6.1、设计体会 (9)6.2、设计建议 (10)七、参考文献 (10)一、设计目的1)熟悉学习QuartusII的编程与调试方式,学会在QuartusII中使用波形图进行软件仿真,并使用EDA6000进行硬件仿真与调试。

2)设计一个自动售货机,具有投币和选择商品等功能二、设计思路1、售货机模块:该模块能完成货物信息的存储,硬币处理,余额计算。

2、动态扫描模块:功能主要是硬件实验板上让两路信号同时在两个7段数码管上显示出来。

3、输出控制模块:该模块主要是控制OUT和OUT1输出信号来控制阀门打开与找钱,并且控制阀门的打开时间。

设计思路:控制信号输入到售货机模块,售货机进行各项功能操作输出信号在7段数码管三、设计过程3.1、系统方案论证3.1.1、自动售货机系统组成框图图1 系统组成框图3.1.2工作原理1)设计一个自动售货机,此机能出售1元、2.5元、3元、3.5元的四种商品。

出售哪种商品可有顾客按动相应的按键即可,并同时用数码管显示售出的是第几种商品;2)顾客可通过选择投入的钱数来购买商品,并且有一个确认键;3)如果选择投入的钱小于选择的商品价格,则显示出价格和选择的钱数,;4) 如果选择投入的钱大于选择的商品价格,则显示出价格和找回的钱;5)此售货机有一个整体复位控制。

3.2、模块程序设计程序如下:module shoumaiji(clk,a,b,duanxuan,weixuan,out,out1);input clk;input a,b; //a为投入0.5元信号,b为投入1元信号output [8:1]duanxuan; //输出8位段选信号output weixuan; //输出1位位选信号output out; //out为高电平时售卖机闸门打开,汽水掉出来output out1; //out1为高电平时候找0.5元reg weixuan;reg [8:1]duanxuan;reg [31:0]count; //数码管动态扫描计数reg [31:0]count1; //用于计算售卖机闸门打开时间reg [4:1]a1,b1; //用a1,b1寄存投入的0.5元和1元硬币数目reg out,out1;always @(posedge a or posedge out)beginif(out==1) a1<=0; //汽水出来后计数值清零else a1<=a1+4'b1;endalways @(posedge b or posedge out)beginif(out==1) b1<=0; //汽水出来后计数值清零else b1<=b1+4'b1;endalways@(posedge clk)beginif(a1==5) out<=1; //因为汽水为2.5,可以给5个0.5元else if(a1==3&&b1==1) out<=1; //可以给3个0.5元和1个1元else if(a1==1&&b1==2) out<=1; //,可以给1个0.5元和2个1元else if(b1==3)begin out<=1;out1<=1;end //可以给3个一块的else if(a1==0&&b1==0)begincount<=count+1;if(count==50) //如果实际运行中发现数码管有闪烁,可以将此数值调小beginweixuan<=1'b0;duanxuan<=8'b00111111; //0endif(count==100) //如果实际运行中发现数码管有闪烁,可以将此数值调小beginweixuan<=1'b1;duanxuan<=8'b00111111;count<=0;endendelse if(a==1) //投币0.5元,显示0.5,假设数码管为共阴极的begincount<=count+1;if(count==50) //如果实际运行中发现数码管有闪烁,可以将此数值调小beginweixuan<=1'b0;duanxuan<=8'b01101101; //5endif(count==100) //如果实际运行中发现数码管有闪烁,可以将此数值调小beginweixuan<=1'b1;duanxuan<=8'b10111111; //0.count<=0;endendelse if(b==1) //投币1元,显示01begincount<=count+1;if(count==50) //如果实际运行中发现数码管有闪烁,可以将此数值调小beginweixuan<=1'b0;duanxuan<=8'b00000110; //1endif(count==100) //如果实际运行中发现数码管有闪烁,可以将此数值调小beginweixuan<=1'b1;duanxuan<=8'b00111111; //0count<=0;endendif(out==1)beginif(count1==3000)//让闸门打开3秒,由于为1KHz时钟,故要数3000下beginout<=0;out1<=0;count1<=0;endelse count1<=count1+1;endendendmodule3.3、各单元模块功能介绍及电路设计自动饮料售货机主要是由以下几个部分构成,电源电路、数码显示、时钟脉冲、投币脉冲、闸门时间控制等,各部件形成一个简单的自动售货机系统。

基于FPGA的数字电源控制技术的研究与实现的开题报告

基于FPGA的数字电源控制技术的研究与实现的开题报告

基于FPGA的数字电源控制技术的研究与实现的开题报告一、选题背景和意义随着数字化时代的到来,数字电源控制技术已经成为现代电子产品中的一个基本要素。

传统的电源控制技术采用模拟控制方法,存在颗粒度较大、控制能力有限、安全性较差等问题。

而基于FPGA的数字电源控制技术可以实现更加稳定、精确、高效的电源控制,能够提高电子产品的安全性、稳定性和可靠性,因此获得了广泛的关注和应用。

本次课题旨在研究基于FPGA的数字电源控制技术,并实现一个基于该技术的数字电源控制器,以验证该技术在实际应用中的可行性和优越性。

二、研究内容和目标本次研究将会涉及以下内容和目标:1. 研究数字电源控制技术的基本原理和相关算法。

2. 设计并实现一个基于FPGA的数字电源控制器,包括电源变换、数字信号处理和控制算法等。

3. 对实现的数字电源控制器进行性能评估,包括稳定性、精度、响应速度等指标的测试和分析。

4. 探讨基于FPGA的数字电源控制技术在实际应用中的优劣势,为其推广和应用提供参考。

三、研究方法和技术路线本次研究将采用以下方法和技术路线:1. 通过文献调查和资料收集,了解数字电源控制技术的基本概念和相关算法。

2. 基于Xilinx FPGA平台,设计并实现一个数字电源控制器,包括模数转换、数字信号处理和控制算法等模块。

3. 对实现的数字电源控制器进行性能评估,包括稳定性、精度、响应速度等指标的测试和分析。

4. 分析数字电源控制技术在实际应用中的优劣势,为其推广和应用提供参考。

四、可行性分析和预期成果本次研究的可行性主要基于以下因素:1. FPGA平台具有良好的性能和可编程性,适合实现数字电源控制器。

2. 数字电源控制技术已经得到广泛应用,其相关算法和模块已经得到了一定程度的验证和应用。

本次研究的预期成果包括:1. 实现一个可用的数字电源控制器原型,能够应对一定的工作场景和环境。

2. 对数字电源控制器的性能进行评估和分析,为其推广和应用提供依据。

基于FPGA自动售货机设计

基于FPGA自动售货机设计

第一层次是行为描述。所谓行为描述,实质 上就是对整个系统的数学模型的描述计过程中存 在的问题。在行为描述阶段,并不真正考虑实际 的操作和算法、用何种方法来实现,而是考虑系 统的结构及其工作的过程是否能够达到系统设计 的要求。
第二层次是RTL方式描述。这一层次成为寄 存器传输描述(又称数据流描述)。如前所述,用 行为方式描述的系统结构的程序,其抽象程度高, 是很难直接映射到具体逻辑元件结构的。想要得 到硬件的具体表现,必须将行为方式描述的 VHDL语言程序改写为RTL方式描述的VHDL语言 程序。也就是说,系统采用RTL方式描述,才能 导出系统的逻辑表达式,才能进行逻辑综合。
五、主要参考文献
[1] 刘韬,楼兴华. 《FPGA数字电子系统设计与开发实例导航》[M]. 北京:人民邮电出版社,2005.6, 27~36. [2] 王辉,殷颖,陈婷,俞一鸣. MAX+plusⅡ和QuartusⅡ应用于开发技巧[M]. 北京:机械工业出版社,2007.1, 293~316. [3] 吴冬梅,吴延海,邓玉玖. 基于CPLD/FPGA 的计费器[J];电子技术应用,2004(11):71~73. [4] 黄智伟. FPGA 系统设计与实践[M].,北京:电子工业出版社,2005,200~217. [5] 黄建新,刘迈,谭克俊. 基于FPGA芯片设计计费器的研究[J]. 吉林化工学院学报,2003(03):52~55. [6] 候伯亨,顾新. VHDL 硬件描述语言与数字逻辑电路设计[M]. 西安:西安电子科技大学出版社,2000. [7] 姜雪松,VHDL设计实例与仿真,北京:机械工业出版社,2007.1,91~103. [8] 王彦芳,王小平,王彦永等.用可编程逻辑器件实现专用数字集成电路的功能设计[J]半导体情报,2000,37 (5)48~51. [9] 张立,张光新,柴磊等. FPGA 在多功能计费器系统中的应用[J]. 仪器仪表学报,2005,26(8): 7352737. [10] 林愿. 基于CPLD/FPGA 的计费器系统的设计实现[J]. 国外电子元器件,2007(07):26~29. [11] 周润景,图雅,张丽敏. 基于Quartus II 的FPGA/CPLD 数字系统设计实例[J]. 北京:电子工业出版社, 2007. [12] [英]Jone Wulenskl. VHDL Digtal System Design,北京:电子工业出版社,2004,10~105. [13] San Jose. MAX+PLUS II IntroductionUSA:Altera Corporation,2004,52~69. [14] James R. Armstrong,VHDL设计表示和综合[M]. 李宗伯,王蓉晖,等译. 北京:机械工业出版社. [15] Altera Corpration. Altera Digital Library. Altera,2002.

基于PLC自动售货机控制系统设计

基于PLC自动售货机控制系统设计

基于PLC自动售货机控制系统设计引言自动售货机作为一种便捷的零售方式,已经广泛应用于各种场景,如商场、学校、车站等。

为了提高自动售货机的功能和性能,PLC(可编程逻辑控制器)被引入到控制系统中。

PLC作为一种可编程的电子设备,能够根据预定的程序和逻辑来控制各种设备和过程。

本文将详细介绍基于PLC自动售货机控制系统设计的相关内容。

一、PLC控制系统概述1.1 PLC基本原理PLC是一种用于工业自动化领域的电子设备,它能够根据预定的程序来实现各种控制功能。

其工作原理是通过输入模块接收外部信号,经过处理后通过输出模块输出信号来实现对设备和过程的控制。

1.2 PLC在自动售货机中的应用在传统自动售货机中,通常使用微处理器或嵌入式系统来实现对设备和过程的控制。

然而,这些传统方式存在着功能有限、扩展性差等问题。

而使用PLC作为自动售货机的控制器,则可以克服这些问题,并且具有更好的稳定性和可靠性。

二、PLC自动售货机控制系统设计2.1 系统结构设计PLC自动售货机控制系统的结构主要包括输入模块、处理单元(CPU)、输出模块和外部设备。

其中,输入模块用于接收外部信号,CPU用于处理信号并执行相应的控制程序,输出模块用于输出信号,外部设备包括货道、显示屏等。

2.2 系统功能设计PLC自动售货机控制系统的功能主要包括货道管理、库存管理、支付管理和故障处理等。

其中,货道管理功能用于管理各个货道上商品的存放和取出;库存管理功能用于实时监测商品库存并生成相应的报表;支付管理功能用于接收用户支付信息并完成交易;故障处理功能用于检测设备故障并进行相应的处理。

2.3 系统程序设计PLC自动售货机控制系统的程序设计是实现各个功能的关键。

在程序设计中,需要考虑到各个输入信号和输出信号之间的关系,并编写相应的逻辑代码。

此外,还需要考虑到异常情况下的处理方式,并编写相应代码进行异常处理。

三、PLC自动售货机控制系统实现3.1 硬件实现PLC自动售货机控制系统的硬件实现主要包括PLC设备的选择和配置,输入模块和输出模块的连接,以及外部设备的接入等。

基于FPGA实现的无人直升机舵机控制模块_0516

基于FPGA实现的无人直升机舵机控制模块_0516

基于FPGA实现的无人直升机舵机控制模块陈松,李冰,陈明园,缪克钻(东南大学集成电路学院,江苏南京,210096)摘要:针对目前无人直升机的控制需要大量的PWM通道,这些通道用于捕获接收机信号以及控制舵机动作。

本文提出了一种基于FPGA的实现PWM多通道的方法。

相比采用ARM芯片来实现,用FPGA方法的更精确,功耗也要低很多。

同时,该方法最大的优点是易于扩展,当需要扩展一个功能时,只需要在内部硬件代码上做一些改动就能实现,不需要更换硬件。

该方案已经在Spartan 3E XC3S 1200E开发板上实现验证,精度以及稳定性都比以前采用ARM实现的要好。

关键词:FPGA;无人直升机;PWMThe Realizing of Servo Motor Control Module of UnmannedHelicopter Based on FPGAChen Song, Li Bing, Chen Minyuan, Miao Kezhuan(College of Integrated Circuits, Southeast University, Nanjing 210096)Abstract: In order to meet the need of abundance PWM channel which the unmanned helicopter used to control the servo motor or to capture the PWM signal that recieved, this paper puts forward a method of realizing multi-channel PWM singal capture and output by pared with the way of using ARM, the method relized by FPGA is more precise and its power consumption is aslo lower.Moreover, the most advantage of it is that it is very easy to expand its function, when need to add or change a function, only need to make some changes of the internal logic code, do not need to change the hardware. The project has been implemented on the development board of Spartan 3E XC3S 1200E for verification,and the results show that its accuracy and stability is better than implementation by the ARM.Key words: FPGA; The Unmanned Helicopter; PWMPWM(Pulse Width Modulation)技术,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。

基于FPGA的自动售货机控制单元设计

基于FPGA的自动售货机控制单元设计

图书分类号:密级:毕业设计(论文) 基于FPGA的自动售货机控制单元设计学生学号学生姓名学院名称专业名称指导教师年月日摘要近年来在随着我国各种大小商品市场快速发展以及城市化不同程度的不断提高,自动售货机已经越来越受到大中城市的青睐,自动售货机在这些大中城市中已经获得了越来越广泛的应用,因此自动售货机的快速发展已经得到了不断的提高和认可,同时自动售货机也极大地丰富了我国的商业产业的结构,是商业结构有了更加丰富的拓展,这样在商业结构中开辟了一种全新的自动自主销售和自动自主服务的时代。

本文将结合大学期间所学的EDA技术实现自动售货机控制系统的设计,应用这种技术实现设计的自动售货机控制系统,将会有效的减小系统的开发周期,同时降低了很多开发成本,因此是一种可行的设计方案和趋势。

该设计在整体设计架构中主要包含两个部分:主要有硬件系统设计部分和FPGA内部电路的编程设计部分。

在FPGA内部电路的编程设计部分主要采用硬件描述语言(Vhdl)对自动售货机的控制系统进行功能描述以及各状态之间的设计。

该设计FPGA硬件部分主要是目前最通用的FPGA之一即ALTERA公司的FPGA芯片为设计目标器件。

该设计中硬件系统设计是围绕系统设计所选合适的FPGA器件的硬件电路进行设计。

本文中将详细介绍了基于FPGA的自动售货机的整体设计方案流程与工作原理及工作状态,在功能叙述中详细阐述了投币选择模块,物品选择模块,主控模块等模块的软件系统设计与实现,在前期设计完成之后对所设计的FPGA内部功能进行功能仿真验证,在确定设计正确无误之后进行下板子测试验证。

关键词FPGA ;EDA;自动售货机;VHDLAbstractWith the continuously prosperity of china’s commodity market and with the rapid develepment of modernization level , vending machines has enterd into large and medium-sized cities quietly ,it enriches china’s commercial industrial structure and creates a new era of automatic selling and self-service.This subject will accomplish the control system of vending machine with EDA technology.Since it has the advantages of shortening product development cycle,reducing product develepment cost , increasing the possibility of first-time success and so on,it can enhence the exploitability of aotomatic machinea and lower the costs.The issue consists of two parts:hardware system design and fpga internal circuit design. Fpga internal circuit design uses hardware describe language (vhdl )to describe the fuction of vending machine;and fpga chip of ALTERA Corporation is choosen for the target device. Hardware system design is a hardware circuit design that center on the selected appropriate fpga device. and the design of the internal functions of FPGA is simulated.Keywords FPGA EDA Vending Machine VHDL目录第1章绪论 (1)1.1 自动售货机的历史 (1)1.2 自动售货机的研究现状 (1)1.3 未来发展和研究方向 (2)1.4 本文的章节安排 (2)第2章关键技术介绍 (4)2.1 EDA技术............................................................................................. 错误!未定义书签。

基于FPGA的自动售货机设计

基于FPGA的自动售货机设计

基于FPGA的自动售货机设计
自动售货机最基本的功能就是为顾客提供可供选择的物品并接受付款,然后交付所选物品。

自动售货机还需要具备一些其他的功能,例如在货品数量低于设定值时警报,更新商家的库存信息等。

基于FPGA的自动售货机设计包括以下步骤:
1. 确定自动售货机的物品种类和数量,并选择相应的电机、传感器和显示器等组件。

2. 设计自动售货机的控制电路,包括接口电路、逻辑电路和中央处理器(CPU)等。

其中,FPGA可以作为逻辑电路的核心部件,负责控制整个自动售货机的操作流程。

3. 利用Verilog HDL编写FPGA的逻辑设计,并通过仿真和测试确保正确性和可靠性。

FPGA的逻辑设计应该能够控制电机的旋转、传感器的检测和显示器的显示等操作。

4. 将FPGA的逻辑设计下载到实验板上并测试它的功能和性能。

在测试过程中需要注意电机的工作效率、传感器的准确性和显示器的清晰度等方面的问题。

5. 将整个自动售货机装在一个外壳中,并测试整个系统的可靠性和用户友好性。

在测试过程中需要关注售货机的操作流程、货品存储和取出的方便程度以及付款方式的安全性等方面的问题。

综上所述,基于FPGA的自动售货机设计需要充分考虑到售货机的各个方面,包括物品种类、控制电路、逻辑设计和用户体验等,以提供高质量和可靠性的售货机。

地铁自动售票机(基于FPGA)设计

地铁自动售票机(基于FPGA)设计

地铁自动售票机(基于FPGA)西安电子科技大学08 级集成电路设计与集成系统专业井站14082094 尹俊镖14082108潘志友14082068 李波14082117一功能需求1市场目标本工程设计是基于FPGA 设计一个地铁自动售票系统。

近年来,集成电路技术的迅猛发展,特别是可编程逻辑器件的高速发展,电子设计自动化EDA 技术成为电子设计工程师的新宠。

然而随着城市人口的迅速增加、车辆的增多,世界各地的城市交通变得愈发拥挤,地铁成为城市交通的重要组成部分。

随着国民经济的发展,我国的地铁建设也日益成为人们日常生活中不可或缺的一部分。

作为地铁运营服务的第一道关,改善地铁已逐渐落后于时代步伐的售票系统势在必行。

本系统是结合行业管理中实际的地铁售票系统运行过程中的需求过程,经过实际的需求分析,开发出来的地铁自动售票系统。

整个系统的设计从符合操作简便快捷、灵活实用、保证稳定安全的要求出发,完成售票管理的基本过程。

2功能定义通过本设计,正确掌握数字系统的模块划分、并能自如应用硬件描述语言描述各模块功能,以实现系统设计。

以Verilog语言和Quartue II,Modlesim 为工具,实现了地铁自动售票系统。

系统划分为几个功能模块,分模块进行分析和设计,系统给出相应的设计原理图和Verilog 源程序,通过仿真实现预定的功能。

本组成员参与设计的自动售票机,就其功能特点来说,可以归纳如下:1)该自动售票系统可对单价为3元、4元、5元,6元四种票售票。

2)能选择买1张或2张票;3)有1元,5元、10元,20元四个投币口。

当投入的钱币与选择的票款相等时,送出车票;若投入的钱币不够,1分钟后,退出钱币,无票送出;若投入的钱币超过票款,能自动找赎。

4)系统显示选择所选票单价面额、购买的票数、投入的钱币额及找赎的钱额。

3应用案例在广州地铁、北京地铁、南京地铁等全国十多条城市轨道交通线路都能见到广电运通自动售票机的身影。

自动售货机控制系统设计

自动售货机控制系统设计

自动售货机控制系统设计概述本文档旨在介绍自动售货机控制系统的设计。

该控制系统负责管理和监控自动售货机的运行,确保正常的售货和货物补充。

在设计过程中,我们将主要关注系统的功能和架构。

功能自动售货机控制系统的主要功能如下:1. 货物库存管理:系统可以监测和追踪自动售货机中各种货物的库存情况。

当货物库存低于预设阈值时,系统将发出警报并触发货物补充流程。

2. 售货管理:系统负责记录每个售货交易的细节,包括购买的货物信息、购买时间和交易金额。

这些数据将用于后续分析和报告。

3. 支付管理:系统可以处理各种支付方式,如硬币、纸币和电子支付。

它能够验证支付的有效性并完成交易过程。

同时,系统还能提供找零功能。

4. 用户接口:系统配备了一个用户友好的界面,方便用户选择和购买商品。

界面应该简洁、直观,并提供货物搜索功能。

5. 运维管理:系统具备远程监控和故障诊断功能,可以实时监测自动售货机的运行状态。

它能够检测故障并自动通知相关人员进行修复。

架构自动售货机控制系统的架构应该具备以下组件:1. 控制单元:负责与自动售货机硬件设备进行通信和控制。

它接收传感器和执行器的数据,并根据系统逻辑做出相应的决策。

2. 数据存储:用于存储货物库存、交易记录、故障日志等数据。

可以选择数据库服务器或云存储平台作为数据存储的解决方案。

3. 用户界面:提供给用户使用的操作界面,可以是物理按钮、触摸屏或手机应用程序。

用户界面与控制单元进行通信以完成交互操作。

4. 通信模块:用于与远程服务器或监控中心进行通信。

可以通过网络连接或无线通信实现,以便实时监测运行状态和发送警报信息。

安全考虑在设计自动售货机控制系统时,需要考虑以下安全问题:1. 数据安全:保护存储在系统中的敏感数据,如交易记录和用户信息,防止被未经授权的人员访问或篡改。

2. 身份验证:确保只有授权人员才能访问系统的管理功能,如货物补充和故障修复。

3. 安全通信:使用安全的通信协议来保护系统与远程服务器之间的数据传输,防止被恶意攻击者窃取信息。

东南大学信息学院地铁售票系统VHDL FPGA

东南大学信息学院地铁售票系统VHDL  FPGA

基于VHDL的地铁售票模拟系统设计报告东南大学信息科学与工程学院2015-9-23目录1.封面 (1)2.目录 (2)3.导言 (3)4.正文 (4)(1)程序结构介绍 (4)①主进程 (4)②分频进程 (5)③译码显示进程 (5)④键盘选择进程 (5)(2)设计中遇到的问题及解决 (5)5.结论与改进 (6)6.人员及任务分配 (6)7.致谢 (7)8.附录 (7)9.参考文献 (16)一、导言在2015年短学期中,我组成员在‚数字系统课程设计‛课程中成功按题目要求设计完成了目标系统——基于VHDL的地铁售票模拟系统。

本文将介绍我组设计过程与结果。

设计题目如下:设计FPGA 模块模拟地铁售票的工作过程,要求功能描述:用于模仿地铁售票的自动售票,完成地铁售票的核心控制功能。

(1)地铁售票机有两个进币孔,可以输入硬币和纸币,售票机有两个进币孔,一个是输入硬币,一个是输入纸币,硬币的识别范围是1 元的硬币,纸币的识别范围是5 元,10 元,20元。

乘客可以连续多次投入钱币。

(2)乘客买票时可以有两种选择,第一种,乘客已经知道所需费用,直接选择票价,可选2元、3元或4元。

第二种,不知道票价,选择出站口,系统以目的地与当前站的站数来进行计算价格(地铁共有16个站,为0-15号站,当前站为0号站,然后通过判断当前站号与目标站号的差来判断需要的钱数。

差距在4站及其以内,价格为2元,5-10站,价格为3元,11-15站,价格为4元)。

(3)得到票价单价后,选择所需购买的票数,然后进行投币,投入的钱币达到所需金额时,售票机自动出票,并找出余额,本次交易结束,等待下一次的交易。

在投币期间,乘客可以按取消键取消本次操作,钱币自动退出。

我组在基本掌握VHDL语言后,自行设计模块,尽可能地完善了编程的精简度与模块化,同时完成了以上所有功能。

二、正文1、程序结构介绍本系统由四个进程组成,分别为主进程、分频进程、译码显示进程、键盘选择进程组成。

FPGA售卖机

FPGA售卖机

大学实验报告课程名称:数字系统现场集成技术实验项目名称:实验四(自动售货机设计和实现)学院:专业:指导教师:报告人:学号:班级:实验时间:实验报告提交时间:教务部制基本要求:该实验为团队协作,2人一个小组。

可以对3种不同种类的货物进行自动售货,价格分别为A=4.00, B=2.50, C=1.00。

售货机可以接受10元,5元,1元三种硬币(即有三种输入信号SY,WY,IY),并且在7段数码管(二位代表元,一位代表角)显示已投入的总钱数,选择货物的输入信号Ia,Ib,Ic,输出指示信号为Sa, Sb ,Sc 分别表示售出相应的货物,同时输出的信号yuan, jiao代表找零,并显示在7段数码管上。

高级要求(可选):VGA显示3种货物图片及其价格,鼠标点击购买数量(1-9)后显示总价,安规格说明2中的button2-button4输入硬币,VGA显示已投入的总钱数,鼠标点击购买后,显示找零数目,购买物品闪烁,交易完成。

规格说明:∙按一下button1按钮,表示购买货物A,第一个LED灯亮;按两下button1按钮,表示购买货物B,第二个LED灯亮;按三下button1按钮,表示购买货物C,第三个LED灯亮,同时7段数码管显示所要购买货物的价格。

∙LED灯亮后,开始输入硬币。

button2按一下,输入10元,按两下,输入二十元,以此类推;Button3按一下输入5元,按两下输入10元,以此类推;button4按一下输入1元,按两下输入2元,以此类推。

7段数码管显示已投入的总钱数,再次按下button1键,7段数码管显示找零数目,同时指示货物的LED灯熄灭。

∙如果投入的钱币不够就按下button1键确认购买,数码管显示“ER”。

∙本实验使用FPGA板:Sparant6XC6SLX16CSG324C(建project时,需要选择该芯片的型号)。

1、顶层代码:module top(input clk,input rst,input[4:0] btn,output[3:0] an,output[7:0] seg,output[2:0] led);wire clk,rst;wire[7:0] first_seg,second_seg,third_seg; wire[4:0] btn_down;seg_drv v1(.clk(clk),.rst(rst),.first_seg(first_seg),.second_seg(second_seg),.third_seg(third_seg),.an(an),.seg(seg));main v2 (.clk(clk),.rst(rst),.btn_down(btn_down),.first_seg(first_seg),.second_seg(second_seg),.third_seg(third_seg),.led(led));btn_scan v3 (.clk(clk),.rst(rst),.btn(btn),.btn_down(btn_down));Endmodule2、数码管驱动:module seg_drv(input clk,input rst,input[7:0] first_seg,input[7:0] second_seg,input[7:0] third_seg,// input[7:0] forth_seg,output reg[3:0] an,output reg[7:0] seg);localparam[1:0] s0=2'b00,s1=2'b01,s2=2'b10,s3=2'b11;reg[1:0] state;always@(posedge clk,posedge rst)beginif(rst)beginan<=4'b1111;seg<=8'b1111_1111;state<=s0;endelsebegincase(state)s0:beginan<=4'b1110;seg<=first_seg;if(ms_up)state<=s1;elsestate<=state;ends1:beginan<=4'b1101;seg<=second_seg;if(ms_up)state<=s2;elsestate<=state;ends2:beginan<=4'b1011;seg<=third_seg;if(ms_up)state<=s3;elsestate<=state;ends3:beginan<=4'b0111;seg<=8'b1111_1111;if(ms_up)state<=s0;elsestate<=state;endendcaseendendreg[17:0] ms_cnt;reg ms_up;always@(posedge clk,posedge rst)beginif(rst)beginms_cnt<=0;ms_up<=0;endelsebeginif(ms_cnt==200000)beginms_cnt<=0;ms_up<=1;endelsebeginms_cnt<=ms_cnt+1'b1;ms_up<=0;endendendendmodule3、按键扫描与消抖:module btn_scan(input clk,input rst,input[3:0] btn,output reg[3:0] btn_down);localparam[1:0] s0=2'b00,s1=2'b01,s2=2'b10;reg[1:0] state;reg[3:0] btn_reg;always@(posedge clk,posedge rst)beginif(rst)beginbtn_down<=4'b0000;state<=s0;endelsebegincase(state)s0: beginbtn_down<=4'b0000;if(btn)state<=s1;elsestate<=s0;ends1: beginif(cnt_done)beginif(btn)beginstate<=s2;btn_reg<=btn;endelsestate<=s0;endelsestate<=s1;ends2:beginif(btn==4'b0000)beginbtn_down<=btn_reg;state<=s0;endelsebeginbtn_down<=btn_down;state<=s2;endendendcaseendendreg[20:0] cnt;reg cnt_done;always@(posedge clk,posedge rst)beginif(rst)begincnt<=21'b0;cnt_done<=1'b0;endelse if(state==s1)begincnt<=cnt+1'b1;if(cnt==21'd2000000)begincnt<=21'b0;cnt_done<=1'b1;endendelsebegincnt<=21'b0;cnt_done<=1'b0;endendendmodule4、主程序code:module main(input clk,input rst,input[3:0] btn_down,output reg[7:0] first_seg,output reg[7:0] second_seg,output reg[7:0] third_seg,output reg[2:0] led);localparam[2:0] s0=3'b000,s1=3'b001,s2=3'b010,s3=3'b011,s4=3'b100,s5=3'b101;reg[2:0] state;reg[3:0] money0,money1;reg[3:0] price;reg[4:0] change;reg[3:0] change1,change0;always@(posedge clk,posedge rst)beginif(rst)beginled <= 3'b000;money0 <= 0;money1 <= 0;change <= 0;price <= 0;state <= s0;endelsebegincase(state)s0:beginled <= 3'b000;if(btn_down[0] == 1)state <= s1;elsestate <= s0;ends1:beginled <= 3'b100;price <= 1;money0 <= 0;money1 <= 0;change<=0;if(btn_down[0] == 1)state <= s2;else if(btn_down[3:1])state <= s4;elsestate <= s1;ends2:beginled <= 3'b010;price<=2.5;money0 <= 0;money1 <= 0;change <= 0;if(btn_down[0] == 1)state <= s3;else if(btn_down[3:1])state <= s4;elsestate <= s2;ends3:beginled <= 3'b001;price <= 4;money0 <= 0;money1 <= 0;change <= 0;if(btn_down[0] == 1)state <= s1;else if(btn_down[3:1])state <= s4;elsestate <= s3;ends4:begincase(btn_down[3:1])3'b001:money1 <= money1 + 1;3'b010:beginmoney0 = money0 + 5;if(money0 >= 10)beginmoney1 <= money1 + 1;money0 <= money0 - 10;endelsemoney1 <= money1;end3'b100:beginmoney0 <= money0 + 1;if(money0 >= 9)beginmoney1 <= money1 + 1;money0 <= 0;endelsemoney1 <= money1;endendcaseif(btn_down[0] == 1)state <= s5;elsestate<=s4;ends5:beginif((money1*10 + money0)>= price)beginchange <= money1*10 + money0 - price;if(change >= 20)beginchange1 <= 2;change0 <= change - 20;endelse if(change >= 10)beginchange1 <= 1;change0 <= change - 10;endelsebeginchange1 <= 0;change0 <= change;endendelsechange <=5'b01110;if(btn_down[3:0])state <= s0;elsestate<=s5;endendcaseendend//译码always@(posedge clk,posedge rst)beginif(state == s0)beginthird_seg<=8'b0000_0011;second_seg<=8'b0000_0010;first_seg<=8'b0000_0011;endelse if(state == s1)beginthird_seg<=8'b0000_0011;second_seg<=8'b1001_1110;first_seg<=8'b0000_0011;endelse if(state ==s2)beginthird_seg<=8'b0000_0011;second_seg<=8'b0010_0100;first_seg<=8'b0100_1001;endelse if(state ==s3)beginthird_seg<=8'b0000_0011;second_seg<=8'b1001_1000;first_seg<=8'b0000_0011;endelse if(state ==s4)begincase(money0)4'b0000: second_seg<=8'b0000_0010;4'b0001: second_seg<=8'b1001_1110;4'b0010: second_seg<=8'b0010_0100;4'b0011: second_seg<=8'b0000_1100;4'b0100: second_seg<=8'b1001_1000;4'b0101: second_seg<=8'b0100_1000;4'b0110: second_seg<=8'b0100_0000;4'b0111: second_seg<=8'b0001_1110;4'b1000: second_seg<=8'b0000_0000;4'b1001: second_seg<=8'b0000_1000;endcasecase(money1)4'b0000: third_seg<=8'b0000_0011;4'b0001: third_seg<=8'b1001_1111;4'b0010: third_seg<=8'b0010_0101;4'b0011: third_seg<=8'b0000_1101;4'b0100: third_seg<=8'b1001_1001;4'b0101: third_seg<=8'b0100_1001;4'b0110: third_seg<=8'b0100_0001;4'b0111: third_seg<=8'b0001_1111;4'b1000: third_seg<=8'b0000_0001;4'b1001: third_seg<=8'b0000_1001; endcasefirst_seg<=8'b0000_0011;endelse if(state ==s5)beginif(change == 5'b01110)beginthird_seg<=8'b0000_0011;second_seg<=8'b0110_0001;first_seg<=8'b0110_0001;endelsebegincase(change0)4'b0000: second_seg<=8'b0000_0010;4'b0001: second_seg<=8'b1001_1110;4'b0010: second_seg<=8'b0010_0100;4'b0011: second_seg<=8'b0000_1100;4'b0100: second_seg<=8'b1001_1000;4'b0101: second_seg<=8'b0100_1000;4'b0110: second_seg<=8'b0100_0000;4'b0111: second_seg<=8'b0001_1110;4'b1000: second_seg<=8'b0000_0000;4'b1001: second_seg<=8'b0000_1000;4'he:second_seg<=8'b0110_0000;endcasecase(change1)4'b0000: third_seg<=8'b0000_0011;4'b0001: third_seg<=8'b1001_1111;4'b0010: third_seg<=8'b0010_0101;4'b0011: third_seg<=8'b0000_1101;4'b0100: third_seg<=8'b1001_1001;4'b0101: third_seg<=8'b0100_1001;4'b0110: third_seg<=8'b0100_0001;4'b0111: third_seg<=8'b0001_1111;4'b1000: third_seg<=8'b0000_0001;4'b1001: third_seg<=8'b0000_1001;endcaseif(led[1] == 1)first_seg<=8'b0100_1001;elsefirst_seg<=8'b0000_0011;endendendendmodule三、实验结果:买货物2,价格2.5,投币15,找零12.5金币不够显示为错误深圳大学学生实验报告用纸四、实验结论:通过此次实验加深了对数码管驱动以及按键扫描与消抖工作原理的的运用,对各个模块搭建系统也有了新的认识。

校级汇总表

校级汇总表

6.5 4.4 7.0 4.0 7.0 5.0 6.5 7.0 2.0
张兴稳04008209(1.0)、江 涛04008241(1.0)、谈冬晖04008235(1.2)、荆舒 晟04008223(1.0)、周炳宇04008211(0.2) 王加锋04208718(2.5)、胡雯婷04208712(2.0)、任 鑫04208720(1.0)、胡一苗04008437(0.5) 婧14509117(1.0)、张金
18 19
简易心电图的设计 短距离无线传输温度采集系统
团哲恒04008619(0.4)、朱晨晨04208701(2.0)、霍 鋆04008333(2.0)、尤 优04008528(2.0) 孟竟成04008610(2.0)、李 阳04008611(0.6)、王 10042090 磊04008636(0.6) 10042088 10042091
10042024 郁美霜04008604(2.0)、袁艺青04008640(1.0)、黄夷芯04008401(1.0)、 10042047 10042049 10042053 吴华月04008606(2.0)、孔烨达04208714(1.5)、袁 晨04208701(0.2)、陆雨虹04028702(0.2) 张 丽04008403(1.5)、蒋 川04008429(0.6) 莉04008407(0.8)、姜 颖04008239(0.5)、朱晨 军04008419(1.3)、秦
10042154 陈东杰04008631(2.6)、王文龙04008630(2.2)、陈恒磊04008636(2.2) 马朔昕04008109(0.2)、王从杰04008110(2.5)、牟学凯04008111(2.5)、仇 10042157 诚04008112(2.5)、黄昊泽04008113(0.7)、邱才生04008117(0.7)、刘 晶 04008114(0.7) 10042162 钱忠洋04008118(1.0)、秦为帅04008119(1.2)、邓文强04008121(1.0)、黄如 意04008122(1.0)

自动售货机控制模块VHDL程序设计及FPGA实现

自动售货机控制模块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 为 工 具 描 述 了 完成程 序设 计 、编译及 时序 仿真 ,然 作
能 的 描述 , 可 以 由计 算机 软 件进 行 就
自动 售 货 机 控 制 模 块 的 逻 辑 控 制 电 后 将 经 过 验 证 的 设 计文 件 下 载 到 选 择
可 以 避 免 这 些 烦 琐 的 过 程 ,直 接 利 用

基于_fpga_的直流电机综合测控系统电路设计

基于_fpga_的直流电机综合测控系统电路设计

基于fpga 的直流电机综合测控系统电路设计1. 引言1.1 概述随着科技的不断进步和电机技术的广泛应用,直流电机在工业生产和自动控制领域发挥着重要作用。

直流电机的测控系统是实现对电机运行状态、控制以及数据采集等功能的关键部分。

本文将介绍基于FPGA(现场可编程门阵列)的直流电机综合测控系统电路设计。

1.2 文章结构本文主要分为五个部分:引言、直流电机测控系统概述、FPGA基础知识和相关技术介绍、直流电机综合测控系统的电路设计要点以及实验结果与分析。

其中,引言部分对论文主题进行了简要介绍,同时提出文章目的和结构。

1.3 目的本篇长文旨在通过对FPGA在直流电机测控系统中应用的研究,设计出高效且稳定可靠的直流电机测控系统。

通过深入分析和实验验证,揭示FPGA在这一领域中所具有的优势,并展示其在驱动电路设计、信号采集与处理以及系统通信接口方面所能提供的解决方案。

通过实验结果与分析,评估系统的性能,进一步证明该设计方案的可行性和有效性。

以上是“1. 引言”部分内容。

2. 直流电机测控系统概述2.1 直流电机工作原理直流电机是一种将直流电能转换为机械能的电动机。

其工作原理基于洛伦兹定律和摩擦力等物理原理。

直流电机由定子和转子组成,其中定子通常由线圈构成而转子则是一个旋转部件。

当通过定子中通入直流电流时,形成了磁场,这个磁场与转子上带有导线的部分相互作用,产生了力矩,使得转子开始旋转。

2.2 测控系统的重要性测控(Measurement and Control)系统在工程领域中具有广泛应用。

对于直流电机而言,测控系统可以实现对驱动、监控、调节等方面的功能,以确保电机能够稳定运行并满足特定需求。

测量和控制技术在直流电机领域中非常关键,因为它们可以帮助精确获取并处理与运行参数相关的信息,并根据需要进行相应的调整。

2.3 FPGA在测控系统中的应用优势FPGA(Field-Programmable Gate Array)是一种可编程逻辑器件,被广泛应用于测控系统中。

用fpga做自动控制原理

用fpga做自动控制原理

用fpga做自动控制原理FPGA(可编程逻辑门阵列)是一种重要的数字电路设计和实现工具,广泛应用于自动控制领域。

通过利用FPGA的灵活性和高度可编程性,可以实现高效、快速、精确的自动控制系统。

本文将一步一步回答使用FPGA 进行自动控制原理的相关问题。

第一步:FPGA的概述FPGA是一种可编程逻辑门阵列芯片,它由大量的逻辑门、触发器和存储器单元组成,可以根据设计者的需求进行灵活的编程。

与固定逻辑门电路相比,FPGA可以通过重新编程来改变其功能,因此非常适合用于自动控制系统的设计和实现。

第二步:自动控制的基本原理自动控制是通过测量被控制对象的状态,与预设的参考值进行比较,然后根据比较结果采取相应的控制手段来改变被控制对象的状态,使其保持在预设值附近。

自动控制系统由测量、比较、计算和控制四个基本部分组成。

第三步:FPGA在自动控制系统中的作用FPGA在自动控制系统中起到重要的作用,它可以用来实现控制算法、信号处理和输入输出接口等功能。

通过FPGA的灵活编程,可以根据实际需求对自动控制系统进行高度定制化的设计。

第四步:FPGA的编程方法FPGA的编程可以使用硬件描述语言(HDL)如VHDL或Verilog进行编写。

这些语言描述了电路的行为和结构,通过编译和综合工具将其转换为FPGA可执行的二进制代码。

编程人员可以使用HDL来实现自动控制算法、数据处理和各种输入输出接口等功能。

第五步:FPGA的实时性和并行处理能力FPGA具有非常高的实时性能和并行处理能力,这使其成为自动控制系统的理想选择。

FPGA内部的逻辑门和触发器可以在时钟信号的驱动下以非常高的速度运行,从而实现实时响应。

另外,FPGA具有大量的计算资源和片上存储器,可以并行执行多个任务,进一步提高系统的性能。

第六步:FPGA在自动控制系统中的应用案例FPGA在自动控制系统中有广泛的应用案例。

例如,在工业自动化中,FPGA 可以用于控制和监测传感器、执行器和通信接口,实现智能化的生产流程。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数字系统课程设计--基于FPGA的自动售货机组长:师楠(04010512)组员:徐璇(04010505)一、设计要求:功能描述:用于模拟自动售货机的工作过程,完成自动售货功能。

功能要求:(1)售货机有两个进币孔,可以输入硬币和纸币,售货机有两个进币孔,一个是输入硬币,一个是输入纸币,硬币的识别范围是1 元的硬币,纸币的识别范围是5 元,10 元,20,50 元,100元。

乘客可以连续多次投入钱币。

(2)顾客可以选择的商品种类有16 种,价格分别为1-16 元,顾客可以通过输入商品的编号来实现商品的选择。

即有一个小键盘(0-9 按键)来完成,比如输入15 时要先输入1,再输入5。

(3)顾客选择完商品后,可以选择需要的数量。

然后可以继续选择商品及其数量,每次可以选择最多三个商品。

然后显示出所需金额。

顾客此时可以投币,并且显示已经投币的总币值。

当投币值达到或超过所需币值后,售货机出货,并扣除所需金额,并找出多余金额。

在投币期间,顾客可以按取消键取消本次操作,钱币自动退出。

二、课题分析1)进行购物时,顾客依次选择商品种类和对应的商品数量。

一共有16种商品,编号分别为1-16,顾客通过(0-9按键)小键盘输入商品编号和对应的商品数量。

若顾客继续选择商品则按下“继续购物”按钮,继续选择下一商品的种类和数量。

最多可以选择三种商品,每种商品最多可选择三个。

若在商品选择过程中顾客按下“取消”按钮,则回到初始化状态,顾客重新进行选择。

2)完成选择后,自动售货机显示所需金额,编号1-16的商品价格分别为1-16元。

顾客根据所需金额继续投币,可以连续多次投入1元的硬币和5 元,10 元,20,50 元,100元的纸币。

当投币总额大于所需金额时,自动售货机出货并找出零钱。

若在投币过程中顾客按下“取消”按钮,则自动售货机自动退出顾客已经投入的钱币。

3)根据按键的数值范围(0-9)和商品数量(1-3)的选择范围,设置三个端口,分别用于接收商品编号的个位(4位)、商品编号的十位(4位)、商品数量(2位)。

若顾客在商品选择的过程中,选择了三种以上商品或三个以上的个数,则系统不对其作出反应。

4)附加功能:管理人员按下reset 按钮后,系统重置。

默认每种商品机内存货15个,系统进入初始化状态后会自动显示商品剩余库存。

三、 系统运行流程:开始reset=1YNpre_stateinitial_state输入商品编号输入次数小于3输入商品数量cancel=1计算商品总额total_priceYNYNitem_statequantity_state计算商品剩余库存并输出continue=1输出total_pricecancel=1投币couterchange_out<=countercounter>total_pricecancel=1change_out<=countercounter>total_pricecancel=1change_out<=counter计算找零额输出货物、找零N YN YNYYNYNYNquantity_statemoney_statecompare_statechange_state finish_stat四、程序调试编译通过,如图所示:五、波形仿真:在创建的波形仿真文件中,添加所有输入输出端口进行仿真。

时钟周期设定为10ns,测试系统的所有功能是否正常。

管理员将reset置1;第一次:购买11号商品3件,投入三枚一员硬币,一张一百元纸币;第二次:购买01号商品1件,continue,购买10号商品2件,continue,购买13号商品3件;投入一张五十纸币,一张十元纸币;第三次:购买03号商品2件,cancel;第四次:购买16号商品2件;投入一张五十纸币;cancel;六、附源代码library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;----------*************************************---------------------- entity AUTOSELLER is --实体port( --端口定义clk :in std_logic; --时钟continue,cancel,reset :in std_logic; --继续购物、取消、复位coin :in std_logic; --投入硬币cash :in std_logic_vector(4 downto 0); --投入纸币item0 :in std_logic_vector(3 downto 0); --选货个位item1 :in std_logic_vector(3 downto 0); --选货十位quantity :in std_logic_vector(1 downto 0); --货物数量one_out :out std_logic_vector(4 downto 0);--找钱five_out :out std_logic_vector(4 downto 0);ten_out :out std_logic_vector(4 downto 0);twenty_out :out std_logic_vector(4 downto 0);fifty_out :out std_logic_vector(4 downto 0);hundred_out :out std_logic_vector(4 downto 0);item0_out :out std_logic_vector(7 downto 0); --出货种类item1_out :out std_logic_vector(7 downto 0);item2_out :out std_logic_vector(7 downto 0);quantity0_out :out std_logic_vector(1 downto 0); --出货数量quantity1_out :out std_logic_vector(1 downto 0);quantity2_out :out std_logic_vector(1 downto 0);sum_out :out std_logic_vector(9 downto 0);--商品总额累计输出available1_out :out std_logic_vector(3 downto 0);--输出库存available2_out :out std_logic_vector(3 downto 0);available3_out :out std_logic_vector(3 downto 0);available4_out :out std_logic_vector(3 downto 0);available5_out :out std_logic_vector(3 downto 0);available6_out :out std_logic_vector(3 downto 0);available7_out :out std_logic_vector(3 downto 0);available8_out :out std_logic_vector(3 downto 0);available9_out :out std_logic_vector(3 downto 0);available10_out :out std_logic_vector(3 downto 0);available11_out :out std_logic_vector(3 downto 0);available12_out :out std_logic_vector(3 downto 0);available13_out :out std_logic_vector(3 downto 0);available14_out :out std_logic_vector(3 downto 0);available15_out :out std_logic_vector(3 downto 0);available16_out :out std_logic_vector(3 downto 0));end AUTOSELLER;------------*************************************----------------- architecture behave of AUTOSELLER issignal price :std_logic_vector(7 downto 0); --单个商品价格signal counter :std_logic_vector(9 downto 0); --投币总额signal total_price :std_logic_vector(9 downto 0); --商品总额累计shared variable number1 :std_logic_vector(3 downto 0); --暂存库存shared variable number2 :std_logic_vector(3 downto 0);shared variable number3 :std_logic_vector(3 downto 0);shared variable number4 :std_logic_vector(3 downto 0);shared variable number5 :std_logic_vector(3 downto 0);shared variable number6 :std_logic_vector(3 downto 0);shared variable number7 :std_logic_vector(3 downto 0);shared variable number8 :std_logic_vector(3 downto 0);shared variable number9 :std_logic_vector(3 downto 0);shared variable number10 :std_logic_vector(3 downto 0);shared variable number11 :std_logic_vector(3 downto 0);shared variable number12 :std_logic_vector(3 downto 0);shared variable number13 :std_logic_vector(3 downto 0);shared variable number14 :std_logic_vector(3 downto 0);shared variable number15 :std_logic_vector(3 downto 0);shared variable number16 :std_logic_vector(3 downto 0);type state_type is(pre_state,initial_state,item_state,quantity_state,money_state,co mpare_state,change_state,finish_state); -- 定义一个类型state_type,且值为(……)signal state :state_type;beginprocess(continue,clk,reset)variable change :std_logic; --为1允许找钱variable change_out :std_logic_vector(9 downto 0);--找钱总额暂存variable one_tmp :std_logic_vector(4 downto 0);--找钱数暂存variable five_tmp :std_logic_vector(4 downto 0);variable ten_tmp :std_logic_vector(4 downto 0);variable twenty_tmp :std_logic_vector(4 downto 0);variable fifty_tmp :std_logic_vector(4 downto 0);variable hundred_tmp :std_logic_vector(4 downto 0);variable n :integer range 0 to 2; --暂存选货次数variable itemout0,itemout1,itemout2:std_logic_vector(7 downto 0);--种类暂存variable quanout0,quanout1,quanout2:std_logic_vector(1 downto 0);--货物数量暂存variable cancel_tmp :std_logic; --取消暂存beginif(clk'event and clk='1')thenif reset='1' thenstate<=pre_state;end if;case state is------------*************pre_state***************---------------when pre_state=>number1:="1111";number2:="1111";number3:="1111";number4:="1111";number5:="1111";number6:="1111";number7:="1111";number8:="1111";number9:="1111";number10:="1111";number11:="1111";number12:="1111";number13:="1111";number14:="1111";number15:="1111";number16:="1111";state<=initial_state;-----------**************initial_state****************--------------when initial_state=>item0_out<="00000000";item1_out<="00000000";item2_out<="00000000";quantity0_out<="00";quantity1_out<="00";quantity2_out<="00";one_out<="00000";five_out<="00000";ten_out<="00000";twenty_out<="00000";fifty_out<="00000";hundred_out<="00000";sum_out<="0000000000";available1_out<=number1;available2_out<=number2;available3_out<=number3;available4_out<=number4;available5_out<=number5;available6_out<=number6;available7_out<=number7;available8_out<=number8;available9_out<=number9;available10_out<=number10;available11_out<=number11;available12_out<=number12;available13_out<=number13;available14_out<=number14;available15_out<=number15;available16_out<=number16; total_price<="0000000000"; counter<="0000000000";change:='0';n:=0;one_tmp:="00000";five_tmp:="00000";ten_tmp:="00000";twenty_tmp:="00000";fifty_tmp:="00000";hundred_tmp:="00000";itemout0:="00000000";itemout1:="00000000";itemout2:="00000000";quanout0:="00";quanout1:="00";quanout2:="00";cancel_tmp:='0';state<=item_state;----------************** item_state ****************-----------when item_state=>if n<3 thencase (item1&item0) iswhen "00000001"=>price<="00000001";when "00000010"=>price<="00000010";when "00000011"=>price<="00000011";when "00000101"=>price<="00000101";when "00000110"=>price<="00000110";when "00000111"=>price<="00000111";when "00001000"=>price<="00001000";when "00001001"=>price<="00001001";when "00010000"=>price<="00001010";when "00010001"=>price<="00001011";when "00010010"=>price<="00001100";when "00010011"=>price<="00001101";when "00010100"=>price<="00001110";when "00010101"=>price<="00001111";when "00010110"=>price<="00010000";when others=>null;end case;if (item1&item0)="00000000" thenstate<=initial_state;else case n iswhen 0 => itemout0:= item1&item0;when 1 => itemout1:= item1&item0;when 2 => itemout2:= item1&item0;when others=>null;end case;state<=quantity_state;end if;else state<=money_state;end if;-----------************ quantity_state ************------------when quantity_state=>if(cancel='1')thenstate<=initial_state;elseif quantity="00" thenchange:='0';change_out:="0000000000";state<=initial_state;elsetotal_price<=total_price+price*quantity;case n iswhen 0 => quanout0:= quantity;n:=n+1;when 1 => quanout1:= quantity;n:=n+1;when 2 => quanout2:= quantity;n:=n+1;when others=>null;end case;case price iswhen"00000001"=>number1:=number1-quantity;when"00000010"=>number2:=number2-quantity;when"00000011"=>number3:=number3-quantity;when"00000100"=>number4:=number4-quantity; when"00000101"=>number5:=number5-quantity; when"00000110"=>number6:=number6-quantity; when"00000111"=>number7:=number7-quantity; when"00001000"=>number8:=number8-quantity; when"00001001"=>number9:=number9-quantity; when"00001010"=>number10:=number10-quantity; when"00001011"=>number11:=number11-quantity; when"00001100"=>number12:=number12-quantity; when"00001101"=>number13:=number13-quantity; when"00001110"=>number14:=number14-quantity; when"00001111"=>number15:=number15-quantity; when"00010000"=>number16:=number16-quantity; when others=>NULL;end case;available1_out<=number1;available2_out<=number2;available3_out<=number3;available4_out<=number4;available5_out<=number5;available6_out<=number6;available7_out<=number7;available8_out<=number8;available9_out<=number9;available10_out<=number10;available11_out<=number11;available12_out<=number12;available13_out<=number13;available14_out<=number14;available15_out<=number15;available16_out<=number16;if(continue='1')then state<=item_state;else state<=money_state;end if;end if;end if;----------************ money_state ************-----------when money_state=>sum_out<=total_price;if(cancel='1')thencancel_tmp:='1';change:='1';change_out:=counter;state<=change_state;elsecase cash&coin iswhen "000001"=>counter<=counter+1;when "000010"=>counter<=counter+5;when "000100"=>counter<=counter+10;when "001000"=>counter<=counter+20;when "010000"=>counter<=counter+50;when "100000"=>counter<=counter+100;when others=>null;end case;state<=compare_state;end if;-----------************ compare_state ************------------when compare_state=>if(cancel='1')thencancel_tmp:='1';change:='1';change_out:=counter;state<=change_state;elseif counter>=total_price thenchange:='1';change_out:=counter-total_price;state<=change_state;else state<=money_state;end if;end if;----------************ change_state ************----------when change_state=>if(cancel='1')thenchange:='1';cancel_tmp:='1';change_out:=counter;end if;if(change_out>=100) thenhundred_tmp:=hundred_tmp+1;change_out:=change_out-100;end if;if(change_out>=50)thenfifty_tmp:=fifty_tmp+1;change_out:=change_out-50; end if;if(change_out>=40)thentwenty_tmp:=twenty_tmp+2;change_out:=change_out-40; end if;if(change_out>=20)thentwenty_tmp:=twenty_tmp+1;change_out:=change_out-20; end if;if(change_out>=10)thenten_tmp:=ten_tmp+1;change_out:=change_out-10; end if;if(change_out>=5)thenfive_tmp:=five_tmp+1;change_out:=change_out-5; end if;if(change_out>=4)thenone_tmp:=one_tmp+4;change_out:=change_out-4; end if;if(change_out>=3)thenone_tmp:=one_tmp+3;change_out:=change_out-3; end if;if(change_out>=2)thenone_tmp:=one_tmp+2;change_out:=change_out-2;end if;if(change_out>=1)thenone_tmp:=one_tmp+1;change_out:=change_out-1;end if;if(cancel_tmp='1')thenitemout0:="00000000";itemout1:="00000000";itemout2:="00000000";quanout0:="00";quanout1:="00";quanout2:="00";end if;state<=finish_state;--------************ finish_state ************-----------when finish_state=>one_out<=one_tmp;five_out<=five_tmp;ten_out<=ten_tmp;twenty_out<=twenty_tmp;fifty_out<=fifty_tmp;hundred_out<=hundred_tmp;item0_out<=itemout0;item1_out<=itemout1;item2_out<=itemout2;quantity0_out<=quanout0;quantity1_out<=quanout1;quantity2_out<=quanout2;state<=initial_state; end case;end if;end process;end behave;。

相关文档
最新文档