vhdl实现自动售货机

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1自动售饮料机本文基于VHDL语言对自动售饮料机的逻辑电路进行了逻辑设计和仿真。该电路可识别1元和5角硬币,实现购买3种不同价格的饮料并且具有找零功能。1设计要求的提出和功能的构想[1][2]①该饮料机能识别0.5元和1.0元两种硬币;②售出3种不同价格的饮料,饮料价格分别为1.5元、2.0元和2.5元;③具有找零功能;④购买者能自主选择所购买的饮料;⑤饮料机在每卖出一次饮料后能自动复位。因为饮料的价格最高为2.5元,所以设计饮料机最多可接受3.0元的硬币。2分析设计要求并画出原始状态图该自动售饮料机设有一个投币孔,通过传感器来识别两种硬币,给出两个不同的信号。在此用half_dollar和one_dollar分别表示投入0.5元和1.0元硬币后电路接收到的两个信号;三个饮料选择按键choose01表示选择价格为1.5元的饮料,choose10表示选择价格为2.0元的饮料,choose11表示选择价格为2.5元的饮料;rest表示复位按键;有2个输出口分别为饮料出口dispense和找零出口out1;用s0表示初始状态,s1表示投入0.5元硬币时的状态,s2表示投入1.0元硬币时的状态,s3表示投入1.5元硬币时的状态,s4表示投入2.0元时的状态;clk表示时钟信号;机器最多接受的钱币为3.0元。当投入的钱币到达1.5元或高于1.5元时机器处于出售饮料的状态。当到达1.5元时如果选择购买1.5元的饮料(choose01)则系统给出一个饮料,即dispense为高电平一次。如果投入的钱币到达2.0元并且选择购买1.5元的饮料则系统显示给出一个饮料并找出1枚0.5元的硬币,即dispense为高电平一次out1为高电平一次。如果选择购买2.0元的饮料(choose10),则系统显示给出一个2.0元的饮料,即饮料输出信号dispense为高电平一次。依次类推。2图1.1为本次设计所构想的状态图。图1.1状态图3程序设计[3][4]状态0投入0.5元状态1状态2投入1.0元状态3状态4不购买10购买10购买01不购买01购买11不购买10购买11购买10购买01购买10购买11购买10购买11投入0.5元投入0.5元投入0.5元投入0.5元投入1.0元投入1.0元投入1.0元投入1.0元3根据上述对自动售饮料机逻辑状态的分析,编写程序如下:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityauto_sellingisport(clk,rst,half_dollar,one_dollar:instd_logic;choose:instd_logic_vector(1downto0);out1,dispense:outstd_logic);endauto_selling;architecturebehaveofauto_sellingistypestate_valuesis(s2,s0,s1,s3,s4);signalstate,next_state:state_values;beginprocess(clk,rst)beginifrst='1'thenstate=s0;elsif(clk’eventandclk='1')thenstate=next_state;endif;endprocess;process(state,half_dollar,one_dollar,choose)beginout1='0';dispense='0';next_state=s0;casestateiswhens0=if(half_dollar='1')thennext_state=s1;elsif(one_dollar='1')then4next_state=s2;elsenext_state=s0;endif;whens1=if(half_dollar='1')thennext_state=s2;elsif(one_dollar='1')thennext_state=s3;elsenext_state=s1;endif;whens2=if(half_dollar='1')thenif(choose=01)thendispense='1';elsenext_state=s3;endif;elsif(one_dollar='1')thenif(choose=10)thendispense='1';elsenext_state=s4;endif;elsenext_state=s2;endif;whens3=if(choose=01)thendispense='1';elsif(choose=10)thenif(half_dollar='1')thendispense='1';elsif(one_dollar='1')thendispense=’1’;out1=’1’;5elsenext_state=s3;endif;elsif(choose=11)thenif(half_dollar='1')thennext_state=s4;elsif(one_dollar='1')thendispense='1';elsenext_state=s3;endif;elsenext_state=s3;endif;whens4=if(choose=01)thendispense='1';out1='1';elsif(choose=10)thendispense='1';elsif(choose=11)thenif(half_dollar='1')thendispense='1';elsif(one_dollar='1')thenout1='1';dispense='1';endif;elsenext_state=s4;endif;endcase;endprocess;endbehave;4时序仿真678

1 / 8
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功