Advertisement
Guest User

notki vhdl

a guest
Jan 22nd, 2020
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.69 KB | None | 0 0
  1. ############################## kod dla licznika sek####################################
  2.  
  3. library ieee;
  4. use ieee.std_logic_1164.all;
  5. use ieee.std_logic_unsigned.all;
  6.  
  7. entity licznik_sek is
  8. port (
  9. clk,START,US,min_rowne_zero : in std_logic;
  10. licz_sek_jed,licz_sek_dzi: out std_logic_vector (3 downto 0);
  11. wyzerowanie_sek : out std_logic);
  12. end licznik_sek;
  13.  
  14. architecture licz_sek of licznik_sek is
  15. signal sek_jed : std_logic_vector (3 downto 0);
  16. signal sek_dzi : std_logic_vector (3 downto 0);
  17.  
  18. begin
  19.  
  20. process(clk)
  21. begin
  22.  
  23. if rising_edge (clk) then
  24.  
  25. --dekrementacja
  26.  
  27. if START='1' then --w przypadku ustawienia 1-ki na przycisku "start" rozpoczynana jest dekrementacja
  28.  
  29. if sek_jed/="0000" then --gdy jedności sekund nie są równe zero, dekrementuje o 1 jedności
  30. sek_jed<=(sek_jed-'1');
  31.  
  32. else
  33. if sek_dzi/="0000" then --w innym wypadku sprawdza dodatkowo czy dziesiątki sekund różnią się od zera, jeśli tak to dekrementuje dziesiątki
  34. sek_jed<="1001";
  35. sek_dzi<=(sek_dzi-'1');
  36.  
  37. else
  38. if min_rowne_zero = '0' then --jeśli poprzedni warunek nie jest spełniony oraz na wyświetlaczu minut jedności i dzisiątki są równe zero to:
  39. sek_dzi<="0101"; --na dzisiatkach sekund ustawiana jest "5" oraz "9" na jednościach.
  40. sek_jed<="1001";
  41.  
  42. end if;
  43. end if;
  44. end if;
  45. end if;
  46.  
  47.  
  48. --inkrementacja
  49.  
  50. if START='0' then --w przypadku nieaktywowanego przycisku "start" oraz obecności 1-ki na US realizowana jest inkrementacja licznika sekund
  51. if US = '1' then
  52. if sek_jed/="1001" then --jeśli na jednościach sekund jest liczba różna od "9" to inkrementowane są jedności
  53. sek_jed<=(sek_jed+'1');
  54. else
  55. if sek_dzi/="0101" then -- w przypadku gdy jedności = "9" oraz dzisiątki są różne od 5, następuje inkrementacja dziesiątek, a jedności są zerowane
  56. sek_dzi<=(sek_dzi + '1');
  57. sek_jed<="0000";
  58. else
  59. sek_dzi<="0000"; -- w wypadku pojawienia sie liczby 59 ("5"-sek_dzi, "9"-sek_jed), licznik sekund zostaje wyzerowany
  60. sek_jed<="0000";
  61. end if;
  62. end if;
  63. end if;
  64. end if;
  65. end if;
  66.  
  67.  
  68.  
  69. --sprawdzanie wyzerowania
  70. if falling_edge (clk) then
  71.  
  72. if sek_dzi="0000" and sek_jed="0000" then -- w przypadku występowania "0" na jednościach i dziesiątkach sekund, ustawiana jest 1-ka na "wyzerowanie_sek"
  73. wyzerowanie_sek<='1'; -- aby wiadomo było że licznik sekund jest obecnie wyzerowany
  74. else
  75. wyzerowanie_sek<='0';
  76. end if;
  77.  
  78. end if;
  79. licz_sek_jed<= sek_jed; -- przepisanie stanu jedności oraz dzisiątek w celu wyprowadzenia ich na wyjście
  80. licz_sek_dzi<=sek_dzi;
  81.  
  82.  
  83. end process;
  84. end architecture;
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96. ###########################kod dla licznika minut################################################
  97.  
  98.  
  99.  
  100. library ieee;
  101. use ieee.std_logic_1164.all;
  102. use ieee.std_logic_unsigned.all;
  103.  
  104. entity licznik_min is
  105. port (
  106. clk,START,UM,sek_rowne_zero : in std_logic;
  107. licz_min_jed,licz_min_dzi: out std_logic_vector (3 downto 0);
  108. wyzerowanie_min : out std_logic);
  109. end licznik_min;
  110.  
  111. architecture licz_min of licznik_min is
  112. signal min_jed : std_logic_vector (3 downto 0);
  113. signal min_dzi : std_logic_vector (3 downto 0);
  114.  
  115. begin
  116. process(clk)
  117. begin
  118.  
  119. if rising_edge (clk) then
  120.  
  121. --dekrementacja
  122.  
  123. if START='1' then --w przypadku ustawienia 1-ki na przycisku "start" rozpoczynana jest dekrementacja
  124.  
  125. if sek_rowne_zero='1' then --gdy mamy informacje że licznik sekund jest wyzerowany to:
  126.  
  127. if min_jed/="0000" then --dekrementowane są jedności minut pod warunkiem, że nie są równe 0
  128. min_jed<=(min_jed-'1');
  129.  
  130. else
  131. if min_dzi/="0000" then -- w przeciwnym wypadku (jedności="0") sprawdzany jest stan dzisiątek, gdy nie są równe 0 następuje dekrementacja dziesiątek a na jednościach ustawiana jest "9"
  132. min_jed<="1001";
  133. min_dzi <= (min_dzi - '1');
  134. end if;
  135.  
  136. end if;
  137. end if;
  138. end if;
  139.  
  140.  
  141. --inkrementacja (działa w taki sam sposób jak inkrementacja w liczniku sekund, różniąc się tylko, że w tym wypadku zamiast przycisku US interesuje nas przycisk UM)
  142.  
  143. if START='0' then
  144.  
  145. if UM='1' then
  146. if min_jed/="1001" then
  147. min_jed<=(min_jed+'1');
  148.  
  149. else
  150. if min_dzi/="0101" then
  151. min_dzi<=(min_dzi+'1');
  152. min_jed<="0000";
  153.  
  154. else
  155. min_dzi<="0000";
  156. min_jed<="0000";
  157. end if;
  158.  
  159. end if;
  160. end if;
  161. end if;
  162.  
  163.  
  164.  
  165. --sprawdzanie wyzerowania (identyczny sposób jak w liczniku sekund)
  166.  
  167. if min_dzi="0000" and min_jed="0000" then
  168. wyzerowanie_min<='1';
  169.  
  170. else
  171. wyzerowanie_min<='0';
  172. end if;
  173.  
  174. end if;
  175. licz_min_jed<=min_jed;
  176. licz_min_dzi<=min_dzi;
  177.  
  178. end process;
  179. end architecture;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement