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

合集下载

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

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

基于FPGA的自动售货机控制系统的设计摘要本文旨在设计一种基于FPGA(现场可编程门阵列)的自动售货机控制系统。

该系统利用FPGA芯片的可编程特性和高性能,能够实现灵活、可靠的自动售货机操作。

本文将详细介绍系统的设计原理、硬件架构和关键功能,并提供实施建议和性能评估。

引言自动售货机已经成为现代社会的常见设备,用于快速、方便地购买商品。

然而,传统的自动售货机控制系统常常受限于固定的硬件结构和有限的功能。

为了提升自动售货机的灵活性和性能,本文提出基于FPGA的控制系统设计。

设计原理基于FPGA的自动售货机控制系统利用FPGA芯片的可编程特性,通过组合逻辑和时序逻辑实现自动售货机的各项功能。

系统将通过外部接口与售货机的硬件部分进行通信,并处理用户输入、商品库存、货币交易等关键操作。

通过FPGA的灵活配置和高速性能,该控制系统能够实现实时响应、精确计算和可靠交互。

硬件架构系统的硬件架构主要包括FPGA芯片、外部接口电路、按钮和显示屏。

FPGA芯片作为核心处理单元,负责运行控制程序和管理系统资源。

外部接口电路用于与售货机硬件部分进行数据传输和控制信号的交互。

按钮和显示屏提供用户与自动售货机进行交互的接口。

关键功能基于FPGA的自动售货机控制系统具备以下关键功能:1. 商品选择和购买:用户可以通过按钮选择所需商品,并进行购买操作。

系统将根据用户选择,实时更新商品库存和计算金额。

2. 货币交易:系统支持不同货币单位的识别和计算。

用户可以通过投币或刷卡等方式完成支付,系统将验证货币的合法性并进行交易处理。

3. 商品库存管理:系统能够实时监测商品库存,并在库存不足时提醒用户或停止销售。

管理员可以通过特定操作进行库存的添加和更新。

4. 故障监测和报警:系统能够监测售货机硬件部分的运行状态,并在故障发生时及时报警或进行相应处理。

实施建议实施基于FPGA的自动售货机控制系统时,可以考虑以下建议:1. 确定系统需求,并合理规划FPGA芯片和外部接口电路的选型和布局。

基于微控制器控制的自动售货机毕业设计论文

基于微控制器控制的自动售货机毕业设计论文

基于微控制器控制的自动售货机毕业设计论文摘要本文介绍了一种基于微控制器控制的自动售货机的设计和实现。

该自动售货机利用微控制器作为控制器,实现了自动售货、库存管理和支付功能。

本文详细阐述了微控制器的选择和系统架构设计,并对系统的各个模块进行了详细描述。

通过实验验证,该自动售货机能够稳定可靠地完成售货、库存管理和支付功能,具有一定的实用性和扩展性。

引言自动售货机作为现代零售业的重要组成部分,已经在各种场景中得到广泛应用。

微控制器作为控制自动售货机的核心部件,具有体积小、功耗低、高可靠性等优势,成为自动售货机的首选控制器。

本文的目标是设计和实现一种基于微控制器控制的自动售货机,并验证其功能和性能。

设计和实现微控制器选择选择合适的微控制器是设计自动售货机的重要步骤。

考虑到自动售货机需要处理多个输入输出信号和具备较高的计算能力,本文选择了性能稳定、成本较低的X系列微控制器作为控制器。

系统架构设计本文设计了一个基于微控制器的自动售货机系统架构。

该架构包括输入输出模块、控制模块和显示模块。

输入输出模块用于检测用户的选择和执行售货等操作,控制模块负责处理输入输出信号并控制货物的售出和库存管理,显示模块用于显示商品信息和支付结果。

系统实现本文通过详细描述每个模块的功能和实现过程,实现了基于微控制器的自动售货机系统。

其中,输入输出模块使用传感器和执行器与用户进行交互,控制模块利用微控制器的计算能力实现售货和库存管理功能,显示模块采用液晶显示屏来展示商品信息和支付结果。

实验验证为了验证基于微控制器的自动售货机的功能和性能,本文进行了一系列实验。

实验结果表明,该自动售货机能够稳定可靠地完成售货、库存管理和支付功能。

在不同的测试场景下,系统均能够准确地识别用户的选择并完成相应的操作,具有较好的实用性和稳定性。

结论本文设计和实现了一种基于微控制器控制的自动售货机。

通过实验验证,该系统能够稳定可靠地完成售货、库存管理和支付功能。

基于FPGA的自动售货机设计

基于FPGA的自动售货机设计

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

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

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

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

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

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

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

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

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

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

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

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

基于 FPGA 的智能控制系统开发与应用

基于 FPGA 的智能控制系统开发与应用

基于 FPGA 的智能控制系统开发与应用随着科技的发展和进步,智能控制系统已经成为现代工业生产的重要组成部分。

其中,基于 FPGA 的智能控制系统备受关注,因为 FPGA 具有高度可编程性、高速处理能力、低功耗等优点,在工业自动化、智能电力、智能交通等领域得到广泛应用。

本文将介绍 FPGA 的基本原理、智能控制系统的开发流程和应用实例,旨在为读者深入了解 FPGA 智能控制系统提供参考和借鉴。

一、 FPGA 的基本原理FPGA(Field Programmable Gate Array,场可编程门阵列)是一种基于硬件描述语言(HDL)设计的数字集成电路(IC)芯片。

FPGA 的实现原理是通过单元块的重新编程,实现不同逻辑功能模块的组合和优化,从而达到高效、低成本、灵活性强的设计要求。

FPGA 的主要构成分为三个部分:输入输出模块、运算逻辑模块和时钟控制模块。

输入输出模块主要负责 FPGA 与外界的通信,包括数据传输、控制信号和电源供应等。

运算逻辑模块则是 FPGA 的核心部分,它包含了可编程的逻辑门电路和存储器单元,负责处理和运算各种数字信号和二进制信息。

时钟控制模块则是管理和同步 FPGA 内部时钟信号的部件,确保各部分协同工作。

二、智能控制系统的开发流程智能控制系统的开发流程主要包括需求分析、方案设计、硬件编程、软件开发、系统测试和产品交付等阶段。

在这些阶段中,硬件编程是 FPGS 的核心环节,对硬件工程师的编程能力和设计思路有较高的要求。

1. 需求分析阶段需求分析阶段是整个智能控制系统开发的重要起点,它包括用户需求、系统规划、数据采集和数据处理等内容。

在这个阶段中,开发团队需要与客户充分沟通,了解用户的需求和期望,明确智能控制系统所要达到的目的和效果。

同时,设计人员需要梳理系统的功能特点和主要技术原理,选取合适的硬件平台和软件工具,对总体方案进行初步思考和设计。

2. 方案设计阶段在需求分析的基础上,团队开始进入方案设计阶段。

FPGA实验报告 系统设计综合实践 自动售货机

FPGA实验报告 系统设计综合实践 自动售货机

FPGA实验报告系统设计综合实践自动售货机引言本实验报告旨在介绍FPGA实验中关于系统设计综合实践的内容,以及针对自动售货机的设计和实现过程。

本项目的目标是通过FPGA实现一个基本的自动售货机,能够接受货币投入并显示余额,实现商品选择和出货的功能。

设计概述在本项目中,我们使用FPGA作为硬件平台进行实现,采用VHDL语言进行编程。

整个设计主要分为三个模块:货币处理模块、商品选择模块和出货控制模块。

货币处理模块货币处理模块负责接收和处理投入的货币,并显示当前的余额。

具体实现过程如下:1.接收货币输入:使用FPGA板载的GPIO接口连接硬币接收器,将接收到的信息传递给FPGA。

2.处理货币信息:通过计算接收到的货币数量和面额,计算出当前的余额。

3.显示余额:使用FPGA板载的数码管显示当前的余额。

根据计算得到的余额,将其显示在数码管上。

商品选择模块商品选择模块负责接收用户的商品选择,并计算选中商品的价格。

具体实现过程如下:1.接收商品选择:使用FPGA板载的按键输入接口,接收用户按下的相应按键,确定用户选择的商品。

2.计算商品价格:根据用户选择的商品,从预先配置的商品价格表中查找相应的价格。

3.显示选中商品价格:使用FPGA板载的数码管显示选中商品的价格。

根据查找到的价格,将其显示在数码管上。

出货控制模块出货控制模块负责控制商品的出货和相关信息的提示。

