📄 seller.v
字号:
Module softdrink(rst,clk,op_start,coin_val,cancel_flag, hold_ind,charge_ind,drinktk_ind,charge_val);
/*时钟信号clk,复位信号rst,开始信号op_start,硬币值coin_val,取消按钮cancel_flag,,机器使用标志hold_ind,找钱按钮charge_ind,取饮料drinktk_ind,找钱的值charge_val*/
input clk,rst;
input op_start,cancel_flag;
input [1:0] coin_val; //01,10,11表示0.5,1.0,1.5元
output hold_ind; //1表示使用,0表示空闲
output charge_ind; //1表示找钱,0不找零
output drinktk_ind; //1表示出饮料,0不出
output [2:0]charge_val; //001,010,011,100表示找0.5,1,1.5,2元
reg hold_ind;
reg charge_ind;
reg drinktk_ind;
reg [2:0]charge_val;
reg[2:0]currentstate,nextstate;
parameter S0=3'b000; //0元
parameter S1=3'b001; //0.5元
parameter S2=3'b010; //1.0元
parameter S3=3'b011; //1.5元
parameter S4=3'b100; //2.0元
parameter S5=3'b101; //2.5元
parameter S6=3'b110; //3.0元
always@(posedge clk or posedge rst)
if(rst)
currentstate<=S0;
else
currentstate<=nextstate;
always@(rst or currentstate or op_start or cancel_flag or coin_val)
if(rst) nextstate=S0;
else case(currentstate)
S0:
if(op_start)
if(coin_val==2'b01) nextstate=S1;
else if (coin_val==2'b10) nextstate=S2;
S1:
if(cancel_flag) nextstate=S0;
else if(coin_val==2'b01) nextstate=S2;
else if (coin_val==2'b10) nextstate=S3;
S2:
if(cancel_flag) nextstate=S0;
else if(coin_val==2'b01) nextstate=S3;
else if (coin_val==2'b10) nextstate=S4;
S3:
if(cancel_flag) nextstate=S0;
else if(coin_val==2'b01) nextstate=S4;
else if (coin_val==2'b10) nextstate=S5;
S4:
if(cancel_flag) nextstate=S0;
else if(coin_val==2'b01) nextstate=S5;
else if (coin_val==2'b10) nextstate=S6;
S5: nextstate=S0;
S6: nextstate=S0;
default:
nextstate=S0;
endcase
always@(currentstate)
if(currentstate==S0) //s0时hold_ind为0,其余时为1
hold_ind=1'b0;
else
hold_ind=1'b1;
always@(currentstate)
if((currentstate==S5)||(currentstate==S6)) //2.5和3.0元时,取饮料,其余不取饮料
drinktk_ind=1'b1;
else
drinktk_ind=1'b0;
always@(currentstate or cancel_flag)
if(currentstate==S0)
charge_ind=1'b0; //只有s6和cancel时有找零功能,其余时段不找零
else if(currentstate==S6)
charge_ind=1'b1;
else if(cancel_flag)
charge_ind=1'b1;
else
charge_ind=1'b0;
always@(currentstate or cancel_flag )
if(currentstate==S0) charge_val=3'b000;
else if(currentstate==S6) //s6找0.5元,
charge_val=3'b001;
else if(cancel_flag)
begin
case(currentstate)
S1: charge_val=3'b001; //中途退出,投多少,退多少
S2:charge_val=3'b010;
S3:charge_val=3'b011;
S4:charge_val=3'b100;
default:charge_val=3'b000;
endcase
end
else
charge_val=3'b000;
endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -