`timescale 1ns / 1ps
module sell_ticket(a, b, reset, clk, t, c, seven_seg_led_0, seven_seg_led_1);
input a, b, reset, clk; //a is 5$ input and b is 10 $ input
output t, c; // c is coin change and t is ticket
output [6:0] seven_seg_led_0, seven_seg_led_1;
reg t, c;
reg [6:0] seven_seg_led_0, seven_seg_led_1;
reg [2:0] state, next_state;
parameter zero = 3'b000;
parameter five = 3'b001;
parameter ten = 3'b010;
parameter fifteen = 3'b011;
parameter twenty = 3'b100;
always @(posedge clk)
if (reset)
state <= zero;
else
state <= next_state;
always @(a or b or state) begin
next_state = state;
case (state)
zero: case({b,a})
2'b00 : next_state = zero;
2'b01 : next_state = five;
default : next_state = ten;
endcase
five: case({b,a})
2'b00 : next_state = five;
2'b01 : next_state = ten;
default : next_state = fifteen;
endcase
ten: case({b,a})
2'b00 : next_state = ten;
2'b01 : next_state = fifteen;
default : next_state = twenty;
endcase
fifteen : next_state = zero;
twenty : next_state = zero;
endcase //state state case end
end //always end
always@(state) begin
case(state)
zero : begin
{t,c} = 2'b00; //abcdefg
seven_seg_led_1 = 7'b0110000; // display 15
seven_seg_led_0 = 7'b1011011;
end
five : begin
{t,c} = 2'b00; // abcdefg
seven_seg_led_1 = 7'b0110000; // display 10
seven_seg_led_0 = 7'b0000000;
end
ten : begin
{t,c} = 2'b00; //abcdefg
seven_seg_led_1 = 7'b0000000; // display 05
seven_seg_led_0 = 7'b1011011;
end
fifteen : begin
{t,c} = 2'b10; //abcdefg
seven_seg_led_1 = 7'b0000000; // display 00
seven_seg_led_0 = 7'b0000000;
end
twenty : begin
{t,c} = 2'b11; //abcdefg
seven_seg_led_1 = 7'b0000001; // display -5
seven_seg_led_0 = 7'b1011011;
end
default : begin
{t,c} = 2'b00;
seven_seg_led_1 = 7'b0000000; // display 00
seven_seg_led_0 = 7'b0000000;
end
endcase
end
endmodule