具体实现过程如下:1.判断余额是否足够:根据当前余额和选中商品的价格,判断余额是否足够购买商品。

2.控制商品出货:如果余额足够购买商品,则触发相应的出货机构,实现商品的出货。

3.提示用户相关信息:根据出货情况,通过数码管显示相关信息,如余额不足、出货成功等提示。

实验结果经过对上述三个模块的设计和实现,我们成功地完成了自动售货机的基本功能。

在实验过程中,我们选取了几种常见的商品,并配置了相应的价格表。

通过按下相应的按键,用户可以选择购买的商品,并通过投币的方式支付。

自动售货机控制系统设计

自动售货机控制系统设计

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

基于PLC的自动售货机控制系统的设计(毕业设计)

基于PLC的自动售货机控制系统的设计摘要此次设计是基于PLC的自动售货机控制系统,首先分析了无人自动售货机的发展历程及发展前景,然后根据其的功能特点详细设计了在此次设计中所需要实现的功能,根据设计功能进行自动售货机的硬件及软件的设计和选型。

在进行硬件设计时选用型号为XINX的步进驱动电机,硬币和纸币识别两种货币处理装置,弹簧推送式的送出机构,需要用到的按钮及指示灯种类,以三菱FX-2N-48MR型PLC为主控制器,软件设计时,基于GX Developer编程软件,采用梯形图进行系统控制程序的设计,包括投币累加、比较选择购买和退币复位程序,并采用GX—Simulator 来进行程序的调试,最后使用组态王软件进行自动售货机的仿真。

该设计是基于市场需要进行的相关功能的设计及仿真,提高了可靠性,符合市场的需求。

关键词:自动售货机,可编程序控制器,梯形图The design of the control system for vending machine based onPLCABSTRACTThe design is a vending machine based on PLC control system, the first analysis of the development and development prospects of vending machine, then according to the features of the detailed design in the design of the need to implement the function. According to the functional design of the design and selection of hardware and software of the automatic vending machine. In hardware design selects the type XINX into driving motor, coins and paper currency recognition two currency handling apparatus, spring push the sending mechanism, need to use the buttons and indicator species, with Mitsubishi FX-2N-48MR type PLC based controller, software design, base on the GX developer programming software by ladder diagram of system control program design, including coin accumulation, comparison and selection of purchase and the coin reduction program, and the GX simulator to carry out the program debugging. Finally, Kingview software vending machine simulation.The design is based on the market need for the relevant functional design and simulation, improve the reliability, in line with the market demand.KEY WORDS: Vending machine,Programmable controller,Ladder diagram目录前言 0第1章自动售货机介绍 (2)1.1 自动售货机功能分析 (2)1.2 本次设计的主要内容 (3)第2章自动售货机硬件设计 (4)2.1 自动售货机控制子系统设计 (4)2.2 自动售货机硬件组成 (5)2.3 PLC介绍及选择 (5)2.3.1 PLC产生及发展 (5)2.3.2 PLC硬件组成 (6)2.3.3 PLC的工作原理 (6)2.3.4 PLC的功能 (7)2.3.5 PLC的选择 (8)2.4货币识别器选型 (10)2.4.1硬币识别 (10)2.4.2纸币识别 (11)2.5送出机构 (11)2.6电机选择 (12)2.7按钮与指示灯选择 (12)2.8显示装置 (12)第3章自动售货机软件设计 (13)3.1 自动售货机控制流程图 (13)3.2 自动售货机程序设计 (14)3.2.1 程序中所需要用到的部分主要指令 (14)3.2.2自动售货机的控制程序 (17)第4章程序的调试及仿真 (24)4.1 梯形图调试 (24)4.1.1调试前期准备 (24)4.1.2 梯形图调试过程 (25)4.2 基于组态王的自动售货机仿真 (30)4.2.1 建立组态画面 (30)4.2.2参数设置 (32)结论 (36)谢辞 (37)参考文献 (38)附录 (39)外文资料翻译 (46)前言公元前3世纪埃及神殿中的投币式圣水出售机是世界上出现最早的自动售货机。

基于FPGA自动售货机设计

基于FPGA的自动售货机设计
contents
目录
• 引言 • FPGA基础 • 硬件设计 • 软件设计 • 测试与验证 • 结论与展望
01 引言
背景介绍
自动售货机是一种自助式销售商品的设备,广泛应用于公共 场所,如车站、机场等。随着科技的发展,自动售货机需要 更加智能化和高效化,以满足人们的需求。
感谢您的观看
05 测试与验证
功能测试
1 2
测试所有预设功能是否正常工作
包括商品选择、支付方式选择、找零、出货等功 能。
测试异常情况下的表现
如无币、无货、故障等情况,看自动售货机是否 能够正确处理。
3
测试用户界面
确保用户界面友好,易于操作。
性能测试
测试自动售货机的响应时间
包括从用户操作到机器反应的时间,以及从支付到出货的时间。
库存管理流程
实时监测商品库存,确保商品 充足,并及时进行补货。
商品选择逻辑
商品列表展示
在自动售货机屏幕上显示所有可售商品的列表。
商品选择方式
用户可以通过点击屏幕、触摸屏或使用按钮选择所需商品。
商品选择验证
验证用户选择的商品是否有效,如检查商品是否在库存中。
支付处理逻辑
支付方式选择
提供多种支付方式供用户选择,如现金、刷卡、 扫码等。
FPGA(现场可编程门阵列)是一种可编程逻辑器件,具有高度 的灵活性和可定制性,能够实现各种数字逻辑功能。基于FPGA 的自动售货机设计可以实现对商品的智能化管理和控制,提高 设备的可靠性和效率。
设计目标
设计一个基于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的自动售货机控制器设计毕业论文目录第1章绪论 (1)1.1自动售货机的起源 (1)1.2自动售货机的现状与发展 (1)1.3自动售货机的研究方向 (2)1.4课题研究任务 (2)1.5 本章小结 (2)第2章开发设计基础 (3)2.1 EDA技术简介 (3)2.2 FPGA简介 (3)2.3 VHDL语言概述 (4)2.3.1 VHDL语言特点 (4)2.3.2 VHDL的优势 (4)2.4 Quartus II软件介绍 (5)2.5 硬件介绍 (5)2.6 本章小结 (6)第3章自动售货机设计方案 (7)3.1 自动售货机整体描述 (7)3.1.1 自动售货机功能要求 (7)3.1.2 自动售货机系统总框图 (7)3.1.3 自动售货机基本流程图 (8)3.2 购物模块 (10)3.2.1 购物模块整体描述 (10)3.2.2 扫描元件 (13)3.2.3 编译元件 (13)3.2.4 数据处理元件 (14)3.2.5 购物数码管译码元件 (15)3.3 定价模块 (15)3.3.1 定价模块整体描述 (16)3.3.2 定价元件 (17)3.3.3 价格BCD译码元件 (18)3.3.4 价格数码管译码元件 (19)3.4 投币模块 (19)3.4.1 投币模块整体描述 (19)3.4.2 投币二进制译码元件 (21)3.4.3 投币BCD译码元件 (22)3.4.4 投币数码管译码元件 (23)3.5 计时模块 (24)3.5.1 计时模块基本流程图 (24)3.5.2 计时模块生成器件 (24)3.5.3 计时模块总功能描述 (24)3.5.4. 仿真结果 (25)3.6 比价模块 (25)3.6.1 比价模块整体描述 (25)3.6.2 比价元件 (27)3.7 复位模块 (30)3.7.1 复位模块生成器件 (30)3.7.2 复位模块总功能描述 (30)3.7.3 仿真结果 (31)3.8 购物显示模块 (32)3.8.1 购物显示模块生成器件 (32)3.8.2 购物显示模块总功能描述 (33)3.8.3 购物显示模块波形仿真 (33)3.9 数码管显示模块 (34)3.10 顶层原理图 (34)3.11 本章小结 (36)第4章下载调试与结果验证 (37)4.1 下载调试 (37)4.2 输出显示 (38)4.2.1所购商品金额大于投币金额 (38)4.2.2所购商品金额等于投币金额 (38)4.2.3所购商品金额小于投币金额 (39)4.2.4有投币无商品选择 (40)4.3 本章小结 (40)第5章总结 (41)参考文献 (42)致谢 (43)基于FPGA的自动售货机控制器设计第1章绪论1.1自动售货机的起源公元前3纪元时,希腊科学家希罗为教堂发放圣水,设制了一个圣水壶。

  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;。

相关文档
最新文档