ionicons-v5-f

基于二段式状态机的自动投币售货机设计

实验题目:基于二段式状态机的自动投币售货机设计

课程简要信息

课程名称:数字电路与逻辑设计

课程学时:80学时

项目学时:2学时

适用专业:电子工程学院:电信科学与技术专业、雷电防护科学与技术专业、电子信息工程专业、生物医学工程专业、控制工程学院、电气工程及其自动化专业、测控技术与仪器专业、自动化专业

学生年级:大二上学期

实验内容与任务

  1. 设计一个自动售饮料机的逻辑电路,要求投币口每次只能投入一枚五角或一元的硬币。投入一元五角钱硬币后机器自动给出一杯饮料;投入两元(两枚一元)硬币后,在给出饮料的同时找回一枚五角的硬币。要求用二段式状态机的方式实现。

  2. 设计状态转换图,编写VHDL程序,进行仿真生成报告波形,在实验室中下载到实验板,使用自动售货机程序界面进行结果验证。

  3. 附加提升任务:为公司内部员工提供福利取货码,输入正确序列码可以免费获得饮料一杯。设计一个可重复检测自行设定序列的序列检测器,并通过自动售货机程序界面进行结果验证。

实验过程及要求

  1. 学习了解二段式状态机的概念及设计方法;

  2. 设计自动售货机的逻辑功能控制模块,画出状态转换图;

  3. 在Vivado软件环境下,采用VHDL代码输入方式,完成逻辑电路设计;

  4. 启动全程编译,若存在严重的逻辑问题编译时会报错,修改直至代码无误;

  5. 新建激励波形文件并配置测试端口,合理设置仿真时间长度及仿真时钟周期;

  6. 启动仿真。仿真运行完毕后会生成报告波形。分析仿真波形的特征,印证设计目标,是否达到预期设计。若不符合要求,需进行调整,直至达到要求;

  7. 下载到实验板,连接到自动售货机程序界面,验证功能是否正确。

  8. 设计一个可重复检测福利码序列的序列检测器,并通过自动售货机程序界面进行结果验证;

  9. 撰写设计总结报告,学习交流不同解决方案的特点。

相关知识及背景

本实验涉及有限状态机(FSM)理论及二段式状态机设计方法,需掌握时序逻辑与组合逻辑的结合应用。核心知识包括状态划分(如初始、投币、出货状态)、状态转移条件(基于投币金额累计)及输出逻辑(控制出货与找零)。自动售货机作为典型嵌入式控制场景,需处理异步输入(硬币投入)与状态同步更新,通过状态机实现确定性逻辑控制。实验结合数字电路设计,涉及VHDL硬件描述语言,验证状态转移的正确性和输出信号的时序匹配,强化对数字电路的综合理解,以及在实际控制问题中建模与逻辑实现的能力。

实验环境条件

FPGA开发板、计算机、Vivado软件、自动售货机测试软件等。

教学目标与目的

本实验旨在通过自动售货机控制逻辑设计,使学生掌握二段式状态机核心理论,理解其结构及异步输入同步控制方法,熟练运用VHDL实现状态编码、金额累计、出货找零等逻辑。培养系统分析与建模能力,能将实际需求抽象为状态转移模型,强化工程思维,注重代码规范性与边界条件处理,提升从理论建模到硬件实现的全流程实践能力。

教学设计与实施进程

以“理论建模→代码实现→仿真验证→硬件实践”为主线,通过自动售货机案例,使学生掌握二段式状态机设计流程,强化数字逻辑建模与VHDL编程能力。本实验以项目式的内容结合学生日常生活的经历,逐层递进式培养学生对实际问题的抽象能力、数字电路的理解和设计编程能力。实验分为实验预习、课堂讲解、实验操作、能力提升、实验总结五个阶段,匹配不同学习能力和水平的学生,在评估中能够有效区分学生的实验能力,避免代码抄袭及AI生成等问题。

(1)实验预习

提前一周布置实验预习任务,让学生对实验相关知识有初步了解,为课堂学习和实验操作奠定基础。通过雨课堂发放预习资料、提出引导性问题,引导学生自主学习。

学生通过雨课堂平台能够及时与教师沟通交流所遇到的问题,教师也能从平台上直接评价学生的预习效果,纠正预习中的问题。

图1 雨课堂平台发布的实验预习要求

教师工作任务:编写详细的预习资料,包括自动投币售货机的功能介绍、硬件组成、二段式状态机的原理说明及简单示例。在雨课堂平台发布预习任务,明确要求学生阅读预习资料,思考并回答相关问题。在平台上批改学生上传的状态转换图和VHDL代码,用于检验学生预习效果。

学生学习任务:认真阅读预习资料,理解自动投币售货机和二段式状态机的基本概念。积极思考教师提出的问题,通过查阅资料等方式尝试回答。编写VHDL代码,进行课前的模拟测试,自我检验预习成果。

(2)课堂讲解

系统地讲解自动投币售货机的原理、二段式状态机的设计与实现方法,结合实际案例和多媒体资源,让学生深入理解知识要点,通过提问、互动等方式激发学生的学习兴趣。此过程占用时间约15分钟。

教师工作任务:运用PPT、动画演示等多媒体手段,详细讲解自动投币售货机的工作流程,包括投币、选择商品、出货、找零等环节;深入剖析二段式状态机的原理,结合自动投币售货机的状态转换,如从等待投币状态到投币完成状态的转换条件等,讲解状态机的设计方法和代码实现思路;通过雨课堂平台投屏不同学生的设计方案,尤其注意学生使用的是否为二段式状态机设计方法,分析案例中状态机的设计优缺点,引导学生思考如何优化。

学生学习任务:认真听讲,做好笔记,理解教师讲解的理论知识和案例分析;关注自己在预习中设计的状态转换图及VHDL代码是否存在问题,及时修改相关内容。

(3)实验操作

学生在教师的指导下进行实验操作,利用设计的自动售货机小程序验证自己编写的VHDL程序是否满足设计要求,将所学理论知识应用到实践中,培养学生的实践动手能力和创新能力。此过程占用时间约30分钟。小程序通过串口与EGO1开发板相连接,点击“五角”按钮即为投币五角,点击“一元”按钮即为投币一元,软件上方显示框会根据投币情况显示售出饮料一瓶及找零情况。学生需将自己编写的自动售货机VHDL程序封装成模块,与教师提供的串口模块进行连接编译。

图2 自动售货机小程序界面

图3 实验采用的EGO1开发板

教师工作任务:维持实验室秩序,确保学生在安全的环境下进行实验操作;巡回指导,观察学生的实验进展,对于遇到困难的学生给予及时的帮助和启发,引导学生思考问题的解决方法;对学生的实验结果进行评价验收(此部分验收占据30分)。

学生实验任务:按照实验指导手册的要求,认真进行实验操作,搭建硬件电路,调试程序,实现自动投币售货机的基本功能;仔细观察实验现象,记录实验数据,分析实验结果。

图4 学生在实验室开展实验

(4)能力提升

独立设置能力提升任务板块,旨在深入拓展学生知识与技能。通过逐步引导,让学生从理论学习过渡到实践操作,掌握序列检测器设计及与售货机系统整合方法,提升系统整合与创新能力。此过程占用时间约45分钟。

教师工作任务:发布提货码功能设计任务,讲解如何将序列检测器功能集成到自动售货机程序中,分析在原有状态机基础上,增加福利取货码输入状态及状态转移逻辑。调动学生进行讨论,并互相验证程序的可用性。教师进行抽查验收(此部分占比20分)。

学生实验任务:每人设计自己独特的提货码序列,设计状态转换图,在自动售货机VHDL程序的基础上进行修改,临近同学之间相互进行功能测试。将分数填写在雨课堂平台。

(5)实验总结

学生按照模板要求撰写实验报告,在雨课堂平台上传,教师可以在雨课堂平台及时批改或与学生交流实验报告撰写存在的问题。此过程实验结束后一周内完成,占比30分。

实验原理及方案

自动售货机在公共场所随处可见,它是一种根据投入的钱币自动售货的机器。作为商业自动化的常用设备,它不受时间、地点的限制,能节省人力、方便交易。本实验中需设计的自动售货机有两个投币口:一元投币口和五角投币口。假设每次只能投入一枚一元或五角的硬币,投入一元五角硬币后机器自动给出一瓶饮料,投入两元硬币后,在给出一瓶饮料的同时找回一枚五角的硬币。整个机器的工作是由数字电路构成的控制系统来控制完成的。下图为自动售货机控制系统方框图,它是由投币信号处理模块和功能控制模块组成的。

图5 自动售货机控制系统方框图

传统的数字电路的设计方法来设计该控制系统比较麻烦,难以入手,但是用状态机的设计方法来设计却非常方便、快捷。在VHDL设计中,可以不需要进行繁琐的状态分配、化简状态方程等步骤,可以简便地定义状态变量,将状态描述成进程,这个进程可以传出信号来控制其他进程,从而实现各种功能。因此,用VHDL设计状态机的步骤是:

(1)分析控制器设计指标,建立系统算法模型图,即状态转换图;

(2)分析被控对象的时序状态,确定控制器状态机的各个状态及输入、输出条件;

(3)应用VHDL完成状态机的描述。

首先设定逻辑变量:设投币信号a、b为输入逻辑变量,投入一枚五角硬币时用a=1表示,未投入时a=0。投入一枚一元硬币用b=1表示,未投入时b=0。设给出矿泉水和找钱为两个输出变量,分别用y和z表示,给出矿泉水时y=1,不给时y=0,找回一枚五角硬币时z=1,不找时z=0。

根据上面的功能描述,可用三个状态s0、s1、s2表示,未投币前的初始状态为s0,投入一枚五角硬币以后为s1,投入一元硬币后(包括投入一枚一元硬币和投入两枚五角硬币的情况)为s2。在s1状态后再投入一枚一元硬币或在s2状态后再投入一枚五角硬币,电路返回s0,同时输出为y=1,z=0;如果在s2状态后投入的是一枚一元硬币,则电路也应能返回s0,同时输出为y=1,z=1。因此,可以得到如下状态转换图。

图6 自动售货机状态转换图

二段式状态机描述方法是用两个进程来描述状态机,其中当前状态寄存器用一个同步时序进程来描述,输出逻辑和次态逻辑合并起来,用另一个组合逻辑进程来描述。二段式状态机使用两段式编码将同步时序和组合逻辑分别放到不同的进程中实现,这样做的好处不仅仅是便于阅读、理解、维护,更重要的是利于综合器优化代码,利于用户添加合适的时序约束条件,利于布局布线器实现设计。

这样,我们可以用一个二段式状态机来完成该自动售货机功能控制系统的设计,其VHDL源程序如下图所示。

图7 自动售货机控制系统VHDL代码

售货机兑换码扩展实验的任务,实质上是设计一个序列信号检测器。采用二段式状态机法设计一个可重复检测10110序列的序列检测器,状态转换图如下图所示。

图8 序列信号检测器状态转换图

采用VHDL代码输入方式,完成逻辑电路设计,其VHDL源程序如下图所示。

图9 序列信号检测器VHDL代码

实验报告要求

实验报告需要反映以下工作:

  1. 实验目的

掌握二段式状态机的设计方法与VHDL实现。理解状态机在时序逻辑控制中的应用,解决异步输入(投币)的状态同步问题。实现自动售货机的金额累计、出货判断及找零逻辑。

  1. 实验原理与背景

介绍二段式状态机结构(状态寄存器、输出逻辑和次态逻辑),区分摩尔型与米利型状态机。

  1. 系统设计过程

设定逻辑变量,分析控制器设计指标,建立状态转换图;分析被控对象的时序状态,确定控制器状态机的各个状态及输入、输出条件;应用VHDL完成状态机的描述。

  1. 代码实现与说明

解释VHDL代码的结构、模块及相关功能。

  1. 仿真验证

生成时钟、复位信号,模拟投币序列;截取关键波形图,标注并分析状态变化,验证逻辑正确性。

  1. 实验数据记录

记录开发板调试过程及数据,包括输入输出映射开发板资源、硬件测试现象等,以截图或照片形式保存。

  1. 心得体会、意见及建议

对本次实验的总结、对实验过程的意见及建议,提出改进方向。

考核要求与方法

  1. 实验预习:在雨课堂二段式状态机的基础知识,上传设计的状态转换图和VHDL代码。评分占总成绩20%。

  2. 实验验证:在实验板上验证功能与性能指标的完成程度,记录完成时间。评分占总成绩30%。

  3. 自主创新:对附加功能实验的完成度,验证序列检测的有效性。评分占总成绩20%。

  4. 实验报告:实验报告的规范性与完整性。评分占总成绩30%。

项目特色或创新

  1. 设计了实验专用的自动售货机操作界面,使程序设计过程更具有趣味性,生动形象易于学生理解,能够令学生深度融入设计过程。

  2. 以项目式设计的方式让学生学习和理解状态机设计方法,教学过程具有探究性,附加功能实验给出一定的挑战度,能够进一步激发学生交流和讨论热情,满足学生个性化设计需求。

获奖信息

获奖等级 一等奖
年份 2025

作品信息

学时分类 1-6学时
课程分类 数字逻辑电路、数字系统设计(含FPGA基础应用)

作者信息

作者
颜廷昱,陈宜
学校
成都信息工程大学
院系
电子工程学院

电工电子实验教学资源平台 苏ICP备09069895号-19