soda水1块钱,硬币有五毛和一块两种:

soda水1块钱,硬币有五毛和一块两种:

module soda(
input clk,
input rst_n,
input [1:0]din,  //投币 【0】:五毛 【1】:一块
output reg[1:0]dout  //给水 【0】:给水 【1】:找钱
);
parameter idle=2'b0;
parameter st5 =2'b01;
parameter st10=2'b10;
parameter st15=2'b11;
reg [1:0]cur_state;
reg [1:0]nxt_state;
always@(posedge clk or negedge rst_n)
if(~rst_n)
 cur_state<=idle;
else 
 cur_state<=nxt_state;
 
always@(*)
begin
case (cur_state)
idle:
begin
 if(din==2'b01)
  nxt_state=st5;
 else if(din==2'b10)
  nxt_state=st10;
end 
st5:
begin
 if(din==2'b01)
  nxt_state=st10;
 else if(din==2'b10)
  nxt_state=st15;
end 
st10:
begin
 nxt_state=idle;
end 
st15:
begin
 nxt_state=idle;
end 
default:;
endcase 
end 

always@(posedge clk or negedge rst_n)
if(~rst_n)
 dout<=2'b00;
else if(nxt_state==st10)
 dout<=2'b00;
else if(nxt_state==st15)
 dout<=2'b11;
endmodule
原文地址:https://www.cnblogs.com/luxinshuo/p/13552364.html