train ticket machine help needed!

Discussion in 'VHDL' started by sicazoR, May 27, 2013.

  1. sicazoR


    May 27, 2013
    Likes Received:
    HI there,

    I'm designing a ticketing machine. The distance and the money are introduce by the user on a FPGA board. I have 4 states, s0 when I initialize the data, s1 when i read the distance and calculate the price for the ticket, s2 when i read the money user introduce and s3 when i compare the price with the money user introduced and give the ticket, the rest etc.

    I have a problem in the state 2 of the machine. User introduces the money (1 euro = "01", 5 euro = "10" and 10 euro = "11") and when he push the clock button the signal SUM_INTRODUCED and TOTAL_SUM increases with that value as long as another input signal BTN1 is '0'. The problem is that after introducing 1 euro, if you introduce 1 euro again my signals don't change there values. But if you introduce 10 euro it change and work. Any help?

    The code looks like this:

    Code (Text):
    signal INTRODUCED_SUM           : unsigned (5 downto 0):="000000";
    signal TOTAL_SUM                : unsigned (5 downto 0):="000000";
    type state_type is (s0,s1,s2,s3);  --type of state machine.
    signal current_s,next_s: state_type;

        process (CLK,RESET)
            if (RESET = '1') then
                current_s <= s0;  
            elsif (RISING_EDGE(CLK)) then
                current_s <= next_s;  
            end if;
        end process;

    prelucrare: process(current_s,BTN1)
    case current_s is ...
                when s2 =>
                            if (BTN1 = '1') then
                                next_s <= s3;
                            elsif (BTN1 = '0') then
                                if (SEL = "01") then
                                    INTRODUCED_SUM  <= INTRODUCED_SUM + 1;
                                    1euro_COIN      <= 1euro_COIN + 1;
                                    TOTAL_SUM   <=  TOTAL_SUM +1;
                                    elsif (SEL = "10") then
                                    INTRODUCED_SUM  <= INTRODUCED_SUM + 5;
                                    5euro_COIN      <= 5euro_COIN + 1;
                                    TOTAL_SUM   <=  TOTAL_SUM +5;
                                        elsif (SEL = "11") then
                                    INTRODUCED_SUM  <= INTRODUCED_SUM + 10;
                                    10euro_COIN         <= 10euro_COIN + 1;
                                    TOTAL_SUM   <=  TOTAL_SUM +10;
                                end if;
                                next_s <= s2;
                            end if;
    sicazoR, May 27, 2013
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.