Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2020
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.98 KB | None | 0 0
  1. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ZEGARY @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  2.  
  3. library IEEE;
  4. use IEEE.std_logic_1164.all;
  5. use IEEE.std_logic_unsigned.all;
  6.  
  7. entity Zegary is
  8. port( Clk50MHz : in std_logic;
  9. Clk10Hz, Clk1Hz: buffer std_logic);
  10. end Zegary;
  11.  
  12. architecture generator10i1Hz of Zegary is
  13. subtype dzielnik10Hz_type is integer range 0 to 25E5;
  14. subtype dzielnik1Hz_type is integer range 0 to 10;
  15. begin
  16. process(Clk50MHz)
  17. variable dzielnik10Hz : dzielnik10Hz_type := 25E5 ; -- zmienna do dzielenia sygnalu przez 2,5 miliona
  18. variable dzielnik1Hz : dzielnik1Hz_type := 10;
  19. begin
  20. if Clk50MHz = '1' then -- dziala na zboczu narastajacym zegara 50 MHz
  21. if dzielnik10Hz = 0 then -- jesli odliczy 2,5 miliona
  22. Clk10Hz <= not Clk10Hz; -- zmiana stanu na przeciwny na wyjsciu Clk10Hz
  23. dzielnik10Hz := 25E5; -- ustawienie zakresu odliczania
  24. -- dzielnik 1Hz
  25. if dzielnik1Hz = 0 then -- jesli odliczy 10
  26. Clk1Hz <= not Clk1Hz; -- zmiana stanu na przeciwny na wyjsciu Clk1Hz
  27. dzielnik1Hz := 10; -- ustawienie zakresu odliczania
  28. else
  29. dzielnik1Hz := dzielnik1Hz - 1; -- dekrementacja odliczania zegaru 1Hz
  30. end if;
  31. -- koniec dzielnika 1Hz
  32. else
  33. dzielnik10Hz := dzielnik10Hz - 1; -- dekrementacja odliczania zegaru 10Hz
  34. end if;
  35. end if;
  36. end process;
  37. end architecture;
  38.  
  39. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ MULTIPLEKSER @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  40.  
  41. library IEEE;
  42. use IEEE.std_logic_1164.all;
  43. use IEEE.std_logic_unsigned.all;
  44.  
  45. entity Multiplekser is
  46. port( U, Clk10Hz, Clk1Hz : in std_logic; -- wejscia multipleksera
  47. U10, Sh : in std_logic; -- wejscia decyzyjne
  48. Clk : buffer std_logic);
  49. end Multiplekser;
  50.  
  51. architecture multiplekser of Multiplekser is
  52. begin
  53. Clk <= (not U10 and not Sh and not U) -- kiedy nie inkrementacja czasu 10Hz i nie wcisnieto startu
  54. or (not U10 and Sh and Clk1Hz) -- kiedy wcisnieto start
  55. or (U10 and not Sh and Clk10Hz) -- kiedy inkrementacja czasu 10Hz
  56. or (U10 and Sh and Clk1Hz); -- kiedy inkrementacja czasu 10Hz i wcisnieto start
  57. end multiplekser;
  58.  
  59. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ LICZNIK @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  60.  
  61. library IEEE;
  62. use IEEE.std_logic_1164.all;
  63. use IEEE.std_logic_unsigned.all;
  64. use IEEE.numeric_std.to_unsigned;
  65.  
  66. entity Licznik is
  67. port( Clk, Sh : in std_logic;
  68. LT, LS, LD, LJ : out std_logic_vector(3 downto 0);
  69. R : out std_logic);
  70. end Licznik;
  71.  
  72. architecture drabinkowa of Licznik is
  73. type liczba is array(0 to 3) of integer range 0 to 9;
  74. begin
  75. process(Clk)
  76. variable tablica : liczba := (0,0,0,0);
  77. begin
  78. if Clk = '1' then
  79. if Sh = '0' then -- jesli nie wcisnieto start to liczenie w gore
  80. R <= '0'; -- stan R = 0 aby zresetowac
  81. if tablica(3) /= 9 then -- jesli liczba jednosci rozna od dziewieciu
  82. tablica(3) := tablica(3) + 1; -- inkrementacja liczby jednosci
  83. elsif tablica(2) /= 9 then -- jesli liczba dziesiatek rozna od dziewieciu
  84. tablica(3) := 0; -- zerowanie liczby jednosci
  85. tablica(2) := tablica(2) + 1; -- inkrementacja liczby dziesiatek
  86. elsif tablica(1) /= 9 then -- jesli liczba setek rozna od dziewieciu
  87. tablica(3) := 0; -- zerowanie liczby jednosci
  88. tablica(2) := 0; -- zerowanie liczby dziesiatek
  89. tablica(1) := tablica(1) + 1; -- inkrementacja liczby setek
  90. elsif tablica(0) /= 9 then -- jesli liczba tysiecy rozna od dziewieciu
  91. tablica(3) := 0; -- zerowanie liczby jednosci
  92. tablica(2) := 0; -- zerowanie liczby dziesiatek
  93. tablica(1) := 0; -- zerowanie liczby setek
  94. tablica(0) := tablica(0) + 1; -- inkrementacja liczby tysiecy
  95. end if; -- jesli liczba = 9999 zatrzymanie licznika, brak mozliwosci dalszej inkrementacji
  96. else -- jesli wejscie Sh aktywne to odliczanie czasu
  97. if tablica(3) /= 0 then -- jesli liczba jednosci rozna od zera
  98. tablica(3) := tablica(3) - 1; -- dekrementacja liczby jednosci
  99. elsif tablica(2) /= 0 then -- jesli liczba dziesiatek rozna od zera
  100. tablica(3) := 9; -- ustawienie liczby jednosci na wartosc 9
  101. tablica(2) := tablica(2) - 1; -- dekrementacja liczby dziesiatek
  102. elsif tablica(1) /= 0 then -- jesli liczba setek rozna od 0
  103. tablica(3) := 9; -- ustawienie liczby jednosci na wartosc 9
  104. tablica(2) := 9; -- ustawienie liczby dziesiatek na wartosc 9
  105. tablica(1) := tablica(1) - 1; -- dekrementacja liczby setek
  106. elsif tablica(0) /= 0 then -- jesli liczba tysiecy rozna od 0
  107. tablica(3) := 9; -- ustawienie liczby jednosci na wartosc 9
  108. tablica(2) := 9; -- ustawienie liczby dziesiatek na wartosc 9
  109. tablica(1) := 9; -- ustawienie liczby setek na wartosc 9
  110. tablica(0) := tablica(0) - 1; -- dekrementacja liczby tysiecy
  111. else R <= '1'; -- jesli stan 0000 to ustawienie sygnalu R
  112. end if;
  113. end if;
  114.  
  115. LT <= std_logic_vector(to_unsigned(tablica(0), LT'length)); -- parsowanie integerow na wektory binarne
  116. LS <= std_logic_vector(to_unsigned(tablica(1), LS'length));
  117. LD <= std_logic_vector(to_unsigned(tablica(2), LD'length));
  118. LJ <= std_logic_vector(to_unsigned(tablica(3), LJ'length));
  119. end if;
  120. end process;
  121. end drabinkowa;
  122.  
  123. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ LED @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  124.  
  125. library IEEE;
  126. use IEEE.STD_LOGIC_1164.all;
  127. entity LED is
  128. port (BCD: in std_logic_vector (3 downto 0);
  129. LED: out std_logic_vector(6 downto 0));
  130. end LED;
  131.  
  132. architecture BCD_2_7SEGM of LED is
  133. begin
  134. process(BCD)
  135. begin
  136. case BCD is
  137. when "0000" => LED <= "1000000";
  138. when "0001" => LED <= "1111001";
  139. when "0010" => LED <= "0100100";
  140. when "0011" => LED <= "0110000";
  141. when "0100" => LED <= "0011001";
  142. when "0101" => LED <= "0010010";
  143. when "0110" => LED <= "0000010";
  144. when "0111" => LED <= "1111000";
  145. when "1000" => LED <= "0000000";
  146. when "1001" => LED <= "0010000";
  147. when others => LED <= "-------";
  148. end case;
  149. end process;
  150. end BCD_2_7SEGM;
  151.  
  152. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ DETEKTOR @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  153.  
  154. library IEEE;
  155. use IEEE.std_logic_1164.all;
  156. use IEEE.std_logic_unsigned.all;
  157.  
  158. entity Detektor is
  159. port( U, Clk10Hz : in std_logic;
  160. U10 : buffer std_logic);
  161. end Detektor;
  162.  
  163. architecture Detektor10Hz of Detektor is
  164. subtype int is integer range 0 to 30;
  165. begin
  166. process (Clk10Hz) -- 10 Hz wybrany ze wzgledu na dokladnosc pomiaru czasu blad o 1/10 sekundy
  167. variable counter : int := 30; -- Ustawienie licznika na wartosc 30
  168. begin
  169. if Clk10Hz = '1' then
  170. if U = '0' then -- jesli przycisk wcisniety
  171. if counter = 0 then -- zliczenie 30 narastajacych zboczy zegara 10Hz da 3 sekundy
  172. U10 <= '1'; -- ustawienie wyjscia U10, oznacza przytrzymanie przycisku dluzej niz 3 sekundy
  173. else
  174. counter := counter - 1; -- dekrementacja licznika sprawdzajacego, czy przycisk jest wcisniety 3 sekundy
  175. end if;
  176. else -- jesli przycisk nie jest wcisniety
  177. counter := 30; -- ponowne ustawienie licznika
  178. U10 <= '0'; -- stan niski na wyjsciu U10
  179. end if;
  180. end if;
  181. end process;
  182. end Detektor10Hz;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement