martaczaska

Untitled

Apr 8th, 2019
507
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.01 KB | None | 0 0
  1. --DISPLAY
  2.  
  3. library IEEE;
  4. use IEEE.STD_LOGIC_1164.ALL;
  5. use IEEE.STD_LOGIC_ARITH.ALL;
  6. use IEEE.STD_LOGIC_UNSIGNED.ALL;
  7.  
  8.  
  9. entity DISPLAY is
  10. port(
  11. CLK_i : in STD_LOGIC;
  12. RST_i : in STD_LOGIC;
  13. SW : in STD_LOGIC_vector (7 downto 0);
  14. BTN : in STD_LOGIC_vector (3 downto 0);
  15. AN : out STD_LOGIC_vector (3 downto 0);
  16. SEG : out STD_LOGIC_vector (7 downto 0)
  17. );
  18. end DISPLAY;
  19.  
  20. architecture Behavioral of DISPLAY is
  21.  
  22. signal BTN_ktory : STD_LOGIC_vector (3 downto 0) := "0000";
  23. signal DGT_teraz : STD_LOGIC_vector (31 downto 0) := "11111111111111111111111111111111";
  24. signal CLK_1kHz : STD_LOGIC;
  25.  
  26. component dzielnik_czt is
  27. port (
  28. CLK_i: in STD_LOGIC;
  29. RST_i : in STD_LOGIC;
  30. led7 : out STD_LOGIC
  31. );
  32. end component;
  33.  
  34. component wyswietlacz
  35. port (CLK_i : in STD_LOGIC;
  36. RST_i : in STD_LOGIC;
  37. DGT_i : in STD_LOGIC_VECTOR (31 downto 0);
  38. AN : out STD_LOGIC_VECTOR (3 downto 0);
  39. SEG : out STD_LOGIC_VECTOR (7 downto 0));
  40. end component;
  41.  
  42.  
  43. function zamiana(SW: STD_LOGIC_VECTOR (3 downto 0)) return STD_LOGIC_VECTOR is
  44. begin
  45. case SW is
  46. when "0000" => return "0000001"; -- 0
  47. when "0001" => return "1001111"; -- 1
  48. when "0010" => return "0010010"; -- 2
  49. when "0011" => return "0000110"; -- 3
  50. when "0100" => return "1001100"; -- 4
  51. when "0101" => return "0100100"; -- 5
  52. when "0110" => return "0100000"; -- 6
  53. when "0111" => return "0001111"; -- 7
  54. when "1000" => return "0000000"; -- 8
  55. when "1001" => return "0000100"; -- 9
  56. when "1010" => return "0000010"; -- a
  57. when "1011" => return "1100000"; -- b
  58. when "1100" => return "0110001"; -- C
  59. when "1101" => return "1000010"; -- d
  60. when "1110" => return "0110000"; -- E
  61. when "1111" => return "0111000"; -- F
  62. end case;
  63. end function zamiana;
  64.  
  65.  
  66. begin
  67. dzielonko: dzielnik_czt port map(
  68. CLK_i => CLK_i,
  69. RST_i => '0',
  70. led7 => CLK_1kHz);
  71.  
  72. wyswietlanko: wyswietlacz port map(
  73. CLK_i => CLK_1kHz,
  74. RST_i => '0',
  75. DGT_i => DGT_teraz,
  76. AN => AN,
  77. SEG => SEG);
  78.  
  79. ustawianie : process(CLK_i)
  80. begin
  81. if(rising_edge(CLK_i)) then
  82. BTN_ktory <= BTN; --wyswietlanie wybranej liczby
  83. DGT_teraz(0) <= not SW(4); --dodawanie kropek
  84. DGT_teraz(8) <= not SW(5);
  85. DGT_teraz(16) <= not SW(6);
  86. DGT_teraz(24) <= not SW(7);
  87.  
  88.  
  89. if(BTN_ktory = "1110") then
  90. DGT_teraz <= zamiana(SW(3 downto 0));
  91.  
  92. elsif(BTN_ktory = "1101") then
  93. DGT_teraz <= zamiana(SW(3 downto 0));
  94.  
  95. elsif(BTN_ktory = "1011") then
  96. DGT_teraz <= zamiana(SW(3 downto 0));
  97.  
  98. elsif(BTN_ktory = "0111") then
  99. DGT_teraz <= zamiana(SW(3 downto 0));
  100.  
  101. else DGT_teraz<= DGT_teraz;
  102.  
  103. end if;
  104. end if;
  105.  
  106. end process;
  107.  
  108. end Behavioral;
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115. --dzielnik_czt
  116.  
  117.  
  118.  
  119. library IEEE;
  120. use IEEE.STD_LOGIC_1164.ALL;
  121.  
  122. entity dzielnik_czt is
  123. port (
  124. CLK_i : in STD_LOGIC;
  125. RST_i : in STD_LOGIC;
  126. led7 : out STD_LOGIC
  127. );
  128. end dzielnik_czt;
  129.  
  130. architecture behavioral of dzielnik_czt is
  131.  
  132. constant N : integer := 50000;
  133. signal wynik: STD_LOGIC := '0';
  134. signal licz : integer range 0 to (N - 1);
  135.  
  136. begin
  137.  
  138. dzielnik_czestot: process (RST_i, CLK_i)
  139. begin
  140. if (RST_i = '1') then
  141. wynik <= '0';
  142. licz <= 0;
  143. elsif (rising_edge(CLK_i)) then
  144. licz <= licz + 1;
  145. if( N = 2) then
  146. wynik <= not(wynik);
  147. licz <= 0;
  148. elsif(licz = (N/2)) then
  149. wynik <= '1';
  150. elsif(licz = (N - 1)) then
  151. wynik <= '0';
  152. licz <= 0;
  153. end if;
  154. end if;
  155. end process dzielnik_czestot;
  156.  
  157. led7 <= wynik;
  158.  
  159. end Behavioral;
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166. --wyswietlacz
  167.  
  168.  
  169.  
  170. library IEEE;
  171. use IEEE.STD_LOGIC_1164.ALL;
  172.  
  173. entity wyswietlacz is
  174. port(
  175. CLK_i : in STD_LOGIC;
  176. RST_i : in STD_LOGIC;
  177. DGT_i : in STD_LOGIC_vector (31 downto 0);
  178. AN : out STD_LOGIC_vector (3 downto 0);
  179. SEG : out STD_LOGIC_vector (7 downto 0)
  180. );
  181. end wyswietlacz;
  182.  
  183.  
  184.  
  185. architecture Behavioral of wyswietlacz is
  186. signal aktywny_AN: STD_LOGIC_VECTOR (3 downto 0) := "1111";
  187.  
  188. begin
  189. process(CLK_i, RST_i, DGT_i, aktywny_AN)
  190.  
  191. begin
  192. if(RST_i = '1') then
  193. AN <= "0000";
  194. SEG <= "00000000";
  195. elsif(rising_edge(CLK_i)) then
  196. case aktywny_AN is
  197. when "0000" => aktywny_AN <= "0111";
  198. when "0111" => aktywny_AN <= "1011";
  199. when "1011" => aktywny_AN <= "1101";
  200. when "1101" => aktywny_AN <= "1110";
  201. when "1110" => aktywny_AN <= "0111";
  202. when others => aktywny_AN <= "0111";
  203. end case;
  204.  
  205. case aktywny_AN is
  206. when "0111" => SEG <= DGT_i(31 downto 24);
  207. when "1011" => SEG <= DGT_i(23 downto 16);
  208. when "1101" => SEG <= DGT_i(15 downto 8);
  209. when "1110" => SEG <= DGT_i(7 downto 0);
  210. when others => SEG <= "00000000";
  211. end case;
  212.  
  213. end if;
  214. AN <= aktywny_AN;
  215. end process;
  216.  
  217. end Behavioral;
Advertisement
Add Comment
Please, Sign In to add comment