I’m working on a computer systems project and need a sample draft to help me study.
I am implementing a vending machine using Verilog, the only thing that I can’t get it to work is the board, can someone help editing the code and make it work on basys3 board? I also want you to add the waiting time if possible( for example if the user didn’t make a selection within 20 sec), the machine will go back to default. Also if possible, I want to add over 18 years stuff, for example, if user tries to buy medicine, the machine will ask to slide an id, but since we don’t have an actual machine, I want to use 8 switches to input 18 or 21, so if customer 21 years or older, an LED1 will turn on else, LED2 will turn on.
this is my code:
`timescale 1ns / 1ps
module VendingMachine( input clk,
input btnC,
input [1:0] coin,
input cancel,
output [3:0] an,
output reg [2:0] led,
output reg [6:0] seg);
wire rst = 1’b1;
wire rstout;
reg [3:0] CState, NState;
reg [10:0] waitingTime;
parameter idle = 4’b0000; //state0 = 0
parameter FiveC = 4’b0001; //state1 = 5 cents
parameter TenC = 4’b0010; //state2 = 10 cents
parameter FifteenC = 4’b0011; //state3 = 15 cents
parameter TwentyC = 4’b0100; //state4 = 20 cents
parameter TwentyFiveC = 4’b0101; //state5 = 25 cents
parameter ThirtyC = 4’b0110; //state6 = 30 cents
parameter ThirtyFiveC = 4’b0111; //state7 = 35 cents
parameter FourtyC = 4’b1000; //state8 = 40 cents
parameter FourtyFiveC = 4’b1001; //state9 = 45 cents
// State Register
always @ (posedge clk or posedge rstout) begin
if (rstout) CState <= idle;
else CState <= NState;
end
//Next state logic
always @ (posedge clk)begin
if(btnC == 1) begin
CState = 0;
NState = 0;
led = 2’b00;
seg = 7’b0000001;
end
else CState <= NState;
end
always @ (coin) begin
NState <= 0; //initialay zero
CState <= NState;
case(CState)
idle: if(coin == 2’b00) begin
NState <= idle;
seg <= 7’b0000001;
led <= 2’b00; end
else if(coin==2’b01) begin
NState <= FiveC;
seg <= 7’b0000001;
led <= 2’b01; end
else if(coin==2’b10) begin
NState <= TenC;
seg <= 7’b0000001;
led <= 2’b10; end
else if(coin==2’b11) begin
NState <= TwentyFiveC;
seg <= 7’b0000001;
led <= 2’b11; end
FiveC: if(coin== 2’b00) begin
NState <= FiveC;
seg <= 7’b0000001;
led <= 2’b00; end
else if(coin==2’b01) begin
NState <= TenC;
seg <= 7’b0000001;
led <= 2’b01; end
else if(coin==2’b10) begin
NState <= FifteenC;
seg <= 7’b0000001;
led <= 2’b10; end
else if(coin==2’b11) begin
NState <= ThirtyC;
seg <= 7’b0000001;
led <= 2’b11; end
TenC: if(coin== 2’b00) begin
NState <= TenC;
seg <= 7’b0000001;
led <= 2’b00; end
else if(coin==2’b01) begin
NState <= FifteenC;
seg <= 7’b0000001;
led <= 2’b01; end
else if(coin==2’b10)begin
NState <= TwentyC;
seg <= 7’b0000001;
led <= 2’b10; end
else if(coin==2’b11) begin
NState <= ThirtyFiveC;
seg <= 7’b0000001;
led <= 2’b11; end
FifteenC: if(coin== 2’b00) begin
NState <= FifteenC;
seg <= 7’b0000001;
led <= 2’b00; end
else if(coin==2’b01) begin
NState <= TwentyC;
seg <= 7’b0000001;
led <= 2’b01; end
else if(coin==2’b10) begin
NState <= TwentyFiveC;
seg <= 7’b0000001;
led <= 2’b10; end
else if(coin==2’b11) begin
NState <= FourtyC;
seg <= 7’b0000001;
led <= 2’b11; end
TwentyC: if(coin==2’b00) begin
NState <= TwentyC;
seg <= 7’b0000001;
led <= 2’b00; end
else if(coin==2’b01) begin
NState <= TwentyFiveC;
seg <= 7’b0000001;
led <= 2’b01; end
else if(coin==2’b10) begin
NState <= ThirtyC;
seg <= 7’b0000001;
led <= 2’b10; end
else if(coin==2’b11) begin
NState <= FourtyFiveC;
seg <= 7’b0000001;
led <= 2’b11; end
TwentyFiveC: if(coin==0) begin
NState <= TwentyFiveC;
seg <= 7’b0000001;
led <= 2’b00; end
else if(coin==2’b01) begin
NState <= ThirtyC;
seg <= 7’b0000001;
led <= 2’b01; end
else if(coin==2’b10) begin
NState <= ThirtyFiveC;
seg <= 7’b0000001;
led <= 2’b10; end
else if(coin==2’b11) begin
NState <= idle; //reaches 50 cents, dispense a soda and goes back to first state
seg = 7’b1111001;
led <= 2’b11; end
ThirtyC: if(coin== 2’b00) begin
NState <= ThirtyC;
seg <= 7’b0000001;
led <= 2’b00; end
else if(coin==2’b01) begin
NState <= ThirtyFiveC;
seg <= 7’b0000001;
led <= 2’b01; end
else if(coin==2’b10) begin
NState <= FourtyC;
seg <= 7’b0000001; end
default: NState = idle;
endcase
end
assign an = 4’b1110;
endmodule
//
//
//// integer i;
//// always @ (waitingTime) begin
//// for ( i=0; i <=waitingTime; i=i+1) begin
//// if ( i == waitingTime ) begin
//// seg <= 7’b1111111;
// end
// end
// if (cancel == 1)
// begin
// NState <= idle;
// end
//end
//endmodule
0 comments