Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ZEGARY @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- library IEEE;
- use IEEE.std_logic_1164.all;
- use IEEE.std_logic_unsigned.all;
- entity Zegary is
- port( Clk50MHz : in std_logic;
- Clk10Hz, Clk1Hz: buffer std_logic);
- end Zegary;
- architecture generator10i1Hz of Zegary is
- subtype dzielnik10Hz_type is integer range 0 to 25E5;
- subtype dzielnik1Hz_type is integer range 0 to 10;
- begin
- process(Clk50MHz)
- variable dzielnik10Hz : dzielnik10Hz_type := 25E5 ; -- zmienna do dzielenia sygnalu przez 2,5 miliona
- variable dzielnik1Hz : dzielnik1Hz_type := 10;
- begin
- if Clk50MHz = '1' then -- dziala na zboczu narastajacym zegara 50 MHz
- if dzielnik10Hz = 0 then -- jesli odliczy 2,5 miliona
- Clk10Hz <= not Clk10Hz; -- zmiana stanu na przeciwny na wyjsciu Clk10Hz
- dzielnik10Hz := 25E5; -- ustawienie zakresu odliczania
- -- dzielnik 1Hz
- if dzielnik1Hz = 0 then -- jesli odliczy 10
- Clk1Hz <= not Clk1Hz; -- zmiana stanu na przeciwny na wyjsciu Clk1Hz
- dzielnik1Hz := 10; -- ustawienie zakresu odliczania
- else
- dzielnik1Hz := dzielnik1Hz - 1; -- dekrementacja odliczania zegaru 1Hz
- end if;
- -- koniec dzielnika 1Hz
- else
- dzielnik10Hz := dzielnik10Hz - 1; -- dekrementacja odliczania zegaru 10Hz
- end if;
- end if;
- end process;
- end architecture;
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ MULTIPLEKSER @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- library IEEE;
- use IEEE.std_logic_1164.all;
- use IEEE.std_logic_unsigned.all;
- entity Multiplekser is
- port( U, Clk10Hz, Clk1Hz : in std_logic; -- wejscia multipleksera
- U10, Sh : in std_logic; -- wejscia decyzyjne
- Clk : buffer std_logic);
- end Multiplekser;
- architecture multiplekser of Multiplekser is
- begin
- Clk <= (not U10 and not Sh and not U) -- kiedy nie inkrementacja czasu 10Hz i nie wcisnieto startu
- or (not U10 and Sh and Clk1Hz) -- kiedy wcisnieto start
- or (U10 and not Sh and Clk10Hz) -- kiedy inkrementacja czasu 10Hz
- or (U10 and Sh and Clk1Hz); -- kiedy inkrementacja czasu 10Hz i wcisnieto start
- end multiplekser;
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ LICZNIK @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- library IEEE;
- use IEEE.std_logic_1164.all;
- use IEEE.std_logic_unsigned.all;
- use IEEE.numeric_std.to_unsigned;
- entity Licznik is
- port( Clk, Sh : in std_logic;
- LT, LS, LD, LJ : out std_logic_vector(3 downto 0);
- R : out std_logic);
- end Licznik;
- architecture drabinkowa of Licznik is
- type liczba is array(0 to 3) of integer range 0 to 9;
- begin
- process(Clk)
- variable tablica : liczba := (0,0,0,0);
- begin
- if Clk = '1' then
- if Sh = '0' then -- jesli nie wcisnieto start to liczenie w gore
- R <= '0'; -- stan R = 0 aby zresetowac
- if tablica(3) /= 9 then -- jesli liczba jednosci rozna od dziewieciu
- tablica(3) := tablica(3) + 1; -- inkrementacja liczby jednosci
- elsif tablica(2) /= 9 then -- jesli liczba dziesiatek rozna od dziewieciu
- tablica(3) := 0; -- zerowanie liczby jednosci
- tablica(2) := tablica(2) + 1; -- inkrementacja liczby dziesiatek
- elsif tablica(1) /= 9 then -- jesli liczba setek rozna od dziewieciu
- tablica(3) := 0; -- zerowanie liczby jednosci
- tablica(2) := 0; -- zerowanie liczby dziesiatek
- tablica(1) := tablica(1) + 1; -- inkrementacja liczby setek
- elsif tablica(0) /= 9 then -- jesli liczba tysiecy rozna od dziewieciu
- tablica(3) := 0; -- zerowanie liczby jednosci
- tablica(2) := 0; -- zerowanie liczby dziesiatek
- tablica(1) := 0; -- zerowanie liczby setek
- tablica(0) := tablica(0) + 1; -- inkrementacja liczby tysiecy
- end if; -- jesli liczba = 9999 zatrzymanie licznika, brak mozliwosci dalszej inkrementacji
- else -- jesli wejscie Sh aktywne to odliczanie czasu
- if tablica(3) /= 0 then -- jesli liczba jednosci rozna od zera
- tablica(3) := tablica(3) - 1; -- dekrementacja liczby jednosci
- elsif tablica(2) /= 0 then -- jesli liczba dziesiatek rozna od zera
- tablica(3) := 9; -- ustawienie liczby jednosci na wartosc 9
- tablica(2) := tablica(2) - 1; -- dekrementacja liczby dziesiatek
- elsif tablica(1) /= 0 then -- jesli liczba setek rozna od 0
- tablica(3) := 9; -- ustawienie liczby jednosci na wartosc 9
- tablica(2) := 9; -- ustawienie liczby dziesiatek na wartosc 9
- tablica(1) := tablica(1) - 1; -- dekrementacja liczby setek
- elsif tablica(0) /= 0 then -- jesli liczba tysiecy rozna od 0
- tablica(3) := 9; -- ustawienie liczby jednosci na wartosc 9
- tablica(2) := 9; -- ustawienie liczby dziesiatek na wartosc 9
- tablica(1) := 9; -- ustawienie liczby setek na wartosc 9
- tablica(0) := tablica(0) - 1; -- dekrementacja liczby tysiecy
- else R <= '1'; -- jesli stan 0000 to ustawienie sygnalu R
- end if;
- end if;
- LT <= std_logic_vector(to_unsigned(tablica(0), LT'length)); -- parsowanie integerow na wektory binarne
- LS <= std_logic_vector(to_unsigned(tablica(1), LS'length));
- LD <= std_logic_vector(to_unsigned(tablica(2), LD'length));
- LJ <= std_logic_vector(to_unsigned(tablica(3), LJ'length));
- end if;
- end process;
- end drabinkowa;
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ LED @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- library IEEE;
- use IEEE.STD_LOGIC_1164.all;
- entity LED is
- port (BCD: in std_logic_vector (3 downto 0);
- LED: out std_logic_vector(6 downto 0));
- end LED;
- architecture BCD_2_7SEGM of LED is
- begin
- process(BCD)
- begin
- case BCD is
- when "0000" => LED <= "1000000";
- when "0001" => LED <= "1111001";
- when "0010" => LED <= "0100100";
- when "0011" => LED <= "0110000";
- when "0100" => LED <= "0011001";
- when "0101" => LED <= "0010010";
- when "0110" => LED <= "0000010";
- when "0111" => LED <= "1111000";
- when "1000" => LED <= "0000000";
- when "1001" => LED <= "0010000";
- when others => LED <= "-------";
- end case;
- end process;
- end BCD_2_7SEGM;
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ DETEKTOR @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- library IEEE;
- use IEEE.std_logic_1164.all;
- use IEEE.std_logic_unsigned.all;
- entity Detektor is
- port( U, Clk10Hz : in std_logic;
- U10 : buffer std_logic);
- end Detektor;
- architecture Detektor10Hz of Detektor is
- subtype int is integer range 0 to 30;
- begin
- process (Clk10Hz) -- 10 Hz wybrany ze wzgledu na dokladnosc pomiaru czasu blad o 1/10 sekundy
- variable counter : int := 30; -- Ustawienie licznika na wartosc 30
- begin
- if Clk10Hz = '1' then
- if U = '0' then -- jesli przycisk wcisniety
- if counter = 0 then -- zliczenie 30 narastajacych zboczy zegara 10Hz da 3 sekundy
- U10 <= '1'; -- ustawienie wyjscia U10, oznacza przytrzymanie przycisku dluzej niz 3 sekundy
- else
- counter := counter - 1; -- dekrementacja licznika sprawdzajacego, czy przycisk jest wcisniety 3 sekundy
- end if;
- else -- jesli przycisk nie jest wcisniety
- counter := 30; -- ponowne ustawienie licznika
- U10 <= '0'; -- stan niski na wyjsciu U10
- end if;
- end if;
- end process;
- end Detektor10Hz;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement