一、三段式状态机(饮料机)
问题描述:有一台饮料机,每次只能投入1元或者5角,一瓶饮料售价2.5元。在投入2.5元后自动给出一瓶饮料;在投入三元后自动找零并给出一瓶饮料
问题分析:重点是确定状态,在累计得到2元后,如果再得5角则输出goodout为1,jiaoout为0,并回到状态0;累计得到2.5元后,如果再得1元则输出goodout为1,jiaoout为1,并回到状态0。
machine部分
module machine(clk,rst_n,yuanin,jiaoin,jiaoout,goodout);
input clk;
input rst_n;
input yuanin;
input jiaoin;
output reg jiaoout;
output reg goodout;
reg [2:0] current_state;
reg [2:0] next_state;
reg [1:0] money;
parameter state00 = 3'b000;
parameter state05 = 3'b001;
parameter state10 = 3'b010;
parameter state15 = 3'b011;
parameter state20 = 3'b100;
always@(posedge clk or negedge rst_n)
begin
if (!rst_n)begin
current_state <= state00;
end
else begin
current_state <= next_state;
end
end
always@(posedge clk or negedge rst_n)
begin
case(current_state)
state00:
if(yuanin =