基于Verilog HDL的自动售货机设计与仿真

电子技术Electronic Technology
电子技术与软件工程
Electronic Technology & Software Engineering 基于Verilog H D L的自动售货机设计与仿真
李红科王庆春贾晓菲
(安康学院电子与信息工程学院陕西省安康市725000 )
摘要:本文应用Verilog H D L语言采用自顶而下的方法设计自动售货机,整个系统包括商品选择、确认、投币、零和出货等模块。在Modelsim平台进行功能仿真验证,经过仿真验证设计正确,符合设计要求。
关键词:Verilog H D L;自动售货机;模块设计
1引言
随着集成电路产业快速发展,电路集成度越来越高,以计算机
辅助为基础的电子设计自动化(EDA Electronics Design Automation)坎儿井英文
技术成为集成电路设计重要工具m,Verilog HDL硬件描述语言是
以文字形式描述数字系统硬件电路结构和行为的语言,只需描述电
路的功能和电路模块之间的相互关系,设计者更加专注电路设计整
体性能,使电路更加优化,提高设计效率|21。
自动售货机是一种常见的智能自动化设备,由于不受人直接参
与,所以广泛应用在办公楼、操场、高速服务K等场所,大大降低
时间、地点的限制,在节省人力资源方面有着明显优势。
2自动售货机设计思路
有限状态机(FSM Finite-state Machine)是•种用来进行对象行
为建模的工具,其作用是表示有限个状态以及这些状态之间相互转
移和动作等行为的数学模型。有限状态机广泛应用于建模行为、硬
件电路设计、软件工程和网络协议等的设计。在数字系统设计中,
当某一事物发生连续变化时,可以采用有限状态机设计思路提高设
计效率,增加程序可读性,降低错误概率,有限状态机设计思路是
数字系统中最常用的设计方法之一 [3]。
2.1自动售货机系统总体设计
该售货机电路设计要求:
(1)每次只能出售一种商品。
(2)所售商品种类:售货机只售4种商品,所售商品编号分 别用四位二进制数从右向左表示为0001、0010、0100、1000,对
应价格分别为2元、3元、4元、5元。出售哪种商品可由顾客按
下相应按键,按键旁边标记该商品的价格。
(3)等待投币:本售货机只识别1元、5元和10元纸币和1元硬币,一次只能投入一种货币。在规定时间内(500单位时钟内)
可以连续投币,并计算投币总额,先零再出货,超时返回开始状
态,规定时间投币不足,退币并返回开始状态。
2. 2自动售货机的工作流程
如图1所示,自动售货机在上一次出售完商品回到空状态,顾
客按键选择所购商品,然后确认所选商品,判断所选商品是否售罄,
售罄返回到空状态,没有售罄开始计时在500时间单位内计算投币
总额,如果规定时间内没有投币,则返回空状态,判断投币总额和
所选商品价格关系,当投币总额等于商品价格,出货并返回空状态,
当投币总额大于所选商品价格,先零再出货并返回空状态,当投
币金额小于所选商品价格,通过零出口退币并返回空状态。^
图1:售货机工作流程图
2. 3状态划分
针对电路工作流程,将电路分为8个状态,系统定义8个状态,
分别是空状态(S」dle)、商品选择状态(S_select)、商品确认状态(S_
confirm)、商品是否售罄状态(S_allsell)、等待投币状态(S_money
input)、投币金额和所选商品价格关系状态(S_confirm)、零状态(S_学苑追艳录
change)和出货状态(S_out)。各状态之间转移关系及动作如图2所示。
•项目名称:基于专业认证的电子信息工程专业人才培养体系研究,项目编号:Z B201902;项目名称:陕西省教育厅项目,项目编号: 19JK0012;项目名称:安康科技局项目,项目编号:A K2019G Y-07。
54
电子技术与软件工程
Electronic Technology & Software Engineering
电子技术Electronic Technology
系统程序输入端口:时钟端口 1个、投币端口 2个(纸币投币
口和硬币投币口)、商品选择端口 4个、确认和取消端口各1个。
输出端口:零端口和出货端口各1个。
2. 4各状态设计
(1)商品选择模块:每次只能选择1种商品,不允许一次选 择多种商品。将4个商品选择按键组成二进制编码。
S_select: //选择商品状态
begin
select_state=select|select_ state;
if(confirm||cancel)
begin
opt= {confirm,cancel};
state=S_confirm;
尼龙套管end
end
(2) 确认模块:每次只能按下“确认”或“取消”任意一个按键,同时按下2个按键按照取消功能处理。
S confirm://确认购买状态
begin
if(opt==2'b l0)
begin
state=S_allsell;
timeCnting=l;
end
elseif(opt=2'b00||2’b01||2’b ll)
state=S_idle;
end
(3)判断所选商品是否充足模块:如果所选商品无货,则返回空状态,如果所选商品有货,则转入等待投币状态。leftO、
leftl、left2、left3代表编号从0001到1000商品剩余数量为零时信号,
售货机每次出售1个商品,内部机械装置将后一个商品输送到最前
端,等待下次出货,当最后一个商品售出,由于商品自身重力作用,
对应leftx=0(x为0到3),当某种商品没有售罄时leftx!=0,,S_allsdl://判断所选商品是否售罄
begin
isSelled=0;
if(select_sta[0]=l &&left0=0)
isSelled=l;
if(select_sta[l]—1 &&left1=0)
isSelled=l;
if(select一sta[2]=l &&left2=0)
isSelled=l;
if(select_sta[3]==l &&left3=0)
isSe!led=l;
if(isSelled==l)
state=S_idle;
else state=S_30sec;
end
(4)等待投币状态,在等待500个时间单位周期内接受投币,超时投币不算,这个模块分两部分:1.货币识别:投币识别器分纸
币和硬币两部分,我国目前市场流行小面额纸币分别是1元、5元
和10元和硬币1元。纸币识别器包括主控部分、传感器部分、驱图2:状态转移图
灯组件、A D转换、外币存储器、电机电源等部件组成,硬币识别
器相对纸币识别器简单,所以在零环节只退硬币。纸币投币端口
只能一次接收一张纸币,可以连续投币,硬币端口类似。但是1元
纸币和1元硬币对电路输入信号是相同,货币识别器将每种货币转
换为BCD8421码,送给主控模块。2.规定时间内投币总额计算。
S_30sec://计算在规定时间内投币总额
begin
if(time_cnt<=499)
begin
if(money_input==4’b O O O1||money_input==4'b0101||money_ input==4 ’b1010)
money—sum1=money_sum1+money input;
end
else begin timeCnting=0;
if(money_sum1>0)
state=S_enough;
else state=S_idle;
end
end
(5)判断投币总额与所选商品价格关系模块:在投币模块计 算出投币总额减掉所选商品价格,差值不等于零,转入零模块。
差值等于零,说明投币总额等于所选商品价格,没有零,直接转
入出货状态。
Senough://
begin
if(select_sta[0]=l)
money_sum2=money_sum1-2;
if(select_sta[l]=l)
money_sum2=money_sum1-3;
if(select_sta[2]==l)5.
money_sum2 二m oney—sum1-4;
if(select_sta[3]=l)
money_sum2=money_sum1-5;
if(money_sum2!=0)
sta=S_change;
else
begin change=4'b0000; sta=S_out;end
end
(6)零模块:零分两种情况:
1.投币总额大于商品价格;
2.投币总额小于商品价格,退币从
零端口输出。
S—change:
begin
if(money_sum2 !=0)
55
电子技术
Electronic Technology
电子技术与软件工程
Electronic Technology & Software Engineering
图4:连续投币仿真
图5:退币仿真
begin椒盐噪声
i  f ( m oney _sum 2<0) // 退币
begin
change =money_sum  1; state  =S _idle ; end
百位老人积蓄被骗else  if (money _sum 2>0) begin
change =Tnoney _sum 2; "零
state  =S _out ; end
else  state  =S _out ; end
else  begin  state =S _out ; change =4'b 0000; end end
(7)出货模块:
S o u t : begin
out =select _ state ; state =S _idle ; end
2. 5仿真测试
针对自动售货机的3种工作状态分别做如下仿真:(说明为了调 整仿真图能放在1张图上完整显示仿真效果,调整投币等待时间, 从原来500单位时间等待,缩减到25单位时间,其他参数不变。 商品编号从右向左依次0-1-2-3,价格从右向左依次2、3、4和5元)
(1)
零情况仿真:一次投币金额大于所选商品价格,选
vb学生信息管理系统
择编号为0010商品价格3元,投入5元纸币。从图3看到,选 择0010商品,确认,等待投币5元,先3元,然后出货编号 0010,仿真结果正确。
(2) 连续投币情况仿真:选择编号为1商品价格3元,连续
投入3次丨元,没有零,出货编号0010,仿真结果如图4所示。(3)
投币不足情况仿真:选择编号为1商品价格3元,连续
投入2次1元,投币总金额小于所选商品价格,不能购买该商品, 仿真结果如图5所示,退币2元,没有出货。
当所选商品售罄时,利用商品自身重力作用给电路信号,
leftO、left  1、left 2和lefO 分别代表编号0小2-3剩余量信号,某个 商品售罄时,对应剩余量信号低电平,所选商品无法购买。
零不足,在初始状态时,机器内部存有硬币足够零,所以 零不足情况可以不用考虑。3结论
采用VerilogHDL 语言,利用状态机模块化思想,可以在每个 阶段仿真验证,保证设计正确性,降低
设计成本,缩短设计周期, 同时体现模块化、易修改等特点[41。在大规模数字系统设计凸显出 更多优势,使设计更加合理。从仿真结果分析,电路设计满足要求, 系统允许规定纸币和硬币使用,能够完成售货、零和退币等功能, 因此具有一定实用价值。
目前随着无线支付方式的便捷性和消费者广泛使用,本设计只 需在付款方式增加无线付款方式,用户扫描售货机界面付款码并成 功支付,支付宝或后台收款并反馈给商家后台,商家返回给售 货机付款成功信号,售货机就能完成出货动作。本文设计方法还可 以应用在共享充电桩、共享洗衣机等设备的设计上。
参考文献
[1] 刘.基于VHDL 实现的自动售货机芯片设计[J ].电子设计
工程,2014.
[2] 许斌.基于FPGA 的自动售货机的设计与仿真[J ].电子设计工
程,2016.
[3] 张可儿.基于Verilog  HDL 自动售货机系统设计[J ].陇东学
院学报,2012.
[4] 胥杭君.基于Veri l og 的售货系统设计及验证[J ].中国新技 术新产品,2018.作者简介李红科( 1983-),男,硕士学位,安康学院电子与信息工程学院 助教。研究方向为嵌入开发与应用。
王庆春,硕士学位,副教授。研究方向为FPGA 应用设计、视频图 像处理。
贾晓菲,硕士学位,副教授。研究方向为碳纳米电子器件。
56

本文发布于:2024-09-22 15:45:41,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/190362.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:商品   投币   设计   状态   找零   商品价格   系统   电路
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议