Sunteți pe pagina 1din 2

module vending_machine(s_up,choc,tea,clk,clc,rupees,out,change_out);

output reg[2:0]change_out;
output reg[2:0]out;
input clk,clc,s_up,choc,tea; input[1:0]rupees;///one='b01 two='b10 five='b11
reg [3:0] Prstate, Nxtstate;
parameter S0 = 4'b0000, S1 = 4'b0001, S2 = 4'b0010, S3 = 4'b0011, S4 = 4'b0100, S5 = 4'b0101, S6 = 4'b0110, S7 =
4'b0111,
S8 = 4'b1000, S9 = 4'b1001, S10 = 4'b1010, S11 = 4'b1011;
always @ (posedge clk or negedge clc)
if (~clc) Prstate = S0;
// Initialize to state S0
else Prstate = Nxtstate;
always @ (Prstate,clc,s_up,choc,tea,rupees )
// Determine next state
begin
case (Prstate)
S0: if (rupees==2'b01) begin Nxtstate = S1;change_out <=3'b000;out<=3'b000; end
else if (rupees==2'b10) begin Nxtstate = S2;change_out <=3'b000;out<=3'b000; end
else if (rupees==2'b11) begin Nxtstate = S3;change_out <=3'b000;out<=3'b000; end
S1: if (rupees==2'b01) begin Nxtstate = S2; change_out <=3'b000;out<=3'b000; end
else if (rupees==2'b10) begin Nxtstate = S4; change_out <=3'b000;out<=3'b000; end
else if (rupees==2'b11) begin Nxtstate = S7; change_out <=3'b000;out<=3'b000; end
S2: if (rupees==2'b01) begin Nxtstate = S4; change_out <=3'b000;out<=3'b000; end
else if (rupees==2'b10) begin Nxtstate = S5; change_out <=3'b000;out<=3'b000; end
else if (rupees==2'b11) begin Nxtstate = S6; change_out <=3'b000;out<=3'b000; end
S3: if (s_up) begin Nxtstate = S0; change_out <=3'b010;out=3'b001; end
else if (rupees==2'b01) begin Nxtstate = S7; change_out <=3'b000;out<=3'b000; end
else if (rupees==2'b10) begin Nxtstate = S6; change_out <=3'b000;out<=3'b000; end
else if (rupees==2'b11) begin Nxtstate = S8; change_out <=3'b000;out<=3'b000; end
S4: if (s_up) begin Nxtstate = S0; change_out <=3'b000;out=3'b001; end
else if (rupees==2'b01) begin Nxtstate = S5; change_out <=3'b000;out<=3'b000; end
else if (rupees==2'b10) begin Nxtstate = S3; change_out <=3'b000;out<=3'b000; end
else if (rupees==2'b11) begin Nxtstate = S10; change_out <=3'b000;out<=3'b000; end
S5: if (s_up) begin Nxtstate = S0; change_out <=3'b001;out=3'b001; end
else if (rupees==2'b01) begin Nxtstate = S3; change_out <=3'b000;out<=3'b000; end
else if (rupees==2'b10) begin Nxtstate = S7; change_out <=3'b000;out<=3'b000; end
else if (rupees==2'b11) begin Nxtstate = S9; change_out <=3'b000;out<=3'b000; end
S6: if (s_up) begin Nxtstate = S0; change_out <=3'b100;out<=3'b001; end
else if (choc) begin Nxtstate = S0; change_out <=3'b001;out<=3'b010; end
else if (tea) begin Nxtstate = S0; change_out <=3'b000;out<=3'b100; end
S7: if (s_up) begin Nxtstate = S0; change_out <=3'b011;out=3'b001; end
else if (choc) begin Nxtstate = S0; change_out <=3'b000;out=3'b010; end
else if (rupees==2'b01) begin Nxtstate = S6; change_out <=3'b000;out<=3'b000; end
else if (rupees==2'b10) begin Nxtstate = S10; change_out <=3'b000;out<=3'b000; end
else if (rupees==2'b11) begin Nxtstate = S11; change_out <=3'b000;out<=3'b000; end
S8: if (s_up) begin Nxtstate = S0; change_out <=3'b111;out=3'b001; end
else if (choc) begin Nxtstate = S0; change_out <=3'b100;out<=3'b010; end
else if (tea) begin Nxtstate = S0; change_out <=3'b011;out<=3'b100; end
S9: if (s_up) begin Nxtstate = S0; change_out <=3'b110;out<=3'b001; end
else if (choc) begin Nxtstate = S0; change_out <=3'b011;out<=3'b010; end

endcase

end

else if (tea) begin Nxtstate = S0; change_out <=3'b010;out<=3'b100; end


S10: if (s_up) begin Nxtstate = S0; change_out <=3'b101;out<=3'b001; end
else if (choc) begin Nxtstate = S0; change_out <=3'b010;out<=3'b010; end
else if (tea) begin Nxtstate = S0; change_out <=3'b001;out<=3'b100; end
S11: if (s_up) begin Nxtstate = S0; change_out <=3'b111;out<=3'b001; end
else if (choc) begin Nxtstate = S0; change_out <=3'b101;out<=3'b010; end
else if (tea) begin Nxtstate = S0; change_out <=3'b100;out<=3'b100; end
endmodule

S-ar putea să vă placă și