|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 20:13:02 05/19/2010
// Design Name:
// Module Name: drink_machine
// Project Name: drink_machine
// Target Devices: xc2s300e
// Tool versions: Xilinx ISE 9.1
// Description: 简单的自动售饮料机,假定一瓶饮料价格为2元5角,投币分别为一元和五角两种硬币。
// 每次投入硬币为一元或者五角,如果投入金币的总和是两元五角时,输出一瓶饮料;
// 如果投币总和是三元时,输出一瓶饮料,并且找回五角。
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module drink_machine(onedollar_in,fifty_in,fifty_out,drink_out,rst,clk);
parameter IDLE = 0;
parameter ZERO_FIFTY = 1;
parameter ONE = 2;
parameter ONE_FIFTY = 3;
parameter TWO = 4;
input fifty_in,onedollar_in,rst,clk;
output fifty_out,drink_out;
reg fifty_out,drink_out;
reg[2:0] state,next_state;
[email=always@(onedollar_in]always@(onedollar_in[/email] or fifty_in or rst)
begin
fifty_out <= 0;
drink_out <= 0;
if(!rst)
state <= IDLE;
else
begin
state <= next_state;
case(next_state)
IDLE:
if(fifty_in)
state <= ZERO_FIFTY;
else if(onedollar_in)
state <= ONE_FIFTY;
ZERO_FIFTY:
if(fifty_in)
state <= ONE;
else if(onedollar_in)
state <= ONE_FIFTY;
ONE:
if(fifty_in)
state <= ONE_FIFTY;
else if(onedollar_in)
state <= TWO;
ONE_FIFTY:
if(fifty_in)
state <= TWO;
else if(onedollar_in)
begin
state <= IDLE;
drink_out <= 1;
end
TWO:
if(fifty_in)
begin
state <= IDLE;
drink_out <= 1;
end
else if(onedollar_in)
begin
state <= IDLE;
drink_out <= 1;
fifty_out <= 1;
end
endcase
end
end
[email=always@(posedge]always@(posedge[/email] clk)
begin
next_state <= state;
end
endmodule |
|