资源描述:
《简单自动售货机VerilogHDL程序.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、自动售货机VerilogHDL程序一个简单的自动售卖饮料机的程序。该机器具有投币,显示余额,购买六种饮料,退钱等功能,为了更具实用性,增添了饮料选择允许提示和投币允许提示的功能。具体形容,可投入一元、五元、十元和二十元面值的钱币,显示出当前的余额,并根据当前的余额提示能购买哪些饮料,选择某种饮料,则输出选定的饮料,同时余额减去相应的金钱。若选择退钱,机器就退出所有的钱,余额清零。下图为功能示意图:选择饮料余额变化投币减钱投币允许提示加钱状态变化清零退钱允许提示退钱饮料选择提示程序的状态表:money(余额)state(
2、状态)选择提示投币提示退钱提示000选择可以投币无钱可退11可选择1,2可以退钱2或32可选择1,2,3,4>4而<203可选择1~6>=204不可再投程序中包含了一个状态机,定义了一个任务(task)和函数(function),用该任务调用了该函数,使用若干分支语句,详见附后源程序和测试程序。附上程序编译仿真图:源程序如下:`defineone3'b001`definefive3'b010`defineten3'b011`definetwenty3'b100moduleautomart(money,state,mon
3、eyout,coinable,adrkable,bdrkable,cdrkable,drkout1,drkout2,drkout3,drkout4,drkout5,drkout6,coin,clk,reset,moneyback,choice1,choice2,choice3,choice4,choice5,choice6);input[2:0]coin;//投币输入,分为1、5、10、20元四种输入inputclk,reset,moneyback,choice1,choice2,choice3,choice4,cho
4、ice5,choice6;//moneyback为退钱输入,choice1~6是饮料选择outputmoneyout,coinable,adrkable,bdrkable,cdrkable,drkout1,drkout2,drkout3,drkout4,drkout5,drkout6;//依次为退钱输出,投币许可提示,饮料选择许可,6种饮料输出output[2:0]state;//状态记录output[7:0]money;//余额显示reg[7:0]money;reg[2:0]state;regmoneyout,coi
5、nable,backable,adrkable,bdrkable,cdrkable;parameterA=3'b000,B=3'b001,C=3'b010,D=3'b011,E=4'b100;assigndrkout1=choice1&adrkable;assigndrkout2=choice2&adrkable;assigndrkout3=choice3&bdrkable;assigndrkout4=choice4&bdrkable;assigndrkout5=choice5&cdrkable;assigndrkou
6、t6=choice6&cdrkable;always@(posedgeclk)repeat(1)@(posedgeclk)if(!reset)beginstate<=A;money=0;moneyout=0;endelsebegincase(state)A:begin//初始状态A,可投币进入别的状态coinable=1;backable=0;adrkable=0;bdrkable=0;cdrkable=0;endB:begin//状态B,只能买1元的饮料,可退钱或投币coinable=1;backable=1;adr
7、kable=1;bdrkable=0;cdrkable=0;endC:begin//状态C,可买1或2元的饮料,退钱或投币coinable=1;backable=1;adrkable=1;bdrkable=1;cdrkable=0;endD:begin//状态D,可买三档价格饮料,可退钱或投币coinable=1;backable=1;adrkable=1;bdrkable=1;cdrkable=1;endE:begin//状态E,可买三档价格饮料,可退钱,不可继续投钱coinable=0;backable=1;adr
8、kable=1;bdrkable=1;cdrkable=1;enddefault:state=A;endcasecondition(money,state,coin,coinable);//调用任务endalways@(negedgedrkout1ornegedgedrkout2)money=money-8'h01;//买1元的饮