版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、word自动售货机VerilogHDL程序一个简单的自动售卖饮料机的程序。该机器具有投币,显示余额,购置六种饮料,退钱等功能,为了更具实用性,增添了饮料选择允许提示和投币允许提示的功能。具体形容,可投入一元、五元、十元和二十元面值的钱币,显示出当前的余额,并根据当前的余额提示能购置哪些饮料,选择某种饮料,那么输出选定的饮料,同时余额减去相应的金钱。假设选择退钱,机器就退出所有的钱,余额清零。下列图为功能示意图:选择饮料余额变化投币减钱投币允许提示加钱状态变化清零退钱允许提示退钱饮料选择提示程序的状态表:money(余额)state(状态)选择提示投币提示退钱提示000选择可以投币无钱可退11可
2、选择1,2可以退钱2或32可选择1,2,3,4>4而<203可选择16>=204不可再投程序中包含了一个状态机,定义了一个任务task和函数function,用该任务调用了该函数,使用假设干分支语句,详见附后源程序和测试程序。附上程序编译仿真图: 源程序如下:define one 3'b001define five 3'b010define ten 3'b011define twenty 3'b100module automart(money,state,moneyout,coinable,adrkable,bdrkable, cdrkable
3、,drkout1,drkout2,drkout3,drkout4,drkout5, drkout6,coin,clk,reset,moneyback,choice1,choice2, choice3,choice4,choice5,choice6); input2:0 coin;/投币输入,分为1、5、10、20元四种输入 input clk,reset,moneyback,choice1,choice2,choice3,choice4, choice5,choice6;/moneyback为退钱输入,choice16是饮料选择 output moneyout,coinable,adrkabl
4、e,bdrkable,cdrkable,drkout1, drkout2,drkout3,drkout4,drkout5,drkout6;/依次为退钱输出,投币许可提示,饮料选择许可,6种饮料输出 output2:0 state;/状态记录 output7:0 money;/余额显示 reg7:0 money; reg2:0 state; reg moneyout,coinable,backable,adrkable,bdrkable,cdrkable; parameter A=3'b000, B=3'b001, C=3'b010,D=3'b011, E=4
5、39;b100; assign drkout1=choice1&adrkable; assign drkout2=choice2&adrkable; assign drkout3=choice3&bdrkable; assign drkout4=choice4&bdrkable; assign drkout5=choice5&cdrkable; assign drkout6=choice6&cdrkable; always(posedge clk) repeat(1)(posedge clk) if (!reset) begin state<
6、;=A;money=0;moneyout=0; end elsebegin case(state) A: begin/初始状态A,可投币进入别的状态 coinable=1;backable=0;adrkable=0;bdrkable=0;cdrkable=0; end B: begin/状态B,只能买1元的饮料,可退钱或投币 coinable=1;backable=1;adrkable=1;bdrkable=0;cdrkable=0; end C: begin/状态C,可买1或2元的饮料,退钱或投币 coinable=1;backable=1;adrkable=1;bdrkable=1;cdr
7、kable=0; end D: begin/状态D,可买三档价格饮料,可退钱或投币 coinable=1;backable=1;adrkable=1;bdrkable=1;cdrkable=1; end E: begin/状态E,可买三档价格饮料,可退钱,不可继续投钱 coinable=0;backable=1;adrkable=1;bdrkable=1;cdrkable=1; end default: state=A; endcasecondition(money,state,coin,coinable);/调用任务end always(negedge drkout1 or negedge
8、drkout2) money=money-8'h01;/买1元的饮料,余额减1元 always(negedge drkout3 or negedge drkout4) money=money-8'h02;/买2元的饮料,余额减2元 always(negedge drkout5 or negedge drkout6) money=money-8'h04;/买4元的饮料,余额减4元 always(negedge moneyback) begin if(backable) begin moneyout=1; money=0;/选择退钱,那么推出金钱,余额清零 end else
9、 money=money+0; end task condition;/该任务可以判断余额的改变,状态切换 inout7:0 moneycon; inout2:0 statecon; input2:0 coincon; input coinablecon; begin if (coinablecon)/允许投币时begin case (coincon)/根据投币面值改变余额,切换状态 one : moneycon=moneycon+8'h01; five : moneycon=moneycon+8'h05; ten : moneycon=moneycon+8'h0a;
10、twenty : moneycon=moneycon+8'h14; default: moneycon=moneycon+0; /无投币那么余额不变 endcasestatecon=condition_s(moneycon);/调用函数 end else if (moneycon<8'h14)/不允许投币时,根据余额变化 statecon=condition_s(moneycon);/直接切换状态 end endtask function 2:0 condition_s;/根据余额的值切换状态的函数 input 7:0 money_s; reg 7:0 money_s;
11、begin if (money_s=0) condition_s=A; else if(money_s=8'h01) condition_s=B; else if(money_s=8'h02|money_s=8'h03) condition_s=C; else if(money_s>=8'h04&&money_s<8'h14) condition_s=D; else condition_s=E; end endfunction endmodule测试程序如下:timescale 100ns/1nsdefine clk_cycl
12、e 50module test; reg moneyback,choice1,choice2,choice3,choice4,choice5,choice6; reg 2:0 coin; reg clk,reset; wire7:0 money; wire2:0 state; wire moneyout,coinable,adrkable,bdrkable,cdrkable,drkout1, drkout2,drkout3,drkout4,drkout5,drkout6; parameter one=3'b001,five=3'b010,ten=3'b011,twent
13、y=3'b100; always #clk_cycle clk= clk; initial begin coin=0; moneyback=0;clk=0; choice1=0;choice2=0;choice3=0;choice4=0; choice5=0;choice6=0; reset=1; #10 reset=0; #200 reset=1; #400 coin=one;/投币1元, #220 coin=0; #200 coin=one;/投1元,余额2元 #220 coin=0; #200 coin=five;/投5元,余额7元 #220 coin=0; #200 coin=
14、twenty;/投20元,余27 #220 coin=0; #200 choice1=1;/买1元饮料,余26 #220 choice1=0; #200 choice3=1;/买2元饮料,余24 #220 choice3=0; #200 choice4=1;/买2元饮料,余22 #220 choice4=0; #200 choice5=1;/买4元饮料,余18 #220 choice5=0; #200 choice6=1;/买4元饮料,余14 #220 choice6=0; #200 choice6=1;/买4元饮料,余10 #220 choice6=0; #200 choice6=1;/买4
15、元饮料,余6 #220 choice6=0; #200 choice6=1;/买4元饮料,余2 #220 choice6=0; #200 coin=five;/投5元,余7 #220 coin=0; #200 moneyback=1;/退钱 #220 moneyback=0; end automart m(.money(money),.state(state),.moneyout(moneyout), .coinable(coinable),.adrkable(adrkable), .bdrkable(bdrkable),.cdrkable(cdrkable),.drkout1(drkout1), .drkout2(drkout2),.drkout3(drkou
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论