EDA课程设计自动售货系统.doc
文本预览下载声明
五、Verilog HDL 源程序
注:
输入 coin5(投入5角的硬币)
coin10(投入1元的硬币)
0.5元 001 1元 010
1.5元 011 2元 100
2.5元 101 3元 110
四种商品 water (1元的价格,定义为001)
tea (1.5元的价格,定义为010)
coke (2元的价格,定义为100)
coffee (2.5元的价格,定义为101)
cancel 取消键
Reset 复位键
输出 num 表示所投入硬币的总钱数
get 表示买到的商品数
change 购买商品所剩余的钱数
六、波形图:
module auto_seller(clk,num,get,control,change,reset,coke,water,tea,coffee,cancel,coin5,coin10);
input clk,reset,coke,water,tea,coffee,control,cancel,coin5,coin10;
output[2:0] num,get,change;
reg[2:0]num;
reg[2:0]get;
reg[2:0]change;
reg[4:0]state;
reg coin5_old;
reg coin10_old;
reg water_old;
wire control;
reg control_old;
wire clk;
always@(posedge clk or posedge reset)
begin
if(reset) state=5b00000;
else begin
coin5_old = coin5;
coin10_old = coin10;
water_old = water;
control_old = control;
case(state)
5b00000:begin
if((coin5 == 1)(coin5_old == 0)) state=5b00001;
else if((coin10 == 1)(coin10_old == 0)) state=5b00010;
else state=5b00000;
end
5b00001:begin
if((coin5 == 1)(coin5_old == 0)) state=5b00010;
else if((coin10 == 1)(coin10_old == 0)) state=5b00011;
else if(cancel) state=5b01110;
else state=5b00001;
end
5b00010:begin
if((coin5 == 1)(coin5_old == 0)) state=5b00011;
else if((coin10 == 1)(coin10_old == 0)) state=5b00100;
else if((water == 1)(water_old == 0)) state=5b00111;
else if(cancel) state=5b01111;
else state=5b00010;
end
5b00011:begin
if((coin5 == 1)(coin5_old == 0)) state=5b00100;
else if((coin10 == 1)(coin10_old == 0)) state=5b00101;
else if((water == 1)(water_old == 0)) state=5b01000;
显示全部