Vous êtes sur la page 1sur 5

`timescale 1ns / 1ps

//////////////////////////////////////////////////////////////////////////////////
// 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
/////////////////////////////////////////

always@(posedge clock or negedge reset)


begin
if(!reset)
state<=idle;
else
state<=nextstate;

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

Vous aimerez peut-être aussi