Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- library IEEE;
- library wyswietlacz;
- use IEEE.STD_LOGIC_1164.ALL;
- use IEEE.STD_LOGIC_ARITH.ALL;
- use IEEE.STD_LOGIC_UNSIGNED.ALL;
- entity automat is
- port (CLK : in std_logic;
- reset : in std_logic;
- wybor : in STD_LOGIC_VECTOR(7 downto 0);
- Moneta_In_1 : in std_logic;
- Moneta_In_2 : in std_logic;
- Moneta_In_5 : in std_logic;
- wplacono_kwote : in std_logic;
- kawa_espresso,kawa_biala,kawa_americano,kawa_latte,herbata,herbata_z_cytryna,barszcz_czerwony,wrzatek : out std_logic;
- error : out std_logic;
- wyswietlacz_1,wyswietlacz_2,wyswietlacz_3,wyswietlacz_4 :out std_logic_vector (0 to 6)
- );
- end entity;
- architecture behavior of automat is
- ----------------------------------------------------------------------------------------------------------------------
- type stany is (
- stan_poczatkowy,
- wrzuc_monete,
- wybierz_napoj,
- wybrano_kawa_espresso,
- wybrano_kawa_biala,
- wybrano_kawa_americano,
- wybrano_kawa_latte,
- wybrano_herbata,
- wybrano_herbata_z_cytryna,
- wybrano_barszcz_czerwony,
- wybrano_wrzatek,
- kawa_espresso_out,
- kawa_biala_out,
- kawa_americano_out,
- kawa_latte_out,
- herbata_out,
- herbata_z_cytryna_out,
- barszcz_czerwony_out,
- wrzatek_out
- );
- signal stan_obecny,stan_nastepny: stany;
- signal cena_kawa_espresso,cena_kawa_biala,cena_kawa_americano,cena_kawa_latte,cena_herbata,cena_herbata_z_cytryna,cena_barszcz_czerwony,cena_wrzatek : std_logic_vector(3 downto 0);
- signal ilosc_kawa_espresso,ilosc_kawa_biala,ilosc_kawa_americano,ilosc_kawa_latte,ilosc_herbata,ilosc_herbata_z_cytryna,ilosc_barszcz_czerwony,ilosc_wrzatek : std_logic_vector(3 downto 0);
- signal reszta_sig : std_logic_vector(0 to 3);
- signal wplacono : STD_LOGIC_VECTOR(0 to 3);
- signal wyswietl_liczbe_napojow : std_logic_vector(0 to 3);
- signal wyswietl_numer_napoju : std_logic_vector(0 to 3);
- signal wyswietl_cene_napoju : std_logic_vector(0 to 3);
- signal auto: natural range 0 to 99999999 := 0;
- ----------------------------------------------------------------------------------------------------------------------
- component wyswietlacz
- port(wejscie : in std_logic_vector (0 to 3);
- wyjscie :out std_logic_vector (0 to 6));
- end component;
- ----------------------------------------------------------------------------------------------------------------------
- begin
- --process(CLK,reset) -- jesli nie dziala cos to tu jest wersja na push buton i PIN_CLK zmiencie na PIN_F6 to jest pushbutton 3
- --begin
- -- if(reset = '0') then
- -- stan_obecny <= stan_poczatkowy;
- -- elsif(clk'event and clk = '1') then
- -- stan_obecny <= stan_nastepny;
- -- end if;
- --end process;
- automatyka: process(reset,clk) is -- PIN_F6 , reset to slider 9
- begin
- if(reset = '0') then
- stan_obecny <= stan_poczatkowy;
- auto <= 00000000;
- elsif (rising_edge(clk)) then
- auto <= auto + 1;
- if(auto = 50000000) then
- auto <= 00000000;
- end if;
- end if;
- end process automatyka;
- ----------------------------------------------------------------------------------------------------------------------
- process(stan_obecny,Moneta_In_1,Moneta_In_2,Moneta_In_5)
- begin
- case stan_obecny is
- when stan_poczatkowy =>
- kawa_espresso <= '0';
- kawa_biala <= '0';
- kawa_americano <= '0';
- kawa_latte <= '0';
- herbata <= '0';
- herbata_z_cytryna <= '0';
- barszcz_czerwony <= '0';
- wrzatek <= '0';
- error <= '0';
- cena_kawa_espresso <= "0010";
- cena_kawa_biala <= "0010";
- cena_kawa_americano <= "0010";
- cena_kawa_latte <= "0010";
- cena_herbata <= "0010";
- cena_herbata_z_cytryna <= "0010";
- cena_barszcz_czerwony <= "0010";
- cena_wrzatek <= "0010";
- ilosc_kawa_espresso <= "0010";
- ilosc_kawa_biala <= "0010";
- ilosc_kawa_americano <= "0010";
- ilosc_kawa_latte <= "0010";
- ilosc_herbata <= "0010";
- ilosc_herbata_z_cytryna <= "0010";
- ilosc_barszcz_czerwony <= "0010";
- ilosc_wrzatek <= "0010";
- stan_nastepny <= wrzuc_monete;
- ----------------------------------------------------------- -----------------------------------------------------------
- when wrzuc_monete => -- wrzuc monete --> push butony 0 - 2 , wplacono kwote slider 8
- wplacono <= "0000";
- wyswietl_liczbe_napojow<="0000";
- wyswietl_numer_napoju<="0000";
- wyswietl_cene_napoju<="0000";
- reszta_sig <= "0000";
- if(Moneta_In_1 = '1')then
- wplacono <= (wplacono + "0001" );
- stan_nastepny <= wrzuc_monete;
- elsif(Moneta_In_2 = '1')then --wrzuc 1$
- wplacono <= (wplacono + "0010" );
- stan_nastepny <= wrzuc_monete;
- elsif(Moneta_In_5 = '1')then --wrzuc 2$
- wplacono <= (wplacono + "0101" );
- stan_nastepny <= wrzuc_monete;
- elsif(wplacono_kwote = '1')then --wrzuc 5$
- stan_nastepny <= wybierz_napoj;
- end if;
- ------------------------------------------------------------ -----------------------------------------------------------
- when wybierz_napoj => --wybierz napoj
- if (wybor = "0000001" ) then -- kawa_espresso
- wyswietl_numer_napoju<="0001";
- wyswietl_cene_napoju<=cena_kawa_espresso;
- kawa_espresso <= '1';
- kawa_biala <= '0';
- kawa_americano <= '0';
- kawa_latte <= '0';
- herbata <= '0';
- herbata_z_cytryna <= '0';
- barszcz_czerwony <= '0';
- wrzatek <= '0';
- wyswietl_liczbe_napojow<=ilosc_kawa_espresso;
- stan_nastepny <= wybrano_kawa_espresso;
- elsif (wybor = "0000010") then -- stan początkowy to kawa_biala
- wyswietl_numer_napoju<="0010";
- wyswietl_cene_napoju<=cena_kawa_biala;
- kawa_espresso <= '0';
- kawa_biala <= '1';
- kawa_americano <= '0';
- kawa_latte <= '0';
- herbata <= '0';
- herbata_z_cytryna <= '0';
- barszcz_czerwony <= '0';
- wrzatek <= '0';
- wyswietl_liczbe_napojow<=ilosc_kawa_biala;
- stan_nastepny <= wybrano_kawa_biala;
- elsif (wybor = "000100") then -- kawa_americano
- wyswietl_numer_napoju<="0011";
- wyswietl_cene_napoju<=cena_kawa_americano;
- kawa_espresso <= '0';
- kawa_biala <= '0';
- kawa_americano <= '1';
- kawa_latte <= '0';
- herbata <= '0';
- herbata_z_cytryna <= '0';
- barszcz_czerwony <= '0';
- wrzatek <= '0';
- wyswietl_liczbe_napojow<=ilosc_kawa_americano;
- stan_nastepny <= wybrano_kawa_americano;
- elsif (wybor = "0001000") then -- kawa_latte
- wyswietl_numer_napoju<="0100";
- wyswietl_cene_napoju<=cena_kawa_latte;
- kawa_espresso <= '0';
- kawa_biala <= '0';
- kawa_americano <= '0';
- kawa_latte <= '1';
- herbata <= '0';
- herbata_z_cytryna <= '0';
- barszcz_czerwony <= '0';
- wrzatek <= '0';
- wyswietl_liczbe_napojow<=ilosc_kawa_latte;
- stan_nastepny <= wybrano_kawa_latte;
- elsif (wybor = "0010000") then -- herbata
- wyswietl_numer_napoju<="0101";
- wyswietl_cene_napoju<=cena_herbata;
- kawa_espresso <= '0';
- kawa_biala <= '0';
- kawa_americano <= '0';
- kawa_latte <= '0';
- herbata <= '1';
- herbata_z_cytryna <= '0';
- barszcz_czerwony <= '0';
- wrzatek <= '0';
- wyswietl_liczbe_napojow<=ilosc_herbata;
- stan_nastepny <= wybrano_herbata;
- elsif (wybor = "0100000") then -- herbata_z_cytryna
- wyswietl_numer_napoju<="0111";
- wyswietl_cene_napoju<=cena_herbata_z_cytryna;
- kawa_espresso <= '0';
- kawa_biala <= '0';
- kawa_americano <= '0';
- kawa_latte <= '0';
- herbata <= '0';
- herbata_z_cytryna <= '1';
- barszcz_czerwony <= '0';
- wrzatek <= '0';
- wyswietl_liczbe_napojow<=ilosc_herbata_z_cytryna;
- stan_nastepny <= wybrano_herbata_z_cytryna;
- elsif (wybor = "1000000") then -- barszcz_czerwony
- wyswietl_numer_napoju<="1000";
- wyswietl_cene_napoju<=cena_barszcz_czerwony;
- kawa_espresso <= '0';
- kawa_biala <= '0';
- kawa_americano <= '0';
- kawa_latte <= '0';
- herbata <= '0';
- herbata_z_cytryna <= '0';
- barszcz_czerwony <= '1';
- wrzatek <= '0';
- wyswietl_liczbe_napojow<=ilosc_barszcz_czerwony;
- stan_nastepny <= wybrano_barszcz_czerwony;
- elsif (wybor = "10000000") then -- wrzatek
- wyswietl_numer_napoju<="1001";
- wyswietl_cene_napoju<=cena_wrzatek;
- kawa_espresso <= '0';
- kawa_biala <= '0';
- kawa_americano <= '0';
- kawa_latte <= '0';
- herbata <= '0';
- herbata_z_cytryna <= '0';
- barszcz_czerwony <= '0';
- wrzatek <= '1';
- wyswietl_liczbe_napojow<=ilosc_wrzatek;
- stan_nastepny <= wybrano_wrzatek;
- end if;
- ------------------------------------------------------------ -----------------------------------------------------------
- when wybrano_kawa_espresso =>
- if (cena_kawa_espresso - wplacono = "0000") then
- reszta_sig <= "0000";
- stan_nastepny <= kawa_espresso_out;
- elsif ((cena_kawa_espresso - wplacono) > "0000") then
- reszta_sig <= (cena_kawa_espresso - wplacono);
- stan_nastepny <= kawa_espresso_out;
- elsif ((cena_kawa_espresso - wplacono) < "0000") then
- error <= '1';
- stan_nastepny <= wrzuc_monete;
- end if;
- when wybrano_kawa_biala =>
- if (cena_kawa_biala - wplacono = "0000") then
- reszta_sig <= "0000";
- stan_nastepny <= kawa_biala_out;
- elsif ((cena_kawa_biala - wplacono) > "0000") then
- reszta_sig <= (cena_kawa_biala - wplacono);
- stan_nastepny <= kawa_biala_out;
- elsif ((cena_kawa_biala - wplacono) < "0000") then
- error <= '1';
- stan_nastepny <= wrzuc_monete;
- end if;
- when wybrano_kawa_americano =>
- if (cena_kawa_americano - wplacono = "0000") then
- reszta_sig <= "0000";
- stan_nastepny <= kawa_americano_out;
- elsif ((cena_kawa_americano - wplacono) > "0000") then
- reszta_sig <= (cena_kawa_americano - wplacono);
- stan_nastepny <= kawa_americano_out;
- elsif ((cena_kawa_americano - wplacono) < "0000") then
- error <= '1';
- stan_nastepny <= wrzuc_monete;
- end if;
- when wybrano_kawa_latte =>
- if (cena_kawa_latte - wplacono = "0000") then
- reszta_sig <= "0000";
- stan_nastepny <= kawa_latte_out;
- elsif ((cena_kawa_latte - wplacono) > "0000") then
- reszta_sig <= (cena_kawa_latte - wplacono);
- stan_nastepny <= kawa_latte_out;
- elsif ((cena_kawa_latte - wplacono) < "0000") then
- error <= '1';
- stan_nastepny <= wrzuc_monete;
- end if;
- when wybrano_herbata =>
- if (cena_herbata - wplacono = "0000") then
- reszta_sig <= "0000";
- stan_nastepny <= herbata_out;
- elsif ((cena_herbata - wplacono) > "0000") then
- reszta_sig <= (cena_herbata - wplacono);
- stan_nastepny <= herbata_out;
- elsif ((cena_kawa_espresso - wplacono) < "0000") then
- error <= '1';
- stan_nastepny <= wrzuc_monete;
- end if;
- when wybrano_herbata_z_cytryna =>
- if (cena_herbata_z_cytryna - wplacono = "0000") then
- reszta_sig <= "0000";
- stan_nastepny <= herbata_z_cytryna_out;
- elsif ((cena_herbata_z_cytryna - wplacono) > "0000") then
- reszta_sig <= (cena_herbata_z_cytryna - wplacono);
- stan_nastepny <= herbata_z_cytryna_out;
- elsif ((cena_herbata_z_cytryna - wplacono) < "0000") then
- error <= '1';
- stan_nastepny <= wrzuc_monete;
- end if;
- when wybrano_barszcz_czerwony =>
- if (cena_barszcz_czerwony - wplacono = "0000") then
- reszta_sig <= "0000";
- stan_nastepny <= barszcz_czerwony_out;
- elsif ((cena_barszcz_czerwony - wplacono) > "0000") then
- reszta_sig <= (cena_barszcz_czerwony - wplacono);
- stan_nastepny <= barszcz_czerwony_out;
- elsif ((cena_wrzatek - wplacono) < "0000") then
- error <= '1';
- stan_nastepny <= wrzuc_monete;
- end if;
- when wybrano_wrzatek =>
- if (cena_wrzatek - wplacono = "0000") then
- reszta_sig <= "0000";
- stan_nastepny <= wrzatek_out;
- elsif ((cena_wrzatek - wplacono) > "0000") then
- reszta_sig <= (cena_wrzatek - wplacono);
- stan_nastepny <= wrzatek_out;
- elsif ((cena_wrzatek - wplacono) < "0000") then
- error <= '1';
- stan_nastepny <= wrzuc_monete;
- end if;
- ----------------------------------------------------------- -----------------------------------------------------------
- when kawa_espresso_out =>
- kawa_espresso <= '0';
- ilosc_kawa_espresso<=(ilosc_kawa_espresso - "0001");
- wyswietl_liczbe_napojow<=ilosc_kawa_espresso;
- stan_nastepny <= wrzuc_monete;
- when kawa_biala_out =>
- kawa_biala <= '0';
- ilosc_kawa_biala<=(ilosc_kawa_biala - "0001");
- wyswietl_liczbe_napojow<=ilosc_kawa_biala;
- stan_nastepny <= wrzuc_monete;
- when kawa_americano_out =>
- kawa_americano <= '0';
- ilosc_kawa_americano<=(ilosc_kawa_americano - "0001");
- wyswietl_liczbe_napojow<=ilosc_kawa_americano;
- stan_nastepny <= wrzuc_monete;
- when kawa_latte_out =>
- kawa_latte <= '0';
- ilosc_kawa_latte <=(ilosc_kawa_latte - "0001");
- wyswietl_liczbe_napojow<=ilosc_kawa_latte;
- stan_nastepny <= wrzuc_monete;
- when herbata_out =>
- herbata <= '0';
- ilosc_herbata <=(ilosc_herbata - "0001");
- wyswietl_liczbe_napojow<=ilosc_herbata;
- stan_nastepny <= wrzuc_monete;
- when herbata_z_cytryna_out =>
- herbata_z_cytryna <= '0';
- ilosc_herbata_z_cytryna <=(ilosc_herbata_z_cytryna - "0001");
- wyswietl_liczbe_napojow<=ilosc_herbata_z_cytryna;
- stan_nastepny <= wrzuc_monete;
- when barszcz_czerwony_out =>
- barszcz_czerwony <= '0';
- ilosc_barszcz_czerwony<=(ilosc_barszcz_czerwony - "0001");
- wyswietl_liczbe_napojow<=ilosc_barszcz_czerwony;
- stan_nastepny <= wrzuc_monete;
- when wrzatek_out =>
- wrzatek <= '0';
- ilosc_wrzatek <=(ilosc_wrzatek - "0001");
- wyswietl_liczbe_napojow<=ilosc_wrzatek;
- stan_nastepny <= wrzuc_monete;
- ----------------------------------------------------------------------------------------------------------------------
- end case;
- end process;
- ----------------------------------------------------------------------------------------------------------------------
- GATE1: wyswietlacz port map (wejscie => wyswietl_numer_napoju , wyjscie =>wyswietlacz_1);
- GATE2: wyswietlacz port map (wejscie => wyswietl_cene_napoju , wyjscie =>wyswietlacz_2);
- GATE3: wyswietlacz port map (wejscie => reszta_sig , wyjscie =>wyswietlacz_3);
- GATE4: wyswietlacz port map (wejscie => wyswietl_liczbe_napojow , wyjscie =>wyswietlacz_4);
- end behavior;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement