Académique Documents
Professionnel Documents
Culture Documents
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 10:01:34 01/24/2010
// Design Name:
// Module Name: testing
// Project Name:
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module testing(
output reg [3:0] moneyleft,
output reg [2:0] state,
input [2:0] entermoney,
input [2:0] addmoney,
input clock,
input reset,
input callin,
input quitcall
);
///////////////////
reg flag;
reg[31:0] counter;
//reg [6:0] led;
reg [3:0] money;
reg[2:0]nextstate;
//////////////////
parameter[2:0] idle=3'b000;
parameter[2:0] check=3'b001;
parameter[2:0] ready=3'b010;
parameter[2:0] execution=3'b011;
parameter[2:0] hang=3'b100;
parameter[2:0] quit=3'b101;
parameter[2:0] moneyreturn=3'b110;
////////////////////////////////
//combinational logic block
always@(addmoney,money,callin,entermoney,quitcall,flag)
begin
nextstate=0;
/////////////
case(state)
/////////////////////////
idle:begin
if (entermoney>0)begin
nextstate=check;end
else
begin
nextstate=idle;end
end
/////////////////////////////////////
/////////////////////////////////////
check:begin
if (money>=3)begin
nextstate=ready;end
else if(money<3)
begin
nextstate=moneyreturn;end
else
begin
nextstate=check;end
end
//////////////////////////////////////
//////////////////////////////////////
ready:begin
if (callin==1)begin
nextstate=execution;end
else if(quitcall==1)begin
nextstate=moneyreturn;end
else
begin
nextstate=ready;end
end
//////////////////////////////////////
//////////////////////////////////////
execution:begin
if (money==0)begin
nextstate=hang;end
else if(quitcall==1)begin
nextstate=quit;end
else
nextstate=execution;
end
//////////////////////////////////////
//////////////////////////////////////
hang:begin
if (addmoney>=1)begin
nextstate=execution;end
else if(quit==1)begin
nextstate=idle;end
else
begin
nextstate=hang;end
end
////////////////////////////////////////
////////////////////////////////////////
quit:begin
if(money<3)
nextstate=quit;
else if (money>=3)
nextstate=moneyreturn;
end
/////////////////////////////////////////
/////////////////////////////////////////
moneyreturn:begin
nextstate=moneyreturn;end
////////////////////////////////////////
/////////////////////////////////////////
default:
;
//////////////////////////////////////////
endcase
end
/////////////////////////////////////////
end
/////////////////////////////////////////
//////SEQUENTIAL BLOCK///////////////////
always@(posedge clock or negedge reset)
begin
if(reset==0)
begin
money<=0;
moneyleft<=0;
counter<=1;
flag<=0;
end
/////////////////////////////////////////
/////////////////////////////////////////
else
case(state)
idle:begin
money<=entermoney;
//led[0]<=1;
end
/////////////////////////////////////////
////////////////////////////////////////
//check:
//led[1]<=1;
////////////////////////////////////////
////////////////////////////////////////
//ready:
//led[2]<=1;
////////////////////////////////////////
////////////////////////////////////////
execution:begin
if (counter<1500000000)
counter<=(counter+1);
else
begin
money<=money-1;
counter<=1;end
//led[3]<=1;
end
//////////////////////////////////////
//////////////////////////////////////
hang:begin
counter<=1;
money<=addmoney;
//led[4]<=1;
end
/////////////////////////////////////
/////////////////////////////////////
quit:begin
flag<=1;
//led[5]<=1;
end
////////////////////////////////////
////////////////////////////////////
moneyreturn:begin
moneyleft<=money;
// led[6]<=1;
end
/////////////////////////////////////
/////////////////////////////////////
default:
;
/////////////////////////////////////
/////////////////////////////////////
endcase
end
//////////////////////
//////////////////////
endmodule