Advertisement
Guest User

Untitled

a guest
Jan 16th, 2019
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VHDL 1.86 KB | None | 0 0
  1. library ieee;
  2. use ieee.std_logic_1164.all;
  3. use ieee.numeric_std.all;
  4.  
  5. entity akkumulator is
  6.  
  7.     port (
  8.         d   : in std_logic_vector(3 downto 0); -- Daten-Eingang
  9.       ld : in std_logic; -- MUX Steuereingang: 0(gedrückt)=Ergebnis durchschalten, 1(nicht gedrückt)= Dateneingang durchschalten
  10.         sub : in std_logic; -- 0=+, 1=-
  11.         e   : in std_logic; -- enable Auffangregister 0(gedrückt)= enabled
  12.         clk : in std_logic; -- Takt
  13.  
  14.         c : out std_logic; -- LEDG(4) carry out
  15.         q : out std_logic_vector(3 downto 0); -- LEDG(3..0) Daten-Ausgang
  16.        
  17.         -- debug pins:
  18.         z_out : out std_logic_vector(4 downto 0)    -- LEDR(4..0), z4 = carry
  19.        
  20.    
  21.         );
  22. end entity akkumulator;
  23.  
  24. architecture arch of akkumulator is
  25.  
  26. signal q_int: unsigned(4 downto 0); -- internes Signal von q
  27. --signal mux_int: unsigned(3 downto 0); -- interner Ausgang des mux
  28. signal z_int: unsigned(3 downto 0); -- interner Ausgang der ALU
  29.  
  30. begin
  31.  
  32.     p: process(clk)
  33.         begin
  34.        
  35.         if (rising_edge(clk)) then -- bei steigender ckl Flanke
  36.        
  37.             if (e = '0') then -- nur etwas ändern wenn e aktiv ist
  38.                
  39.                 if (ld = '1') then -- wenn load
  40.                    
  41.                     -- eingang ins Register laden mit carry = 0
  42.                     q_int <= '0' & unsigned(d);
  43.                     c <= '0';
  44.                    
  45.                 else
  46.                    
  47.                     if (sub = '0') then -- Addieren
  48.                        
  49.                         q_int <= ('0' & q_int(3 downto 0)) + unsigned(d); -- (q_int ohne carry) + eingang
  50.                        
  51.                     else -- Subtrahieren
  52.                        
  53.                         -- q_int <= ('0' & q_int(3 downto 0)) - unsigned(d); -- (q_int ohne carry) - eingang
  54.                         q_int <= ('0' & q_int(3 downto 0)) + ('0' & (not(unsigned(d)) + 1)); -- (q_int ohne carry) - eingang
  55.                        
  56.                     end if;
  57.                    
  58.                 end if;
  59.                
  60.             end if;
  61.        
  62.         end if;
  63.        
  64.         -- q_int an Ausgänge weiterleiten
  65.         q <= std_logic_vector(q_int)(3 downto 0);
  66.         c <= std_logic(q_int(4));
  67.                
  68.     end process p;
  69.    
  70. end architecture arch;
  71.  
  72. -- https://pastebin.com/496V8zwn
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement