Vending machine control
Prerequisites: Study the functionality of Vending machine control.
Learning Objective: To develop the source code for Vending machine control by using VERILOG and obtain the simulation and synthesis.
Software and Hardware: Xilinx ISE 9.2i and FPGA Spartan-3E.
Theory:
Verilog Code:
module vending (
input clk,
input rst,
input [1:0] coin,
output [1:0] gd
);
localparam IDLE = 3'b000;
localparam RE1 = 3'b001;
localparam RS2 = 3'b010;
localparam SUCC = 3'b011;
localparam FAIL = 3'b100;
reg [2:0] state_reg, state_next;
always @(posedge clk, posedge rst) begin
if(rst)
state_reg <= IDLE;
else
state_reg <= state_next;
end
always @* begin
case(state_reg)
IDLE: begin
case(coin)
2'b00: state_next = IDLE;
2'b01: state_next = RE1;
2'b10: state_next = RS2;
2'b11: state_next = FAIL;
default: state_next = IDLE;
endcase
end
RE1: begin
case(coin)
2'b00: state_next = RE1;
2'b01: state_next = RS2;
2'b10: state_next = SUCC;
2'b11: state_next = FAIL;
default: state_next = IDLE;
endcase
end
RS2: begin
case(coin)
2'b00: state_next = RS2;
2'b01: state_next = SUCC;
2'b10: state_next = FAIL;
2'b11: state_next = FAIL;
default: state_next = IDLE;
endcase
end
SUCC: begin
case(coin)
2'b00: state_next = IDLE;
2'b01: state_next = RE1;
2'b10: state_next = RS2;
2'b11: state_next = FAIL;
default: state_next = IDLE;
endcase
end
FAIL: begin
case(coin)
2'b00: state_next = IDLE;
2'b01: state_next = FAIL;
2'b10: state_next = FAIL;
2'b11: state_next = FAIL;
default: state_next = IDLE;
endcase
end
default: state_next = IDLE;
endcase
end
assign gd[1] = (state_reg == SUCC);
assign gd[0] = (state_reg == FAIL);
endmodule
TEST BENCH:
module tb_vending;
// inputs
reg clk;
reg rst;
reg [1:0] coin;
// outputs
wire [1:0] gd;
vending DUT (.clk(clk), .rst(rst), .coin(coin), .gd(gd));
initial begin
clk = 0;
rst = 0;
coin = 0;
end
initial forever #10 clk = ~clk;
initial begin
#5;
@(negedge clk) rst = ~rst;
@(negedge clk) rst = ~rst;
end
initial begin
#60;
@(negedge clk) coin =2'b00 ;
@(negedge clk) coin =2'b01 ;
@(negedge clk) coin =2'b01 ;
@(negedge clk) coin =2'b01 ;
@(negedge clk) coin =2'b00 ;
@(negedge clk) coin =2'b10 ;
@(negedge clk) coin =2'b01 ;
@(negedge clk) coin =2'b00 ;
@(negedge clk) coin =2'b10 ;
@(negedge clk) coin =2'b10 ;
@(negedge clk) coin =2'b11 ;
@(negedge clk) coin =2'b10 ;
@(negedge clk) coin =2'b00 ;
@(negedge clk) coin =2'b00 ;
@(negedge clk) coin =2'b10 ;
@(negedge clk) coin =2'b01 ;
end
endmodule
SIMULATION RESULTS:
Result: Thus the program for vending machine has been verified and also simulation and synthesis reports have been verified.
Outcomes: After completion of this experiment students are able to design vending machine using Verilog code.
-
UpdatedOct 15, 2016
-
Views2,939
