Advertisement
kubpica

2portowy ram quartus

Apr 12th, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VHDL 3.14 KB | None | 0 0
  1. LIBRARY ieee;
  2. USE ieee.std_logic_1164.all;
  3.  
  4. ENTITY hex7seg IS
  5.     PORT (  hex     : IN    STD_LOGIC_VECTOR(3 DOWNTO 0);
  6.                 display : OUT   STD_LOGIC_VECTOR(0 TO 6));
  7. END hex7seg;
  8.  
  9. ARCHITECTURE Behavior OF hex7seg IS
  10. BEGIN
  11.     --
  12.     --       0  
  13.     --      ---  
  14.     --     |   |
  15.     --    5|   |1
  16.     --     | 6 |
  17.     --      ---  
  18.     --     |   |
  19.     --    4|   |2
  20.     --     |   |
  21.     --      ---  
  22.     --       3  
  23.     --
  24.     PROCESS (hex)
  25.     BEGIN
  26.         CASE hex IS
  27.             WHEN "0000" => display <= "0000001";
  28.             WHEN "0001" => display <= "1001111";
  29.             WHEN "0010" => display <= "0010010";
  30.             WHEN "0011" => display <= "0000110";
  31.             WHEN "0100" => display <= "1001100";
  32.             WHEN "0101" => display <= "0100100";
  33.             WHEN "0110" => display <= "1100000";
  34.             WHEN "0111" => display <= "0001111";
  35.             WHEN "1000" => display <= "0000000";
  36.             WHEN "1001" => display <= "0001100";
  37.             WHEN "1010" => display <= "0001000";
  38.             WHEN "1011" => display <= "1100000";
  39.             WHEN "1100" => display <= "0110001";
  40.             WHEN "1101" => display <= "1000010";
  41.             WHEN "1110" => display <= "0110000";
  42.             WHEN OTHERS => display <= "0111000";
  43.         END CASE;
  44.     END PROCESS;
  45. END Behavior;
  46.  
  47. LIBRARY ieee;
  48. USE ieee.std_logic_1164.all;
  49. use ieee.numeric_std.all;
  50. USE ieee.std_logic_unsigned.all;
  51.  
  52.  
  53. ENTITY ram_dual IS
  54.     PORT (
  55.         Resetn: in std_logic;
  56.         clock1, clock2: IN STD_LOGIC;
  57.         data: IN STD_LOGIC_VECTOR (3 DOWNTO 0);
  58.         write_address: IN std_logic_vector(4 downto 0);
  59.         we: IN STD_LOGIC;
  60.         hex0 : OUT  STD_LOGIC_VECTOR(0 TO 6);
  61.       hex1 : OUT  STD_LOGIC_VECTOR(0 TO 6);
  62.       hex2 : OUT  STD_LOGIC_VECTOR(0 TO 6);
  63.         hex3 : OUT  STD_LOGIC_VECTOR(0 TO 6)
  64.     );
  65. END ram_dual;
  66.  
  67. ARCHITECTURE rtl OF ram_dual IS
  68.    
  69.     component hex7seg is
  70.      port( hex      : IN    STD_LOGIC_VECTOR(3 DOWNTO 0);
  71.            display  : OUT   STD_LOGIC_VECTOR(0 TO 6));
  72.      end component;
  73.    
  74.     TYPE MEM IS ARRAY(0 TO 31) OF STD_LOGIC_VECTOR(3 DOWNTO 0);
  75.  
  76.     signal read_address: std_logic_vector(4 downto 0);
  77.     SIGNAL ram_block: MEM;
  78.     signal q: STD_LOGIC_VECTOR (3 DOWNTO 0);
  79.    
  80.     SIGNAL liczsek : STD_LOGIC_VECTOR(24 DOWNTO 0);
  81.     signal h1a1 :STD_LOGIC_VECTOR(3 DOWNTO 0);
  82.     signal h1a2 :STD_LOGIC_VECTOR(3 DOWNTO 0);
  83.  
  84. BEGIN
  85.    
  86.     PROCESS (clock2)
  87.     BEGIN
  88.         IF (clock2'event AND clock2 = '0') THEN
  89.             IF (we = '1') THEN
  90.                 ram_block(to_integer(unsigned(write_address))) <= data;
  91.             END IF;
  92.         END IF;
  93.     END PROCESS;
  94.    
  95.  
  96.     -- zliczenie 1 sekundy
  97.     PROCESS (Clock1)
  98.     BEGIN
  99.         IF  (Clock1'EVENT AND Clock1 = '1') THEN
  100.             liczsek <= liczsek + '1';
  101.         END IF;
  102.     END PROCESS;
  103.  
  104.     -- licznik co 1 sekunde
  105.     PROCESS (Clock1)
  106.     BEGIN
  107.         IF  (Clock1'EVENT AND Clock1 = '1') THEN
  108.             IF (Resetn = '0') THEN  -- synchroniczne zerowanie
  109.                 read_address <= "00000";
  110.             ELSIF (liczsek = 0) THEN
  111.                 read_address <= read_address + '1';
  112.                 if read_address = "11111" then read_address <= "00000";
  113.                 end if;
  114.                 q <= ram_block(to_integer(unsigned(read_address)));
  115.             END IF;
  116.         END IF;
  117.     END PROCESS;
  118.    
  119.     h0: hex7seg port map (q, hex0);
  120.     h1a1 <= "000" & read_address(4);
  121.     h1a2 <= read_address(3 downto 0);
  122.     h1: hex7seg port map (h1a2, hex1);
  123.     h2: hex7seg port map (h1a1, hex2);
  124.     h3: hex7seg port map (("000" & we), hex3);
  125.  
  126. END rtl;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement